diff --git a/ayanova/src/App.vue b/ayanova/src/App.vue index 946ab959..6a6a818d 100644 --- a/ayanova/src/App.vue +++ b/ayanova/src/App.vue @@ -107,19 +107,26 @@ export default { // MENU EVENT HANDLERS // // - var that = this; + var vm = this; this.$gzevent.$on("menu-change", function handleMenuChange(ctx) { - that.$gzmenu.handleMenuChange(that, ctx); + vm.$gzmenu.handleMenuChange(vm, ctx); }); this.$gzevent.$on("menu-replace-item", function handleReplaceMenuItem( newItem ) { - that.$gzmenu.handleReplaceMenuItem(that, newItem); + vm.$gzmenu.handleReplaceMenuItem(vm, newItem); + }); + + this.$gzevent.$on("menu-disable-item", function handleDisableMenuItem( + key, + disabled + ) { + vm.$gzmenu.handleDisableMenuItem(vm, key, disabled); }); this.$gzevent.$on("menu-click", function handleMenuClick(menuitem) { - that.$gzmenu.handleAppClick(that, menuitem); + vm.$gzmenu.handleAppClick(vm, menuitem); }); }, beforeDestroy() { diff --git a/ayanova/src/api/gzform.js b/ayanova/src/api/gzform.js index e5d6d8c2..316d6150 100644 --- a/ayanova/src/api/gzform.js +++ b/ayanova/src/api/gzform.js @@ -127,7 +127,7 @@ export default { // REQUIRED // required(vm, ref) { - if (vm.formLoading) { + if (vm.formState.loading) { return false; } var ctrl = getControl(vm, ref); @@ -149,7 +149,7 @@ export default { //Update the form status this.setFormState({ vm: vm, - formValid: false + valid: false }); return err; }, @@ -157,7 +157,7 @@ export default { // MAXLENGTH // maxLength(vm, ref, max) { - if (vm.formLoading) { + if (vm.formState.loading) { return false; } var ctrl = getControl(vm, ref); @@ -180,7 +180,7 @@ export default { //Update the form status this.setFormState({ vm: vm, - formValid: false + valid: false }); return err; } else { @@ -191,7 +191,7 @@ export default { // MAX 255 // max255(vm, ref) { - if (vm.formLoading) { + if (vm.formState.loading) { return false; } return this.maxLength(vm, ref, 255); @@ -201,7 +201,7 @@ export default { // (start date must precede end date) // datePrecedence(vm, refStart, refEnd) { - if (vm.formLoading) { + if (vm.formState.loading) { return false; } var ctrlStart = getControl(vm, refStart); @@ -238,7 +238,7 @@ export default { //Update the form status this.setFormState({ vm: vm, - formValid: false + valid: false }); return err; } else { @@ -249,7 +249,7 @@ export default { // INTEGER IS VALID // integerValid(vm, ref) { - if (vm.formLoading) { + if (vm.formState.loading) { return false; } var ctrl = getControl(vm, ref); @@ -274,7 +274,7 @@ export default { //Update the form status this.setFormState({ vm: vm, - formValid: false + valid: false }); return err; }, @@ -283,7 +283,7 @@ export default { // Basically anything that can be a number is valid // decimalValid(vm, ref) { - if (vm.formLoading) { + if (vm.formState.loading) { return false; } //TODO: Handle commas and spaces in numbers @@ -311,7 +311,7 @@ export default { //Update the form status this.setFormState({ vm: vm, - formValid: false + valid: false }); return err; }, @@ -364,7 +364,7 @@ export default { //Update the form status this.setFormState({ vm: vm, - formValid: false + valid: false }); ret.push(err); } @@ -394,7 +394,7 @@ export default { //Update the form status this.setFormState({ vm: vm, - formValid: false + valid: false }); return ret; } @@ -419,7 +419,7 @@ export default { //Update the form status this.setFormState({ vm: vm, - formValid: true + valid: true }); }, /////////////////////////////// @@ -436,7 +436,7 @@ export default { // This is required so that server errors can be cleared when input is changed // onChange(vm, ref) { - if (triggeringChange || vm.formLoading) { + if (triggeringChange || vm.formState.loading) { return; } //If ref appears in the servererrors details collection, remove each one @@ -470,29 +470,29 @@ export default { //Update the form status this.setFormState({ vm: vm, - formDirty: true, - formValid: vm.$refs.form.validate() + dirty: true, + valid: vm.$refs.form.validate() }); }, //////////////////////////////////// // set calling form Valid state // - // {vm:vm,formDirty:bool | undefined, - // formValid:bool | undefined, - // formLoading:bool | undefined} + // {vm:vm,dirty:bool | undefined, + // valid:bool | undefined, + // loading:bool | undefined} // - setFormState(theState) { + setFormState(newState) { Vue.nextTick(function() { - if (theState.formValid != undefined) { - theState.vm.formValid = theState.formValid; + if (newState.valid != undefined) { + newState.vm.formState.valid = newState.valid; } - if (theState.formDirty != undefined) { - theState.vm.formDirty = theState.formDirty; + if (newState.dirty != undefined) { + newState.vm.formState.dirty = newState.dirty; } - if (theState.formLoading != undefined) { - theState.vm.formLoading = theState.formLoading; + if (newState.loading != undefined) { + newState.vm.formState.loading = newState.loading; } }); } diff --git a/ayanova/src/api/gzmenu.js b/ayanova/src/api/gzmenu.js index 442309bb..982f3385 100644 --- a/ayanova/src/api/gzmenu.js +++ b/ayanova/src/api/gzmenu.js @@ -10,21 +10,21 @@ export default { // // Deal with a menu change request // called from App.vue - handleMenuChange(that, ctx) { - that.appBar.isMain = ctx.isMain; - that.appBar.icon = ctx.icon; - that.appBar.title = ctx.title; + 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 top of the index - that.appBar.helpUrl = ctx.helpUrl ? ctx.helpUrl : "index.html"; - that.appBar.menuItems = []; + vm.appBar.helpUrl = ctx.helpUrl ? ctx.helpUrl : "index.html"; + vm.appBar.menuItems = []; //CONTEXT TOP PORTION //populate the context portion of the menu so handle accordingly if (ctx.menuItems) { - that.appBar.menuItems = ctx.menuItems; + vm.appBar.menuItems = ctx.menuItems; //DIVIDER //Insert the devider between context and global items - that.appBar.menuItems.push({ divider: true, inset: false }); + vm.appBar.menuItems.push({ divider: true, inset: false }); } //GLOBAL BOTTOM PORTION @@ -36,27 +36,27 @@ export default { //global menu items //LOGOUT - that.appBar.menuItems.push({ - title: that.$gzlocale.get("Logout"), + vm.appBar.menuItems.push({ + title: vm.$gzlocale.get("Logout"), icon: "sign-out-alt", color: "pink", key: "app:logout" }); //divider - that.appBar.menuItems.push({ divider: true, inset: false }); + vm.appBar.menuItems.push({ divider: true, inset: false }); //HELP - that.appBar.menuItems.push({ - title: that.$gzlocale.get("MenuHelp"), + vm.appBar.menuItems.push({ + title: vm.$gzlocale.get("MenuHelp"), icon: "question-circle", key: "app:help", - data: that.appBar.helpUrl + data: vm.appBar.helpUrl }); //ABOUT - that.appBar.menuItems.push({ - title: that.$gzlocale.get("HelpAboutAyaNova"), + vm.appBar.menuItems.push({ + title: vm.$gzlocale.get("HelpAboutAyaNova"), icon: "info-circle", key: "app:nav:abt", data: "about" @@ -67,27 +67,45 @@ export default { // // Deal with a menu item update request // called from App.vue - handleReplaceMenuItem(that, newItem) { - if (!that.appBar.menuItems || !newItem) { + 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 < that.appBar.menuItems.length; i++) { - if (that.appBar.menuItems[i].key == newItem.key) { + 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 - that.$set(that.appBar.menuItems, i, newItem); + 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) { + menuItem.disabled = disabled; + } + return; + } + }, + /////////////////////////////// // APP (GLOBAL) CLICK HANDLER // // Deal with a menu change request // called from App.vue - handleAppClick(that, menuItem) { + 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 @@ -99,15 +117,15 @@ export default { if (!item.disabled && item.owner == "app") { switch (item.key) { case "help": - var helpurl = that.$store.state.helpUrl + item.data; + var helpurl = vm.$store.state.helpUrl + item.data; window.open(helpurl, "_blank"); break; case "logout": processLogout(); - that.$router.push({ name: "login" }); + vm.$router.push({ name: "login" }); break; case "nav": - that.$router.push({ name: item.data }); + vm.$router.push({ name: item.data }); break; default: alert( diff --git a/ayanova/src/views/inventory-widget-edit.vue b/ayanova/src/views/inventory-widget-edit.vue index 7e4906a7..6f4c751e 100644 --- a/ayanova/src/views/inventory-widget-edit.vue +++ b/ayanova/src/views/inventory-widget-edit.vue @@ -1,5 +1,5 @@