import React from "react"; function ConfigEditor({config, setConfig}) { const handleValueChange = (key, value) => { setConfig((prev) => ({...prev, [key]: value})); }; const handleAddToList = (key) => { setConfig((prev) => ({ ...prev, [key]: [...prev[key], {}], // Add an empty object })); }; const handleRemoveFromList = (key, index) => { setConfig((prev) => ({ ...prev, [key]: prev[key].filter((_, i) => i !== index), })); }; const handleNestedChange = (key, nestedKey, value) => { setConfig((prev) => ({ ...prev, [key]: {...prev[key], [nestedKey]: value}, })); }; const handleObjectInListChange = (listKey, index, fieldKey, value) => { setConfig((prev) => ({ ...prev, [listKey]: prev[listKey].map((item, i) => i === index ? {...item, [fieldKey]: value} : item ), })); }; const renderField = (key, value) => { if (Array.isArray(value)) { // Render a list editor return (
{value.map((item, index) => (
{typeof item === "object" && item !== null ? ( // Render object fields
{Object.entries(item).map(([fieldKey, fieldValue]: [string, any]) => (
handleObjectInListChange( key, index, fieldKey, e.target.value ) } />
))}
) : ( // Render primitive values in the list
handleValueChange(key, [ ...value.slice(0, index), e.target.value, ...value.slice(index + 1), ]) } />
)}
))}
); } else if (typeof value === "object" && value !== null) { // Render nested objects return (
{Object.entries(value).map(([nestedKey, nestedValue]) => renderField(nestedKey, nestedValue) )}
); } else { // Render a single value editor return (
handleValueChange(key, e.target.value)} />
); } }; return
{Object.entries(config).map(([key, value]) => renderField(key, value))}
; } export default ConfigEditor;