Skip to content

Commit

Permalink
feat: Add hide only this field. (#1362)
Browse files Browse the repository at this point in the history
  • Loading branch information
EdwinBetanc0urt authored Nov 12, 2021
1 parent 3afd98a commit fdefb40
Show file tree
Hide file tree
Showing 9 changed files with 133 additions and 37 deletions.
25 changes: 25 additions & 0 deletions src/components/ADempiere/Field/FieldOptions/EmptyOption.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<!--
ADempiere-Vue (Frontend) for ADempiere ERP & CRM Smart Business Solution
Copyright (C) 2017-Present E.R.P. Consultores y Asociados, C.A.
Contributor(s): Edwin Betancourt EdwinBetanc0urt@outlook.com www.erpya.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <https:www.gnu.org/licenses/>.
-->

<script>
import { defineComponent } from '@vue/composition-api'

export default defineComponent({
name: 'EmptyOption'
})
</script>
13 changes: 12 additions & 1 deletion src/components/ADempiere/Field/FieldOptions/fieldOptionsList.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export const zoomInOptionItem = {
enabled: true,
svg: false,
icon: 'el-icon-files',
componentRender: () => import('@/components/ADempiere/Field/FieldOptions/ContextInfo')
componentRender: () => import('@/components/ADempiere/Field/FieldOptions/EmptyOption')
}

/**
Expand Down Expand Up @@ -98,6 +98,17 @@ export const documentStatusOptionItem = {
componentRender: () => import('@/components/ADempiere/Field/FieldOptions/DocumentStatus')
}

/**
* Hide only this field
*/
export const hideThisField = {
name: language.t('fieldOptions.hideThisField'),
enabled: true,
svg: true,
icon: 'eye',
componentRender: () => import('@/components/ADempiere/Field/FieldOptions/EmptyOption')
}

export const optionsListStandad = [
infoOptionItem,
preferenceValueOptionItem,
Expand Down
95 changes: 67 additions & 28 deletions src/components/ADempiere/Field/FieldOptions/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
v-if="visibleForDesktop
&& showPanelFieldOption
&& option.name === currentFieldOption.name"
:field-attributes="fieldAttributes"
:field-attributes="metadata"
:field-value="valueField"
:container-manager="containerManager"
/>
Expand Down Expand Up @@ -111,7 +111,8 @@ import LabelPopoverOption from './LabelPopoverOption.vue'
import {
optionsListStandad, optionsListAdvancedQuery,
documentStatusOptionItem, translateOptionItem,
zoomInOptionItem, calculatorOptionItem
zoomInOptionItem, calculatorOptionItem,
hideThisField
} from '@/components/ADempiere/Field/FieldOptions/fieldOptionsList.js'
import { zoomIn } from '@/utils/ADempiere/coreUtils.js'
import { isLookup, LIST } from '@/utils/ADempiere/references.js'
Expand Down Expand Up @@ -193,6 +194,27 @@ export default defineComponent({
return '110'
})

const fieldsListShowed = computed(() => {
const { parentUuid, containerUuid } = props.metadata
const fieldsList = props.containerManager.getFieldsLit({
parentUuid,
containerUuid
})

return root.$store.getters.getFieldsListNotMandatory({
containerUuid: props.containerUuid,
fieldsList,
showedMethod: props.containerManager.isDisplayedField,
isTable: props.inTable
})
.filter(itemField => {
return itemField.isShowedFromUser &&
itemField.columnName !== props.metadata.columnName
}).map(itemField => {
return itemField.columnName
})
})

function redirect() {
let window = props.metadata.reference.zoomWindows
if (typeValue(window) === 'ARRAY') {
Expand Down Expand Up @@ -220,26 +242,6 @@ export default defineComponent({
})
}

const handleCommand = (command) => {
root.$store.commit('setRecordAccess', false)
if (command.name === root.$t('table.ProcessActivity.zoomIn')) {
redirect()
return
}

if (isMobile.value) {
root.$store.commit('changeShowRigthPanel', true)
} else {
visibleForDesktop.value = true
}

root.$store.commit('changeShowPopoverField', true)
root.$store.dispatch('setOptionField', {
...command,
fieldAttributes: props.metadata
})
}

const isDocuemntStatus = computed(() => {
if (props.metadata.isPanelWindow && !props.metadata.isAdvancedQuery) {
const { parentUuid, containerUuid, columnName } = props.metadata
Expand All @@ -264,6 +266,9 @@ export default defineComponent({
if (field.isNumericField) {
menuOptions.push(calculatorOptionItem)
}
if (!field.required) {
menuOptions.push(hideThisField)
}
// infoOption, operatorOption
if (field.isAdvancedQuery) {
return menuOptions.concat(optionsListAdvancedQuery)
Expand Down Expand Up @@ -336,11 +341,34 @@ export default defineComponent({
const handleClose = (key, keyPath) => {
triggerMenu.value = 'click'
}

/**
* Used by mobile menu
*/
const handleCommand = (command) => {
root.$store.commit('setRecordAccess', false)

handleOptionSelected(command.name)
}

/**
* Used by desktop menu
*/
const handleSelect = (key, keyPath) => {
if (key === root.$t('table.ProcessActivity.zoomIn')) {
handleOptionSelected(key)

triggerMenu.value = 'hover'
}

const handleOptionSelected = (optionName) => {
if (optionName === root.$t('table.ProcessActivity.zoomIn')) {
redirect()
return
}
if (optionName === root.$t('fieldOptions.hideThisField')) {
hideOnlyThisfield()
return
}

if (isMobile.value) {
root.$store.commit('changeShowRigthPanel', true)
Expand All @@ -356,16 +384,29 @@ export default defineComponent({
// }
// }, () => {})
}
root.$store.commit('changeShowPopoverField', true)

const option = optionsList.value.find(option => {
return option.name === key
return option.name === optionName
})

root.$store.commit('changeShowPopoverField', true)
root.$store.dispatch('setOptionField', {
...option,
valueField: valueField.value,
fieldAttributes: props.metadata
})
triggerMenu.value = 'hover'
}

/**
* Hide only this field
*/
const hideOnlyThisfield = () => {
const { parentUuid, containerUuid } = props.metadata
props.containerManager.changeFieldShowedFromUser({
parentUuid,
containerUuid,
fieldsShowed: fieldsListShowed.value
})
}

watch(panelContextMenu, (newValue, oldValue) => {
Expand All @@ -378,13 +419,11 @@ export default defineComponent({
}
})

const fieldAttributes = ref(props.metadata)
return {
// computed
currentFieldOption,
isMobile,
labelStyle,
fieldAttributes,
isDocuemntStatus,
optionsList,
openOptionField,
Expand Down
3 changes: 2 additions & 1 deletion src/lang/ADempiere/en/fieldOptions.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ const fieldOptions = {
allUsers: ', all Users',
thisWindow: ' and this Window',
allWindows: ' and all Windows'
}
},
hideThisField: 'Hide This Field'
}

export default fieldOptions
3 changes: 2 additions & 1 deletion src/lang/ADempiere/es/fieldOptions.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ const fieldOptions = {
allUsers: ', todos los Usuarios',
thisWindow: ' y esta Ventana',
allWindows: ' y todas las Ventanas'
}
},
hideThisField: 'Ocultar Este Campo'
}

export default fieldOptions
7 changes: 5 additions & 2 deletions src/store/modules/ADempiere/browserManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { ROW_ATTRIBUTES, ROW_KEY_ATTRIBUTES } from '@/utils/ADempiere/constants/
import { isEmptyValue, generatePageToken } from '@/utils/ADempiere/valueUtils'
import { getContextAttributes } from '@/utils/ADempiere/contextUtils'
import { showMessage } from '@/utils/ADempiere/notification'
import { isDisplayedField } from '@/utils/ADempiere/dictionary/browser'

const initState = {
browserData: {}
Expand Down Expand Up @@ -76,12 +77,14 @@ const browserControl = {
value,
valueTo
}) {
const fieldsList = getters.getFieldsListFromPanel(containerUuid)
const fieldsList = getters.getStoredFieldsFromBrowser(containerUuid)

const fieldsEmpty = getters.getFieldsListEmptyMandatory({
containerUuid,
fieldsList
fieldsList,
showedMethod: isDisplayedField
})

if (!isEmptyValue(fieldsEmpty)) {
showMessage({
message: language.t('notifications.mandatoryFieldMissing') + fieldsEmpty,
Expand Down
8 changes: 7 additions & 1 deletion src/store/modules/ADempiere/panel/getters.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,16 +93,22 @@ const getters = {
* Obtain empty obligatory fields
* @param {string} containerUuid
* @param {array} fieldsList
* @param {function} showedMethod
* @param {string} formatReturn
*/
getFieldsListEmptyMandatory: (state, getters) => ({
containerUuid,
fieldsList,
showedMethod,
formatReturn = 'name'
}) => {
if (isEmptyValue(fieldsList)) {
fieldsList = getters.getFieldsListFromPanel(containerUuid)
}
// TODO: Remove conditional with complete support
if (!showedMethod) {
showedMethod = fieldIsDisplayed
}

// all mandatory and empty fields value
const fieldsNameEmpty = fieldsList.filter(fieldItem => {
Expand All @@ -114,7 +120,7 @@ const getters = {

if (isEmptyValue(value)) {
const isMandatory = fieldItem.isMandatory || fieldItem.isMandatoryFromLogic
if (fieldIsDisplayed(fieldItem) && isMandatory) {
if (showedMethod(fieldItem) && isMandatory) {
return true
}
}
Expand Down
12 changes: 9 additions & 3 deletions src/views/ADempiere/Browser/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -145,9 +145,11 @@ export default defineComponent({
if (browserMetadata.value.awaitForValuesToQuery) {
return false
}
return root.isEmptyValue(root.$store.getters.getBrowserFieldsEmptyMandatory({
containerUuid: browserUuid
}))
return root.isEmptyValue(
root.$store.getters.getBrowserFieldsEmptyMandatory({
containerUuid: browserUuid
})
)
})

const openedCriteria = computed({
Expand Down Expand Up @@ -251,6 +253,10 @@ export default defineComponent({
containerUuid,
fieldsShowed
})
},

getFieldsLit({ containerUuid }) {
return root.$store.getters.getStoredFieldsFromBrowser(containerUuid)
}
}

Expand Down
4 changes: 4 additions & 0 deletions src/views/ADempiere/Window/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,10 @@ export default defineComponent({
containerUuid,
fieldsShowed
})
},

getFieldsLit({ parentUuid, containerUuid }) {
return root.$store.getters.getStoredFieldsFromTab(parentUuid, containerUuid)
}
}

Expand Down

0 comments on commit fdefb40

Please sign in to comment.