about summary refs log tree commit diff
path: root/src/lib/hooks/useCallOnce.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/hooks/useCallOnce.ts')
-rw-r--r--src/lib/hooks/useCallOnce.ts20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/lib/hooks/useCallOnce.ts b/src/lib/hooks/useCallOnce.ts
new file mode 100644
index 000000000..fa01cf4aa
--- /dev/null
+++ b/src/lib/hooks/useCallOnce.ts
@@ -0,0 +1,20 @@
+import {useCallback} from 'react'
+
+export enum OnceKey {
+  PreferencesThread = 'preferences:thread',
+}
+
+const called: Record<OnceKey, boolean> = {
+  [OnceKey.PreferencesThread]: false,
+}
+
+export function useCallOnce(key: OnceKey) {
+  return useCallback(
+    (cb: () => void) => {
+      if (called[key] === true) return
+      called[key] = true
+      cb()
+    },
+    [key],
+  )
+}