diff --git a/flow_screen_components/datatable/force-app/main/default/lwc/datatable/datatable.js b/flow_screen_components/datatable/force-app/main/default/lwc/datatable/datatable.js index a7d975bb6..6d890aa1a 100644 --- a/flow_screen_components/datatable/force-app/main/default/lwc/datatable/datatable.js +++ b/flow_screen_components/datatable/force-app/main/default/lwc/datatable/datatable.js @@ -647,8 +647,44 @@ export default class Datatable extends LightningElement { dateFieldArray = []; datetimeFieldArray = []; @api picklistFieldArray = []; - @api picklistReplaceValues = false; - apex_picklistFieldMap = []; + @api picklistReplaceValues = false; + @api + get apex_picklistFieldMap() { + return this._apex_picklistFieldMap || {}; + } + set apex_picklistFieldMap(value) { + try { + const isValidString = (typeof value === 'string' && value?.trim()?.length > 0); + this._apex_picklistFieldMap = (isValidString) ? this.convertPicklistFormat(JSON.parse(value)) : []; + } catch (e) { + console.log('Error parsing apex_picklistFieldMap JSON:', e); + this._apex_picklistFieldMap = []; + } + } + _apex_picklistFieldMap = {}; + + convertPicklistFormat(picklistMap) { + // Convert from user-friendly format: {"fieldName": [{"label":"...", "value":"..."}]} + // To internal format: {"fieldName": {"label": "value"}} + const converted = {}; + Object.keys(picklistMap).forEach(fieldName => { + const fieldValues = picklistMap[fieldName]; + if (Array.isArray(fieldValues)) { + // Convert array format to object format + converted[fieldName] = {}; + fieldValues?.forEach(item => { + if (item?.label && item?.hasOwnProperty('value')) { + converted[fieldName][item?.label] = item?.value; + } + }); + } else { + // Already in internal format, use as-is + converted[fieldName] = fieldValues; + } + }); + return converted; + } + @api picklistMap = []; @api edits = []; @api isEditAttribSet = false; @@ -1354,11 +1390,13 @@ export default class Datatable extends LightningElement { if (this.picklistReplaceValues) { let noMatch = false; this.picklistFieldArray.forEach(picklist => { - Object.keys(this.apex_picklistFieldMap[picklist]).forEach(map => { - if (map != this.apex_picklistFieldMap[picklist][map]) { - noMatch = true; - } - }); + if (this.picklistFieldMap[picklist]) { + Object.keys(this.picklistFieldMap[picklist]).forEach(map => { + if (map != this.picklistFieldMap[picklist][map]) { + noMatch = true; + } + }); + } }); this.picklistReplaceValues = noMatch; } @@ -1518,10 +1556,10 @@ export default class Datatable extends LightningElement { // Handle replacement of Picklist API Names with Labels if (this.picklistReplaceValues) { picklistFields.forEach(picklist => { - if (record[picklist]) { + if (record[picklist] && this.picklistFieldMap[picklist]) { let picklistLabels = []; - record[picklist].split(';').forEach(picklistValue => { - picklistLabels.push(this.apex_picklistFieldMap[picklist][picklistValue]); + record[picklist].split(';').forEach(picklistValue => { + picklistLabels.push(this.picklistFieldMap[picklist][picklistValue]); }); record[picklist] = picklistLabels.join(';'); } @@ -1713,6 +1751,16 @@ export default class Datatable extends LightningElement { this.typeAttrib = []; this.typeAttrib.type = type; } + + // Convert 'picklist' to 'combobox' if picklist values are available (from apex or wire service) + if (this.typeAttrib.type === 'picklist') { + const hasApexPicklistValues = this.apex_picklistFieldMap && this.apex_picklistFieldMap[fieldName]; + const hasWirePicklistValues = this._picklistData && this._picklistData.picklistFieldValues && this._picklistData.picklistFieldValues[fieldName]; + if (hasApexPicklistValues || hasWirePicklistValues) { + this.typeAttrib.type = 'combobox'; + type = 'combobox'; + } + } } } diff --git a/flow_screen_components/datatable/force-app/main/default/lwc/datatable/datatable.js-meta.xml b/flow_screen_components/datatable/force-app/main/default/lwc/datatable/datatable.js-meta.xml index 864c8bda6..a3f2b4d91 100644 --- a/flow_screen_components/datatable/force-app/main/default/lwc/datatable/datatable.js-meta.xml +++ b/flow_screen_components/datatable/force-app/main/default/lwc/datatable/datatable.js-meta.xml @@ -39,6 +39,7 @@ + diff --git a/flow_screen_components/datatable/force-app/main/default/lwc/ers_datatableCPE/ers_datatableCPE.html b/flow_screen_components/datatable/force-app/main/default/lwc/ers_datatableCPE/ers_datatableCPE.html index 54a6cfc36..8fc48f084 100644 --- a/flow_screen_components/datatable/force-app/main/default/lwc/ers_datatableCPE/ers_datatableCPE.html +++ b/flow_screen_components/datatable/force-app/main/default/lwc/ers_datatableCPE/ers_datatableCPE.html @@ -782,6 +782,22 @@

Configure Columns

automatic-output-variables={automaticOutputVariables}> + + + +