import React, { useEffect, useState } from 'react'; import { head, isEmpty, isNil } from 'ramda'; import { __, sprintf } from '@wordpress/i18n'; import { klona } from 'klona'; // store import { storeSet, useStore } from '../../../../store'; // components import { InputText } from 'primereact/inputtext'; import { Button } from 'primereact/button'; import { Tag } from 'primereact/tag'; import { TabView, TabPanel } from 'primereact/tabview'; import { InputSwitch } from 'primereact/inputswitch'; import ElementSetting from './components/ElementSetting'; import { Dropdown } from 'primereact/dropdown'; const BuilderElementSettings = ({ closeSettings }) => { const elements = useStore().main.formElements(); const activeElement = useStore().main.activeElement(); const [activeElementData, setActiveElementData] = useState({}); const [settings, setSettings] = useState([]); const [validators, setValidators] = useState({}); const textBasedValidatorFields = ['min', 'max', 'minLength', 'maxLength', 'pattern']; const customValidationOptions = [ {value: 'isPIVA', label: 'isPIVA'}, {value: 'isCodiceFiscale', label: 'isCodiceFiscale'}, {value: 'isCAP', label: 'isCAP'}, {value: 'isIBAN', label: 'isIBAN'}, {value: 'isEmail', label: 'isEmail'}, {value: 'isEmailPEC', label: 'isEmailPEC'}, {value: 'isUrl', label: 'isUrl'}, {value: 'isMarcaDaBollo', label: 'isMarcaDaBollo'} ] const onChange = (value, name) => { const newSettings = settings .map(o => { if (o.name === name) { o.value = value; } return o; }); setSettings(newSettings); } const onUpdateOptions = (name, value) => { const newSettings = settings .map(o => { if (o.name === name) { o.value = value; } return o; }); setSettings(newSettings); } const saveSettings = () => { activeElementData.settings = settings; activeElementData.validators = validators; const newElements = elements.map(o => o.id === activeElementData.id ? activeElementData : o); storeSet.main.formElements(newElements); closeSettings(); } const showField = (value, key) => { let newValidators = klona(validators); if (value) { newValidators[key] = ''; } else { newValidators[key] = null; } setValidators(newValidators); } const toggleRequired = (value, key) => { let newValidators = klona(validators); newValidators[key] = value; setValidators(newValidators); } const onChangeValidator = (value, name) => { let newValidators = klona(validators); newValidators[name] = value; setValidators(newValidators); } useEffect(() => { const chosen = head(elements.filter(o => o.id === activeElement)); if (chosen) { setActiveElementData(klona(chosen)); setSettings(klona(chosen.settings)); setValidators(klona(chosen.validators)) } else { setActiveElementData({}); setSettings([]); setValidators({}) } }, [activeElement]); return (activeElementData ?
{settings ? settings.map((o) => ) : null} {validators ? Object.keys(validators).map((k) =>
{k === 'isRequired' ?
toggleRequired(e.value, k)}/>
: null} {textBasedValidatorFields.includes(k) || 'custom' === k ?
showField(e.value, k)}/>
: null} {k === 'custom' && !isNil(validators[k]) ?
onChangeValidator(e.value, k)} options={customValidationOptions} optionLabel="label" optionValue="value" placeholder={__('Scegli', 'gepafin')}/>
: null} {textBasedValidatorFields.includes(k) && !isNil(validators[k]) ?
onChangeValidator(e.target.value, k)}/>
: null}
) : null}
: null ) } export default BuilderElementSettings;