1
0
mirror of https://github.com/XFox111/TabsAsideExtension.git synced 2026-04-22 07:58:01 +03:00
Files
TabsAsideExtension/hooks/useSettings.ts
xfox111 2bd9337e63 Major 3.0 (#118)
Co-authored-by: Maison da Silva <maisonmdsgreen@hotmail.com>
2025-07-30 15:02:26 +03:00

25 lines
764 B
TypeScript

import { settings } from "@/utils/settings";
export default function useSettings<K extends keyof typeof settings>(key: K): SettingsHook<K>
{
const [value, setValue] = useState<SettingsValue<K> | null>(null);
useEffect(() =>
{
settings[key].getValue()
.then(value => setValue(value as SettingsValue<K>));
const unwatch = settings[key].watch(value => setValue(value as SettingsValue<K>));
return () => unwatch();
}, [key]);
return [value, settings[key].setValue] as SettingsHook<K>;
}
export type SettingsValue<K extends keyof typeof settings> =
typeof settings[K] extends { fallback: infer T; } ? T : never;
export type SettingsHook<K extends keyof typeof settings> =
[SettingsValue<K> | null, (newValue: SettingsValue<K>) => Promise<void>];