Files
deer-flow/frontend/src/core/settings/hooks.ts

47 lines
1.0 KiB
TypeScript
Raw Normal View History

2026-01-16 09:55:02 +08:00
import { useCallback, useState } from "react";
import { useEffect } from "react";
import {
DEFAULT_LOCAL_SETTINGS,
getLocalSettings,
2026-01-16 23:03:39 +08:00
saveLocalSettings,
type LocalSettings,
2026-01-16 09:55:02 +08:00
} from "./local";
2026-01-16 23:03:39 +08:00
export function useLocalSettings(): [
LocalSettings,
(
key: keyof LocalSettings,
value: Partial<LocalSettings[keyof LocalSettings]>,
) => void,
] {
2026-01-16 09:55:02 +08:00
const [mounted, setMounted] = useState(false);
2026-01-16 23:03:39 +08:00
const [state, setState] = useState<LocalSettings>(DEFAULT_LOCAL_SETTINGS);
2026-01-16 09:55:02 +08:00
useEffect(() => {
if (!mounted) {
2026-01-16 23:03:39 +08:00
setState(getLocalSettings());
2026-01-16 09:55:02 +08:00
}
setMounted(true);
}, [mounted]);
2026-01-16 23:03:39 +08:00
const setter = useCallback(
(
key: keyof LocalSettings,
value: Partial<LocalSettings[keyof LocalSettings]>,
) => {
setState((prev) => {
const newState = {
...prev,
[key]: {
...prev[key],
...value,
},
};
saveLocalSettings(newState);
return newState;
});
2026-01-16 09:55:02 +08:00
},
[],
);
2026-01-16 23:03:39 +08:00
return [state, setter];
2026-01-16 09:55:02 +08:00
}