1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-11 13:39:48 +08:00

1016 lines
32 KiB
JavaScript

import Vue from 'vue'
import {
getEntity,
getEntitiesList,
getDefaultValueFromServer,
getContextInfoValueFromServer,
getPrivateAccessFromServer,
lockPrivateAccessFromServer,
unlockPrivateAccessFromServer
} from '@/api/ADempiere/data'
import { isEmptyValue } from '@/utils/ADempiere/valueUtils'
import { parseContext } from '@/utils/ADempiere/contextUtils'
import { showMessage } from '@/utils/ADempiere/notification'
import language from '@/lang'
const data = {
state: {
recordSelection: [], // record data and selection
inGetting: [],
contextInfoField: [],
recordPrivateAccess: {}
},
mutations: {
addInGetting(state, payload) {
state.inGetting.push(payload)
},
deleteInGetting(state, payload) {
state.inGetting = state.inGetting.filter(item => item.containerUuid !== payload.containerUuid)
},
addRecordSelection(state, payload) {
state.recordSelection.push(payload)
},
setRecordSelection(state, payload) {
payload.dataStore.record = payload.newDataStore.record
payload.dataStore.selection = payload.newDataStore.selection
payload.dataStore.pageNumber = payload.newDataStore.pageNumber
payload.dataStore.recordCount = payload.newDataStore.recordCount
payload.dataStore.nextPageToken = payload.newDataStore.nextPageToken
payload.dataStore.isLoadedContext = payload.newDataStore.isLoadedContext
payload.dataStore.isLoaded = payload.newDataStore.isLoaded
},
setSelection(state, payload) {
payload.data.selection = payload.newSelection
},
deleteRecordContainer(state, payload) {
state.recordSelection = payload
},
notifyCellTableChange: (state, payload) => {
payload.row[payload.columnName] = payload.value
if (payload.displayColumn !== undefined) {
const key = `DisplayColumn_${payload.columnName}`
payload.row[key] = payload.displayColumn
}
},
notifyCellSelectionChange: (state, payload) => {
if (payload.row !== undefined) {
payload.row[payload.columnName] = payload.value
if (payload.displayColumn !== undefined) {
const key = `DisplayColumn_${payload.columnName}`
payload.row[key] = payload.displayColumn
}
}
},
notifyRowTableChange: (state, payload) => {
Object.assign(payload.row, payload.newRow)
},
setPageNumber(state, payload) {
payload.data.pageNumber = payload.pageNumber
},
setIsloadContext(state, payload) {
payload.data.isLoadedContext = payload.isLoadedContext
},
addNewRow(state, payload) {
payload.data = payload.data.unshift(payload.values)
},
addDisplayColumn(state, payload) {
Vue.set(payload.row, payload.columnName, payload.displayColumn)
},
setContextInfoField(state, payload) {
state.contextInfoField.push(payload)
},
setPrivateAccess(state, payload) {
state.recordPrivateAccess = payload
}
},
actions: {
/**
* Set page number of pagination list
* @param {string} parameters.parentUuid
* @param {string} parameters.containerUuid
* @param {integer} parameters.panelType
* @param {string} parameters.pageNumber
*/
setPageNumber({ commit, state, dispatch, rootGetters }, parameters) {
const {
parentUuid, containerUuid, panelType = 'window', pageNumber,
isAddRecord = false, isShowNotification = true
} = parameters
const data = state.recordSelection.find(recordItem => {
return recordItem.containerUuid === containerUuid
})
commit('setPageNumber', {
data: data,
pageNumber: pageNumber
})
// refresh list table with data from server
if (panelType === 'window') {
dispatch('getDataListTab', {
parentUuid,
containerUuid,
isAddRecord,
isShowNotification
})
} else if (panelType === 'browser') {
if (!rootGetters.isNotReadyForSubmit(containerUuid)) {
dispatch('getBrowserSearch', {
containerUuid,
isClearSelection: true
})
}
}
},
/**
* Insert new row bottom list table, used only from window
* @param {string} parentUuid
* @param {string} containerUuid
* @param {boolean} isPanelValues, define if used values form panel
* @param {boolean} isEdit, define if used values form panel
*/
async addNewRow({ commit, getters, rootGetters, dispatch }, {
parentUuid,
containerUuid,
isPanelValues = false,
isEdit = true,
isNew = true,
fieldList,
row
}) {
const dataStore = getters.getDataRecordsList(containerUuid)
let values = {}
const currentNewRow = dataStore.find(itemData => {
return isEmptyValue(itemData.UUID) && itemData.isNew
})
if (!isEmptyValue(currentNewRow)) {
values = currentNewRow
return values
}
if (isEmptyValue(row)) {
const tabPanel = rootGetters.getPanel(containerUuid)
if (isEmptyValue(fieldList)) {
fieldList = tabPanel.fieldList
}
// add row with default values to create new record
if (isPanelValues) {
// add row with values used from record in panel
values = rootGetters.getColumnNamesAndValues({
containerUuid,
propertyName: 'value',
isObjectReturn: true,
isAddDisplayColumn: true,
fieldList
})
} else {
values = rootGetters.getParsedDefaultValues({
parentUuid,
containerUuid,
fieldList
})
}
values.isNew = isNew
values.isEdit = isEdit
values.isSendServer = false
// get the link column name from the tab
let linkColumnName = tabPanel.linkColumnName
if (isEmptyValue(linkColumnName)) {
// get the link column name from field list
linkColumnName = tabPanel.fieldLinkColumnName
}
let valueLink
// get context value if link column exists and does not exist in row
if (!isEmptyValue(linkColumnName)) {
valueLink = rootGetters.getContext({
parentUuid,
containerUuid,
columnName: linkColumnName
})
if (!isEmptyValue(valueLink)) {
valueLink = parseInt(valueLink, 10)
}
}
// get display column and/or sql value
if (fieldList.length) {
fieldList
// TODO: Evaluate if is field is read only and FieldSelect
.filter(itemField => itemField.componentPath === 'FieldSelect' || String(values[itemField.columnName]) === '[object Object]' || itemField.isSQLValue)
.map(async itemField => {
const { columnName, componentPath } = itemField
let valueGetDisplayColumn = values[columnName]
if (String(values[columnName]) === '[object Object]') {
if (componentPath === 'FieldSelect') {
values[columnName] = ' '
values[`DisplayColumn_${columnName}`] = ' '
} else if (componentPath === 'FieldNumber') {
values[columnName] = 0
}
}
// overwrite value with column link
if (!isEmptyValue(linkColumnName) && linkColumnName === columnName) {
valueGetDisplayColumn = valueLink
if (isEmptyValue(values[columnName])) {
values[columnName] = valueGetDisplayColumn
}
}
// break this itineration if is empty
if (isEmptyValue(valueGetDisplayColumn)) {
return
}
// always the values for these types of fields are integers
if (['TableDirect'].includes(itemField.referenceType)) {
valueGetDisplayColumn = parseInt(valueGetDisplayColumn, 10)
} else {
if (!isNaN(valueGetDisplayColumn)) {
valueGetDisplayColumn = parseInt(valueGetDisplayColumn, 10)
}
}
if (!isEmptyValue(valueGetDisplayColumn) && String(valueGetDisplayColumn) === '[object Object]' && valueGetDisplayColumn.isSQL) {
// get value from Query
valueGetDisplayColumn = await dispatch('getValueBySQL', {
parentUuid,
containerUuid,
query: itemField.defaultValue
})
values[columnName] = valueGetDisplayColumn
}
// break to next itineration if not select field
if (componentPath !== 'FieldSelect') {
return
}
// get label (DisplayColumn) from vuex store
const options = rootGetters.getLookupAll({
parentUuid,
containerUuid,
tableName: itemField.reference.tableName,
query: itemField.reference.query,
directQuery: itemField.reference.directQuery,
value: valueGetDisplayColumn
})
const option = options.find(itemOption => itemOption.key === valueGetDisplayColumn)
// if there is a lookup option, assign the display column with the label
if (option) {
values[`DisplayColumn_${columnName}`] = option.label
// if (isEmptyValue(option.label) && !itemField.isMandatory) {
// values[columnName] = undefined
// }
return
}
if (linkColumnName === columnName) {
// get context value if link column exists and does not exist in row
const nameParent = rootGetters.getContext({
parentUuid,
containerUuid,
columnName: 'Name'
})
if (!isEmptyValue(nameParent)) {
values[`DisplayColumn_${columnName}`] = nameParent
return
}
}
// get value to displayed from server
const { label } = await dispatch('getLookupItemFromServer', {
parentUuid,
containerUuid,
tableName: itemField.reference.tableName,
directQuery: itemField.reference.directQuery,
value: valueGetDisplayColumn
})
values[`DisplayColumn_${columnName}`] = label
})
}
// overwrite value with column link
if (isEmptyValue(values[linkColumnName])) {
values[linkColumnName] = valueLink
}
} else {
values = row
}
commit('addNewRow', {
values,
data: dataStore
})
},
/**
* Add or change display column in table of records
* @param {string} containerUuid
* @param {string} columnName
* @param {string} displayColumn
*/
addDisplayColumn({ commit, getters }, {
containerUuid,
columnName,
displayColumn
}) {
const dataStore = getters.getDataRecordsList(containerUuid)
const rowRecord = dataStore.find(itemData => itemData.isNew)
commit('addDisplayColumn', {
row: rowRecord,
displayColumn,
columnName: `DisplayColumn_${columnName}`
})
},
/**
* Is load context in true when panel is set context
* @param {string} containerUuid
*/
setIsloadContext({ commit, state }, { containerUuid }) {
const dataStore = state.recordSelection.find(recordItem => {
return recordItem.containerUuid === containerUuid
})
if (dataStore) {
commit('setIsloadContext', {
data: dataStore,
isLoadedContext: true
})
}
},
/**
* Set record, selection, page number, token, and record count, with container uuid
* @param {string} parameters.containerUuid
* @param {array} parameters.record
* @param {array} parameters.selection
* @param {integer} parameters.pageNumber
* @param {integer} parameters.recordCount
* @param {string} parameters.nextPageToken
* @param {string} parameters.panelType
*/
setRecordSelection({ state, commit }, parameters) {
const {
parentUuid, containerUuid, panelType = 'window', record = [],
query, whereClause, orderByClause,
selection = [], pageNumber = 1, recordCount = 0, nextPageToken,
originalNextPageToken, isAddRecord = false, isLoaded = true
} = parameters
const dataStore = state.recordSelection.find(recordItem => {
return recordItem.containerUuid === containerUuid
})
const newDataStore = {
parentUuid,
containerUuid,
record,
selection,
pageNumber,
recordCount,
nextPageToken,
originalNextPageToken,
panelType,
isLoaded,
isLoadedContext: false,
query,
whereClause,
orderByClause
}
if (dataStore) {
if (isAddRecord) {
newDataStore.record = dataStore.record.concat(newDataStore.record)
}
commit('setRecordSelection', {
dataStore,
newDataStore
})
} else {
commit('addRecordSelection', newDataStore)
}
},
/**
* Set selection in data list associated in container
* @param {string} containerUuid
* @param {array} selection
*/
setSelection({ commit, getters }, {
containerUuid,
selection = []
}) {
const recordSelection = getters.getDataRecordAndSelection(containerUuid)
commit('setSelection', {
newSelection: selection,
data: recordSelection
})
},
/**
* Delete record result in container
* @param {string} viewUuid // As parentUuid in window
* @param {array} withOut
* @param {boolean} isNew
*/
deleteRecordContainer({ commit, state, dispatch }, {
viewUuid,
withOut = [],
isNew = false
}) {
const setNews = []
const record = state.recordSelection.filter(itemRecord => {
// ignore this uuid
if (withOut.includes(itemRecord.containerUuid)) {
return true
}
// remove window and tabs data
if (itemRecord.parentUuid) {
if (isNew) {
setNews.push(itemRecord.containerUuid)
}
return itemRecord.parentUuid !== viewUuid
}
// remove browser data
return itemRecord.containerUuid !== viewUuid
})
commit('deleteRecordContainer', record)
dispatch('setTabSequenceRecord', [])
if (setNews.length) {
setNews.forEach(uuid => {
dispatch('setRecordSelection', {
parentUuid: viewUuid,
containerUuid: uuid
})
})
}
},
/**
* @param {string} tableName
* @param {string} recordUuid
* @param {number} recordId
*/
getEntity({ commit }, {
tableName,
recordUuid,
recordId
}) {
return new Promise((resolve, reject) => {
getEntity({
tableName,
recordUuid,
recordId
})
.then(responseGetEntity => {
resolve(responseGetEntity.values)
})
.catch(error => {
reject(error)
})
})
},
/**
* Request list to view in table
* TODO: Join with getDataListTab action
* @param {string} parentUuid, uuid from window
* @param {string} containerUuid, uuid from tab
* @param {string} tableName, table name to search record data
* @param {string} query, criteria to search record data
* @param {string} whereClause, criteria to search record data
* @param {string} orderByClause, criteria to search record data
* @param {array} conditionsList, conditions list to criteria
*/
getObjectListFromCriteria({ commit, dispatch, getters, rootGetters }, parameters) {
const {
parentUuid, containerUuid,
tableName, query, whereClause, orderByClause, conditionsList = [],
isShowNotification = true, isParentTab = true, isAddRecord = false
} = parameters
if (isShowNotification) {
showMessage({
title: language.t('notifications.loading'),
message: language.t('notifications.searching'),
type: 'info'
})
}
const dataStore = getters.getDataRecordAndSelection(containerUuid)
let nextPageToken
if (!isEmptyValue(dataStore.nextPageToken)) {
nextPageToken = dataStore.nextPageToken + '-' + dataStore.pageNumber
}
let inEdited = []
if (!isParentTab) {
// TODO: Evaluate peformance to evaluate records to edit
inEdited = dataStore.record.filter(itemRecord => {
return itemRecord.isEdit && !itemRecord.isNew
})
}
commit('addInGetting', {
containerUuid,
tableName,
conditionsList
})
// gets the default value of the fields (including whether it is empty or undefined)
const defaultValues = rootGetters.getParsedDefaultValues({
parentUuid: parentUuid,
containerUuid: containerUuid,
isGetServer: false
})
return getEntitiesList({
tableName,
query,
whereClause,
conditionsList,
orderByClause,
pageToken: nextPageToken
})
.then(dataResponse => {
const recordsList = dataResponse.recordsList.map(itemRecord => {
const values = itemRecord.values
// datatables attributes
values.isNew = false
values.isEdit = false
values.isSelected = false
values.isReadOnlyFromRow = false
if (inEdited.find(itemEdit => itemEdit.UUID === values.UUID)) {
values.isEdit = true
}
// overwrite default values and sets the values obtained from the
// server (empty fields are not brought from the server)
return {
...defaultValues,
...values
}
})
const originalNextPageToken = dataResponse.nextPageToken
let token = originalNextPageToken
if (isEmptyValue(token)) {
token = dataStore.nextPageToken
} else {
token = token.slice(0, -2)
if (token.substr(-1, 1) === '-') {
token = token.slice(0, -1)
}
}
if (isShowNotification) {
let searchMessage = 'searchWithOutRecords'
if (recordsList.length) {
searchMessage = 'succcessSearch'
}
showMessage({
title: language.t('notifications.succesful'),
message: language.t(`notifications.${searchMessage}`),
type: 'success'
})
}
dispatch('setRecordSelection', {
parentUuid,
containerUuid,
record: recordsList,
selection: dataStore.selection,
recordCount: dataResponse.recordCount,
nextPageToken: token,
originalNextPageToken: originalNextPageToken,
isAddRecord,
pageNumber: dataStore.pageNumber,
tableName,
query,
whereClause
})
return recordsList
})
.catch(error => {
// Set default registry values so that the table does not say loading,
// there was already a response from the server
dispatch('setRecordSelection', {
parentUuid,
containerUuid
})
if (isShowNotification) {
showMessage({
title: language.t('notifications.error'),
message: error.message,
type: 'error'
})
}
console.warn(`Error Get Object List ${error.message}. Code: ${error.code}.`)
})
.finally(() => {
commit('deleteInGetting', {
containerUuid,
tableName
})
})
},
/**
* @param {string} parentUuid
* @param {string} containerUuid
* @param {string} query
*/
getValueBySQL({ commit }, {
parentUuid,
containerUuid,
query
}) {
// TODO: Change to promise all
return new Promise(resolve => {
if (query.includes('@')) {
query = parseContext({
parentUuid,
containerUuid,
isSQL: true,
value: query
}).query
}
getDefaultValueFromServer(query)
.then(defaultValueResponse => {
resolve(defaultValueResponse)
})
.catch(error => {
console.warn(`Error getting default value from server. Error code ${error.code}: ${error.message}.`)
})
})
},
/**
* TODO: Add support to tab children
* @param {object} objectParams
* @param {string} objectParams.containerUuid
* @param {objec} objectParams.row, new data to change
* @param {objec} objectParams.isEdit, if the row displayed to edit mode
* @param {objec} objectParams.isNew, if insert data to new row
*/
notifyRowTableChange({ commit, getters, rootGetters }, {
parentUuid,
containerUuid,
isEdit = true,
isNew,
row
}) {
let values = {}
if (row) {
values = row
} else {
values = rootGetters.getColumnNamesAndValues({
parentUuid,
containerUuid,
propertyName: 'value',
isObjectReturn: true,
isAddDisplayColumn: true
})
}
const currentRow = getters.getRowData(containerUuid, values.UUID)
const newRow = {
...values,
// ...objectParams.row,
isEdit
}
commit('notifyRowTableChange', {
isNew,
newRow,
row: currentRow
})
},
notifyCellTableChange({ commit, state, dispatch, rootGetters }, {
parentUuid,
containerUuid,
field,
columnName,
rowKey,
keyColumn,
panelType = 'window',
isSendToServer = true,
isSendCallout = true,
newValue,
displayColumn,
withOutColumnNames = []
}) {
const recordSelection = state.recordSelection.find(recordItem => {
return recordItem.containerUuid === containerUuid
})
const row = recordSelection.record.find(itemRecord => {
return itemRecord[keyColumn] === rowKey
})
// the field has not changed, then the action is broken
if (row[columnName] === newValue) {
return
}
const rowSelection = recordSelection.selection.find(itemRecord => {
return itemRecord[keyColumn] === rowKey
})
commit('notifyCellTableChange', {
row,
value: newValue,
columnName,
displayColumn
})
if (panelType === 'browser') {
commit('notifyCellSelectionChange', {
row: rowSelection,
value: newValue,
columnName,
displayColumn
})
} else if (panelType === 'window') {
// request callouts
if (isSendCallout && !withOutColumnNames.includes(field.columnName) &&
!isEmptyValue(newValue) && !isEmptyValue(field.callout)) {
withOutColumnNames.push(field.columnName)
dispatch('getCallout', {
parentUuid,
containerUuid,
tableName: field.tableName,
columnName: field.columnName,
callout: field.callout,
value: newValue,
withOutColumnNames,
row,
inTable: true
})
}
if (isSendToServer) {
const fieldNotReady = rootGetters.isNotReadyForSubmit(containerUuid, row)
if (!fieldNotReady) {
if (!isEmptyValue(row.UUID)) {
dispatch('updateCurrentEntityFromTable', {
parentUuid,
containerUuid,
row
})
} else {
dispatch('createEntityFromTable', {
parentUuid,
containerUuid,
row
})
}
} else {
const fieldsEmpty = rootGetters.getFieldListEmptyMandatory({
containerUuid,
row
})
showMessage({
message: language.t('notifications.mandatoryFieldMissing') + fieldsEmpty,
type: 'info'
})
}
}
}
},
getContextInfoValueFromServer({ commit, getters }, {
contextInfoUuid,
sqlStatement
}) {
const contextInforField = getters.getContextInfoField(contextInfoUuid, sqlStatement)
if (contextInforField) {
return contextInforField
}
return getContextInfoValueFromServer({
uuid: contextInfoUuid,
query: sqlStatement
})
.then(contextInfoResponse => {
commit('setContextInfoField', {
contextInfoUuid,
sqlStatement,
...contextInfoResponse
})
return contextInfoResponse
})
.catch(error => {
console.warn(`Error ${error.code} getting context info value for field ${error.message}.`)
})
},
getPrivateAccessFromServer({ rootGetters }, {
tableName,
recordId,
userUuid
}) {
if (isEmptyValue(userUuid)) {
userUuid = rootGetters['user/getUserUuid']
}
return getPrivateAccessFromServer({
tableName,
recordId,
userUuid
})
.then(privateAccessResponse => {
if (isEmptyValue(privateAccessResponse.recordId) || privateAccessResponse.recordId !== recordId) {
return {
isLocked: false,
tableName,
recordId,
userUuid
}
}
return {
...privateAccessResponse,
isLocked: true
}
})
.catch(error => {
console.warn(`Error get private access: ${error.message}. Code: ${error.code}.`)
})
},
lockRecord({ rootGetters }, {
tableName,
recordId,
userUuid
}) {
if (isEmptyValue(userUuid)) {
userUuid = rootGetters['user/getUserUuid']
}
return lockPrivateAccessFromServer({
tableName,
recordId,
userUuid
})
.then(privateAccessResponse => {
if (!isEmptyValue(privateAccessResponse.recordId)) {
const recordLocked = {
isPrivateAccess: true,
isLocked: true,
...privateAccessResponse
}
showMessage({
title: language.t('notifications.succesful'),
message: language.t('notifications.recordLocked'),
type: 'success'
})
return recordLocked
}
})
.catch(error => {
showMessage({
title: language.t('notifications.error'),
message: language.t('login.unexpectedError'),
type: 'error'
})
console.warn(`Error lock private access: ${error.message}. Code: ${error.code}.`)
})
},
unlockRecord({ rootGetters }, {
tableName,
recordId,
userUuid
}) {
if (isEmptyValue(userUuid)) {
userUuid = rootGetters['user/getUserUuid']
}
return unlockPrivateAccessFromServer({
tableName,
recordId,
userUuid
})
.then(privateAccessResponse => {
if (!isEmptyValue(privateAccessResponse.recordId)) {
const recordUnlocked = {
isPrivateAccess: true,
isLocked: false,
...privateAccessResponse
}
showMessage({
title: language.t('notifications.succesful'),
message: language.t('notifications.recordUnlocked'),
type: 'success'
})
return recordUnlocked
}
})
.catch(error => {
showMessage({
title: language.t('notifications.error'),
message: language.t('login.unexpectedError'),
type: 'error'
})
console.warn(`Error unlock private access: ${error.message}. Code: ${error.code}.`)
})
}
},
getters: {
getInGetting: (state) => (containerUuid) => {
return state.inGetting.find(item => item.containerUuid === containerUuid)
},
/**
* Used by datatables in tab children, record navigation in window, result in browser
* @param {string} containerUuid
*/
getDataRecordAndSelection: (state, getters) => (containerUuid) => {
return state.recordSelection.find(itemRecord => {
return itemRecord.containerUuid === containerUuid
}) || {
containerUuid,
record: [],
recordCount: 0,
selection: [],
pageNumber: 1,
nextPageToken: undefined,
originalNextPageToken: undefined,
isLoadedContext: false,
isLoaded: false // Boolean(false || getters.getInGetting(containerUuid))
}
},
getDataRecordsList: (state, getters) => (containerUuid) => {
return getters.getDataRecordAndSelection(containerUuid).record
},
getDataRecordCount: (state, getters) => (containerUuid) => {
return getters.getDataRecordAndSelection(containerUuid).recordCount
},
getNextPageToken: (state, getters) => (containerUuid) => {
return getters.getDataRecordAndSelection(containerUuid).nextPageToken
},
getOriginalNextPageToken: (state, getters) => (containerUuid) => {
return getters.getDataRecordAndSelection(containerUuid).originalNextPageToken
},
getDataRecordSelection: (state, getters) => (containerUuid) => {
return getters.getDataRecordAndSelection(containerUuid).selection
},
getPageNumber: (state, getters) => (containerUuid) => {
return getters.getDataRecordAndSelection(containerUuid).pageNumber
},
getRowData: (state, getters) => (containerUuid, recordUuid) => {
return getters.getDataRecordsList(containerUuid).find(itemData => {
if (itemData.UUID === recordUuid) {
return true
}
})
},
/**
* Getter converter selection data record in format
* @param {string} containerUuid
* @param {array} selection
* [{
* selectionId: keyColumn Value,
* selectionValues: [{ columname, value }]
* }]
*/
getSelectionToServer: (state, getters, rootState, rootGetters) => ({ containerUuid, selection = [] }) => {
const selectionToServer = []
const withOut = ['isEdit', 'isSelected', 'isSendToServer']
if (selection.length <= 0) {
selection = getters.getDataRecordSelection(containerUuid)
}
if (selection.length) {
const { fieldList, keyColumn } = rootGetters.getPanel(containerUuid)
// reduce list
const fieldsList = fieldList.filter(itemField => itemField.isIdentifier || itemField.isUpdateable)
selection.forEach(itemRow => {
const records = []
Object.keys(itemRow).forEach(key => {
if (!key.includes('DisplayColumn') && !withOut.includes(key)) {
// evaluate metadata attributes before to convert
const field = fieldsList.find(itemField => itemField.columnName === key)
if (field) {
records.push({
columnName: key,
value: itemRow[key]
})
}
}
})
selectionToServer.push({
selectionId: itemRow[keyColumn],
selectionValues: records
})
})
}
return selectionToServer
},
getContextInfoField: (state) => (contextInfoUuid, sqlStatement) => {
return state.contextInfoField.find(info =>
info.contextInfoUuid === contextInfoUuid &&
info.sqlStatement === sqlStatement
)
},
getRecordPrivateAccess: (state) => (tableName, recordId) => {
if (!isEmptyValue(tableName) && !isEmptyValue(recordId)) {
if (state.recordPrivateAccess.tableName === tableName && state.recordPrivateAccess.recordId === recordId) {
return state.recordPrivateAccess
}
return undefined
}
}
}
}
export default data