This commit is contained in:
2021-02-04 00:56:46 +00:00
parent 26b78331a6
commit 79fe1af09a
4 changed files with 236 additions and 1 deletions

View File

@@ -333,7 +333,7 @@ export default {
reject: null, reject: null,
tableColumnData: {}, //from table tableColumnData: {}, //from table
fieldDefinitions: [], fieldDefinitions: [],
editItem: {}, editItem: { filter: { items: [] } },
activeFilter: null, activeFilter: null,
selectLists: { selectLists: {
dateFilterOperators: [], dateFilterOperators: [],

View File

@@ -0,0 +1,218 @@
<template>
<v-dialog
max-width="600px"
v-model="isVisible"
@keydown.esc="close()"
data-cy="dataTableFilterManagerControl"
>
<v-card>
<v-card-title>{{ $ay.t("Filter") }} </v-card-title>
<v-card-subtitle class="mt-1"
>{{ activeFilterNameAtOpen }} {{ activeFilterCreator }}</v-card-subtitle
>
<!-- activefilter:{ "id": 2, "concurrency": 5029609, "userId": 1, "name": "-",
"public": false, "defaultFilter": true, "listKey": "CustomerDataList", "filter": "[]" } -->
<v-card-text>
<!-- <div>activefilter:{{ activeFilter }}</div> -->
<v-text-field
:readonly="formState.readOnly"
v-model="activeFilter.name"
:label="$ay.t('GridFilterName')"
required
></v-text-field>
<v-checkbox
v-model="activeFilter.public"
:readonly="formState.readOnly"
:label="$ay.t('AnyUser')"
ref="public"
data-cy="public"
></v-checkbox>
</v-card-text>
<v-card-actions>
<v-btn text @click="close()" color="primary">{{
$ay.t("Cancel")
}}</v-btn>
<v-spacer />
<template v-if="activeFilter.defaultFilter == false && isSelfOwned">
<v-btn text @click="deleteFilter()" color="primary">{{
$ay.t("Delete")
}}</v-btn>
<v-spacer />
</template>
<template v-if="activeFilter.defaultFilter == true">
<v-btn text @click="resetFilter()" color="primary">{{
$ay.t("Reset")
}}</v-btn>
<v-spacer />
</template>
<v-btn text @click="saveAndExit(true)" color="primary">{{
$ay.t("SaveCopy")
}}</v-btn>
<template v-if="activeFilter.defaultFilter == false && isSelfOwned">
<v-spacer />
<v-btn text @click="saveAndExit()" color="primary">{{
$ay.t("Save")
}}</v-btn>
</template>
</v-card-actions>
</v-card>
</v-dialog>
</template>
<script>
export default {
components: {},
async created() {
await initForm(this);
},
data: () => ({
isVisible: false,
resolve: null,
reject: null,
activeFilter: {
id: 0,
userId: 0,
name: null,
public: false,
defaultFilter: true,
listKey: null,
filter: "[]"
},
activeFilterNameAtOpen: null,
activeFilterCreator: "",
isSelfOwned: true,
formState: {
ready: false,
dirty: false,
valid: true,
readOnly: false,
loading: true,
errorBoxMessage: undefined,
appError: undefined,
serverError: {}
}
}),
props: {
dataListKey: String,
activeFilterId: Number
},
methods: {
async saveAndExit(saveAs) {
if (saveAs) {
//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.$ay.t("Copy") + "]";
}
this.activeFilter.userId = window.$gz.store.state.userId;
let res = await window.$gz.api.post(
"data-list-filter",
this.activeFilter
);
if (res.error) {
//throw new Error(res.error);
throw new Error(window.$gz.errorHandler.errorToString(res, this));
} else {
this.close({ refresh: true });
}
} else {
//SAVE
let res = await window.$gz.api.put(
"data-list-filter",
this.activeFilter
);
if (res.error) {
//throw new Error(res.error);
throw new Error(window.$gz.errorHandler.errorToString(res, this));
} else {
this.close({ refresh: true });
}
}
},
async open(tableColumnData) {
this.tableColumnData = tableColumnData;
await fetchActiveFilter(this);
this.activeFilterNameAtOpen = this.activeFilter.name;
this.isSelfOwned =
this.activeFilter.userId == window.$gz.store.state.userId;
//Get owner name
if (!this.isSelfOwned) {
let res = await window.$gz.api.post("pick-list/list", {
ayaType: window.$gz.type.User,
inactive: true,
preselectedIds: [this.activeFilter.userId]
});
if (res.error) {
this.activeFilterCreator = " (creator: UNKNOWN / ERROR)";
throw new Error(window.$gz.errorHandler.errorToString(res, this));
} else {
this.activeFilterCreator = `(${res.data[0].name})`;
}
}
this.isVisible = true;
return new Promise((resolve, reject) => {
this.resolve = resolve;
this.reject = reject;
});
},
close(ret) {
this.isVisible = false;
this.resolve(ret);
}
}
};
/////////////////////////////////
//
//
async function initForm(vm) {
await fetchTranslatedText(vm);
// populateSelectionLists(vm);
// await populateFieldDefinitions(vm);
// await fetchTranslatedFieldNames(vm);
// await setEffectiveListView(vm);
// await fetchEnums(vm);
}
////////////////////
//
async function fetchActiveFilter(vm) {
///api/v8/data-list-filter/{id}
let res = await window.$gz.api.get(`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
//
async function fetchTranslatedText(vm) {
await window.$gz.translation.cacheTranslations([
"GridFilterName",
"AnyUser",
"Copy",
"SaveAs"
]);
}
</script>

View File

@@ -7,6 +7,12 @@
ref="dataTableFilter" ref="dataTableFilter"
> >
</gz-data-table-filter> </gz-data-table-filter>
<gz-data-table-filter-manager
:dataListKey="dataListKey"
:activeFilterId="activeFilterId"
ref="dataTableFilterManager"
>
</gz-data-table-filter-manager>
<v-card> <v-card>
<!-- {{ dataTablePagingOptions }} <!-- {{ dataTablePagingOptions }}
{{ headers }} --> {{ headers }} -->
@@ -18,6 +24,8 @@
item-value="id" item-value="id"
:label="$ay.t('Filter')" :label="$ay.t('Filter')"
@input="savedFilterSelected" @input="savedFilterSelected"
prepend-icon="$ayiEdit"
@click:prepend="editFilter()"
data-cy="selectSavedFilter" data-cy="selectSavedFilter"
> >
</v-select> </v-select>
@@ -521,6 +529,13 @@ export default {
} }
return clr; return clr;
}, },
async editFilter() {
let res = await this.$refs.dataTableFilterManager.open();
if (res && res.refresh == true) {
//refresh the filter picklist and get data from api
this.getDataFromApi();
}
},
keyArrayFromSortByArray(sortBy) { keyArrayFromSortByArray(sortBy) {
return sortBy.map(sortItem => { return sortBy.map(sortItem => {
let val = this.headers.find(z => z.value == sortItem); let val = this.headers.find(z => z.value == sortItem);

View File

@@ -40,6 +40,7 @@ import tagPicker from "./components/tag-picker.vue";
import pickList from "./components/pick-list.vue"; import pickList from "./components/pick-list.vue";
import dataTable from "./components/data-table.vue"; import dataTable from "./components/data-table.vue";
import dataTableFilterControl from "./components/data-table-filter-control.vue"; import dataTableFilterControl from "./components/data-table-filter-control.vue";
import dataTableFilterManagerControl from "./components/data-table-filter-manager-control.vue";
import customFieldsControl from "./components/custom-fields-control.vue"; import customFieldsControl from "./components/custom-fields-control.vue";
import currencyControl from "./components/currency-control.vue"; import currencyControl from "./components/currency-control.vue";
import decimalControl from "./components/decimal-control.vue"; import decimalControl from "./components/decimal-control.vue";
@@ -188,6 +189,7 @@ Vue.component("gz-tag-picker", tagPicker);
Vue.component("gz-pick-list", pickList); Vue.component("gz-pick-list", pickList);
Vue.component("gz-data-table", dataTable); Vue.component("gz-data-table", dataTable);
Vue.component("gz-data-table-filter", dataTableFilterControl); Vue.component("gz-data-table-filter", dataTableFilterControl);
Vue.component("gz-data-table-filter-manager", dataTableFilterManagerControl);
Vue.component("gz-custom-fields", customFieldsControl); Vue.component("gz-custom-fields", customFieldsControl);
Vue.component("gz-currency", currencyControl); Vue.component("gz-currency", currencyControl);
Vue.component("gz-decimal", decimalControl); Vue.component("gz-decimal", decimalControl);