- saving progress;

This commit is contained in:
Vitalii Kiiko
2025-01-03 14:00:38 +01:00
parent b73174d688
commit 86597e5fe0
3 changed files with 153 additions and 39 deletions

View File

@@ -191,16 +191,70 @@
} }
.formElementSettings__repeater { .formElementSettings__repeater {
display: flex; display: grid;
flex-direction: column; grid-template-columns: 1fr;
gap: 0.5rem; gap: 0.5rem;
} }
.formElementSettings__repeaterItem { .formElementSettings__repeaterItem {
display: grid;
grid-template-columns: 4.5fr 2.4fr 1fr 1.4fr 0.7fr;
gap: 12px;
> div {
display: flex;
align-items: center;
width: 100%;
box-sizing: border-box;
input, select, .p-dropdown {
width: 100%;
box-sizing: border-box;
}
}
} }
.formElementSettings__subRepeater { .formElementSettings__subRepeaterWrapper {
padding: 10px 20px; display: grid;
background-color: #f9f9f9; grid-template-columns: 1fr;
gap: 7px;
}
.formElementSettings__subRepeaterItem {
display: grid;
grid-template-columns: 9.3fr 0.7fr;
gap: 12px;
> div {
display: flex;
align-items: center;
width: 100%;
box-sizing: border-box;
input, select, .p-dropdown {
width: 100%;
box-sizing: border-box;
}
}
}
.formElementSettings__repeaterItemIconBtn {
border: none;
background: transparent;
padding: 0;
font-size: 2rem;
color: var(--table-border-color);
i {
font-size: 2rem;
}
&:hover {
cursor: pointer;
color: var(--menuitem-active-background);
}
&:not([data-active="false"]) {
color: var(--menuitem-active-background);
}
} }

View File

@@ -22,7 +22,7 @@ const ElementSetting = ({ setting, changeFn, updateDataFn, bandoStatus }) => {
options: __('Opzioni', 'gepafin'), options: __('Opzioni', 'gepafin'),
mime: __('Tipo di file', 'gepafin'), mime: __('Tipo di file', 'gepafin'),
text: __('Testo formattato', 'gepafin'), text: __('Testo formattato', 'gepafin'),
table_columns: __('Colonne', 'gepafin'), table_columns: '',
} }
const renderHeader = () => { const renderHeader = () => {

View File

@@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { __ } from '@wordpress/i18n'; import { __, sprintf } from '@wordpress/i18n';
import { wrap } from 'object-path-immutable'; import { wrap } from 'object-path-immutable';
import { pathOr } from 'ramda'; import { pathOr } from 'ramda';
@@ -10,6 +10,7 @@ import { InputSwitch } from 'primereact/inputswitch';
// tools // tools
import uniqid from '../../../../../../helpers/uniqid'; import uniqid from '../../../../../../helpers/uniqid';
import { Dropdown } from 'primereact/dropdown';
const ElementSettingTableColumns = ({ const ElementSettingTableColumns = ({
value, value,
@@ -55,6 +56,16 @@ const ElementSettingTableColumns = ({
setStateFieldData(newData); setStateFieldData(newData);
} }
const onTypeChange = (value, index) => {
const newData = stateFieldData.map((o, i) => {
if (i === index) {
o.fieldtype = value;
}
return o;
})
setStateFieldData(newData);
}
const onSubInputChange = (e, name, index) => { const onSubInputChange = (e, name, index) => {
const { value } = e.target; const { value } = e.target;
const newRowsData = wrap(rowsData).set([index, name], value).value(); const newRowsData = wrap(rowsData).set([index, name], value).value();
@@ -83,21 +94,69 @@ const ElementSettingTableColumns = ({
setStateFieldData(newData); setStateFieldData(newData);
} }
const properField = (item, i) => { const setColFormulaChecked = (index) => {
const newData = stateFieldData.map((o, i) => {
if (i === index) {
o.enableFormula = o.enableFormula !== true;
}
return o;
});
setStateFieldData(newData);
}
const properFields = (item, i) => {
return <> return <>
<InputText value={item.label} onInput={(e) => onInputChange(e, i)}/> <div>
<div className="flex-1"> <InputText
<span>{__('Predefinito?', 'gepafin')}</span> value={item.label}
placeholder={sprintf(__('Colonna %d', 'gepafin'), i)}
onInput={(e) => onInputChange(e, i)}/>
</div>
<div>
<Dropdown
value={item.fieldtype ? item.fieldtype : 'text'}
onChange={(e) => onTypeChange(e.value, i)}
options={[
{ value: 'text', label: __('Testo', 'gepafin') },
{ value: 'number', label: __('Numerico', 'gepafin') }
]}/>
</div>
<div>
<button
className="formElementSettings__repeaterItemIconBtn"
onClick={() => setColFormulaChecked(i)}
data-active={item.enableFormula ? item.enableFormula : false}
type="button">
<i className="pi pi-calculator"></i>
</button>
</div>
<div>
<InputSwitch <InputSwitch
checked={item.predefined} checked={item.predefined}
disabled={bandoStatus === 'PUBLISH'} disabled={bandoStatus === 'PUBLISH'}
onChange={(e) => setChecked(e.value, i)}/> onChange={(e) => setChecked(e.value, i)}/>
</div> </div>
<div>
<Button icon="pi pi-times"
disabled={bandoStatus === 'PUBLISH'}
className="p-button-danger"
onClick={() => removeItem(i)}/>
</div>
</> </>
} }
const properSubField = (item, i, name) => { const properSubField = (item, i, name) => {
return <InputText value={item[name]} onInput={(e) => onSubInputChange(e, name, i)}/> return <>
<div>
<InputText value={item[name]} onInput={(e) => onSubInputChange(e, name, i)}/>
</div>
<div>
<Button icon="pi pi-times"
disabled={bandoStatus === 'PUBLISH'}
className="p-button-danger"
onClick={() => removeRow(i)}/>
</div>
</>
} }
useEffect(() => { useEffect(() => {
@@ -119,39 +178,40 @@ const ElementSettingTableColumns = ({
return ( return (
<> <>
<div className="formElementSettings__repeater"> <div className="formElementSettings__repeater">
{stateFieldData.length > 0
? <div className="formElementSettings__repeaterItem">
<div>{__('Colonne', 'gepafin')}</div>
<div>{__('Tipo', 'gepafin')}</div>
<div>{__('Calcola', 'gepafin')}</div>
<div>{__('Predefinito?', 'gepafin')}</div>
<div></div>
</div> : null}
{stateFieldData.map((o, i) => <div key={i} className="formElementSettings__repeaterItem"> {stateFieldData.map((o, i) => <div key={i} className="formElementSettings__repeaterItem">
<div className="p-inputgroup flex-1"> {properFields(o, i)}
{properField(o, i)}
<Button icon="pi pi-times" disabled={bandoStatus === 'PUBLISH'} className="p-button-danger" onClick={() => removeItem(i)}/>
</div>
</div>)} </div>)}
<Button type="button" disabled={bandoStatus === 'PUBLISH'} outlined label={__('Aggiungi', 'gepafin')} onClick={addNewItem}/> <Button type="button" disabled={bandoStatus === 'PUBLISH'} outlined
label={__('Aggiungi colonna', 'gepafin')} onClick={addNewItem}/>
</div> </div>
{stateFieldData {stateFieldData
.filter(o => o.predefined) .filter(o => o.predefined).length > 0
.map((o, i) => <div key={i} className="formElementSettings__repeaterItem"> ? <div className="formElementSettings__subRepeaterWrapper">
<div className="formElementSettings__repeater formElementSettings__subRepeater"> {stateFieldData
<label>{__('Righe per colonna:', 'gepafin')} <strong>{o.label}</strong></label> .filter(o => o.predefined)
<div className="formElementSettings__repeater"> .map((o, i) =>
{rowsData.map((c, k) => { <div key={i} className="formElementSettings__subRepeaterWrapper">
return <div key={k} className="formElementSettings__repeaterItem"> {rowsData.map((c, k) => {
<div className="p-inputgroup flex-1"> return <div key={k} className="formElementSettings__subRepeaterItem">
{properSubField(c, k, o.name)} {properSubField(c, k, o.name)}
<Button icon="pi pi-times"
disabled={bandoStatus === 'PUBLISH'}
className="p-button-danger"
onClick={() => removeRow(k)}/>
</div> </div>
</div> })}
})} <Button type="button"
<Button type="button" outlined
outlined disabled={bandoStatus === 'PUBLISH'}
disabled={bandoStatus === 'PUBLISH'} label={__('Aggiungi una riga', 'gepafin')}
label={__('Aggiungi una riga', 'gepafin')} onClick={addNewRow}/>
onClick={addNewRow}/> </div>)}
</div> </div>
</div> : null}
</div>)}
</> </>
) )
} }