diff --git a/src/App.native.tsx b/src/App.native.tsx index 0b461a6091..a3b24f4400 100644 --- a/src/App.native.tsx +++ b/src/App.native.tsx @@ -16,7 +16,7 @@ import {useQueryClient} from '@tanstack/react-query' import {Provider as StatsigProvider} from '#/lib/statsig/statsig' import {logger} from '#/logger' -import {MessagesEventBusProvider} from '#/state/messages/events' +import {MessagesProvider} from '#/state/messages' import {init as initPersistedState} from '#/state/persisted' import {Provider as LabelDefsProvider} from '#/state/preferences/label-defs' import {Provider as ModerationOptsProvider} from '#/state/preferences/moderation-opts' @@ -98,7 +98,7 @@ function InnerApp() { - + {/* LabelDefsProvider MUST come before ModerationOptsProvider */} @@ -114,7 +114,7 @@ function InnerApp() { - + diff --git a/src/App.web.tsx b/src/App.web.tsx index aed2d628ef..87909a276b 100644 --- a/src/App.web.tsx +++ b/src/App.web.tsx @@ -9,7 +9,7 @@ import {useLingui} from '@lingui/react' import {Provider as StatsigProvider} from '#/lib/statsig/statsig' import {logger} from '#/logger' -import {MessagesEventBusProvider} from '#/state/messages/events' +import {MessagesProvider} from '#/state/messages' import {init as initPersistedState} from '#/state/persisted' import {Provider as LabelDefsProvider} from '#/state/preferences/label-defs' import {Provider as ModerationOptsProvider} from '#/state/preferences/moderation-opts' @@ -85,7 +85,7 @@ function InnerApp() { key={currentAccount?.did}> - + {/* LabelDefsProvider MUST come before ModerationOptsProvider */} @@ -100,7 +100,7 @@ function InnerApp() { - + diff --git a/src/screens/Messages/Conversation/index.tsx b/src/screens/Messages/Conversation/index.tsx index 2a4f14a5e7..7b78e7e614 100644 --- a/src/screens/Messages/Conversation/index.tsx +++ b/src/screens/Messages/Conversation/index.tsx @@ -5,11 +5,12 @@ import {AppBskyActorDefs} from '@atproto/api' import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' -import {useNavigation} from '@react-navigation/native' +import {useFocusEffect, useNavigation} from '@react-navigation/native' import {NativeStackScreenProps} from '@react-navigation/native-stack' import {CommonNavigatorParams, NavigationProp} from '#/lib/routes/types' import {useGate} from '#/lib/statsig/statsig' +import {useCurrentConvoId} from '#/state/messages/current-convo-id' import {BACK_HITSLOP} from 'lib/constants' import {isWeb} from 'platform/detection' import {ChatProvider, useChat} from 'state/messages' @@ -31,6 +32,16 @@ type Props = NativeStackScreenProps< export function MessagesConversationScreen({route}: Props) { const gate = useGate() const convoId = route.params.conversation + const {setCurrentConvoId} = useCurrentConvoId() + + useFocusEffect( + useCallback(() => { + setCurrentConvoId(convoId) + return () => { + setCurrentConvoId(undefined) + } + }, [convoId, setCurrentConvoId]), + ) if (!gate('dms')) return diff --git a/src/state/messages/current-convo-id.tsx b/src/state/messages/current-convo-id.tsx new file mode 100644 index 0000000000..69133a3715 --- /dev/null +++ b/src/state/messages/current-convo-id.tsx @@ -0,0 +1,38 @@ +import React from 'react' + +const CurrentConvoIdContext = React.createContext<{ + currentConvoId: string | undefined + setCurrentConvoId: (convoId: string | undefined) => void +}>({ + currentConvoId: undefined, + setCurrentConvoId: () => {}, +}) + +export function useCurrentConvoId() { + const ctx = React.useContext(CurrentConvoIdContext) + if (!ctx) { + throw new Error( + 'useCurrentConvoId must be used within a CurrentConvoIdProvider', + ) + } + return ctx +} + +export function CurrentConvoIdProvider({ + children, +}: { + children: React.ReactNode +}) { + const [currentConvoId, setCurrentConvoId] = React.useState< + string | undefined + >() + const ctx = React.useMemo( + () => ({currentConvoId, setCurrentConvoId}), + [currentConvoId], + ) + return ( + + {children} + + ) +} diff --git a/src/state/messages/index.tsx b/src/state/messages/index.tsx index 95ebf0afdd..7145e5d88f 100644 --- a/src/state/messages/index.tsx +++ b/src/state/messages/index.tsx @@ -4,6 +4,8 @@ import {BskyAgent} from '@atproto-labs/api' 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 {useAgent} from '#/state/session' import {useDmServiceUrlStorage} from '#/screens/Messages/Temp/useDmServiceUrlStorage' @@ -66,3 +68,11 @@ export function ChatProvider({ return {children} } + +export function MessagesProvider({children}: {children: React.ReactNode}) { + return ( + + {children} + + ) +}