about summary refs log tree commit diff
path: root/src/state
diff options
context:
space:
mode:
Diffstat (limited to 'src/state')
-rw-r--r--src/state/messages/current-convo-id.tsx38
-rw-r--r--src/state/messages/events/index.tsx18
-rw-r--r--src/state/messages/index.tsx10
3 files changed, 65 insertions, 1 deletions
diff --git a/src/state/messages/current-convo-id.tsx b/src/state/messages/current-convo-id.tsx
new file mode 100644
index 000000000..69133a371
--- /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 (
+    <CurrentConvoIdContext.Provider value={ctx}>
+      {children}
+    </CurrentConvoIdContext.Provider>
+  )
+}
diff --git a/src/state/messages/events/index.tsx b/src/state/messages/events/index.tsx
index f37d0abea..2de6286e7 100644
--- a/src/state/messages/events/index.tsx
+++ b/src/state/messages/events/index.tsx
@@ -2,6 +2,7 @@ import React from 'react'
 import {AppState} from 'react-native'
 import {BskyAgent} from '@atproto-labs/api'
 
+import {useGate} from '#/lib/statsig/statsig'
 import {isWeb} from '#/platform/detection'
 import {MessagesEventBus} from '#/state/messages/events/agent'
 import {MessagesEventBusState} from '#/state/messages/events/types'
@@ -20,7 +21,7 @@ export function useMessagesEventBus() {
   return ctx
 }
 
-export function MessagesEventBusProvider({
+export function Temp_MessagesEventBusProvider({
   children,
 }: {
   children: React.ReactNode
@@ -65,3 +66,18 @@ export function MessagesEventBusProvider({
     </MessagesEventBusContext.Provider>
   )
 }
+
+export function MessagesEventBusProvider({
+  children,
+}: {
+  children: React.ReactNode
+}) {
+  const gate = useGate()
+  const {serviceUrl} = useDmServiceUrlStorage()
+  if (gate('dms') && serviceUrl) {
+    return (
+      <Temp_MessagesEventBusProvider>{children}</Temp_MessagesEventBusProvider>
+    )
+  }
+  return children
+}
diff --git a/src/state/messages/index.tsx b/src/state/messages/index.tsx
index 95ebf0afd..7145e5d88 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 <ChatContext.Provider value={service}>{children}</ChatContext.Provider>
 }
+
+export function MessagesProvider({children}: {children: React.ReactNode}) {
+  return (
+    <CurrentConvoIdProvider>
+      <MessagesEventBusProvider>{children}</MessagesEventBusProvider>
+    </CurrentConvoIdProvider>
+  )
+}