Split up types for easier re-use
This commit is contained in:
@@ -39,7 +39,7 @@ export function useConvoActive() {
|
|||||||
}
|
}
|
||||||
if (!isConvoActive(ctx)) {
|
if (!isConvoActive(ctx)) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`useConvoActive must only be rendered when the Convo is ready. Current status: ${ctx.status}`,
|
`useConvoActive must only be rendered when the Convo is ready.`,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return ctx
|
return ctx
|
||||||
|
|||||||
@@ -107,82 +107,88 @@ export type ConvoItem =
|
|||||||
retry: () => void
|
retry: () => void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type DeleteMessage = (messageId: string) => Promise<void>
|
||||||
|
type SendMessage = (
|
||||||
|
message: ChatBskyConvoSendMessage.InputSchema['message'],
|
||||||
|
) => Promise<void>
|
||||||
|
type FetchMessageHistory = () => Promise<void>
|
||||||
|
|
||||||
|
export type ConvoStateUninitialized = {
|
||||||
|
status: ConvoStatus.Uninitialized
|
||||||
|
items: []
|
||||||
|
convo: undefined
|
||||||
|
error: undefined
|
||||||
|
sender: undefined
|
||||||
|
recipients: undefined
|
||||||
|
isFetchingHistory: false
|
||||||
|
deleteMessage: undefined
|
||||||
|
sendMessage: undefined
|
||||||
|
fetchMessageHistory: undefined
|
||||||
|
}
|
||||||
|
export type ConvoStateInitializing = {
|
||||||
|
status: ConvoStatus.Initializing
|
||||||
|
items: []
|
||||||
|
convo: undefined
|
||||||
|
error: undefined
|
||||||
|
sender: undefined
|
||||||
|
recipients: undefined
|
||||||
|
isFetchingHistory: boolean
|
||||||
|
deleteMessage: undefined
|
||||||
|
sendMessage: undefined
|
||||||
|
fetchMessageHistory: undefined
|
||||||
|
}
|
||||||
|
export type ConvoStateReady = {
|
||||||
|
status: ConvoStatus.Ready
|
||||||
|
items: ConvoItem[]
|
||||||
|
convo: ChatBskyConvoDefs.ConvoView
|
||||||
|
error: undefined
|
||||||
|
sender: AppBskyActorDefs.ProfileViewBasic
|
||||||
|
recipients: AppBskyActorDefs.ProfileViewBasic[]
|
||||||
|
isFetchingHistory: boolean
|
||||||
|
deleteMessage: DeleteMessage
|
||||||
|
sendMessage: SendMessage
|
||||||
|
fetchMessageHistory: FetchMessageHistory
|
||||||
|
}
|
||||||
|
export type ConvoStateBackgrounded = {
|
||||||
|
status: ConvoStatus.Backgrounded
|
||||||
|
items: ConvoItem[]
|
||||||
|
convo: ChatBskyConvoDefs.ConvoView
|
||||||
|
error: undefined
|
||||||
|
sender: AppBskyActorDefs.ProfileViewBasic
|
||||||
|
recipients: AppBskyActorDefs.ProfileViewBasic[]
|
||||||
|
isFetchingHistory: boolean
|
||||||
|
deleteMessage: DeleteMessage
|
||||||
|
sendMessage: SendMessage
|
||||||
|
fetchMessageHistory: FetchMessageHistory
|
||||||
|
}
|
||||||
|
export type ConvoStateSuspended = {
|
||||||
|
status: ConvoStatus.Suspended
|
||||||
|
items: ConvoItem[]
|
||||||
|
convo: ChatBskyConvoDefs.ConvoView
|
||||||
|
error: undefined
|
||||||
|
sender: AppBskyActorDefs.ProfileViewBasic
|
||||||
|
recipients: AppBskyActorDefs.ProfileViewBasic[]
|
||||||
|
isFetchingHistory: boolean
|
||||||
|
deleteMessage: DeleteMessage
|
||||||
|
sendMessage: SendMessage
|
||||||
|
fetchMessageHistory: FetchMessageHistory
|
||||||
|
}
|
||||||
|
export type ConvoStateError = {
|
||||||
|
status: ConvoStatus.Error
|
||||||
|
items: []
|
||||||
|
convo: undefined
|
||||||
|
error: any
|
||||||
|
sender: undefined
|
||||||
|
recipients: undefined
|
||||||
|
isFetchingHistory: false
|
||||||
|
deleteMessage: undefined
|
||||||
|
sendMessage: undefined
|
||||||
|
fetchMessageHistory: undefined
|
||||||
|
}
|
||||||
export type ConvoState =
|
export type ConvoState =
|
||||||
| {
|
| ConvoStateUninitialized
|
||||||
status: ConvoStatus.Uninitialized
|
| ConvoStateInitializing
|
||||||
items: []
|
| ConvoStateReady
|
||||||
convo: undefined
|
| ConvoStateBackgrounded
|
||||||
error: undefined
|
| ConvoStateSuspended
|
||||||
sender: undefined
|
| ConvoStateError
|
||||||
recipients: undefined
|
|
||||||
isFetchingHistory: false
|
|
||||||
deleteMessage: undefined
|
|
||||||
sendMessage: undefined
|
|
||||||
fetchMessageHistory: undefined
|
|
||||||
}
|
|
||||||
| {
|
|
||||||
status: ConvoStatus.Initializing
|
|
||||||
items: []
|
|
||||||
convo: undefined
|
|
||||||
error: undefined
|
|
||||||
sender: undefined
|
|
||||||
recipients: undefined
|
|
||||||
isFetchingHistory: boolean
|
|
||||||
deleteMessage: undefined
|
|
||||||
sendMessage: undefined
|
|
||||||
fetchMessageHistory: undefined
|
|
||||||
}
|
|
||||||
| {
|
|
||||||
status: ConvoStatus.Ready
|
|
||||||
items: ConvoItem[]
|
|
||||||
convo: ChatBskyConvoDefs.ConvoView
|
|
||||||
error: undefined
|
|
||||||
sender: AppBskyActorDefs.ProfileViewBasic
|
|
||||||
recipients: AppBskyActorDefs.ProfileViewBasic[]
|
|
||||||
isFetchingHistory: boolean
|
|
||||||
deleteMessage: (messageId: string) => Promise<void>
|
|
||||||
sendMessage: (
|
|
||||||
message: ChatBskyConvoSendMessage.InputSchema['message'],
|
|
||||||
) => void
|
|
||||||
fetchMessageHistory: () => void
|
|
||||||
}
|
|
||||||
| {
|
|
||||||
status: ConvoStatus.Suspended
|
|
||||||
items: ConvoItem[]
|
|
||||||
convo: ChatBskyConvoDefs.ConvoView
|
|
||||||
error: undefined
|
|
||||||
sender: AppBskyActorDefs.ProfileViewBasic
|
|
||||||
recipients: AppBskyActorDefs.ProfileViewBasic[]
|
|
||||||
isFetchingHistory: boolean
|
|
||||||
deleteMessage: (messageId: string) => Promise<void>
|
|
||||||
sendMessage: (
|
|
||||||
message: ChatBskyConvoSendMessage.InputSchema['message'],
|
|
||||||
) => Promise<void>
|
|
||||||
fetchMessageHistory: () => Promise<void>
|
|
||||||
}
|
|
||||||
| {
|
|
||||||
status: ConvoStatus.Backgrounded
|
|
||||||
items: ConvoItem[]
|
|
||||||
convo: ChatBskyConvoDefs.ConvoView
|
|
||||||
error: undefined
|
|
||||||
sender: AppBskyActorDefs.ProfileViewBasic
|
|
||||||
recipients: AppBskyActorDefs.ProfileViewBasic[]
|
|
||||||
isFetchingHistory: boolean
|
|
||||||
deleteMessage: (messageId: string) => Promise<void>
|
|
||||||
sendMessage: (
|
|
||||||
message: ChatBskyConvoSendMessage.InputSchema['message'],
|
|
||||||
) => Promise<void>
|
|
||||||
fetchMessageHistory: () => Promise<void>
|
|
||||||
}
|
|
||||||
| {
|
|
||||||
status: ConvoStatus.Error
|
|
||||||
items: []
|
|
||||||
convo: undefined
|
|
||||||
error: any
|
|
||||||
sender: undefined
|
|
||||||
recipients: undefined
|
|
||||||
isFetchingHistory: false
|
|
||||||
deleteMessage: undefined
|
|
||||||
sendMessage: undefined
|
|
||||||
fetchMessageHistory: undefined
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,11 +1,19 @@
|
|||||||
import {ConvoState, ConvoStatus} from './types'
|
import {
|
||||||
|
ConvoState,
|
||||||
|
ConvoStateBackgrounded,
|
||||||
|
ConvoStateReady,
|
||||||
|
ConvoStateSuspended,
|
||||||
|
ConvoStatus,
|
||||||
|
} from './types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if a `Convo` has a `status` that is "active", meaning the chat is
|
* Checks if a `Convo` has a `status` that is "active", meaning the chat is
|
||||||
* loaded and ready to be used, or its in a suspended or background state, and
|
* loaded and ready to be used, or its in a suspended or background state, and
|
||||||
* ready for resumption.
|
* ready for resumption.
|
||||||
*/
|
*/
|
||||||
export function isConvoActive(convo: ConvoState) {
|
export function isConvoActive(
|
||||||
|
convo: ConvoState,
|
||||||
|
): convo is ConvoStateReady | ConvoStateBackgrounded | ConvoStateSuspended {
|
||||||
return (
|
return (
|
||||||
convo.status === ConvoStatus.Ready ||
|
convo.status === ConvoStatus.Ready ||
|
||||||
convo.status === ConvoStatus.Backgrounded ||
|
convo.status === ConvoStatus.Backgrounded ||
|
||||||
|
|||||||
Reference in New Issue
Block a user