about summary refs log tree commit diff
path: root/src/state/util.ts
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-11-16 08:18:59 -0800
committerGitHub <noreply@github.com>2023-11-16 08:18:59 -0800
commita84b2f9f2f64b1d434c5adbb12af6f7d76ba42ea (patch)
treee430b8032350caa18b8cdd3140a4d94c96dfd6ce /src/state/util.ts
parent0de8d40981fecdeaec92307bafe121ccb2091b45 (diff)
downloadvoidsky-a84b2f9f2f64b1d434c5adbb12af6f7d76ba42ea.tar.zst
Close active elems (react-query refactor) (#1926)
* Refactor closeAny and closeAllActiveElements

* Add close lightbox

* Switch to hooks

* Fixes
Diffstat (limited to 'src/state/util.ts')
-rw-r--r--src/state/util.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/state/util.ts b/src/state/util.ts
new file mode 100644
index 000000000..57f4331b0
--- /dev/null
+++ b/src/state/util.ts
@@ -0,0 +1,45 @@
+import {useCallback} from 'react'
+import {useLightboxControls} from './lightbox'
+import {useModalControls} from './modals'
+import {useComposerControls} from './shell/composer'
+import {useSetDrawerOpen} from './shell/drawer-open'
+
+/**
+ * returns true if something was closed
+ * (used by the android hardware back btn)
+ */
+export function useCloseAnyActiveElement() {
+  const {closeLightbox} = useLightboxControls()
+  const {closeModal} = useModalControls()
+  const {closeComposer} = useComposerControls()
+  const setDrawerOpen = useSetDrawerOpen()
+  return useCallback(() => {
+    if (closeLightbox()) {
+      return true
+    }
+    if (closeModal()) {
+      return true
+    }
+    if (closeComposer()) {
+      return true
+    }
+    setDrawerOpen(false)
+    return false
+  }, [closeLightbox, closeModal, closeComposer, setDrawerOpen])
+}
+
+/**
+ * used to clear out any modals, eg for a navigation
+ */
+export function useCloseAllActiveElements() {
+  const {closeLightbox} = useLightboxControls()
+  const {closeAllModals} = useModalControls()
+  const {closeComposer} = useComposerControls()
+  const setDrawerOpen = useSetDrawerOpen()
+  return useCallback(() => {
+    closeLightbox()
+    closeAllModals()
+    closeComposer()
+    setDrawerOpen(false)
+  }, [closeLightbox, closeAllModals, closeComposer, setDrawerOpen])
+}