about summary refs log tree commit diff
path: root/src/lib/hooks
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-04-20 17:36:25 -0500
committerGitHub <noreply@github.com>2023-04-20 17:36:25 -0500
commite02c926c8a18f9cf296544b23ad343a59919acff (patch)
tree95eb2afa59595b74564c36178ad019c67a058e83 /src/lib/hooks
parentf2fe4abdce71fffa36419b8642289b7b86af7377 (diff)
downloadvoidsky-e02c926c8a18f9cf296544b23ad343a59919acff.tar.zst
Improvements to notifications screen [APP-520] (#501)
* Refresh or sync notifications when the tab is navigated to

* Fix to bad textnode render

* Speed up initial session load

* Fix lint

* Restore updateSessionState() on session resumption
Diffstat (limited to 'src/lib/hooks')
-rw-r--r--src/lib/hooks/useTabFocusEffect.ts27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/lib/hooks/useTabFocusEffect.ts b/src/lib/hooks/useTabFocusEffect.ts
new file mode 100644
index 000000000..e446084c5
--- /dev/null
+++ b/src/lib/hooks/useTabFocusEffect.ts
@@ -0,0 +1,27 @@
+import {useEffect, useState} from 'react'
+import {useNavigation} from '@react-navigation/native'
+import {getTabState, TabState} from 'lib/routes/helpers'
+
+export function useTabFocusEffect(
+  tabName: string,
+  cb: (isInside: boolean) => void,
+) {
+  const [isInside, setIsInside] = useState(false)
+
+  // get root navigator state
+  let nav = useNavigation()
+  while (nav.getParent()) {
+    nav = nav.getParent()
+  }
+  const state = nav.getState()
+
+  useEffect(() => {
+    // check if inside
+    let v = getTabState(state, tabName) !== TabState.Outside
+    if (v !== isInside) {
+      // fire
+      setIsInside(v)
+      cb(v)
+    }
+  }, [state, isInside, setIsInside, tabName, cb])
+}