This commit is contained in:
2020-04-02 20:16:28 +00:00
parent 7780c41117
commit e44362d6ff
7 changed files with 120 additions and 101 deletions

View File

@@ -49,8 +49,23 @@ CURRENT TODOs
@@@@@@@@@@@ ROADMAP STAGE 2:
GRID ERROR:Price first column multiple records with price the same, value should not be used as a key WTF?
BUG is that records generation is putting the value of the column as the ID of the column
This was triggered by editing the datafilter and putting price as the first column, apparently the datagrid assumes column 0 is always the ID column
So actually this may need a more deterministic way to identify the rowid like picklist does
Vue warning:
Duplicate keys detected: '123.45'. This may cause an update error.
trace:
found in
---> <GzDataTable> at src/components/gz-data-table.vue
<Widgets> at src/views/widgets.vue
<VContent>
<VApp>
<App> at src/App.vue
<Root>
todo: de-var-ification
- use const for unchanging values, let everywhere else, no var anywhere and test out before moving on

View File

@@ -64,6 +64,9 @@
<template v-slot:body="{ items }">
<tbody>
<tr v-for="item in items" :key="item.id">
{{
item.id
}}
<template v-if="showSelect">
<td>
<v-checkbox
@@ -613,6 +616,7 @@ function buildRecords(listData, columndefinitions) {
//iterate row and build object representing row data keyed to index
//first column is the default column which sets the id for the row
let o = { id: row[0].v, columns: {} };
debugger;
for (let iColumn = 0; iColumn < row.length; iColumn++) {
let column = row[iColumn];

View File

@@ -92,7 +92,7 @@ const FORM_KEY = "adm-global-select-templates";
const API_BASE_URL = "PickList/Template/";
export default {
beforeRouteLeave(to, from, next) {
//var vm = this;
//let vm = this;
if (this.formState.dirty) {
window.$gz.dialog.confirmLeaveUnsaved().then(dialogResult => {
if (dialogResult == true) {
@@ -109,7 +109,7 @@ export default {
window.$gz.eventBus.$off("menu-click", clickHandler);
},
created() {
var vm = this;
let vm = this;
initForm(vm)
.then(() => {
@@ -165,7 +165,7 @@ export default {
}
//enable / disable save button
var canSave = val.dirty && val.valid && !val.readOnly;
let canSave = val.dirty && val.valid && !val.readOnly;
if (canSave) {
window.$gz.eventBus.$emit("menu-enable-item", FORM_KEY + ":save");
} else {
@@ -193,8 +193,8 @@ export default {
});
},
move: function(direction, index) {
var totalItems = this.workingArray.length;
var newIndex = 0;
let totalItems = this.workingArray.length;
let newIndex = 0;
//calculate new index
switch (direction) {
case "start":
@@ -239,7 +239,7 @@ export default {
this.getDataFromApi();
},
getDataFromApi() {
var vm = this;
let vm = this;
vm.formState.loading = true;
if (!vm.templateId || vm.templateId == 0) {
return;
@@ -257,7 +257,7 @@ export default {
} else {
vm.availableFields = res.data;
vm.fieldKeys = [];
for (var i = 0; i < res.data.length; i++) {
for (let i = 0; i < res.data.length; i++) {
vm.fieldKeys.push(res.data[i].tKey);
}
return window.$gz.translation.fetch(vm.fieldKeys);
@@ -294,21 +294,21 @@ export default {
});
},
submit() {
var vm = this;
var url = API_BASE_URL;
let vm = this;
let url = API_BASE_URL;
//clear any errors vm might be around from previous submit
window.$gz.form.deleteAllErrorBoxErrors(vm);
//Create template data object here....
//Note that server expects to see a string array of json template, not actual json
var newObj = {
let newObj = {
id: vm.templateId,
template: "[]"
};
//temporary array to hold template for later stringification
var temp = [];
for (var i = 0; i < vm.workingArray.length; i++) {
var ti = vm.workingArray[i];
let temp = [];
for (let i = 0; i < vm.workingArray.length; i++) {
let ti = vm.workingArray[i];
if (ti.include == true) {
temp.push({
fld: ti.key
@@ -339,14 +339,14 @@ export default {
});
},
remove() {
var vm = this;
let vm = this;
window.$gz.dialog.confirmGeneric("ResetToDefault").then(dialogResult => {
if (dialogResult == true) {
//do the delete
vm.formState.loading = true;
//No need to delete a new record, just abandon it...
if (vm.templateId && vm.templateId != 0) {
var url = API_BASE_URL + vm.templateId;
let url = API_BASE_URL + vm.templateId;
window.$gz.form.deleteAllErrorBoxErrors(vm);
window.$gz.api
@@ -382,7 +382,7 @@ function clickHandler(menuItem) {
if (!menuItem) {
return;
}
var m = window.$gz.menu.parseMenuItem(menuItem);
let m = window.$gz.menu.parseMenuItem(menuItem);
if (m.owner == FORM_KEY && !m.disabled) {
switch (m.key) {
case "save":
@@ -404,7 +404,7 @@ function clickHandler(menuItem) {
//
//
function generateMenu(vm) {
var menuOptions = {
let menuOptions = {
isMain: false,
icon: null,
title: window.$gz.translation.get("PickListTemplates"),
@@ -461,7 +461,7 @@ function initForm(vm) {
// Ensures UI translated text is available
//
function fetchTranslatedText(vm) {
var tKeysRequired = ["Include", "ResetToDefault"];
let tKeysRequired = ["Include", "ResetToDefault"];
return window.$gz.translation.fetch(tKeysRequired);
}
@@ -487,12 +487,12 @@ function synthesizeWorkingArray(vm) {
if (vm.obj.template == null) {
return;
}
var template = JSON.parse(vm.obj.template);
let template = JSON.parse(vm.obj.template);
//first, insert the templated fields into the working array so they are in current selected order
for (var i = 0; i < template.length; i++) {
var templateItem = template[i];
var afItem = window.$gz._.find(vm.availableFields, [
for (let i = 0; i < template.length; i++) {
let templateItem = template[i];
let afItem = window.$gz._.find(vm.availableFields, [
"fieldKey",
templateItem.fld
]);
@@ -509,8 +509,8 @@ function synthesizeWorkingArray(vm) {
}
//Now iterate all the available fields and insert the ones that were not in the current template
for (var i = 0; i < vm.availableFields.length; i++) {
var afItem = vm.availableFields[i];
for (let i = 0; i < vm.availableFields.length; i++) {
let afItem = vm.availableFields[i];
//skip the active column
if (afItem.isActiveColumn == true) {
continue;

View File

@@ -22,7 +22,7 @@ export default {
});
},
created() {
var vm = this;
let vm = this;
initForm(vm)
.then(() => {
vm.rights = window.$gz.role.getRights(window.$gz.type.UserOptions);

View File

@@ -130,7 +130,7 @@ import ayaNovaVersion from "../api/ayanova-version";
export default {
created() {
var vm = this;
let vm = this;
initForm(vm)
.then(() => {
@@ -182,7 +182,7 @@ export default {
//
//
function generateMenu(vm) {
var menuOptions = {
let menuOptions = {
isMain: false,
icon: "fa-info-circle",
title: window.$gz.translation.get("HelpAboutAyaNova"),
@@ -215,15 +215,15 @@ function clickHandler(menuItem) {
if (!menuItem) {
return;
}
var m = window.$gz.menu.parseMenuItem(menuItem);
let m = window.$gz.menu.parseMenuItem(menuItem);
if (m.owner == "about" && !m.disabled) {
switch (m.key) {
case "copysupportinfo":
//put the support info on the clipboard:
var element = document.getElementById("ayaNovaVersioncard");
var text = element.innerText || element.textContent;
let element = document.getElementById("ayaNovaVersioncard");
let text = element.innerText || element.textContent;
var logText = "";
let logText = "";
window.$gz._.forEach(m.vm.$store.state.logArray, function appendLogItem(
value
) {
@@ -263,7 +263,7 @@ function initForm(vm) {
// Ensures UI translated text is available
//
function fetchTranslatedText(vm) {
var tKeysRequired = [
let tKeysRequired = [
"HelpAboutAyaNova",
"ClientApp",
"Server",

View File

@@ -75,7 +75,7 @@ const FORM_KEY = "customize";
const API_BASE_URL = "FormCustom/";
export default {
beforeRouteLeave(to, from, next) {
//var vm = this;
//let vm = this;
if (this.formState.dirty) {
window.$gz.dialog.confirmLeaveUnsaved().then(dialogResult => {
if (dialogResult == true) {
@@ -92,7 +92,7 @@ export default {
window.$gz.eventBus.$off("menu-click", clickHandler);
},
created() {
var vm = this;
let vm = this;
initForm(vm)
.then(() => {
@@ -158,24 +158,24 @@ export default {
enableSaveButton();
},
submit() {
var vm = this;
var url = API_BASE_URL + vm.formCustomTemplateKey;
let vm = this;
let url = API_BASE_URL + vm.formCustomTemplateKey;
//clear any errors vm might be around from previous submit
window.$gz.form.deleteAllErrorBoxErrors(vm);
//Create template data object here....
//Note that server expects to see a string array of json template, not actual json
var newObj = {
let newObj = {
formKey: vm.formCustomTemplateKey,
concurrencyToken: vm.concurrencyToken,
template: "[]"
};
//temporary array to hold template for later stringification
var temp = [];
let temp = [];
//Rules:
for (var i = 0; i < vm.obj.length; i++) {
var fldItem = vm.obj[i];
for (let i = 0; i < vm.obj.length; i++) {
let fldItem = vm.obj[i];
if (fldItem.custom == false) {
//Process regular stock field
//If it's *not* set to stockRequired (i.e. built in field with biz rules that can't be hidden or changed)
@@ -252,7 +252,7 @@ function clickHandler(menuItem) {
if (!menuItem) {
return;
}
var m = window.$gz.menu.parseMenuItem(menuItem);
let m = window.$gz.menu.parseMenuItem(menuItem);
if (m.owner == FORM_KEY && !m.disabled) {
switch (m.key) {
case "save":
@@ -272,7 +272,7 @@ function clickHandler(menuItem) {
//
//
function generateMenu(vm) {
var menuOptions = {
let menuOptions = {
isMain: false,
icon: "fa-sliders-h",
title: window.$gz.translation.get("Customize"),
@@ -330,7 +330,7 @@ function initForm(vm) {
// Ensures UI translated text is available
//
function fetchTranslatedText(vm) {
var tKeysRequired = [
let tKeysRequired = [
"FormFieldEntryRequired",
"FormFieldVisible",
"UiFieldDataType",
@@ -380,7 +380,7 @@ function ensureTemplateIsInStore(vm) {
function initDataObject(vm) {
//Get all the fields *available* to this form (all the fields for the object defined in AyaFormFieldDefinitions.cs as SERVER)
//Note: this is not the actual customization data, just the list of fields that could be customized (or not if required mandatory)
var url = "FormFieldsDefinitions/" + vm.$route.params.formCustomTemplateKey;
let url = "FormFieldsDefinitions/" + vm.$route.params.formCustomTemplateKey;
return window.$gz.api.get(url).then(res => {
if (res.error) {
throw res.error;
@@ -391,12 +391,12 @@ function initDataObject(vm) {
//Iterate ObjectFields
//create a new object based on the f.a.f. item and any existing template values for that item
for (var i = 0; i < res.data.length; i++) {
for (let i = 0; i < res.data.length; i++) {
//get the formAvailableField record into an object to save typing
var faf = res.data[i];
let faf = res.data[i];
//get the customTemplate record for this field if it exists
var templateItem = window.$gz.formCustomTemplate.getFieldTemplateValue(
let templateItem = window.$gz.formCustomTemplate.getFieldTemplateValue(
vm.formCustomTemplateKey,
faf.fieldKey
);
@@ -410,7 +410,7 @@ function initDataObject(vm) {
};
}
var objItem = {
let objItem = {
key: faf.fieldKey,
title: window.$gz.translation.get(faf.tKey),
stockRequired: !faf.hideable,

View File

@@ -427,14 +427,14 @@
const FORM_KEY = "ay-data-list-view";
const API_BASE_URL = "DataListView/";
var JUST_DELETED = false;
let JUST_DELETED = false;
export default {
//unsaved changes are actually valid for this form so no need to warn
beforeRouteLeave(to, from, next) {
var vm = this;
let vm = this;
if (this.formState.dirty && !JUST_DELETED) {
//Put in unsaved listview
var formSettings = window.$gz.form.getFormSettings(vm.formKey);
let formSettings = window.$gz.form.getFormSettings(vm.formKey);
formSettings.saved.dataTable.unsavedListView = JSON.stringify(
generateListViewFromEdited(vm)
);
@@ -450,7 +450,7 @@ export default {
window.$gz.eventBus.$off("menu-click", clickHandler);
},
created() {
var vm = this;
let vm = this;
//set route values in data object so init form can handle
vm.dataListKey = this.$route.params.dataListKey;
@@ -522,7 +522,7 @@ export default {
}
//enable / disable save button
var canSave = val.dirty && val.valid && !val.readOnly;
let canSave = val.dirty && val.valid && !val.readOnly;
if (canSave) {
window.$gz.eventBus.$emit("menu-enable-item", FORM_KEY + ":save");
} else {
@@ -530,7 +530,7 @@ export default {
}
//enable / disable duplicate button
var canDuplicate = !val.dirty && val.valid && !val.readOnly;
let canDuplicate = !val.dirty && val.valid && !val.readOnly;
if (canDuplicate) {
window.$gz.eventBus.$emit(
"menu-enable-item",
@@ -588,8 +588,8 @@ export default {
});
},
move: function(direction, index) {
var totalItems = this.obj.editView.length;
var newIndex = 0;
let totalItems = this.obj.editView.length;
let newIndex = 0;
//calculate new index
switch (direction) {
case "start":
@@ -624,8 +624,8 @@ export default {
});
},
addFilterCondition(item) {
var filterItem = { op: null, value: null, display: null };
var filterItemSet = false;
let filterItem = { op: null, value: null, display: null };
let filterItemSet = false;
//DATE relative token?
if (item.uiFieldDataType === 1) {
//some kind of relative date token?
@@ -711,7 +711,7 @@ export default {
},
submit() {
if (this.canSave) {
var vm = this;
let vm = this;
//check that "unsaved filter" is not the name
//if it is, set it empty and force user to set a name
if (vm.obj.name == vm.t("FilterUnsaved")) {
@@ -720,9 +720,9 @@ export default {
}
vm.formState.loading = true;
var url = API_BASE_URL;
let url = API_BASE_URL;
var lvSave = {
let lvSave = {
id: 0,
userId: vm.obj.userId || 1,
name: vm.obj.name,
@@ -750,7 +750,7 @@ export default {
} else {
//successfully updated regardless if POST or PUT so update the local cache
//Update the formSettings now that it's saved
var formSettings = window.$gz.form.getFormSettings(vm.formKey);
let formSettings = window.$gz.form.getFormSettings(vm.formKey);
formSettings.temp.cachedListView = lvSave.listView;
formSettings.saved.dataTable.unsavedListView = null;
formSettings.saved.dataTable.listViewId =
@@ -793,7 +793,7 @@ export default {
}
},
remove() {
var vm = this;
let vm = this;
window.$gz.dialog.confirmDelete().then(dialogResult => {
if (dialogResult == true) {
//do the delete
@@ -805,7 +805,7 @@ export default {
// navigate backwards
vm.$router.go(-1);
} else {
var url = API_BASE_URL + vm.listViewId;
let url = API_BASE_URL + vm.listViewId;
window.$gz.form.deleteAllErrorBoxErrors(vm);
window.$gz.api
@@ -820,7 +820,7 @@ export default {
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
var formSettings = window.$gz.form.getFormSettings(
let formSettings = window.$gz.form.getFormSettings(
vm.formKey
);
formSettings.temp.cachedListView = null;
@@ -845,11 +845,11 @@ export default {
});
},
duplicate() {
var vm = this;
let vm = this;
if (this.canDuplicate && vm.listViewId > 0) {
this.formState.loading = true;
var url = API_BASE_URL + "duplicate/" + vm.listViewId;
let url = API_BASE_URL + "duplicate/" + vm.listViewId;
//clear any errors vm might be around from previous submit
window.$gz.form.deleteAllErrorBoxErrors(this);
@@ -863,7 +863,7 @@ export default {
window.$gz.form.setErrorBoxErrors(vm);
} else {
//switch to the new record in the formsettings
var formSettings = window.$gz.form.getFormSettings(vm.formKey);
let formSettings = window.$gz.form.getFormSettings(vm.formKey);
formSettings.temp.cachedListView = null;
formSettings.saved.dataTable.unsavedListView = null;
formSettings.saved.dataTable.listViewId = res.data.id;
@@ -900,7 +900,7 @@ function clickHandler(menuItem) {
if (!menuItem) {
return;
}
var m = window.$gz.menu.parseMenuItem(menuItem);
let m = window.$gz.menu.parseMenuItem(menuItem);
if (m.owner == FORM_KEY && !m.disabled) {
switch (m.key) {
case "save":
@@ -925,7 +925,7 @@ function clickHandler(menuItem) {
//
//
function generateMenu(vm) {
var menuOptions = {
let menuOptions = {
isMain: false,
icon: "fa-filter",
title: window.$gz.translation.get("DataListView"),
@@ -993,7 +993,7 @@ function initForm(vm) {
// Ensures UI translated text is available
//
function fetchTranslatedText(vm) {
var tKeysRequired = [
let tKeysRequired = [
"DataListView",
"GridFilterName",
"Include",
@@ -1210,9 +1210,9 @@ function populateFieldDefinitions(vm) {
// Ensures column names are present in translation table
//
function fetchTranslatedFieldNames(vm) {
var columnKeys = [];
for (var i = 1; i < vm.fieldDefinitions.length; i++) {
var cm = vm.fieldDefinitions[i];
let columnKeys = [];
for (let i = 1; i < vm.fieldDefinitions.length; i++) {
let cm = vm.fieldDefinitions[i];
columnKeys.push(cm.tKey);
}
//Now fetch all the keys and await the response before returning
@@ -1238,7 +1238,7 @@ function setEffectiveListView(vm) {
throw "ay-data-list::setEffectiveListView - listViewId is not set";
}
var formSettings = window.$gz.form.getFormSettings(vm.formKey);
let formSettings = window.$gz.form.getFormSettings(vm.formKey);
if (vm.listViewId == -1) {
if (formSettings.saved.dataTable.unsavedListView != null) {
@@ -1287,14 +1287,14 @@ function initDataObject(vm) {
throw "ay-data-list::initDataObject - fieldDefinitions are not set";
}
var ret = [];
let ret = [];
//Pass 1, iterate the listview first
for (var i = 0; i < vm.effectiveListView.length; i++) {
var lvItem = vm.effectiveListView[i];
for (let i = 0; i < vm.effectiveListView.length; i++) {
let lvItem = vm.effectiveListView[i];
var fld = window.$gz._.find(vm.fieldDefinitions, ["fieldKey", lvItem.fld]);
var o = {
let fld = window.$gz._.find(vm.fieldDefinitions, ["fieldKey", lvItem.fld]);
let o = {
key: fld.fieldKey,
title: vm.t(fld.tKey),
include: true,
@@ -1320,8 +1320,8 @@ function initDataObject(vm) {
}
//Add display text for filter item (same as in addFilterCondition)
for (var j = 0; j < o.filter.items.length; j++) {
var fi = o.filter.items[j];
for (let j = 0; j < o.filter.items.length; j++) {
let fi = o.filter.items[j];
fi.display = getDisplayForFilter(
vm,
o.uiFieldDataType,
@@ -1336,13 +1336,13 @@ function initDataObject(vm) {
//Pass 2, remaining fields not already dealt with
//debugger;
for (var i = 0; i < vm.fieldDefinitions.length; i++) {
var fld = vm.fieldDefinitions[i];
for (let i = 0; i < vm.fieldDefinitions.length; i++) {
let fld = vm.fieldDefinitions[i];
//is this field already in ret array?
if (null == window.$gz._.find(ret, ["key", fld.fieldKey])) {
//nope, so add it
var o = {
let o = {
key: fld.fieldKey,
title: vm.t(fld.tKey),
include: false,
@@ -1387,9 +1387,9 @@ function initDataObject(vm) {
//
function fetchEnums(vm) {
//build an array of all enums then execute method
var enumKeys = [];
for (var i = 0; i < vm.fieldDefinitions.length; i++) {
var fld = vm.fieldDefinitions[i];
let enumKeys = [];
for (let i = 0; i < vm.fieldDefinitions.length; i++) {
let fld = vm.fieldDefinitions[i];
if (fld.uiFieldDataType == 10) {
enumKeys.push(fld.enumType);
}
@@ -1440,10 +1440,10 @@ function getDisplayForFilter(
//DATE RELATIVE TOKEN FILTER
if (uiFieldDataType === 1 && filterValue[0] == "*") {
var valueDisplay = window.$gz._.find(vm.selectLists.dateFilterTokens, {
let valueDisplay = window.$gz._.find(vm.selectLists.dateFilterTokens, {
id: filterValue
}).name;
var opDisplay = filterOperator;
let opDisplay = filterOperator;
return filterOperator + " " + valueDisplay;
}
@@ -1456,7 +1456,7 @@ function getDisplayForFilter(
return "";
}
var valueDisplay = "selected value";
let valueDisplay = "selected value";
switch (uiFieldDataType) {
case 1: //date translate
valueDisplay = window.$gz.locale.utcDateToShortDateAndTimeLocalized(
@@ -1471,7 +1471,7 @@ function getDisplayForFilter(
break;
case 6: //BOOL translate
//debugger;
var tKey = filterValue ? "True" : "False";
let tKey = filterValue ? "True" : "False";
valueDisplay = vm.t(tKey);
break;
case 10: //ENUM translate
@@ -1483,7 +1483,7 @@ function getDisplayForFilter(
}
//Operator
var opDisplay = window.$gz._.find(vm.selectLists.stringFilterOperators, {
let opDisplay = window.$gz._.find(vm.selectLists.stringFilterOperators, {
id: filterOperator
}).name;
@@ -1502,14 +1502,14 @@ function generateListViewFromEdited(vm) {
return;
}
var ret = [];
let ret = [];
for (var i = 0; i < vm.obj.editView.length; i++) {
var ev = vm.obj.editView[i];
for (let i = 0; i < vm.obj.editView.length; i++) {
let ev = vm.obj.editView[i];
if (!ev.include) {
continue;
}
var o = {
let o = {
fld: ev.key
};
if (ev.sort != null) {
@@ -1517,15 +1517,15 @@ function generateListViewFromEdited(vm) {
}
if (ev.filter && ev.filter.items && ev.filter.items.length > 0) {
// debugger;
var f = {
let f = {
items: []
};
if (ev.filter.any) {
f.any = true;
}
for (var j = 0; j < ev.filter.items.length; j++) {
var evfi = ev.filter.items[j];
var thisFilterItem = {
for (let j = 0; j < ev.filter.items.length; j++) {
let evfi = ev.filter.items[j];
let thisFilterItem = {
op: evfi.op,
value: evfi.value
};