[🐴] Unread messages badge (#3901)

* add badge

* move stringify logic to hook

* add mutation hooks

* optimistic mark convo as read

* don't count muted chats

* Integrate new context

* Integrate mark unread mutation

* Remove unused edit

---------

Co-authored-by: Eric Bailey <git@esb.lol>
This commit is contained in:
Samuel Newman 2024-05-08 03:23:09 +01:00 committed by GitHub
parent 0c41b3188a
commit 4fe5a869c3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 162 additions and 8 deletions

View file

@ -6,6 +6,7 @@ import {useFocusEffect, useIsFocused} from '@react-navigation/native'
import {Convo, ConvoParams, ConvoState} from '#/state/messages/convo'
import {CurrentConvoIdProvider} from '#/state/messages/current-convo-id'
import {MessagesEventBusProvider} from '#/state/messages/events'
import {useMarkAsReadMutation} from '#/state/queries/messages/conversation'
import {useAgent} from '#/state/session'
import {useDmServiceUrlStorage} from '#/screens/Messages/Temp/useDmServiceUrlStorage'
@ -37,15 +38,18 @@ export function ChatProvider({
}),
)
const service = useSyncExternalStore(convo.subscribe, convo.getSnapshot)
const {mutate: markAsRead} = useMarkAsReadMutation()
useFocusEffect(
React.useCallback(() => {
convo.resume()
markAsRead({convoId})
return () => {
convo.background()
markAsRead({convoId})
}
}, [convo]),
}, [convo, convoId, markAsRead]),
)
React.useEffect(() => {
@ -56,6 +60,8 @@ export function ChatProvider({
} else {
convo.background()
}
markAsRead({convoId})
}
}
@ -64,7 +70,7 @@ export function ChatProvider({
return () => {
sub.remove()
}
}, [convo, isScreenFocused])
}, [convoId, convo, isScreenFocused, markAsRead])
return <ChatContext.Provider value={service}>{children}</ChatContext.Provider>
}