diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-04-20 17:36:25 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-20 17:36:25 -0500 |
commit | e02c926c8a18f9cf296544b23ad343a59919acff (patch) | |
tree | 95eb2afa59595b74564c36178ad019c67a058e83 /src/lib/hooks | |
parent | f2fe4abdce71fffa36419b8642289b7b86af7377 (diff) | |
download | voidsky-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.ts | 27 |
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]) +} |