From 2cf0d61baec54919f70dc90e3e8b1a6a02f0d680 Mon Sep 17 00:00:00 2001 From: Vitalii Kiiko Date: Tue, 15 Apr 2025 12:27:14 +0200 Subject: [PATCH] - added setting enabling table in CSV report; --- src/assets/scss/components/formBuilder.scss | 4 + .../components/ElementSetting/index.js | 18 ++- .../ElementSettingTableColumns/index.js | 1 + .../ElementSettingTableColumnsForCsv/index.js | 115 ++++++++++++++++++ .../BuilderElementSettings/index.js | 9 +- src/pages/BandoFormsEdit/index.js | 10 +- src/store/initial.js | 1 + src/tempData.js | 4 +- 8 files changed, 151 insertions(+), 11 deletions(-) create mode 100644 src/pages/BandoFormsEdit/components/BuilderElementSettings/components/ElementSettingTableColumnsForCsv/index.js diff --git a/src/assets/scss/components/formBuilder.scss b/src/assets/scss/components/formBuilder.scss index 00db384..23fcb37 100644 --- a/src/assets/scss/components/formBuilder.scss +++ b/src/assets/scss/components/formBuilder.scss @@ -256,6 +256,10 @@ grid-template-columns: 4.5fr 2.4fr 1fr 1.4fr 0.7fr; } + &.tableRowCsv { + grid-template-columns: 3fr 5fr 1fr; + } + > div { display: flex; align-items: center; diff --git a/src/pages/BandoFormsEdit/components/BuilderElementSettings/components/ElementSetting/index.js b/src/pages/BandoFormsEdit/components/BuilderElementSettings/components/ElementSetting/index.js index 78286de..38463ca 100644 --- a/src/pages/BandoFormsEdit/components/BuilderElementSettings/components/ElementSetting/index.js +++ b/src/pages/BandoFormsEdit/components/BuilderElementSettings/components/ElementSetting/index.js @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import { __ } from '@wordpress/i18n'; import { head, is, isEmpty, isNil, uniq } from 'ramda'; @@ -19,6 +19,7 @@ import ElementSettingChips from '../ElementSettingChips'; import ElementSettingCriteriaTableColumns from '../ElementSettingCriteriaTableColumns'; import { mimeTypes } from '../../../../../../configData'; +import ElementSettingTableColumnsForCsv from '../ElementSettingTableColumnsForCsv'; const ElementSetting = ({ setting, changeFn, updateDataFn, bandoStatus }) => { @@ -41,7 +42,8 @@ const ElementSetting = ({ setting, changeFn, updateDataFn, bandoStatus }) => { formula: __('Formula di calcolo automatico', 'gepafin'), isChecklistItem: __('Fa parte di "checklist"?', 'gepafin'), reportEnable: __('Aggiungere nel report CSV?', 'gepafin'), - reportHeader: __('Nome della colonna nel CSV', 'gepafin') + reportHeader: __('Nome della colonna nel CSV', 'gepafin'), + reportColumns: __('', 'gepafin') } const settingDescription = { @@ -120,11 +122,23 @@ const ElementSetting = ({ setting, changeFn, updateDataFn, bandoStatus }) => { return changeFn(e.value, setting.name)}/> + } else if (setting.name === 'reportColumns') { + return } else if (['variable'].includes(setting.name)) { return changeFn(value, setting.name)} value={setting.value}/> + } else if (setting.name === 'table_columns') { + return } else { return { + const [stateFieldData, setStateFieldData] = useState([]); + const canBeEnabled = stateFieldData.filter(o => o.predefined).length > 0; + + const onInputChange = (e, index) => { + const { value } = e.target; + const newData = stateFieldData.map((o, i) => { + if (i === index) { + o.labelCsv = value; + } + return o; + }) + setStateFieldData(newData); + } + + const setChecked = (value, index) => { + let name = ''; + const newData = stateFieldData.map((o, i) => { + if (i === index) { + o.enableCsv = value; + name = o.name; + } + return o; + }); + + setStateFieldData(newData); + } + + const properFields = useCallback((item, i) => { + return <> +
+ onInputChange(e, i)}/> +
+
+ onInputChange(e, i)}/> +
+
+ setChecked(e.value, i)}/> +
+ + }, [canBeEnabled]); + + useEffect(() => { + const settings = storeGet('chosenFieldSettings'); + let newValue = [] + + if (settings) { + const setting = head(settings.filter(o => o.name === 'table_columns')); + const settingReports = head(settings.filter(o => o.name === 'reportColumns')); + const settingData = pathOr([], ['value', 'stateFieldData'], setting); + const settingReportData = pathOr([], ['value'], settingReports); + const canBeEnabled = settingData.filter(o => o.predefined).length > 0; + newValue = settingData.map((o) => { + const existing = pathOr({}, [], head(settingReportData.filter(s => s.name === o.name))); + const existingEnabled = pathOr(false, ['enableCsv'], existing); + return { + ...o, + ...existing, + predefined: o.predefined, + enableCsv: !canBeEnabled ? false : existingEnabled + } + }); + } + setStateFieldData(newValue); + }, []); + + useEffect(() => { + setDataFn(name, stateFieldData); + }, [stateFieldData]); + + return ( + <> + {!canBeEnabled + ?

{__('Almeno una colonna deve essere predefinita! ⚠️')}

: null} +
+ {stateFieldData.length > 0 + ?
+
{__('Colonna', 'gepafin')}
+
{__('Header CSV', 'gepafin')}
+
{__('Abilitato?', 'gepafin')}
+
: null} + {stateFieldData.map((o, i) =>
+ {properFields(o, i)} +
)} +
+ + ) +} + +export default ElementSettingTableColumnsForCsv; \ No newline at end of file diff --git a/src/pages/BandoFormsEdit/components/BuilderElementSettings/index.js b/src/pages/BandoFormsEdit/components/BuilderElementSettings/index.js index b800235..3ddf810 100644 --- a/src/pages/BandoFormsEdit/components/BuilderElementSettings/index.js +++ b/src/pages/BandoFormsEdit/components/BuilderElementSettings/index.js @@ -54,6 +54,7 @@ const BuilderElementSettings = ({ closeSettingsFn, callStatus, context }) => { }); setSettings(newSettings); + storeSet('chosenFieldSettings', newSettings); } const onUpdateOptions = (name, value) => { @@ -67,6 +68,7 @@ const BuilderElementSettings = ({ closeSettingsFn, callStatus, context }) => { }); setSettings(newSettings); + storeSet('chosenFieldSettings', newSettings); } const saveSettings = () => { @@ -131,6 +133,7 @@ const BuilderElementSettings = ({ closeSettingsFn, callStatus, context }) => { if (chosen) { setActiveElementData(klona(chosen)); setSettings(settings); + storeSet('chosenFieldSettings', settings); setValidators(klona(chosen.validators)); setDynamicData(chosen.dynamicData ? chosen.dynamicData : ''); setCriteria(chosen.criteria ? chosen.criteria : []); @@ -150,7 +153,9 @@ const BuilderElementSettings = ({ closeSettingsFn, callStatus, context }) => { {settings ? settings - .filter(o => !['variable', 'formula', 'reportEnable', 'reportHeader'].includes(o.name)) + .filter(o => ![ + 'variable', 'formula', 'reportEnable', 'reportHeader', 'reportColumns' + ].includes(o.name)) .map((o) => { {settings ? settings - .filter(o => ['reportEnable', 'reportHeader'].includes(o.name)) + .filter(o => ['reportEnable', 'reportHeader', 'reportColumns'].includes(o.name)) .map((o) => { const { id, formId } = useParams(); @@ -220,12 +220,12 @@ const BandoFormsEdit = () => { const getElementItemsCallback = (data) => { if (data.status === 'SUCCESS') { - /*storeSet('elementItems', elementItems - .filter(o => o.id !== 22) - .sort((a, b) => a.sortOrder - b.sortOrder));*/ - storeSet('elementItems', data.data + storeSet('elementItems', elementItems .filter(o => o.id !== 22) .sort((a, b) => a.sortOrder - b.sortOrder)); + /*storeSet('elementItems', data.data + .filter(o => o.id !== 22) + .sort((a, b) => a.sortOrder - b.sortOrder));*/ } storeSet('unsetAsyncRequest'); } diff --git a/src/store/initial.js b/src/store/initial.js index 3421093..100d6f6 100644 --- a/src/store/initial.js +++ b/src/store/initial.js @@ -21,6 +21,7 @@ const initialStore = { selectedElement: '', draggingElementId: 0, bandoCriteria: [], + chosenFieldSettings: [], // flow flowData: [], flowForms: [], diff --git a/src/tempData.js b/src/tempData.js index 7b18358..4c4c116 100644 --- a/src/tempData.js +++ b/src/tempData.js @@ -576,8 +576,8 @@ export const elementItems = [ value: false }, { - name: "reportHeader", - value: "" + name: "reportColumns", + value: [] } ], validators: {