diff --git a/src/components/config/VisualConfigEditor.tsx b/src/components/config/VisualConfigEditor.tsx index 34519af..bdb0632 100644 --- a/src/components/config/VisualConfigEditor.tsx +++ b/src/components/config/VisualConfigEditor.tsx @@ -289,16 +289,28 @@ function StringListEditor({ }) { const { t } = useTranslation(); const items = value.length ? value : []; + const [itemIds, setItemIds] = useState(() => items.map(() => makeClientId())); + const renderItemIds = useMemo(() => { + if (itemIds.length === items.length) return itemIds; + if (itemIds.length > items.length) return itemIds.slice(0, items.length); + return [...itemIds, ...Array.from({ length: items.length - itemIds.length }, () => makeClientId())]; + }, [itemIds, items.length]); const updateItem = (index: number, nextValue: string) => onChange(items.map((item, i) => (i === index ? nextValue : item))); - const addItem = () => onChange([...items, '']); - const removeItem = (index: number) => onChange(items.filter((_, i) => i !== index)); + const addItem = () => { + setItemIds([...renderItemIds, makeClientId()]); + onChange([...items, '']); + }; + const removeItem = (index: number) => { + setItemIds(renderItemIds.filter((_, i) => i !== index)); + onChange(items.filter((_, i) => i !== index)); + }; return (
{items.map((item, index) => ( -
+