mirror of
https://github.com/XFox111/TabsAsideExtension.git
synced 2026-04-22 07:58:01 +03:00
2bd9337e63
Co-authored-by: Maison da Silva <maisonmdsgreen@hotmail.com>
25 lines
764 B
TypeScript
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>];
|