Files
FHC-Core/public/js/components/Navigation.js
T
Paolo 24b78454d3 - Added new function generateJSModulesInclude to application/helpers/hlp_header_helper.php
- Added entry "customJSModules" to the application/views/templates/FHC-Footer.php to be passed to the generateJSModulesInclude function to generate JS modules tags
- The new VUE components are making use of the JS import and export functionalities
2022-06-24 15:07:50 +02:00

118 lines
3.3 KiB
JavaScript

export const CoreNavigationCmpt = {
data() {
return {
headerMenu: {},
sideMenu: {}
};
},
created() {
this.fetchDataHeader();
this.fetchDataMenu();
},
props: {
addHeaderMenuEntries: Object,
addSideMenuEntries: Object
},
methods: {
getNavigationPage() {
return FHC_JS_DATA_STORAGE_OBJECT.called_path + "/" + FHC_JS_DATA_STORAGE_OBJECT.called_method;
},
fetchDataHeader() {
// Retrives the header menu array
FHC_AjaxClient.ajaxCallGet(
'system/Navigation/header',
{
navigation_page: this.getNavigationPage()
},
{
successCallback: this.setHeaders
}
);
},
setHeaders(data) {
if (FHC_AjaxClient.hasData(data)) this.headerMenu = FHC_AjaxClient.getData(data);
},
fetchDataMenu() {
// Retrives the side menu array
FHC_AjaxClient.ajaxCallGet(
'system/Navigation/menu',
{
navigation_page: this.getNavigationPage()
},
{
successCallback: this.setSideMenu
}
);
},
setSideMenu(data) {
if (FHC_AjaxClient.hasData(data)) this.sideMenu = FHC_AjaxClient.getData(data);
},
getDataBsToggle(header) {
return !header.children ? null : 'dropdown';
}
},
computed: {
headerMenuEntries() {
if (this.headerMenu != null && this.addHeaderMenuEntries != null && Object.keys(this.addHeaderMenuEntries).length > 0)
{
this.headerMenu[this.addHeaderMenuEntries.description] = this.addHeaderMenuEntries;
}
return this.headerMenu;
},
sideMenuEntries() {
if (this.sideMenu != null && this.addSideMenuEntries != null && Object.keys(this.addSideMenuEntries).length > 0)
{
this.sideMenu = this.addSideMenuEntries;
}
return this.sideMenu;
}
},
template: `
<!-- Top menu -->
<nav class="navbar navbar-expand-lg navbar-header">
<ul class="navbar-nav">
<!-- 1st level -->
<template v-for="header in headerMenuEntries">
<li class="nav-item dropdown">
<a class="nav-link header-menu-link-entry" v-bind:data-bs-toggle="this.getDataBsToggle(header)" v-bind:class="{ 'dropdown-toggle': header.children }" v-bind:href="header.link">
<i class="fa-solid fa-fw header-menu-icon" v-bind:class="'fa-' + header.icon" v-if="header.icon"></i> {{ header.description }}
</a>
<ul class="dropdown-menu" v-if="header.children">
<!-- 2nd level -->
<template v-for="child in header.children">
<li><a class="dropdown-item" v-bind:href="child.link">{{ child.description }}</a></li>
</template>
</ul>
</li>
</template>
</ul>
</nav>
<!-- Left side menu -->
<nav class="navbar navbar-left-side">
<ul class="navbar-nav">
<!-- 1st level -->
<template v-for="menu in sideMenuEntries">
<li class="nav-item">
<a class="nav-link left-side-menu-link-entry" v-bind:href="menu.link" @click=menu.onClickCall>
<i class="fa fa-fw" v-bind:class="'fa-'+ menu.icon"></i> {{ menu.description }}
</a>
<ul class="nav-link left-side-menu-second-level" v-if="menu.children">
<!-- 2nd level -->
<template v-for="child in menu.children">
<li>
<a class="nav-link left-side-menu-link-entry" v-bind:href="child.link" @click=child.onClickCall>
&emsp;&emsp;{{ child.description }}
</a>
</li>
</template>
</ul>
</li>
</template>
</ul>
</nav>
`
};