From 8d78c0274cbf0ce00fb0441ca89060e7eb0ff161 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 6 Apr 2023 20:47:31 +0000 Subject: [PATCH] case 4503 --- src/api/translation.js | 2 +- .../data-table-filter-manager-control.vue | 363 ++++++++++++++---- 2 files changed, 288 insertions(+), 77 deletions(-) diff --git a/src/api/translation.js b/src/api/translation.js index 1403ff1..ca6f2f9 100644 --- a/src/api/translation.js +++ b/src/api/translation.js @@ -147,7 +147,7 @@ export default { "Cancel", "Close", "Save", - "SaveACopy", + "SaveAs", "Delete", "SoftDelete", "SoftDeleteAll", diff --git a/src/components/data-table-filter-manager-control.vue b/src/components/data-table-filter-manager-control.vue index 20cb8df..bd46337 100644 --- a/src/components/data-table-filter-manager-control.vue +++ b/src/components/data-table-filter-manager-control.vue @@ -6,48 +6,129 @@ @keydown.esc="close()" > - {{ $sock.t("Filter") }} + {{ $ay.t("Filter") }} {{ activeFilterNameAtOpen }} {{ activeFilterCreator }} - - + + + + - - {{ - $sock.t("Cancel") - }} - - - - {{ - $sock.t("SaveACopy") - }} - - - @@ -72,8 +153,14 @@ export default { filter: "[]" }, activeFilterNameAtOpen: null, + activeFilterPublicAtOpen: null, activeFilterCreator: "", isSelfOwned: true, + selectedSavedFilterIdToOverWrite: null, + selectLists: { + savedFilters: [] + }, + formState: { ready: false, dirty: false, @@ -85,9 +172,58 @@ export default { serverError: {} } }), + computed: { + offerReplace() { + return ( + this.activeFilter.defaultFilter && + this.selectLists.savedFilters.length > 0 + ); + }, + isDefaultFilter() { + if (this.activeFilter && this.activeFilter.defaultFilter) { + return true; + } + return false; + }, + namedFilterIsSavable() { + if ( + this.activeFilter.name != this.activeFilterNameAtOpen || + this.activeFilter.public != this.activeFilterPublicAtOpen + ) { + return true; + } else { + return false; + } + }, + defaultFilterNameEdited() { + if (this.activeFilter.name != this.activeFilterNameAtOpen) { + return true; + } else { + return false; + } + }, + defaultFilterIsSavAsAble() { + if ( + this.defaultFilterNameEdited && + this.selectedSavedFilterIdToOverWrite == null + ) { + return true; + } else { + return false; + } + }, + defaultFilterIsOverWriteSavAble() { + if (this.selectedSavedFilterIdToOverWrite != null) { + return true; + } else { + return false; + } + } + }, async created() { await initForm(this); }, + methods: { async deleteFilter() { //prompt if a true delete and not a default filter "reset" @@ -107,57 +243,111 @@ export default { this.close({ refresh: true }); } }, - async saveAndExit(saveAs) { - if (saveAs) { - //SAVE AS - //strip ID - delete this.activeFilter.id; - delete this.activeFilter.concurrency; + async saveAndExit(saveMode) { + switch (saveMode) { + case "save-as-new": + { + //create new named filter with the column filter settings and selected name and all users settings of the current + //default filter + //SAVE AS + //strip ID + delete this.activeFilter.id; + delete this.activeFilter.concurrency; - //save as can never save as default - this.activeFilter.defaultFilter = false; - //save as can never be same name as default - - if ( - this.activeFilter.name == "-" || - this.activeFilter.name == this.activeFilterNameAtOpen - ) { - this.activeFilter.name += " [" + this.$sock.t("Copy") + "]"; - } - this.activeFilter.userId = window.$gz.store.state.userId; - const res = await window.$gz.api.post( - "data-list-filter", - this.activeFilter - ); - if (res.error) { - throw new Error(window.$gz.errorHandler.errorToString(res, this)); - } else { - this.close({ refresh: true, newFilterId: res.data.id }); - } - } else { - //SAVE - const res = await window.$gz.api.put( - "data-list-filter", - this.activeFilter - ); - if (res.error) { - throw new Error(window.$gz.errorHandler.errorToString(res, this)); - } else { - this.close({ refresh: true }); - } + //save as can never save as default + this.activeFilter.defaultFilter = false; + //save as can never be same name as default - + if ( + this.activeFilter.name == "-" || + this.activeFilter.name == this.activeFilterNameAtOpen + ) { + this.activeFilter.name += " [" + this.$ay.t("Copy") + "]"; + } + this.activeFilter.userId = window.$gz.store.state.userId; + const res = await window.$gz.api.post( + "data-list-filter", + this.activeFilter + ); + if (res.error) { + throw new Error(window.$gz.errorHandler.errorToString(res, this)); + } else { + this.close({ refresh: true, newFilterId: res.data.id }); + } + } + break; + case "replace-column-filters": + { + //replace existing named filter with the column filter settings (only) of the current + //default filter + + if (this.selectedSavedFilterIdToOverWrite == null) { + return; + } + + //Fetch existing + let dataFilterToBeOverwritten = await window.$gz.api.get( + `data-list-filter/${this.selectedSavedFilterIdToOverWrite}` + ); + if (dataFilterToBeOverwritten.error) { + throw new Error( + window.$gz.errorHandler.errorToString( + dataFilterToBeOverwritten, + this + ) + ); + } else { + dataFilterToBeOverwritten = dataFilterToBeOverwritten.data; + } + + //overwrite filter settings + dataFilterToBeOverwritten.filter = this.activeFilter.filter; + + //save over existing + const res = await window.$gz.api.put( + "data-list-filter", + dataFilterToBeOverwritten + ); + if (res.error) { + throw new Error(window.$gz.errorHandler.errorToString(res, this)); + } else { + this.close({ + refresh: true, + newFilterId: dataFilterToBeOverwritten.id + }); //switch to the new filter id + } + } + break; + case "update-name-all-users": + { + //update existing named filter with the name and / or all users settings of the current + //default filter, column filter settings ignored / kept as is + //SAVE + const res = await window.$gz.api.put( + "data-list-filter", + this.activeFilter + ); + if (res.error) { + throw new Error(window.$gz.errorHandler.errorToString(res, this)); + } else { + this.close({ refresh: true }); + } + } + break; } }, async open(tableColumnData) { this.tableColumnData = tableColumnData; + this.selectedSavedFilterIdToOverWrite = null; await fetchActiveFilter(this); this.activeFilterNameAtOpen = this.activeFilter.name; + this.activeFilterPublicAtOpen = this.activeFilter.public; this.isSelfOwned = this.activeFilter.userId == window.$gz.store.state.userId; - //Get owner name if (!this.isSelfOwned) { const res = await window.$gz.api.post("pick-list/list", { - sockType: window.$gz.type.User, + ayaType: window.$gz.type.User, inactive: true, preselectedIds: [this.activeFilter.userId] }); @@ -170,6 +360,8 @@ export default { } } + await fetchSavedFilterList(this); + this.isVisible = true; return new Promise((resolve, reject) => { this.resolve = resolve; @@ -202,11 +394,30 @@ async function fetchActiveFilter(vm) { } } +//////////////////// +// +async function fetchSavedFilterList(vm) { + const res = await window.$gz.api.get( + "data-list-filter/list?ListKey=" + vm.dataListKey + ); + if (res.error) { + vm.formState.serverError = res.error; + window.$gz.form.setErrorBoxErrors(vm); + } else { + //use previous selects but weed out default filter + vm.selectLists.savedFilters = res.data.filter(z => z.default != true); + } +} + ////////////////////////////////////////////////////////// // // Ensures UI translated text is available // async function fetchTranslatedText() { - await window.$gz.translation.cacheTranslations(["GridFilterName", "AnyUser"]); + await window.$gz.translation.cacheTranslations([ + "GridFilterName", + "AnyUser", + "DataListSavedFilter" + ]); }