File size: 1,030 Bytes
033ca06 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 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];
}
|