summaryrefslogtreecommitdiff
path: root/frontend/src/utils
diff options
context:
space:
mode:
authorAAGaming <aa@mail.catvibers.me>2022-08-24 23:51:20 -0400
committerAAGaming <aa@mail.catvibers.me>2022-08-24 23:51:20 -0400
commit79db0c779d6942c6bdc6823a5faef57b5307f7b3 (patch)
tree3ba46c46750d7cdfc04f6c14191e0dd1177c170f /frontend/src/utils
parentfe2b6b02831c918c25d88604df94d8d2f360b75a (diff)
downloaddecky-loader-79db0c779d6942c6bdc6823a5faef57b5307f7b3.tar.gz
decky-loader-79db0c779d6942c6bdc6823a5faef57b5307f7b3.zip
Settings API for loader, preview branch select
Diffstat (limited to 'frontend/src/utils')
-rw-r--r--frontend/src/utils/hooks/useSetting.ts39
1 files changed, 39 insertions, 0 deletions
diff --git a/frontend/src/utils/hooks/useSetting.ts b/frontend/src/utils/hooks/useSetting.ts
new file mode 100644
index 00000000..2425ed16
--- /dev/null
+++ b/frontend/src/utils/hooks/useSetting.ts
@@ -0,0 +1,39 @@
+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) => void] {
+ const [value, setValue] = useState(def);
+ const [ready, setReady] = useState<boolean>(false);
+
+ useEffect(() => {
+ (async () => {
+ const res = (await window.DeckyPluginLoader.callServerMethod('get_setting', {
+ key,
+ default: def,
+ } as GetSettingArgs<T>)) as { result: T };
+ setReady(true);
+ setValue(res.result);
+ })();
+ }, []);
+
+ useEffect(() => {
+ if (ready)
+ (async () => {
+ await window.DeckyPluginLoader.callServerMethod('set_setting', {
+ key,
+ value,
+ } as SetSettingArgs<T>);
+ })();
+ }, [value]);
+
+ return [value, setValue];
+}