diff --git a/client/ui/frontend/src/contexts/SettingsContext.tsx b/client/ui/frontend/src/contexts/SettingsContext.tsx index 6d96f636a..1ab0d3ef7 100644 --- a/client/ui/frontend/src/contexts/SettingsContext.tsx +++ b/client/ui/frontend/src/contexts/SettingsContext.tsx @@ -64,6 +64,11 @@ const useSettingsState = () => { const [loaded, setLoaded] = useState(null); const [guiVersion, setGuiVersion] = useState("—"); const saveTimer = useRef | null>(null); + const loadedRef = useRef(null); + + useEffect(() => { + loadedRef.current = loaded; + }, [loaded]); useEffect(() => { if (!profileLoaded || !activeProfile) return; @@ -130,15 +135,18 @@ const useSettingsState = () => { const setField = useCallback( (k: K, v: Config[K]) => { - setLoaded((cur) => { - if (!cur) return cur; - const next = { ...cur.data, [k]: v }; - if (saveTimer.current) clearTimeout(saveTimer.current); - saveTimer.current = setTimeout(() => { - save(cur.profileName, next).catch(logSaveError); - }, SAVE_DEBOUNCE_MS); - return { profileName: cur.profileName, data: next }; - }); + const cur = loadedRef.current; + if (!cur) return; + const next: LoadedConfig = { + profileName: cur.profileName, + data: { ...cur.data, [k]: v }, + }; + loadedRef.current = next; + setLoaded(next); + if (saveTimer.current) clearTimeout(saveTimer.current); + saveTimer.current = setTimeout(() => { + save(next.profileName, next.data).catch(logSaveError); + }, SAVE_DEBOUNCE_MS); }, [save], );