Files
deer-flow/frontend/src/core/settings/hooks.ts
2026-01-16 23:03:39 +08:00

47 lines
1.0 KiB
TypeScript

import { useCallback, useState } from "react";
import { useEffect } from "react";
import {
DEFAULT_LOCAL_SETTINGS,
getLocalSettings,
saveLocalSettings,
type LocalSettings,
} from "./local";
export function useLocalSettings(): [
LocalSettings,
(
key: keyof LocalSettings,
value: Partial<LocalSettings[keyof LocalSettings]>,
) => void,
] {
const [mounted, setMounted] = useState(false);
const [state, setState] = useState<LocalSettings>(DEFAULT_LOCAL_SETTINGS);
useEffect(() => {
if (!mounted) {
setState(getLocalSettings());
}
setMounted(true);
}, [mounted]);
const setter = useCallback(
(
key: keyof LocalSettings,
value: Partial<LocalSettings[keyof LocalSettings]>,
) => {
setState((prev) => {
const newState = {
...prev,
[key]: {
...prev[key],
...value,
},
};
saveLocalSettings(newState);
return newState;
});
},
[],
);
return [state, setter];
}