This commit is contained in:
2021-02-03 17:53:22 +00:00
parent e16dc7adea
commit 6e9d2fe280
2 changed files with 70 additions and 38 deletions

View File

@@ -320,9 +320,10 @@ export default {
isVisible: false, isVisible: false,
resolve: null, resolve: null,
reject: null, reject: null,
tableColumnData: {}, tableColumnData: {}, //from table
fieldDefinitions: [], fieldDefinitions: [],
editItem: {}, editItem: {},
activeFilter: null,
selectLists: { selectLists: {
dateFilterOperators: [], dateFilterOperators: [],
dateFilterTokens: [], dateFilterTokens: [],
@@ -345,11 +346,21 @@ export default {
} }
}), }),
props: { props: {
dataListKey: String dataListKey: String,
activeFilterId: Number
}, },
methods: { methods: {
saveAndExit() { saveAndExit() {
//todo: save changes here //todo: save changes here
//Note: we are working with a specific filter, either the "default" filter which is the one used when no other filter is specified or a specific one
//So here we need to take the current filter, update it and save it
//todo: populate current filter on open of this control so we have it here to modify and it's near live
// grid doesn't know about filters and has no need to, so this form just needs to know the currently active filter id
//take existing filter
//upsert conditions for this column
//save filter
//let grid do it's thing
this.close({ refresh: true }); this.close({ refresh: true });
}, },
addFilterCondition(editItem) { addFilterCondition(editItem) {
@@ -453,8 +464,10 @@ export default {
return; return;
} }
}, },
open(tableColumnData) { async open(tableColumnData) {
this.tableColumnData = tableColumnData; this.tableColumnData = tableColumnData;
await getActiveFilter(vm);
initEditItem(this); initEditItem(this);
this.isVisible = true; this.isVisible = true;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@@ -509,6 +522,21 @@ async function populateFieldDefinitions(vm) {
} }
} }
////////////////////
//
async function fetchActiveFilter(vm) {
///api/v8/data-list-filter/{id}
let res = await window.$gz.api.get(
`/api/v8/data-list-filter/${vm.activeFilterId}`
);
if (res.error) {
//throw new Error(res.error);
throw new Error(window.$gz.errorHandler.errorToString(res, vm));
} else {
vm.activeFilter = res.data;
}
}
////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
// //
// Ensures UI translated text is available // Ensures UI translated text is available

View File

@@ -1,20 +1,24 @@
<template> <template>
<div> <div>
<gz-error :errorBoxMessage="formState.errorBoxMessage"></gz-error> <gz-error :errorBoxMessage="formState.errorBoxMessage"></gz-error>
<gz-data-table-filter :dataListKey="dataListKey" ref="dataTableFilter"> <gz-data-table-filter
:dataListKey="dataListKey"
:activeFilterId="filterId"
ref="dataTableFilter"
>
</gz-data-table-filter> </gz-data-table-filter>
<v-card> <v-card>
<!-- {{ dataTablePagingOptions }} <!-- {{ dataTablePagingOptions }}
{{ headers }} --> {{ headers }} -->
<v-card-title> <v-card-title>
<v-select <v-select
v-model="listViewId" v-model="filterId"
:items="selectLists.listViews" :items="selectLists.savedFilters"
item-text="name" item-text="name"
item-value="id" item-value="id"
:label="$ay.t('Filter')" :label="$ay.t('Filter')"
@input="listViewChanged" @input="savedFilterSelected"
data-cy="selectlistview" data-cy="selectSavedFilter"
> >
</v-select> </v-select>
<v-spacer></v-spacer> <v-spacer></v-spacer>
@@ -380,10 +384,10 @@ export default {
loading: true, loading: true,
dataTablePagingOptions: {}, dataTablePagingOptions: {},
lastDataTablePagingOptions: {}, lastDataTablePagingOptions: {},
listViewId: 0, filterId: 0,
listView: undefined, listView: undefined,
selectLists: { selectLists: {
listViews: [] savedFilters: []
}, },
headers: [], headers: [],
serverColumns: [], serverColumns: [],
@@ -610,20 +614,20 @@ export default {
params: { params: {
dataListKey: this.dataListKey, dataListKey: this.dataListKey,
formKey: this.formKey, formKey: this.formKey,
listViewId: this.listViewId filterId: this.filterId
} }
}); });
}, },
resetListView: function() { resetListView: function() {
let vm = this; let vm = this;
vm.listViewId = 0; vm.filterId = 0;
vm.listView = undefined; vm.listView = undefined;
vm.dataTablePagingOptions.page = 1; vm.dataTablePagingOptions.page = 1;
saveFormSettings(vm); saveFormSettings(vm);
//needs to show as temp unsaved filter or overridden or something //needs to show as temp unsaved filter or overridden or something
}, },
listViewChanged: async function() { savedFilterSelected: async function() {
let vm = this; let vm = this;
//If listview had changed it can only have changed *away* from the unsaved filter item if it's present so just remove the unsaved filter item if it exists //If listview had changed it can only have changed *away* from the unsaved filter item if it's present so just remove the unsaved filter item if it exists
@@ -632,7 +636,7 @@ export default {
//this example does remove from the array and does update a plain mustache rendition of it on the page but doesn't update the select itself //this example does remove from the array and does update a plain mustache rendition of it on the page but doesn't update the select itself
//whereas using the native javascript array splice function *does* update the select because vue wraps splice and other native methods specifically //whereas using the native javascript array splice function *does* update the select because vue wraps splice and other native methods specifically
//so it can properly update the dom //so it can properly update the dom
// window.$gz. _.remove(vm.selectLists.listViews, function(n) { // window.$gz. _.remove(vm.selectLists.savedFilters, function(n) {
// return n.id == -1; // return n.id == -1;
// }); // });
@@ -641,17 +645,17 @@ export default {
//always go back to page one on a change of data list view //always go back to page one on a change of data list view
vm.dataTablePagingOptions.page = 1; vm.dataTablePagingOptions.page = 1;
for (let i = vm.selectLists.listViews.length - 1; i >= 0; i--) { for (let i = vm.selectLists.savedFilters.length - 1; i >= 0; i--) {
if (vm.selectLists.listViews[i].id === -1) { if (vm.selectLists.savedFilters[i].id === -1) {
vm.selectLists.listViews.splice(i, 1); vm.selectLists.savedFilters.splice(i, 1);
} }
} }
if (vm.listViewId == 0) { if (vm.filterId == 0) {
//default view, no saved, no cached //default view, no saved, no cached
vm.listView = undefined; vm.listView = undefined;
saveFormSettings(vm); saveFormSettings(vm);
} else if (vm.listViewId > 0) { } else if (vm.filterId > 0) {
await fetchListView(vm); await fetchListView(vm);
saveFormSettings(vm); saveFormSettings(vm);
} }
@@ -784,7 +788,7 @@ export default {
vm.getDataFromApi(); vm.getDataFromApi();
}, },
beforeUpdate() { beforeUpdate() {
if (this.clientCriteria != null && this.listViewId != 0) { if (this.clientCriteria != null && this.filterId != 0) {
this.resetListView(); this.resetListView();
} }
} }
@@ -1076,8 +1080,8 @@ async function populateSelectionLists(vm) {
window.$gz.form.setErrorBoxErrors(vm); window.$gz.form.setErrorBoxErrors(vm);
//window.$gz.errorHandler.handleFormError(res.error, vm); //window.$gz.errorHandler.handleFormError(res.error, vm);
} else { } else {
vm.selectLists.listViews = res.data; vm.selectLists.savedFilters = res.data;
window.$gz.form.addNoSelectionItem(vm.selectLists.listViews); window.$gz.form.addNoSelectionItem(vm.selectLists.savedFilters);
} }
} }
@@ -1086,15 +1090,15 @@ async function populateSelectionLists(vm) {
// Fetch and cache list view // Fetch and cache list view
// //
async function fetchListView(vm) { async function fetchListView(vm) {
if (!vm.listViewId) { if (!vm.filterId) {
return; return;
} }
let res = await window.$gz.api.get("data-list-view/" + vm.listViewId); let res = await window.$gz.api.get("data-list-view/" + vm.filterId);
if (res.error) { if (res.error) {
if (res.error.code && res.error.code == "2010") { if (res.error.code && res.error.code == "2010") {
//list not found, probably deleted by another user //list not found, probably deleted by another user
//or on another browser and this one still had it as the last used list view //or on another browser and this one still had it as the last used list view
vm.listViewId = 0; //indicate no list view vm.filterId = 0; //indicate no list view
return; return;
} else { } else {
vm.formState.serverError = res.error; vm.formState.serverError = res.error;
@@ -1112,18 +1116,18 @@ function saveFormSettings(vm) {
let unsavedlv = vm.listView; let unsavedlv = vm.listView;
let cachedlv = vm.listView; let cachedlv = vm.listView;
if (vm.listViewId == 0) { if (vm.filterId == 0) {
//we aren't using any listview //we aren't using any listview
unsavedlv = undefined; unsavedlv = undefined;
cachedlv = undefined; cachedlv = undefined;
} }
if (vm.listViewId == -1) { if (vm.filterId == -1) {
//we have an unsaved one in use so there is no need for a cached one //we have an unsaved one in use so there is no need for a cached one
cachedlv = undefined; cachedlv = undefined;
} }
if (vm.listViewId > 0) { if (vm.filterId > 0) {
//we are using a saved lv so save cached one and clear anything in unsaved one //we are using a saved lv so save cached one and clear anything in unsaved one
unsavedlv = undefined; unsavedlv = undefined;
} }
@@ -1132,7 +1136,7 @@ function saveFormSettings(vm) {
temp: { page: vm.dataTablePagingOptions.page, cachedListView: cachedlv }, temp: { page: vm.dataTablePagingOptions.page, cachedListView: cachedlv },
saved: { saved: {
itemsPerPage: vm.dataTablePagingOptions.itemsPerPage, itemsPerPage: vm.dataTablePagingOptions.itemsPerPage,
dataTable: { listViewId: vm.listViewId, unsavedListView: unsavedlv } dataTable: { filterId: vm.filterId, unsavedListView: unsavedlv }
} }
}); });
} }
@@ -1147,29 +1151,29 @@ function loadFormSettings(vm) {
if (formSettings.saved.itemsPerPage) { if (formSettings.saved.itemsPerPage) {
vm.dataTablePagingOptions.itemsPerPage = formSettings.saved.itemsPerPage; vm.dataTablePagingOptions.itemsPerPage = formSettings.saved.itemsPerPage;
} }
if (formSettings.saved.dataTable.listViewId != null) { if (formSettings.saved.dataTable.filterId != null) {
vm.listViewId = formSettings.saved.dataTable.listViewId; vm.filterId = formSettings.saved.dataTable.filterId;
} }
if (vm.listViewId == 0) { if (vm.filterId == 0) {
//default view, not unsaved and not saved //default view, not unsaved and not saved
vm.listView = undefined; vm.listView = undefined;
} }
if (vm.listViewId == -1) { if (vm.filterId == -1) {
//-1 is code for unsaved list view //-1 is code for unsaved list view
//check if there is a local copy of a listview vm was edited but not saved //check if there is a local copy of a listview vm was edited but not saved
if (formSettings.saved.dataTable.unsavedListView != null) { if (formSettings.saved.dataTable.unsavedListView != null) {
//add UNSAVED FILTER if -1 //add UNSAVED FILTER if -1
vm.selectLists.listViews.unshift({ vm.selectLists.savedFilters.unshift({
name: vm.$ay.t("FilterUnsaved"), name: vm.$ay.t("FilterUnsaved"),
id: -1 id: -1
}); });
vm.listView = formSettings.saved.dataTable.unsavedListView; vm.listView = formSettings.saved.dataTable.unsavedListView;
} else { } else {
//listviewid is for unsaved but we have no unsaved so fix that up //filterId is for unsaved but we have no unsaved so fix that up
vm.listView = undefined; vm.listView = undefined;
vm.listViewId = 0; vm.filterId = 0;
} }
} }
} }
@@ -1181,13 +1185,13 @@ function loadFormSettings(vm) {
} }
//check for cached local copy of saved list view in use //check for cached local copy of saved list view in use
if (vm.listViewId > 0) { if (vm.filterId > 0) {
//0=no list view, -1=unsaved list view so any number greater than zero means there sb a cached local copy of a saved list view //0=no list view, -1=unsaved list view so any number greater than zero means there sb a cached local copy of a saved list view
if (formSettings.temp && formSettings.temp.cachedListView != null) { if (formSettings.temp && formSettings.temp.cachedListView != null) {
vm.listView = formSettings.temp.cachedListView; vm.listView = formSettings.temp.cachedListView;
} else { } else {
//fetch it and cache it //fetch it and cache it
return fetchListView(vm, vm.listViewId); return fetchListView(vm, vm.filterId);
} }
} }
} }