From 5cfbce06638123f3b9429dda76d73c14ee6c704c Mon Sep 17 00:00:00 2001 From: Fringg Date: Fri, 24 Apr 2026 15:25:53 +0300 Subject: [PATCH] fix: regenerate FAQ editor keys on locale switch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Locale switch now regenerates all stable keys so editors remount fresh - Fixes same-length locale switch (e.g., ru 3 items → en 3 items) reusing wrong editors - Move keyCounter increment out of functional updater for StrictMode purity - Remove void locale — prop is now used for key regeneration --- src/pages/AdminInfoPageEditor.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/pages/AdminInfoPageEditor.tsx b/src/pages/AdminInfoPageEditor.tsx index d92ec5c..3b885de 100644 --- a/src/pages/AdminInfoPageEditor.tsx +++ b/src/pages/AdminInfoPageEditor.tsx @@ -540,7 +540,12 @@ function FaqBuilder({ items, onChange, locale, localeLabel }: FaqBuilderProps) { const keyCounter = useRef(0); const [itemKeys, setItemKeys] = useState(() => items.map(() => keyCounter.current++)); - // Sync key count when items change externally (e.g., locale switch resets items) + // Regenerate all keys on locale switch (items are semantically different) + useEffect(() => { + setItemKeys(items.map(() => keyCounter.current++)); + }, [locale]); // eslint-disable-line react-hooks/exhaustive-deps + + // Sync key count when items added/removed within the same locale useEffect(() => { setItemKeys((prev) => { if (prev.length === items.length) return prev; @@ -580,7 +585,8 @@ function FaqBuilder({ items, onChange, locale, localeLabel }: FaqBuilderProps) { ); const handleAdd = useCallback(() => { - setItemKeys((prev) => [...prev, keyCounter.current++]); + const newKey = keyCounter.current++; + setItemKeys((prev) => [...prev, newKey]); onChange([...items, { q: '', a: '' }]); }, [items, onChange]); @@ -614,8 +620,6 @@ function FaqBuilder({ items, onChange, locale, localeLabel }: FaqBuilderProps) { [items, onChange], ); - void locale; - return (