I just realized how `mobx` works (never used before lol) and now I feel dumb.
This commit is contained in:
parent
656baa7239
commit
41f3a05515
3 changed files with 9 additions and 25 deletions
|
@ -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)})
|
||||
|
|
|
@ -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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue