From a83f88990bbba890ff5f6570019e1921e7f6331a Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Tue, 10 Dec 2019 16:23:59 +0000 Subject: [PATCH] --- ayanova/src/api/form-custom-template.js | 9 +++- ayanova/src/store.js | 2 +- ayanova/src/views/customize.vue | 58 +++++++++++-------------- 3 files changed, 35 insertions(+), 34 deletions(-) diff --git a/ayanova/src/api/form-custom-template.js b/ayanova/src/api/form-custom-template.js index 9f7c6976..faf5bea2 100644 --- a/ayanova/src/api/form-custom-template.js +++ b/ayanova/src/api/form-custom-template.js @@ -29,7 +29,7 @@ export default { if (res.error) { throw res.error; } - window.$gz.store.commit("addFormCustomTemplateItem", { + window.$gz.store.commit("setFormCustomTemplateItem", { formKey: formKey, concurrencyToken: res.data.concurrencyToken, value: addDataKeyNames(JSON.parse(res.data.template)) @@ -42,6 +42,13 @@ export default { } }); }, + set(formKey, token, template) { + window.$gz.store.commit("setFormCustomTemplateItem", { + formKey: formKey, + concurrencyToken: token, + value: addDataKeyNames(JSON.parse(template)) + }); + }, getFieldTemplateValue(formKey, fieldKey) { if (fieldKey === undefined) { throw "ERROR form-custom-template::getFieldTemplateValue -> fieldKey not specified for template for form [" + diff --git a/ayanova/src/store.js b/ayanova/src/store.js index 5fbeb681..0ff7f984 100644 --- a/ayanova/src/store.js +++ b/ayanova/src/store.js @@ -64,7 +64,7 @@ export default new Vuex.Store({ addLocaleText(state, data) { state.localeText[data.key] = data.value; }, - addFormCustomTemplateItem(state, data) { + setFormCustomTemplateItem(state, data) { state.formCustomTemplate[data.formKey + "_concurrencyToken"] = data.concurrencyToken; state.formCustomTemplate[data.formKey] = data.value; diff --git a/ayanova/src/views/customize.vue b/ayanova/src/views/customize.vue index ecc01127..6574c828 100644 --- a/ayanova/src/views/customize.vue +++ b/ayanova/src/views/customize.vue @@ -163,7 +163,8 @@ export default { formState: { ready: false, errorBoxMessage: null, - dirty: false + dirty: false, + serverError: {} }, rights: window.$gz.role.getRights(window.$gz.type.FormCustom) //,tempTemplate: window.$gz.store.state.formCustomTemplate["widget"] @@ -203,19 +204,26 @@ export default { window.$gz.form.deleteAllErrorBoxErrors(this); //Create template data object here.... + //Note that server expects to see a string array of json template, not actual json var newObj = { formKey: this.formCustomTemplateKey, concurrencyToken: this.concurrencyToken, - template: [] + template: "[]" }; + //temporary array to hold template for later stringification + var temp = []; //Rules: for (var i = 0; i < this.obj.length; i++) { var fldItem = this.obj[i]; if (fldItem.custom == false) { //Process regular stock field - //If it's set to hidden or required then it's template-worthy - if (fldItem.visible == false || fldItem.required == true) { - newObj.template.push({ + //If it's *not* set to stockRequired (i.e. built in field with biz rules that can't be hidden or changed) + // and it's also set to hidden or required then it's template-worthy + if ( + !fldItem.stockRequired && + (fldItem.visible == false || fldItem.required == true) + ) { + temp.push({ fld: fldItem.key, required: fldItem.required, hide: !fldItem.visible @@ -225,7 +233,7 @@ export default { //Process custom field //If it's not visible then don't add it at all if (fldItem.visible == true) { - newObj.template.push({ + temp.push({ fld: fldItem.key, required: fldItem.required, type: fldItem.type @@ -234,43 +242,29 @@ export default { } } - //OK, this is failing because the template portion needs it's quote to be escaped with backslashes, i.e. this works: - /* {"concurrencyToken": 3802346, - "formKey": "user", - "template": "[{\"fld\":\"UserCustom1\",\"hide\":false,\"required\":true,\"type\":\"text\"},{\"fld\":\"UserNotes\",\"required\":true},{\"fld\":\"UserCustom2\",\"hide\":true,\"required\":false,\"type\":\"bool\"}]"} -*/ + //now set the template as a json string + newObj.template = JSON.stringify(temp); - -so what is required is instead of building a true array into newObj.template, instead build it aside then attach it as a string to the newObj.template value -//Maybe there's a json method that will turn the array of objects into an escaped string properly. - - - /* example - {"data":{"id":1,"concurrencyToken":3798757,"formKey":"widget","template":"[ - {\"fld\":\"WidgetNotes\",\"required\":true}, - {\"fld\":\"WidgetCustom1\",\"required\":false,\"type\":\"datetime\"}, - {\"fld\":\"WidgetCustom2\",\"required\":true,\"type\":\"text\"}, - {\"fld\":\"WidgetCustom3\",\"required\":false,\"type\":\"number\"}, - {\"fld\":\"WidgetCustom4\",\"required\":false,\"type\":\"bool\"}, - {\"fld\":\"WidgetCustom5\",\"required\":false,\"type\":\"currency\"}, - {\"fld\":\"WidgetCustom6\",\"required\":false,\"type\":\"date\"}, - {\"fld\":\"WidgetCustom7\",\"required\":false,\"type\":\"time\"}]"}} - - - But what is happening: - {"formKey":"widget","concurrencyToken":3798757,"template":[{"fld":"WidgetName","required":true,"hide":false},{"fld":"WidgetCount","required":true,"hide":false},{"fld":"WidgetStartDate","required":true,"hide":false},{"fld":"WidgetEndDate","required":true,"hide":false},{"fld":"WidgetNotes","required":true,"hide":false},{"fld":"WidgetCustom1","required":false,"type":"datetime"},{"fld":"WidgetCustom2","required":true,"type":"text"},{"fld":"WidgetCustom3","required":false,"type":"number"},{"fld":"WidgetCustom4","required":false,"type":"bool"},{"fld":"WidgetCustom5","required":false,"type":"currency"},{"fld":"WidgetCustom6","required":false,"type":"date"},{"fld":"WidgetCustom7","required":false,"type":"time"}]} -*/ window.$gz.api .upsert(url, newObj) .then(res => { - debugger; vm.formState.loading = false; if (res.error != undefined) { vm.formState.serverError = res.error; window.$gz.form.setErrorBoxErrors(vm); } else { //Handle "put" of an existing record (UPDATE) (there is no POST of a new record for this particular object) + + //Set store values for template and token + window.$gz.formCustomTemplate.set( + vm.formCustomTemplateKey, + res.data.concurrencyToken, + newObj.template + ); + //set our local concurrency token value vm.concurrencyToken = res.data.concurrencyToken; + + //form is now clean window.$gz.form.setFormState({ vm: vm, dirty: false