From f728e4eb43cffbc7daed44b10c82147ed8cfc173 Mon Sep 17 00:00:00 2001 From: EdwinBetanc0urt Date: Tue, 14 Jan 2020 17:45:25 -0400 Subject: [PATCH] fix: Mandatory logic on first field load. (#223) --- src/components/ADempiere/Field/FieldText.vue | 2 +- .../ADempiere/Panel/filterFields.vue | 4 +- src/store/modules/ADempiere/panel.js | 53 ++++++++++--------- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/components/ADempiere/Field/FieldText.vue b/src/components/ADempiere/Field/FieldText.vue index 237ad4f2..f9dbd583 100644 --- a/src/components/ADempiere/Field/FieldText.vue +++ b/src/components/ADempiere/Field/FieldText.vue @@ -9,7 +9,7 @@ :readonly="Boolean(metadata.readonly)" :disabled="isDisabled" :maxlength="maxLength" - :show-password="metadata.isEncrypted ? true : false" + :show-password="Boolean(metadata.isEncrypted)" @change="preHandleChange" /> diff --git a/src/components/ADempiere/Panel/filterFields.vue b/src/components/ADempiere/Panel/filterFields.vue index 398e801a..cee7eadf 100644 --- a/src/components/ADempiere/Panel/filterFields.vue +++ b/src/components/ADempiere/Panel/filterFields.vue @@ -57,13 +57,13 @@ export default { }) } else if (this.panelType === 'window') { // compare group fields to window - return this.$store.getters.getFieldsListNotMandatory(this.containerUuid) + return this.$store.getters.getFieldsListNotMandatory({ containerUuid: this.containerUuid }) .filter(fieldItem => { return fieldItem.groupAssigned === this.groupField }) } // get fields not mandatory - return this.$store.getters.getFieldsListNotMandatory(this.containerUuid) + return this.$store.getters.getFieldsListNotMandatory({ containerUuid: this.containerUuid }) }, getFieldSelected() { return this.getterFieldListOptional diff --git a/src/store/modules/ADempiere/panel.js b/src/store/modules/ADempiere/panel.js index 601505b7..8d90df1d 100644 --- a/src/store/modules/ADempiere/panel.js +++ b/src/store/modules/ADempiere/panel.js @@ -529,25 +529,15 @@ const panel = { } } - // the field has not changed, then the action is broken - if (newValue === field.value && isEmptyValue(displayColumn)) { - return - } - - commit('changeFieldValue', { - field, - newValue, - valueTo, - displayColumn, - isChangedOldValue - }) - // Change Dependents - const dependents = fieldList.filter(fieldItem => { - return field.dependentFieldsList.includes(fieldItem.columnName) - }) + let dependentsList = [] + if (field.dependentFieldsList.length) { + dependentsList = fieldList.filter(fieldItem => { + return field.dependentFieldsList.includes(fieldItem.columnName) + }) + } // Iterate for change logic - dependents.forEach(dependent => { + dependentsList.forEach(dependent => { // isDisplayed Logic let isDisplayedFromLogic, isMandatoryFromLogic, isReadOnlyFromLogic if (dependent.displayLogic.trim() !== '') { @@ -585,6 +575,19 @@ const panel = { }) }) + // the field has not changed, then the action is broken + if (newValue === field.value && isEmptyValue(displayColumn)) { + return + } + + commit('changeFieldValue', { + field, + newValue, + valueTo, + displayColumn, + isChangedOldValue + }) + // request callouts if (field.panelType === 'window' && isSendCallout) { if (!withOutColumnNames.includes(field.columnName) && !isEmptyValue(newValue) && !isEmptyValue(field.callout)) { @@ -838,9 +841,8 @@ const panel = { var fieldList = getters.getFieldsListFromPanel(containerUuid).filter(fieldItem => { const isMandatory = fieldItem.isMandatory || fieldItem.isMandatoryFromLogic if (isMandatory) { - const isDisplayed = fieldIsDisplayed(fieldItem) if (evaluateShowed) { - return isDisplayed + return fieldIsDisplayed(fieldItem) } return isMandatory } @@ -859,15 +861,18 @@ const panel = { return fieldItem.name }) }, - // all available fields not mandatory to show, used in components panel/filterFields.vue - getFieldsListNotMandatory: (state, getters) => (containerUuid, evaluateShowed = true) => { + /** + * Show all available fields not mandatory to show, used in components panel/filterFields.vue + * @param {string} containerUuid + * @param {boolean} isEvaluateShowed + */ + getFieldsListNotMandatory: (state, getters) => ({ containerUuid, isEvaluateShowed = true }) => { // all optionals (not mandatory) fields return getters.getFieldsListFromPanel(containerUuid).filter(fieldItem => { const isMandatory = fieldItem.isMandatory || fieldItem.isMandatoryFromLogic if (!isMandatory) { - const isDisplayed = fieldIsDisplayed(fieldItem) - if (evaluateShowed) { - return isDisplayed + if (isEvaluateShowed) { + return fieldIsDisplayed(fieldItem) } return !isMandatory }