| | |
| | | const emptyRow = (fields) => |
| | | Object.fromEntries(Object.entries(fields || {}).map(([name, f]) => [name, f.default ?? ''])); |
| | | |
| | | const RepeaterField = ({ field, value, onChange }) => { |
| | | const RepeaterField = ({ field, value, onChange, meta }) => { |
| | | const rows = Array.isArray(value) ? value : []; |
| | | const subFields = field.fields || {}; |
| | | const [openIndex, setOpenIndex] = useState(null); |
| | |
| | | const removeRow = (index) => onChange(rows.filter((_, i) => i !== index)); |
| | | |
| | | return ( |
| | | <div className="jvb-repeater-field"> |
| | | <div className="jvb-repeater-field" id={field.name}> |
| | | <p className="jvb-field-label">{field.label}</p> |
| | | |
| | | <Panel> |
| | |
| | | field={{ ...subField, name }} |
| | | value={row[name]} |
| | | onChange={(val) => updateRow(index, name, val)} |
| | | meta={ meta } |
| | | /> |
| | | ))} |
| | | <Button variant="link" isDestructive onClick={() => removeRow(index)}> |