diff --git a/ayanova/src/views/ay-customize.vue b/ayanova/src/views/ay-customize.vue index ef21826d..16e47d14 100644 --- a/ayanova/src/views/ay-customize.vue +++ b/ayanova/src/views/ay-customize.vue @@ -12,13 +12,13 @@ READONLY: {{ formState.readOnly }}
--> - FAF + @@ -94,49 +94,6 @@ const FORM_KEY = "customize"; const API_BASE_URL = "FormCustom/"; export default { - beforeRouteEnter(to, from, next) { - var ltKeysRequired = [ - "FormFieldEntryRequired", - "FormFieldVisible", - "UiFieldDataType", - "UiFieldDataTypesCurrency", - "UiFieldDataTypesDateOnly", - "UiFieldDataTypesDateTime", - "UiFieldDataTypesNumber", - "UiFieldDataTypesText", - "UiFieldDataTypesTimeOnly", - "UiFieldDataTypesTrueFalse" - ]; - - window.$gz.locale.fetch(ltKeysRequired).then(next); - }, - beforeCreate() { - // var vm = this; - // initForm(vm) - // .then(() => { - // vm.formState.ready = true; - // }) - // .catch(err => { - // vm.formState.ready = true; - // window.$gz.errorHandler.handleFormError(err); - // }); - // // initForm(vm) - // // .then(() => { - // // // path: "/ay-data-list-view/:listViewId/:dataListKey", - // // vm.formState.ready = true; - // // window.$gz.eventBus.$on("menu-click", clickHandler); - // // //NOTE: this would normally be in getDataFromAPI but this form doesn't really need that function so doing it here - // // //modify the menu as necessary - // // generateMenu(vm, false); //default is never read only and passing in this vm - // // //init disable save button so it can be enabled only on edit to show dirty form - // // window.$gz.eventBus.$emit("menu-disable-item", FORM_KEY + ":save"); - // // vm.formState.loading = false; - // // }) - // // .catch(err => { - // // vm.formState.ready = true; - // // window.$gz.errorHandler.handleFormError(err); - // // }); - }, beforeRouteLeave(to, from, next) { //var vm = this; if (this.formState.dirty) { @@ -163,7 +120,7 @@ export default { window.$gz.eventBus.$on("menu-click", clickHandler); //NOTE: this would normally be in getDataFromAPI but this form doesn't really need that function so doing it here //modify the menu as necessary - generateMenu(this, false); //default is never read only and passing in this vm + generateMenu(vm, false); //default is never read only and passing in this vm //init disable save button so it can be enabled only on edit to show dirty form window.$gz.eventBus.$emit("menu-disable-item", FORM_KEY + ":save"); }) @@ -178,16 +135,7 @@ export default { concurrencyToken: undefined, formCustomTemplateKey: this.$route.params.formCustomTemplateKey, pickLists: { - uiFieldDataTypes: [ - { name: this.lt("UiFieldDataTypesDateTime"), id: 1 }, - { name: this.lt("UiFieldDataTypesDateOnly"), id: 2 }, - { name: this.lt("UiFieldDataTypesTimeOnly"), id: 3 }, - { name: this.lt("UiFieldDataTypesText"), id: 4 }, - { name: this.lt("UiFieldDataTypesTrueFalse"), id: 6 }, - { name: this.lt("UiFieldDataTypesInteger"), id: 5 }, - { name: this.lt("UiFieldDataTypesDecimal"), id: 7 }, - { name: this.lt("UiFieldDataTypesCurrency"), id: 8 } - ] + uiFieldDataTypes: [] }, formState: { ready: false, @@ -369,13 +317,6 @@ function generateMenu(vm) { window.$gz.eventBus.$emit("menu-change", menuOptions); } -// function initForm(vm) { -// return ensureTemplateIsInStore(vm).then(() => { -// //Must use return here -// return initDataObject(vm); -// }); -// } - ///////////////////////////////// // // @@ -383,6 +324,8 @@ function initForm(vm) { return new Promise(function(resolve, reject) { (async function() { try { + await fetchUILocalizedText(vm); + await populatePickLists(vm); await ensureTemplateIsInStore(vm); await initDataObject(vm); } catch (err) { @@ -393,6 +336,46 @@ function initForm(vm) { }); } +////////////////////////////////////////////////////////// +// +// Ensures UI localized text is available +// +function fetchUILocalizedText(vm) { + var ltKeysRequired = [ + "FormFieldEntryRequired", + "FormFieldVisible", + "UiFieldDataType", + "UiFieldDataTypesCurrency", + "UiFieldDataTypesDateOnly", + "UiFieldDataTypesDateTime", + "UiFieldDataTypesDecimal", + "UiFieldDataTypesInteger", + "UiFieldDataTypesText", + "UiFieldDataTypesTimeOnly", + "UiFieldDataTypesTrueFalse" + ]; + + return window.$gz.locale.fetch(ltKeysRequired); +} + +///////////////////////////////// +// +// +function populatePickLists(vm) { + vm.pickLists.uiFieldDataTypes.push( + ...[ + { name: vm.lt("UiFieldDataTypesDateTime"), id: 1 }, + { name: vm.lt("UiFieldDataTypesDateOnly"), id: 2 }, + { name: vm.lt("UiFieldDataTypesTimeOnly"), id: 3 }, + { name: vm.lt("UiFieldDataTypesText"), id: 4 }, + { name: vm.lt("UiFieldDataTypesTrueFalse"), id: 6 }, + { name: vm.lt("UiFieldDataTypesInteger"), id: 5 }, + { name: vm.lt("UiFieldDataTypesDecimal"), id: 7 }, + { name: vm.lt("UiFieldDataTypesCurrency"), id: 8 } + ] + ); +} + //////////////////// // function ensureTemplateIsInStore(vm) { @@ -430,14 +413,13 @@ function initDataObject(vm) { ); //handle non-existent template item (expected) - if (templateItem === undefined || templateItem === null) { + if (templateItem == null) { templateItem = { required: false, hide: faf.isCustomField ? true : false, //hide if custom because it's not set to display if it's not present, all others are stock fields - type: "text" + type: 4 //text }; } - debugger; var objItem = { key: faf.fieldKey, @@ -456,82 +438,4 @@ function initDataObject(vm) { } }); } - -/* - OLD (not used, drop) -"ObjectCustomFieldCustomGrid": "Custom Fields", - "ObjectCustomFieldDisplayName": "Display as", - "ObjectCustomFieldFieldName": "Field Name", - "ObjectCustomFieldFieldType": "Field data type", - "ObjectCustomFieldObjectName": "Object name", - "ObjectCustomFieldVisible": "Visible", - -CURRENT (used) - "UiFieldDataTypesCurrency": "Money", - "UiFieldDataTypesDateOnly": "Date", - "UiFieldDataTypesDateTime": "Date & Time", - "UiFieldDataTypesNumber": "Number", - "UiFieldDataTypesText": "Text", - "UiFieldDataTypesTimeOnly": "Time", - "UiFieldDataTypesTrueFalse": "True/False", - - NEW (used) - "FormFieldEntryRequired" = "Required" - "FormFieldVisible" = "Visible" (copy from ObjectCustomFieldVisible) - "UiFieldDataType" = "Data type" (copy from ObjectCustomFieldDataType) - - -UI: -(Note: localization is in another area, no need to worry about display names here even for custom fields) - -List of fields in a grid: -LTDisplay [FieldKey] , Visible, Required, DataType (if custom) - -(Some items will have their visible or required read only because they are stock and can't be changed see ObjectFields.cs in server) -(A required field by default can't be hidden, setting to required automatically toggles hidden=false here but reverse doesn't do the opposite) - - TODO: - Fetch - form field custom data - Possibly turn it into a easily iterated collection in the Data key - Iterate and display in series of boxes (small factor UI) - OnSave sends to server and roundtrips back to refresh local cached copy - -Example form available fields -{"data":[ -{"key":"WidgetName","propertyName":"Name","hideable":false,"sharedLTKey":false,"custom":false}, -{"key":"WidgetSerial","propertyName":"Serial","hideable":true,"sharedLTKey":false,"custom":false}, -{"key":"WidgetDollarAmount","propertyName":"DollarAmount","hideable":true,"sharedLTKey":false,"custom":false}, -{"key":"WidgetCount","propertyName":"Count","hideable":true,"sharedLTKey":false,"custom":false}, -{"key":"WidgetUserType","propertyName":"UserType","hideable":true,"sharedLTKey":false,"custom":false}, -{"key":"WidgetStartDate","propertyName":"StartDate","hideable":false,"sharedLTKey":false,"custom":false}, -{"key":"WidgetEndDate","propertyName":"EndDate","hideable":false,"sharedLTKey":false,"custom":false}, -{"key":"WidgetNotes","propertyName":"Notes","hideable":true,"sharedLTKey":false,"custom":false}, -{"key":"Active","propertyName":"Active","hideable":true,"sharedLTKey":true,"custom":false}, -{"key":"Tags","propertyName":"Tags","hideable":true,"sharedLTKey":true,"custom":false}, -{"key":"WidgetCustom1","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom2","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom3","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom4","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom5","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom6","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom7","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom8","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom9","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom10","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom11","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom12","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom13","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom14","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom15","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}, -{"key":"WidgetCustom16","propertyName":null,"hideable":true,"sharedLTKey":false,"custom":true}],"readOnly":true} - -Example form custom template - "template":"[ - {\"fld\":\"WidgetNotes\",\"required\":\"true\"},{\"fld\":\"WidgetCustom1\",\"hide\":\"false\",\"required\":\"false\",\"type\":\"datetime\"}, - {\"fld\":\"WidgetCustom2\",\"hide\":\"false\",\"required\":\"true\",\"type\":\"text\"},{\"fld\":\"WidgetCustom3\",\"hide\":\"false\",\"required\":\"false\",\"type\":\"number\"}, - {\"fld\":\"WidgetCustom4\",\"hide\":\"false\",\"required\":\"false\",\"type\":\"bool\"},{\"fld\":\"WidgetCustom5\",\"hide\":\"false\",\"required\":\"false\",\"type\":\"currency\"}, - {\"fld\":\"WidgetCustom6\",\"hide\":\"false\",\"required\":\"false\",\"type\":\"date\"},{\"fld\":\"WidgetCustom7\",\"hide\":\"false\",\"required\":\"false\",\"type\":\"time\"}]" - Note that it mixes in regular stock form fields that the end user has set to required as well as the custom ones, we identify custom by the presence of the "type" property - -*/