updated form fields and application logic;

This commit is contained in:
Vitalii Kiiko
2024-09-12 17:17:48 +02:00
parent 19e17ec2d7
commit a8471ba7aa
42 changed files with 1423 additions and 231 deletions

View File

@@ -0,0 +1,28 @@
import React from 'react';
import { __ } from '@wordpress/i18n';
// components
import ElementSettingRepeater from '../ElementSettingRepeater';
import { InputText } from 'primereact/inputtext';
const ElementSetting = ({ setting, changeFn, updateDataFn }) => {
const settingLabels = {
label: __('Label', 'gepafin'),
placeholder: __('Segnaposto', 'gepafin'),
step: __('Precisione decimale', 'gepafin'),
options: __('Opzioni', 'gepafin'),
mime: __('Tipo di file', 'gepafin'),
}
return <div className="formElementSettings__field" key={setting.name}>
<label htmlFor={setting.name}>{settingLabels[setting.name]}</label>
{setting.name === 'options'
? <ElementSettingRepeater value={setting.value} name={setting.name} setDataFn={updateDataFn}/>
: <InputText id={setting.name} aria-describedby={`${setting.name}-help`}
value={setting.value}
onChange={(e) => changeFn(e.target.value, setting.name)}/>}
</div>
}
export default ElementSetting;

View File

@@ -12,7 +12,7 @@ import { Button } from 'primereact/button';
import { Tag } from 'primereact/tag';
import { TabView, TabPanel } from 'primereact/tabview';
import { InputSwitch } from 'primereact/inputswitch';
import ElementSettingRepeater from './components/ElementSettingRepeater';
import ElementSetting from './components/ElementSetting';
const BuilderElementSettings = ({ closeSettings }) => {
const elements = useStore().main.formElements();
@@ -97,15 +97,11 @@ const BuilderElementSettings = ({ closeSettings }) => {
<TabView className="formElementSettings__tabs">
<TabPanel header={__('Presentation', 'gepafin')}>
{settings
? settings.map((o) => <div className="formElementSettings__field" key={o.name}>
<label htmlFor={o.name}>{o.name}</label>
{o.name === 'options'
?
<ElementSettingRepeater value={o.value} name={o.name} setDataFn={onUpdateOptions}/>
: <InputText id={o.name} aria-describedby={`${o.name}-help`}
value={o.value}
onChange={(e) => onChange(e.target.value, o.name)}/>}
</div>)
? settings.map((o) => <ElementSetting
key={o.name}
setting={o}
changeFn={onChange}
updateDataFn={onUpdateOptions}/>)
: null}
</TabPanel>
<TabPanel header={__('Validation', 'gepafin')}>

View File

@@ -11,11 +11,13 @@ import BuilderElementItem from '../BuilderElementItem';
import { Sidebar } from 'primereact/sidebar';
import BuilderElementSettings from '../BuilderElementSettings';
import BuilderDropzone from '../BuilderDropzone';
import BlockingOverlay from '../../../../components/BlockingOverlay';
const FormBuilder = () => {
const elements = useStore().main.formElements();
const elementItems = useStore().main.elementItems();
const activeElement = useStore().main.activeElement();
const isAsyncRequest = useStore().main.isAsyncRequest();
const renderField = useCallback((field, index) => {
return (
@@ -65,6 +67,7 @@ const FormBuilder = () => {
{elementItems.map((item) => renderItem(item))}
</ul>
</div>
<BlockingOverlay shouldDisplay={isAsyncRequest}/>
</div>
</>
)