/* xxxeslint-disable */ ///////////////////////////////// // Menu utils and handlers // export default { /////////////////////////////// // CHANGE HANDLER // // Deal with a menu change request // called from App.vue handleMenuChange(vm, ctx) { vm.appBar.isMain = ctx.isMain; vm.appBar.icon = ctx.icon; vm.appBar.title = ctx.title; //set the help url if presented or default to the User section intro vm.appBar.helpUrl = ctx.helpUrl ? ctx.helpUrl : "user-intro"; vm.appBar.menuItems = []; //CONTEXT TOP PORTION //populate the context portion of the menu so handle accordingly if (ctx.menuItems) { vm.appBar.menuItems = ctx.menuItems; //DIVIDER //Insert the devider between context and global items vm.appBar.menuItems.push({ divider: true, inset: false }); } //GLOBAL BOTTOM PORTION //Global sub-heading //Likely won't want this but here anyway to see //that.appBar.menuItems.push({ header: "GLOBAL" }); //global menu items //LOGOUT vm.appBar.menuItems.push({ title: window.$gz.locale.get("Logout"), icon: "sign-out-alt", key: "app:logout" }); //divider vm.appBar.menuItems.push({ divider: true, inset: false }); //HELP vm.appBar.menuItems.push({ title: window.$gz.locale.get("MenuHelp"), icon: "question-circle", key: "app:help", data: vm.appBar.helpUrl }); //ABOUT vm.appBar.menuItems.push({ title: window.$gz.locale.get("HelpAboutAyaNova"), icon: "info-circle", key: "app:nav:abt", data: "about" }); //CUSTOMIZE //set custom fields and link to locale text editor if ( ctx.formData && ctx.formData.formCustomTemplateKey != undefined && window.$gz.role.hasRole(window.$gz.role.AUTHORIZATION_ROLES.BizAdminFull) ) { //add customize menu item //DIVIDER //Insert the devider between context and global items vm.appBar.menuItems.push({ divider: true, inset: false }); //customize vm.appBar.menuItems.push({ title: window.$gz.locale.get("Customize"), icon: "sliders-h", data: ctx.formData.formCustomTemplateKey, key: "app:customize" }); } }, /////////////////////////////// // CHANGE HANDLER // // Deal with a menu item update request // called from App.vue handleReplaceMenuItem(vm, newItem) { if (!vm.appBar.menuItems || !newItem) { return; } //Find the key that is in the collection and replace it for (var i = 0; i < vm.appBar.menuItems.length; i++) { if (vm.appBar.menuItems[i].key == newItem.key) { //NOTE: since we are adding a new object, it has no reactivity in it so we need to use the Vue.Set to set it which //automatically adds the setters and getters that trigger reactivity //If it was set directly on the array it wouldn't update the UI vm.$set(vm.appBar.menuItems, i, newItem); return; } } }, /////////////////////////////// // ENABLE / DISABLE HANDLER // // Deal with a menu item enable / disable // called from App.vue handleDisableMenuItem(vm, key, disabled) { if (!vm.appBar.menuItems || !key) { return; } //Find the key that is in the collection and replace it for (var i = 0; i < vm.appBar.menuItems.length; i++) { var menuItem = vm.appBar.menuItems[i]; if (menuItem.key == key) { vm.$set(vm.appBar.menuItems[i], "disabled", disabled); //menuItem.disabled = disabled; } vm.$set(vm.appBar.menuItems[i], "color", disabled ? "disabled" : ""); return; } }, /////////////////////////////// // APP (GLOBAL) CLICK HANDLER // // Deal with a menu change request // called from App.vue handleAppClick(vm, menuItem) { //Key will start with the string "app:" if it's a global application command that should be handled here, //otherwise it's a local command for a local form only //If there is any extended information required for the command it will be in the data property of the menu item //split a key into component parts, part one is the responsible party, part two is the command, part three only exists to make it unique if necessary //each part is separated by a colon //Handle different items var item = this.parseMenuItem(menuItem); if (!item.disabled && item.owner == "app") { switch (item.key) { case "help": var helpurl = vm.$store.state.helpUrl + item.data; window.open(helpurl, "_blank"); break; case "logout": vm.$router.push({ name: "login" }); break; case "customize": vm.$router.push({ name: "customize", params: { formCustomTemplateKey: item.data } }); break; case "nav": vm.$router.push({ name: item.data }); break; default: window.$gz.eventBus.$emit( "notify-warning", "gzmenu:handleAppClick - unrecognized command [" + menuItem.key + "]" ); } } }, /////////////////////////////// // PARSE MENU ITEM CLICK // // parse out the parts of a // menu item from a click event // parseMenuItem(menuItem) { //format is "AREA:KEY:UNIQUEID" //and data is in data portion var keyparts = menuItem.key.split(":"); return { owner: keyparts[0], key: keyparts[1], data: menuItem.data, disabled: menuItem.disabled, vm: menuItem.vm ? menuItem.vm : null }; }, /////////////////////////////////// // WIRE UP MENU EVENTS // // called once from app.vue only // wireUpEventHandlers(vm) { var self = this; window.$gz.eventBus.$on("menu-change", function handleMenuChange(ctx) { self.handleMenuChange(vm, ctx); }); window.$gz.eventBus.$on("menu-replace-item", function handleReplaceMenuItem( newItem ) { self.handleReplaceMenuItem(vm, newItem); }); window.$gz.eventBus.$on("menu-disable-item", function handleDisableMenuItem( key ) { self.handleDisableMenuItem(vm, key, true); }); window.$gz.eventBus.$on("menu-enable-item", function handleDisableMenuItem( key ) { self.handleDisableMenuItem(vm, key, false); }); window.$gz.eventBus.$on("menu-click", function handleMenuClick(menuitem) { self.handleAppClick(vm, menuitem); }); } //new functions above here };