diff options
-rw-r--r-- | src/Navigation.tsx | 7 | ||||
-rw-r--r-- | src/lib/hooks/useSetTitle.ts | 8 | ||||
-rw-r--r-- | src/lib/hooks/useUnreadCountLabel.ts | 19 |
3 files changed, 9 insertions, 25 deletions
diff --git a/src/Navigation.tsx b/src/Navigation.tsx index 17bb3c159..09631701f 100644 --- a/src/Navigation.tsx +++ b/src/Navigation.tsx @@ -28,7 +28,6 @@ import {isNative} from 'platform/detection' import {useColorSchemeStyle} from 'lib/hooks/useColorSchemeStyle' import {router} from './routes' import {usePalette} from 'lib/hooks/usePalette' -import {useUnreadCountLabel} from 'lib/hooks/useUnreadCountLabel' import {useStores} from './state' import {HomeScreen} from './view/screens/Home' @@ -296,9 +295,9 @@ const MyProfileTabNavigator = observer(() => { * The FlatNavigator is used by Web to represent the routes * in a single ("flat") stack. */ -function FlatNavigator() { +const FlatNavigator = observer(() => { const pal = usePalette('default') - const unreadCountLabel = useUnreadCountLabel() + const unreadCountLabel = useStores().me.notifications.unreadCountLabel const title = (page: string) => bskyTitle(page, unreadCountLabel) return ( <Flat.Navigator @@ -327,7 +326,7 @@ function FlatNavigator() { {commonScreens(Flat as typeof HomeTab, unreadCountLabel)} </Flat.Navigator> ) -} +}) /** * The RoutesContainer should wrap all components which need access diff --git a/src/lib/hooks/useSetTitle.ts b/src/lib/hooks/useSetTitle.ts index 85ba44d29..c5c7a5ca1 100644 --- a/src/lib/hooks/useSetTitle.ts +++ b/src/lib/hooks/useSetTitle.ts @@ -3,11 +3,15 @@ import {useNavigation} from '@react-navigation/native' import {NavigationProp} from 'lib/routes/types' import {bskyTitle} from 'lib/strings/headings' -import {useUnreadCountLabel} from './useUnreadCountLabel' +import {useStores} from 'state/index' +/** + * Requires consuming component to be wrapped in `observer`: + * https://stackoverflow.com/a/71488009 + */ export function useSetTitle(title?: string) { const navigation = useNavigation<NavigationProp>() - const unreadCountLabel = useUnreadCountLabel() + const {unreadCountLabel} = useStores().me.notifications useEffect(() => { if (title) { navigation.setOptions({title: bskyTitle(title, unreadCountLabel)}) diff --git a/src/lib/hooks/useUnreadCountLabel.ts b/src/lib/hooks/useUnreadCountLabel.ts deleted file mode 100644 index e2bf77885..000000000 --- a/src/lib/hooks/useUnreadCountLabel.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {useEffect, useReducer} from 'react' -import {DeviceEventEmitter} from 'react-native' -import {useStores} from 'state/index' - -export function useUnreadCountLabel() { - // HACK: We don't have anything like Redux selectors, - // and we don't want to use <RootStoreContext.Consumer /> - // to react to the whole store - const [, forceUpdate] = useReducer(x => x + 1, 0) - useEffect(() => { - const subscription = DeviceEventEmitter.addListener( - 'unread-notifications', - forceUpdate, - ) - return () => subscription?.remove() - }, [forceUpdate]) - - return useStores().me.notifications.unreadCountLabel -} |