about summary refs log tree commit diff
path: root/src/state/messages/convo/index.tsx
diff options
context:
space:
mode:
authorEric Bailey <git@esb.lol>2024-05-14 11:59:53 -0500
committerGitHub <noreply@github.com>2024-05-14 11:59:53 -0500
commit1c51a48764e4145679198f68368713410e28c8da (patch)
tree6f2840665b10dfbb3591f0a694c9d5165f383be3 /src/state/messages/convo/index.tsx
parentbffb9b590672c1e636083bdf9873f5cd8ab97b57 (diff)
downloadvoidsky-1c51a48764e4145679198f68368713410e28c8da.tar.zst
[🐴] Make status checks easier, fix load state (#4010)
* Make status checks easier, fix load state

* Make naming more clear

* Split up types for easier re-use

* Replace hacky usage
Diffstat (limited to 'src/state/messages/convo/index.tsx')
-rw-r--r--src/state/messages/convo/index.tsx32
1 files changed, 31 insertions, 1 deletions
diff --git a/src/state/messages/convo/index.tsx b/src/state/messages/convo/index.tsx
index 9c5295832..e955d4118 100644
--- a/src/state/messages/convo/index.tsx
+++ b/src/state/messages/convo/index.tsx
@@ -3,11 +3,20 @@ import {AppState} from 'react-native'
 import {useFocusEffect, useIsFocused} from '@react-navigation/native'
 
 import {Convo} from '#/state/messages/convo/agent'
-import {ConvoParams, ConvoState} from '#/state/messages/convo/types'
+import {
+  ConvoParams,
+  ConvoState,
+  ConvoStateBackgrounded,
+  ConvoStateReady,
+  ConvoStateSuspended,
+} from '#/state/messages/convo/types'
+import {isConvoActive} from '#/state/messages/convo/util'
 import {useMessagesEventBus} from '#/state/messages/events'
 import {useMarkAsReadMutation} from '#/state/queries/messages/conversation'
 import {useAgent} from '#/state/session'
 
+export * from '#/state/messages/convo/util'
+
 const ChatContext = React.createContext<ConvoState | null>(null)
 
 export function useConvo() {
@@ -18,6 +27,27 @@ export function useConvo() {
   return ctx
 }
 
+/**
+ * This hook should only be used when the Convo is "active", meaning the chat
+ * is loaded and ready to be used, or its in a suspended or background state,
+ * and ready for resumption.
+ */
+export function useConvoActive() {
+  const ctx = useContext(ChatContext) as
+    | ConvoStateReady
+    | ConvoStateBackgrounded
+    | ConvoStateSuspended
+  if (!ctx) {
+    throw new Error('useConvo must be used within a ConvoProvider')
+  }
+  if (!isConvoActive(ctx)) {
+    throw new Error(
+      `useConvoActive must only be rendered when the Convo is ready.`,
+    )
+  }
+  return ctx
+}
+
 export function ConvoProvider({
   children,
   convoId,