This commit is contained in:
@@ -4,34 +4,7 @@
|
|||||||
<v-form ref="form">
|
<v-form ref="form">
|
||||||
<v-row>
|
<v-row>
|
||||||
<gz-error :errorBoxMessage="formState.errorBoxMessage"></gz-error>
|
<gz-error :errorBoxMessage="formState.errorBoxMessage"></gz-error>
|
||||||
<v-col cols="12">
|
|
||||||
<v-row>
|
|
||||||
<v-col cols="12" sm="6" lg="4" xl="3">
|
|
||||||
<v-text-field
|
|
||||||
v-model="obj.name"
|
|
||||||
:readonly="formState.readOnly"
|
|
||||||
:clearable="!formState.readOnly"
|
|
||||||
@click:clear="fieldValueChanged('name')"
|
|
||||||
:label="$ay.t('Name')"
|
|
||||||
:rules="[form().required(this, 'name')]"
|
|
||||||
:error-messages="form().serverErrors(this, 'name')"
|
|
||||||
ref="name"
|
|
||||||
@input="fieldValueChanged('name')"
|
|
||||||
data-cy="name"
|
|
||||||
></v-text-field>
|
|
||||||
</v-col>
|
|
||||||
|
|
||||||
<v-col cols="12" sm="6" lg="4" xl="3">
|
|
||||||
<v-checkbox
|
|
||||||
v-model="obj.public"
|
|
||||||
:readonly="formState.readOnly"
|
|
||||||
:label="$ay.t('AnyUser')"
|
|
||||||
ref="public"
|
|
||||||
@change="fieldValueChanged('public')"
|
|
||||||
></v-checkbox>
|
|
||||||
</v-col>
|
|
||||||
</v-row>
|
|
||||||
</v-col>
|
|
||||||
<template v-for="(item, index) in obj.editView">
|
<template v-for="(item, index) in obj.editView">
|
||||||
<v-col :key="item.key" cols="12" sm="6" lg="4" xl="3" px-2>
|
<v-col :key="item.key" cols="12" sm="6" lg="4" xl="3" px-2>
|
||||||
<v-card :data-cy="'columncard:' + item.key">
|
<v-card :data-cy="'columncard:' + item.key">
|
||||||
@@ -72,332 +45,6 @@
|
|||||||
><v-icon large>$ayiStepForward</v-icon></v-btn
|
><v-icon large>$ayiStepForward</v-icon></v-btn
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<!-- SORT CONTROL -->
|
|
||||||
<template v-if="item.isSortable">
|
|
||||||
<div @click="toggleSort(item)" class="pt-6">
|
|
||||||
<v-btn x-large v-if="item.sort == null" icon>
|
|
||||||
<v-icon x-large>$ayiSort</v-icon></v-btn
|
|
||||||
>
|
|
||||||
<v-btn
|
|
||||||
v-if="item.sort != null && item.sort == '-'"
|
|
||||||
icon
|
|
||||||
x-large
|
|
||||||
><v-icon color="primary" x-large
|
|
||||||
>$ayiSortAmountDown</v-icon
|
|
||||||
></v-btn
|
|
||||||
>
|
|
||||||
<v-btn
|
|
||||||
v-if="item.sort != null && item.sort == '+'"
|
|
||||||
icon
|
|
||||||
x-large
|
|
||||||
><v-icon color="primary" x-large
|
|
||||||
>$ayiSortAmountUp</v-icon
|
|
||||||
></v-btn
|
|
||||||
>
|
|
||||||
<label class="v-label theme--light"
|
|
||||||
> {{ $ay.t("Sort") }}</label
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- FILTER CONTROL -->
|
|
||||||
<template v-if="item.isFilterable">
|
|
||||||
<div class="pt-6">
|
|
||||||
<!-- ******** BUILDER FOR EACH TYPE Tag, decimal,currency, bool, integer, string, datetime ******** -->
|
|
||||||
<!-- NOTE: currently not implemented: TimeSpan=15, seems unsupportable for a filter -->
|
|
||||||
<!-- DATETIME BUILDER -->
|
|
||||||
<!-- Note: date time is a bit unusual in that it presents the date tokens first as it would be the most common choice whereas the other types would do something
|
|
||||||
like that later -->
|
|
||||||
<div v-if="item.uiFieldDataType === 1">
|
|
||||||
<v-select
|
|
||||||
v-model="item.tempFilterToken"
|
|
||||||
:items="selectLists.dateFilterTokens"
|
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
:label="$ay.t('Filter')"
|
|
||||||
prepend-icon="$ayiFilter"
|
|
||||||
></v-select>
|
|
||||||
<div v-if="item.tempFilterToken == '*select*'">
|
|
||||||
<v-select
|
|
||||||
v-model="item.tempFilterOperator"
|
|
||||||
:items="selectLists.dateFilterOperators"
|
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
></v-select>
|
|
||||||
<gz-date-time-picker
|
|
||||||
v-if="
|
|
||||||
item.tempFilterOperator != '*NOVALUE*' &&
|
|
||||||
item.tempFilterOperator != '*HASVALUE*'
|
|
||||||
"
|
|
||||||
v-model="item.tempFilterValue"
|
|
||||||
></gz-date-time-picker>
|
|
||||||
</div>
|
|
||||||
<v-btn
|
|
||||||
large
|
|
||||||
block
|
|
||||||
v-if="item.tempFilterToken != null"
|
|
||||||
@click="addFilterCondition(item)"
|
|
||||||
><v-icon large>$ayiPlus</v-icon></v-btn
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- STRING(text-4, emailaddress-11, http-12, phone-16) BUILDER -->
|
|
||||||
<div
|
|
||||||
v-if="
|
|
||||||
item.uiFieldDataType === 4 ||
|
|
||||||
item.uiFieldDataType === 11 ||
|
|
||||||
item.uiFieldDataType === 12 ||
|
|
||||||
item.uiFieldDataType === 16
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<v-select
|
|
||||||
v-model="item.tempFilterOperator"
|
|
||||||
:items="selectLists.stringFilterOperators"
|
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
:label="$ay.t('Filter')"
|
|
||||||
prepend-icon="$ayiFilter"
|
|
||||||
></v-select>
|
|
||||||
<v-text-field
|
|
||||||
v-if="
|
|
||||||
item.tempFilterOperator != null &&
|
|
||||||
item.tempFilterOperator != '*NOVALUE*' &&
|
|
||||||
item.tempFilterOperator != '*HASVALUE*'
|
|
||||||
"
|
|
||||||
v-model="item.tempFilterValue"
|
|
||||||
:clearable="!formState.readOnly"
|
|
||||||
></v-text-field>
|
|
||||||
<v-btn
|
|
||||||
large
|
|
||||||
block
|
|
||||||
v-if="item.tempFilterOperator != null"
|
|
||||||
@click="addFilterCondition(item)"
|
|
||||||
><v-icon large>$ayiPlus</v-icon></v-btn
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- INTEGER BUILDER -->
|
|
||||||
<!-- Also MemorySize type 14 are integers -->
|
|
||||||
<div
|
|
||||||
v-if="
|
|
||||||
item.uiFieldDataType === 5 ||
|
|
||||||
item.uiFieldDataType === 14
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<v-select
|
|
||||||
v-model="item.tempFilterOperator"
|
|
||||||
:items="selectLists.integerFilterOperators"
|
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
:label="$ay.t('Filter')"
|
|
||||||
prepend-icon="$ayiFilter"
|
|
||||||
></v-select>
|
|
||||||
<v-text-field
|
|
||||||
v-if="
|
|
||||||
item.tempFilterOperator != null &&
|
|
||||||
item.tempFilterOperator != '*NOVALUE*' &&
|
|
||||||
item.tempFilterOperator != '*HASVALUE*'
|
|
||||||
"
|
|
||||||
v-model="item.tempFilterValue"
|
|
||||||
:clearable="!formState.readOnly"
|
|
||||||
type="number"
|
|
||||||
></v-text-field>
|
|
||||||
<v-btn
|
|
||||||
large
|
|
||||||
block
|
|
||||||
v-if="item.tempFilterOperator != null"
|
|
||||||
@click="addFilterCondition(item)"
|
|
||||||
><v-icon large>$ayiPlus</v-icon></v-btn
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<!-- BOOL BUILDER -->
|
|
||||||
<div v-if="item.uiFieldDataType === 6">
|
|
||||||
<v-select
|
|
||||||
v-model="item.tempFilterOperator"
|
|
||||||
:items="selectLists.boolFilterOperators"
|
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
:label="$ay.t('Filter')"
|
|
||||||
prepend-icon="$ayiFilter"
|
|
||||||
></v-select>
|
|
||||||
<v-radio-group
|
|
||||||
v-model="item.tempFilterValue"
|
|
||||||
v-if="
|
|
||||||
item.tempFilterOperator != null &&
|
|
||||||
item.tempFilterOperator != '*NOVALUE*' &&
|
|
||||||
item.tempFilterOperator != '*HASVALUE*'
|
|
||||||
"
|
|
||||||
row
|
|
||||||
>
|
|
||||||
<v-radio
|
|
||||||
:label="$ay.t('False')"
|
|
||||||
:value="false"
|
|
||||||
></v-radio>
|
|
||||||
<v-radio
|
|
||||||
:label="$ay.t('True')"
|
|
||||||
:value="true"
|
|
||||||
></v-radio>
|
|
||||||
</v-radio-group>
|
|
||||||
|
|
||||||
<v-btn
|
|
||||||
large
|
|
||||||
block
|
|
||||||
v-if="item.tempFilterOperator != null"
|
|
||||||
@click="addFilterCondition(item)"
|
|
||||||
><v-icon large>$ayiPlus</v-icon></v-btn
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- DECIMAL BUILDER -->
|
|
||||||
<div v-if="item.uiFieldDataType === 7">
|
|
||||||
<v-select
|
|
||||||
v-model="item.tempFilterOperator"
|
|
||||||
:items="selectLists.decimalFilterOperators"
|
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
:label="$ay.t('Filter')"
|
|
||||||
prepend-icon="$ayiFilter"
|
|
||||||
></v-select>
|
|
||||||
<gz-decimal
|
|
||||||
v-if="
|
|
||||||
item.tempFilterOperator != null &&
|
|
||||||
item.tempFilterOperator != '*NOVALUE*' &&
|
|
||||||
item.tempFilterOperator != '*HASVALUE*'
|
|
||||||
"
|
|
||||||
v-model="item.tempFilterValue"
|
|
||||||
:clearable="!formState.readOnly"
|
|
||||||
></gz-decimal>
|
|
||||||
<v-btn
|
|
||||||
large
|
|
||||||
block
|
|
||||||
v-if="item.tempFilterOperator != null"
|
|
||||||
@click="addFilterCondition(item)"
|
|
||||||
><v-icon large>$ayiPlus</v-icon></v-btn
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<!-- CURRENCY BUILDER -->
|
|
||||||
<div v-if="item.uiFieldDataType === 8">
|
|
||||||
<v-select
|
|
||||||
v-model="item.tempFilterOperator"
|
|
||||||
:items="selectLists.decimalFilterOperators"
|
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
:label="$ay.t('Filter')"
|
|
||||||
prepend-icon="$ayiFilter"
|
|
||||||
></v-select>
|
|
||||||
<gz-currency
|
|
||||||
v-if="
|
|
||||||
item.tempFilterOperator != null &&
|
|
||||||
item.tempFilterOperator != '*NOVALUE*' &&
|
|
||||||
item.tempFilterOperator != '*HASVALUE*'
|
|
||||||
"
|
|
||||||
v-model="item.tempFilterValue"
|
|
||||||
:clearable="!formState.readOnly"
|
|
||||||
></gz-currency>
|
|
||||||
<v-btn
|
|
||||||
large
|
|
||||||
block
|
|
||||||
v-if="item.tempFilterOperator != null"
|
|
||||||
@click="addFilterCondition(item)"
|
|
||||||
><v-icon large>$ayiPlus</v-icon></v-btn
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<!-- TAG BUILDER -->
|
|
||||||
<div v-if="item.uiFieldDataType === 9">
|
|
||||||
<v-select
|
|
||||||
v-model="item.tempFilterOperator"
|
|
||||||
:items="selectLists.tagFilterOperators"
|
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
:label="$ay.t('Filter')"
|
|
||||||
prepend-icon="$ayiFilter"
|
|
||||||
></v-select>
|
|
||||||
|
|
||||||
<gz-tag-picker
|
|
||||||
v-if="item.tempFilterOperator != null"
|
|
||||||
v-model="item.tempFilterValue"
|
|
||||||
></gz-tag-picker>
|
|
||||||
|
|
||||||
<v-btn
|
|
||||||
large
|
|
||||||
block
|
|
||||||
v-if="item.tempFilterOperator != null"
|
|
||||||
@click="addFilterCondition(item)"
|
|
||||||
><v-icon large>$ayiPlus</v-icon></v-btn
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<!-- ENUM BUILDER -->
|
|
||||||
<div v-if="item.uiFieldDataType === 10">
|
|
||||||
<v-select
|
|
||||||
v-model="item.tempFilterOperator"
|
|
||||||
:items="selectLists.enumFilterOperators"
|
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
:label="$ay.t('Filter')"
|
|
||||||
prepend-icon="$ayiFilter"
|
|
||||||
></v-select>
|
|
||||||
|
|
||||||
<v-select
|
|
||||||
v-if="
|
|
||||||
item.tempFilterOperator != null &&
|
|
||||||
item.tempFilterOperator != '*NOVALUE*' &&
|
|
||||||
item.tempFilterOperator != '*HASVALUE*'
|
|
||||||
"
|
|
||||||
v-model="item.tempFilterValue"
|
|
||||||
:items="enumSelectionList(item.enumType)"
|
|
||||||
item-text="name"
|
|
||||||
item-value="id"
|
|
||||||
></v-select>
|
|
||||||
|
|
||||||
<v-btn
|
|
||||||
large
|
|
||||||
block
|
|
||||||
v-if="item.tempFilterOperator != null"
|
|
||||||
@click="addFilterCondition(item)"
|
|
||||||
><v-icon large>$ayiPlus</v-icon></v-btn
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pt-6">
|
|
||||||
<!-- FILTER LIST -->
|
|
||||||
<template v-if="item.filter.items.length > 0">
|
|
||||||
<v-list elevation="2">
|
|
||||||
<v-subheader v-if="item.filter.items.length > 1">
|
|
||||||
<!-- AND / OR FILTER CONDITIONS -->
|
|
||||||
<v-radio-group v-model="item.filter.any" row>
|
|
||||||
<v-radio
|
|
||||||
:label="$ay.t('GridFilterDialogAndRadioText')"
|
|
||||||
:value="false"
|
|
||||||
></v-radio>
|
|
||||||
<v-radio
|
|
||||||
:label="$ay.t('GridFilterDialogOrRadioText')"
|
|
||||||
:value="true"
|
|
||||||
></v-radio> </v-radio-group
|
|
||||||
></v-subheader>
|
|
||||||
<v-list-item
|
|
||||||
v-for="(filterItem, index) in item.filter.items"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<v-list-item-content>
|
|
||||||
<v-list-item-title v-text="filterItem.display">
|
|
||||||
</v-list-item-title>
|
|
||||||
</v-list-item-content>
|
|
||||||
<v-list-item-action>
|
|
||||||
<v-btn
|
|
||||||
icon
|
|
||||||
@click="removeFilterCondition(item, index)"
|
|
||||||
>
|
|
||||||
<v-icon>$ayiTrashAlt</v-icon>
|
|
||||||
</v-btn>
|
|
||||||
</v-list-item-action>
|
|
||||||
</v-list-item>
|
|
||||||
</v-list>
|
|
||||||
</template>
|
|
||||||
<!-- <v-divider></v-divider>
|
|
||||||
{{ item }} -->
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</v-card>
|
</v-card>
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -414,21 +61,23 @@
|
|||||||
|
|
||||||
const FORM_KEY = "ay-data-list-column-view";
|
const FORM_KEY = "ay-data-list-column-view";
|
||||||
const API_BASE_URL = "data-list-column-view/";
|
const API_BASE_URL = "data-list-column-view/";
|
||||||
let JUST_DELETED = false;
|
|
||||||
export default {
|
export default {
|
||||||
//unsaved changes are actually valid for this form so no need to warn
|
//unsaved changes are actually valid for this form so no need to warn
|
||||||
beforeRouteLeave(to, from, next) {
|
beforeRouteLeave(to, from, next) {
|
||||||
let vm = this;
|
let vm = this;
|
||||||
if (this.formState.dirty && !JUST_DELETED) {
|
if (this.formState.dirty) {
|
||||||
//Put in unsaved listview
|
//LVNEW: SAVE AUTOMATICALLY?
|
||||||
let formSettings = window.$gz.form.getFormSettings(vm.formKey);
|
|
||||||
formSettings.saved.dataTable.unsavedListView = JSON.stringify(
|
// //Put in unsaved listview
|
||||||
generateListViewFromEdited(vm)
|
// let formSettings = window.$gz.form.getFormSettings(vm.formKey);
|
||||||
);
|
// formSettings.saved.dataTable.unsavedListView = JSON.stringify(
|
||||||
formSettings.saved.dataTable.listViewId = -1;
|
// generateListViewFromEdited(vm)
|
||||||
formSettings.temp.cachedListView = null;
|
// );
|
||||||
formSettings.temp.page = 1;
|
|
||||||
window.$gz.form.setFormSettings(vm.formKey, formSettings);
|
// formSettings.temp.cachedListView = null;
|
||||||
|
// formSettings.temp.page = 1;
|
||||||
|
// window.$gz.form.setFormSettings(vm.formKey, formSettings);
|
||||||
next();
|
next();
|
||||||
} else {
|
} else {
|
||||||
next();
|
next();
|
||||||
@@ -442,7 +91,6 @@ export default {
|
|||||||
try {
|
try {
|
||||||
//set route values in data object so init form can handle
|
//set route values in data object so init form can handle
|
||||||
vm.dataListKey = this.$route.params.dataListKey;
|
vm.dataListKey = this.$route.params.dataListKey;
|
||||||
vm.listViewId = this.$route.params.listViewId;
|
|
||||||
vm.formKey = this.$route.params.formKey;
|
vm.formKey = this.$route.params.formKey;
|
||||||
await initForm(vm);
|
await initForm(vm);
|
||||||
vm.formState.ready = true;
|
vm.formState.ready = true;
|
||||||
@@ -467,7 +115,6 @@ export default {
|
|||||||
concurrency: 0,
|
concurrency: 0,
|
||||||
userId: 0
|
userId: 0
|
||||||
},
|
},
|
||||||
listViewId: undefined,
|
|
||||||
dataListKey: undefined,
|
dataListKey: undefined,
|
||||||
formKey: undefined,
|
formKey: undefined,
|
||||||
fieldDefinitions: [],
|
fieldDefinitions: [],
|
||||||
@@ -735,13 +382,6 @@ export default {
|
|||||||
listView: JSON.stringify(generateListViewFromEdited(vm))
|
listView: JSON.stringify(generateListViewFromEdited(vm))
|
||||||
};
|
};
|
||||||
|
|
||||||
//are we working off a pre-existing listview (save over)?
|
|
||||||
if (vm.listViewId > 0) {
|
|
||||||
lvSave.id = vm.listViewId;
|
|
||||||
lvSave.concurrency = vm.obj.concurrency;
|
|
||||||
url = url + vm.listViewId;
|
|
||||||
}
|
|
||||||
|
|
||||||
//clear any errors vm might be around from previous submit
|
//clear any errors vm might be around from previous submit
|
||||||
window.$gz.form.deleteAllErrorBoxErrors(this);
|
window.$gz.form.deleteAllErrorBoxErrors(this);
|
||||||
try {
|
try {
|
||||||
@@ -758,8 +398,7 @@ export default {
|
|||||||
formSettings.temp.cachedListView = lvSave.listView;
|
formSettings.temp.cachedListView = lvSave.listView;
|
||||||
formSettings.temp.page = 1;
|
formSettings.temp.page = 1;
|
||||||
formSettings.saved.dataTable.unsavedListView = null;
|
formSettings.saved.dataTable.unsavedListView = null;
|
||||||
formSettings.saved.dataTable.listViewId =
|
|
||||||
res.data.id || vm.listViewId; //if res.data.id then a post, if null then a put and vm.listviewId has the id
|
|
||||||
window.$gz.form.setFormSettings(vm.formKey, formSettings);
|
window.$gz.form.setFormSettings(vm.formKey, formSettings);
|
||||||
|
|
||||||
//Logic for detecting if a post or put: if id then it was a post, if no id then it was a put
|
//Logic for detecting if a post or put: if id then it was a post, if no id then it was a put
|
||||||
@@ -803,35 +442,25 @@ export default {
|
|||||||
//do the delete
|
//do the delete
|
||||||
vm.formState.loading = true;
|
vm.formState.loading = true;
|
||||||
//No need to delete a non saved record, just abandon it...
|
//No need to delete a non saved record, just abandon it...
|
||||||
if (vm.listViewId < 1) {
|
|
||||||
//this should not get offered for delete but to be safe and clear just in case:
|
let url = API_BASE_URL + vm.listViewId;
|
||||||
JUST_DELETED = true;
|
|
||||||
|
window.$gz.form.deleteAllErrorBoxErrors(vm);
|
||||||
|
let res = await window.$gz.api.remove(url);
|
||||||
|
|
||||||
|
if (res.error) {
|
||||||
|
vm.formState.serverError = res.error;
|
||||||
|
window.$gz.form.setErrorBoxErrors(vm);
|
||||||
|
} else {
|
||||||
|
//set it to the default list view so the caller doesn't try to load the non-existant deleted view it was just working with
|
||||||
|
let formSettings = window.$gz.form.getFormSettings(vm.formKey);
|
||||||
|
formSettings.temp.cachedListView = null;
|
||||||
|
formSettings.temp.page = 1;
|
||||||
|
formSettings.saved.dataTable.unsavedListView = null;
|
||||||
|
|
||||||
|
window.$gz.form.setFormSettings(vm.formKey, formSettings);
|
||||||
// navigate backwards
|
// navigate backwards
|
||||||
vm.$router.go(-1);
|
vm.$router.go(-1);
|
||||||
} else {
|
|
||||||
let url = API_BASE_URL + vm.listViewId;
|
|
||||||
|
|
||||||
window.$gz.form.deleteAllErrorBoxErrors(vm);
|
|
||||||
let res = await window.$gz.api.remove(url);
|
|
||||||
|
|
||||||
if (res.error) {
|
|
||||||
vm.formState.serverError = res.error;
|
|
||||||
window.$gz.form.setErrorBoxErrors(vm);
|
|
||||||
} else {
|
|
||||||
//workaround to prevent warning about leaving dirty record
|
|
||||||
//For some reason I couldn't just reset isdirty in formstate
|
|
||||||
JUST_DELETED = true;
|
|
||||||
|
|
||||||
//set it to the default list view so the caller doesn't try to load the non-existant deleted view it was just working with
|
|
||||||
let formSettings = window.$gz.form.getFormSettings(vm.formKey);
|
|
||||||
formSettings.temp.cachedListView = null;
|
|
||||||
formSettings.temp.page = 1;
|
|
||||||
formSettings.saved.dataTable.unsavedListView = null;
|
|
||||||
formSettings.saved.dataTable.listViewId = 0;
|
|
||||||
window.$gz.form.setFormSettings(vm.formKey, formSettings);
|
|
||||||
// navigate backwards
|
|
||||||
vm.$router.go(-1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
//Update the form status
|
//Update the form status
|
||||||
@@ -841,51 +470,6 @@ export default {
|
|||||||
});
|
});
|
||||||
window.$gz.errorHandler.handleFormError(error, vm);
|
window.$gz.errorHandler.handleFormError(error, vm);
|
||||||
}
|
}
|
||||||
},
|
|
||||||
async duplicate() {
|
|
||||||
let vm = this;
|
|
||||||
if (this.canDuplicate && vm.listViewId > 0) {
|
|
||||||
this.formState.loading = true;
|
|
||||||
|
|
||||||
let url = API_BASE_URL + "duplicate/" + vm.listViewId;
|
|
||||||
|
|
||||||
//clear any errors vm might be around from previous submit
|
|
||||||
window.$gz.form.deleteAllErrorBoxErrors(this);
|
|
||||||
try {
|
|
||||||
let res = await window.$gz.api.upsert(url);
|
|
||||||
|
|
||||||
vm.formState.loading = false;
|
|
||||||
if (res.error) {
|
|
||||||
vm.formState.serverError = res.error;
|
|
||||||
window.$gz.form.setErrorBoxErrors(vm);
|
|
||||||
} else {
|
|
||||||
//switch to the new record in the formsettings
|
|
||||||
let formSettings = window.$gz.form.getFormSettings(vm.formKey);
|
|
||||||
formSettings.temp.cachedListView = null;
|
|
||||||
formSettings.temp.page = 1;
|
|
||||||
formSettings.saved.dataTable.unsavedListView = null;
|
|
||||||
formSettings.saved.dataTable.listViewId = res.data.id;
|
|
||||||
window.$gz.form.setFormSettings(vm.formKey, formSettings);
|
|
||||||
|
|
||||||
//Set some values that otherwise don't get updated because we're not really navigating fresh
|
|
||||||
vm.obj.name = res.data.name;
|
|
||||||
vm.obj.concurrency = res.data.concurrency;
|
|
||||||
vm.listViewId = res.data.id;
|
|
||||||
//Navigate to new record
|
|
||||||
//NOTE: this doesn't really update the form at all so need to set some th9ings
|
|
||||||
vm.$router.push(
|
|
||||||
vm.$route.fullPath.slice(0, -1) + res.data.id
|
|
||||||
// window.$gz.api.replaceAfterLastSlash(
|
|
||||||
// vm.$route.fullPath,
|
|
||||||
// res.data.id
|
|
||||||
// )
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
vm.formState.loading = false;
|
|
||||||
window.$gz.errorHandler.handleFormError(error, vm);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -903,8 +487,8 @@ function clickHandler(menuItem) {
|
|||||||
case "save":
|
case "save":
|
||||||
m.vm.submit();
|
m.vm.submit();
|
||||||
break;
|
break;
|
||||||
case "delete":
|
case "reset":
|
||||||
m.vm.remove();
|
m.vm.reset();
|
||||||
break;
|
break;
|
||||||
case "duplicate":
|
case "duplicate":
|
||||||
m.vm.duplicate();
|
m.vm.duplicate();
|
||||||
@@ -936,32 +520,22 @@ function generateMenu(vm) {
|
|||||||
menuItems: []
|
menuItems: []
|
||||||
};
|
};
|
||||||
|
|
||||||
if (vm.rights.change) {
|
menuOptions.menuItems.push({
|
||||||
menuOptions.menuItems.push({
|
title: "Save",
|
||||||
title: "Save",
|
icon: "$ayiSave",
|
||||||
icon: "$ayiSave",
|
surface: true,
|
||||||
surface: true,
|
key: FORM_KEY + ":save",
|
||||||
key: FORM_KEY + ":save",
|
vm: vm
|
||||||
vm: vm
|
});
|
||||||
});
|
|
||||||
}
|
menuOptions.menuItems.push({
|
||||||
if (vm.rights.delete) {
|
title: "ResetToDefault",
|
||||||
menuOptions.menuItems.push({
|
icon: "$ayiTrashAlt",
|
||||||
title: "Delete",
|
surface: false,
|
||||||
icon: "$ayiTrashAlt",
|
key: FORM_KEY + ":reset",
|
||||||
surface: false,
|
vm: vm
|
||||||
key: FORM_KEY + ":delete",
|
});
|
||||||
vm: vm
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (vm.rights.change) {
|
|
||||||
menuOptions.menuItems.push({
|
|
||||||
title: "Duplicate",
|
|
||||||
icon: "$ayiClone",
|
|
||||||
key: FORM_KEY + ":duplicate",
|
|
||||||
vm: vm
|
|
||||||
});
|
|
||||||
}
|
|
||||||
window.$gz.eventBus.$emit("menu-change", menuOptions);
|
window.$gz.eventBus.$emit("menu-change", menuOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -984,6 +558,7 @@ async function initForm(vm) {
|
|||||||
//
|
//
|
||||||
async function fetchTranslatedText(vm) {
|
async function fetchTranslatedText(vm) {
|
||||||
await window.$gz.translation.cacheTranslations([
|
await window.$gz.translation.cacheTranslations([
|
||||||
|
"ResetToDefault",
|
||||||
"DataListView",
|
"DataListView",
|
||||||
"GridFilterName",
|
"GridFilterName",
|
||||||
"Include",
|
"Include",
|
||||||
|
|||||||
Reference in New Issue
Block a user