From 5b40bf6d4e960e5aa2656ab92148a8403be3cc27 Mon Sep 17 00:00:00 2001 From: hjlarry Date: Fri, 26 Sep 2025 11:13:20 +0800 Subject: [PATCH] http node data sync --- .../nodes/http/hooks/use-key-value-list.ts | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/web/app/components/workflow/nodes/http/hooks/use-key-value-list.ts b/web/app/components/workflow/nodes/http/hooks/use-key-value-list.ts index a61cad646f..05960666d7 100644 --- a/web/app/components/workflow/nodes/http/hooks/use-key-value-list.ts +++ b/web/app/components/workflow/nodes/http/hooks/use-key-value-list.ts @@ -15,30 +15,48 @@ const strToKeyValueList = (value: string) => { }) } +const normalizeList = (items: KeyValue[]) => { + return items.map(item => ({ + ...item, + id: item.id || uniqueId(UNIQUE_ID_PREFIX), + })) +} + +const stringifyList = (items: KeyValue[], noFilter?: boolean) => { + const source = noFilter ? items : items.filter(item => item.key && item.value) + return source.map(item => `${item.key}:${item.value}`).join('\n') +} + const useKeyValueList = (value: string, onChange: (value: string) => void, noFilter?: boolean) => { - const [list, doSetList] = useState(value ? strToKeyValueList(value) : []) - const setList = (l: KeyValue[]) => { - doSetList(l.map((item) => { - return { - ...item, - id: item.id || uniqueId(UNIQUE_ID_PREFIX), - } - })) - } - useEffect(() => { + const [list, doSetList] = useState(value ? normalizeList(strToKeyValueList(value)) : []) + const setList = useCallback((nextList: KeyValue[]) => { + const normalized = normalizeList(nextList) + doSetList(normalized) + if (noFilter) return - const newValue = list.filter(item => item.key && item.value).map(item => `${item.key}:${item.value}`).join('\n') + + const newValue = stringifyList(normalized, noFilter) if (newValue !== value) onChange(newValue) - }, [list, noFilter]) + }, [noFilter, onChange, value]) + useEffect(() => { + doSetList((prev) => { + const targetItems = value ? strToKeyValueList(value) : [] + const currentValue = stringifyList(prev, noFilter) + const targetValue = stringifyList(targetItems, noFilter) + if (currentValue === targetValue) + return prev + return normalizeList(targetItems) + }) + }, [value, noFilter]) const addItem = useCallback(() => { setList([...list, { id: uniqueId(UNIQUE_ID_PREFIX), key: '', value: '', }]) - }, [list]) + }, [list, setList]) const [isKeyValueEdit, { toggle: toggleIsKeyValueEdit,