Files
luos/resources/assets/js/home/Home.vue

204 lines
5.5 KiB
Vue
Raw Normal View History

2020-12-02 19:46:17 +00:00
<template>
<div
id="home"
:class="[{ collapsed: collapsed }, { onmobile: isOnMobile }]"
>
<div class="demo">
<div class="container">
<router-view />
</div>
<CustomSidebar
:menu="menu"
@OnClickSidebarItem="OnClickSidebarItem"
@onToggleCollapse="onToggleCollapse"
/>
<div
v-if="isOnMobile && !collapsed"
class="sidebar-overlay"
@click="collapsed = true"
/>
<component
v-bind:is="page"
ref="component"
:id="pageId"
:name="pageName"
@onSubmitFilter="onSubmitFilter"
@onRemoveFilter="onRemoveFilter"
2020-12-11 19:36:41 +00:00
@onUpdatePage="onUpdatePage"
@onUpdateDataCase="onUpdateDataCase"
@onLastPage="onLastPage"
></component>
</div>
2020-12-02 19:46:17 +00:00
</div>
</template>
2020-12-02 19:46:17 +00:00
<script>
import CustomSidebar from "./../components/menu/CustomSidebar";
import MyCases from "./MyCases";
2020-12-02 21:28:16 +00:00
import MyDocuments from "./MyDocuments";
2020-12-07 15:59:15 +00:00
import Todo from "./Todo";
import Draft from "./Draft";
import Paused from "./Paused";
import Unassigned from "./Unassigned";
2020-12-03 12:39:57 +00:00
import BatchRouting from "./BatchRouting";
2020-12-07 18:52:12 +00:00
import CaseDetail from "./CaseDetail";
2020-12-04 13:33:23 +00:00
import XCase from "./XCase";
2020-12-03 15:23:23 +00:00
import TaskReassignments from "./TaskReassignments";
2020-12-07 18:52:12 +00:00
import AdvancedSearch from "./AdvancedSearch";
2020-12-02 19:46:17 +00:00
import api from "./../api/index";
2020-12-02 19:46:17 +00:00
export default {
name: "Home",
components: {
CustomSidebar,
MyCases,
AdvancedSearch,
MyDocuments,
BatchRouting,
TaskReassignments,
XCase,
Todo,
Draft,
Paused,
Unassigned,
CaseDetail,
2020-12-02 19:46:17 +00:00
},
data() {
return {
2020-12-11 19:36:41 +00:00
lastPage: "MyCases",
page: "MyCases",
menu: null,
dataCase: {},
hideToggle: true,
collapsed: false,
selectedTheme: "",
isOnMobile: false,
sidebarWidth: "310px",
pageId: null,
pageName: null,
};
2020-12-04 13:33:23 +00:00
},
mounted() {
this.onResize();
window.addEventListener("resize", this.onResize);
this.getMenu();
2020-12-02 19:46:17 +00:00
},
methods: {
/**
* Gets the menu from the server
*/
getMenu() {
api.menu
.get()
.then((response) => {
this.menu = response;
})
.catch((e) => {
console.error(e);
});
},
OnClickSidebarItem(item) {
this.page = item.item.id || "MyCases";
},
/**
* Update page component
*/
updatePage(data, page, callback) {
this.dataCase = data;
this.page = page;
if (this.$refs["component"] && this.$refs["component"].update) {
this.$refs["component"].update(data, callback);
}
},
onResize() {
if (window.innerWidth <= 767) {
this.isOnMobile = true;
this.collapsed = true;
} else {
this.isOnMobile = false;
this.collapsed = false;
}
},
/**
* Toggle sidebar handler
* @param {Boolean} collapsed - if sidebar is collapsed true|false
*
*/
onToggleCollapse(collapsed) {
this.collapsed = collapsed;
},
/**
* Handle if filter was submited
*/
onSubmitFilter(data) {
this.addMenuSearchChild(data);
},
/**
* Add a child submenu to search menu
* @param {object} data - cnotains theinfo to generate a menu
*/
addMenuSearchChild(data) {
let newMenu = this.menu;
let advSearch = _.find(newMenu, function(o) {
return o.href === "/advanced-search";
});
if (!advSearch.hasOwnProperty("child")) {
advSearch["child"] = [];
}
advSearch.child.push({
href: "/advanced-search/" + data.id,
title: data.name,
icon: "fas fa-circle",
id: data.id,
page: "advanced-search",
});
},
onRemoveFilter(id) {
this.removeMenuSearchChild(id);
this.page = "advanced-search";
this.pageId = null;
this.pageName = null;
},
2020-12-11 19:36:41 +00:00
onUpdatePage(page) {
this.lastPage = this.page;
this.page = page;
},
onUpdateDataCase(data) {
this.dataCase = data;
},
onLastPage(){
this.page = this.lastPage;
this.lastPage = "MyCases"
},
removeMenuSearchChild(id) {
let newMenu = this.menu;
let advSearch = _.find(newMenu, function(o) {
return o.href === "/advanced-search";
});
const index = advSearch.child.findIndex(function(o) {
return o.id === id;
});
if (index !== -1) advSearch.child.splice(index, 1);
},
2020-12-02 19:46:17 +00:00
},
};
</script>
<style lang="scss">
#home {
padding-left: 310px;
transition: 0.3s;
2020-12-02 19:46:17 +00:00
}
#home.collapsed {
padding-left: 50px;
2020-12-02 19:46:17 +00:00
}
#home.onmobile {
padding-left: 50px;
2020-12-02 19:46:17 +00:00
}
.container {
max-width: 1500px;
2020-12-02 19:46:17 +00:00
}
</style>