Add current convo id context, bundle providers
This commit is contained in:
+3
-3
@@ -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() {
|
||||
<QueryProvider currentDid={currentAccount?.did}>
|
||||
<PushNotificationsListener>
|
||||
<StatsigProvider>
|
||||
<MessagesEventBusProvider>
|
||||
<MessagesProvider>
|
||||
{/* LabelDefsProvider MUST come before ModerationOptsProvider */}
|
||||
<LabelDefsProvider>
|
||||
<ModerationOptsProvider>
|
||||
@@ -114,7 +114,7 @@ function InnerApp() {
|
||||
</LoggedOutViewProvider>
|
||||
</ModerationOptsProvider>
|
||||
</LabelDefsProvider>
|
||||
</MessagesEventBusProvider>
|
||||
</MessagesProvider>
|
||||
</StatsigProvider>
|
||||
</PushNotificationsListener>
|
||||
</QueryProvider>
|
||||
|
||||
+3
-3
@@ -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}>
|
||||
<QueryProvider currentDid={currentAccount?.did}>
|
||||
<StatsigProvider>
|
||||
<MessagesEventBusProvider>
|
||||
<MessagesProvider>
|
||||
{/* LabelDefsProvider MUST come before ModerationOptsProvider */}
|
||||
<LabelDefsProvider>
|
||||
<ModerationOptsProvider>
|
||||
@@ -100,7 +100,7 @@ function InnerApp() {
|
||||
</LoggedOutViewProvider>
|
||||
</ModerationOptsProvider>
|
||||
</LabelDefsProvider>
|
||||
</MessagesEventBusProvider>
|
||||
</MessagesProvider>
|
||||
</StatsigProvider>
|
||||
</QueryProvider>
|
||||
</React.Fragment>
|
||||
|
||||
@@ -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 <ClipClopGate />
|
||||
|
||||
|
||||
@@ -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 (
|
||||
<CurrentConvoIdContext.Provider value={ctx}>
|
||||
{children}
|
||||
</CurrentConvoIdContext.Provider>
|
||||
)
|
||||
}
|
||||
@@ -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 <ChatContext.Provider value={service}>{children}</ChatContext.Provider>
|
||||
}
|
||||
|
||||
export function MessagesProvider({children}: {children: React.ReactNode}) {
|
||||
return (
|
||||
<CurrentConvoIdProvider>
|
||||
<MessagesEventBusProvider>{children}</MessagesEventBusProvider>
|
||||
</CurrentConvoIdProvider>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user