summaryrefslogtreecommitdiff
path: root/frontend/src/utils/hooks/useSetting.ts
blob: f950bf6acf37f5fdd899367bcf84e9c556b469fb (plain)
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
import { useEffect, useState } from 'react';

interface GetSettingArgs<T> {
  key: string;
  default: T;
}

interface SetSettingArgs<T> {
  key: string;
  value: T;
}

export function useSetting<T>(key: string, def: T): [value: T | null, setValue: (value: T) => Promise<void>] {
  const [value, setValue] = useState(def);

  useEffect(() => {
    (async () => {
      const res = (await window.DeckyPluginLoader.callServerMethod('get_setting', {
        key,
        default: def,
      } as GetSettingArgs<T>)) as { result: T };
      setValue(res.result);
    })();
  }, []);

  return [
    value,
    async (val: T) => {
      setValue(val);
      await window.DeckyPluginLoader.callServerMethod('set_setting', {
        key,
        value: val,
      } as SetSettingArgs<T>);
    },
  ];
}