40 lines
892 B
TypeScript
40 lines
892 B
TypeScript
|
|
import * as React from "react"
|
||
|
|
|
||
|
|
import type { MessageRepository } from "./types"
|
||
|
|
|
||
|
|
const MessageRepositoryContext = React.createContext<MessageRepository | null>(
|
||
|
|
null
|
||
|
|
)
|
||
|
|
|
||
|
|
export interface MessageRepositoryProviderProps {
|
||
|
|
children: React.ReactNode
|
||
|
|
repository: MessageRepository
|
||
|
|
}
|
||
|
|
|
||
|
|
export function MessageRepositoryProvider({
|
||
|
|
children,
|
||
|
|
repository,
|
||
|
|
}: MessageRepositoryProviderProps) {
|
||
|
|
return (
|
||
|
|
<MessageRepositoryContext.Provider value={repository}>
|
||
|
|
{children}
|
||
|
|
</MessageRepositoryContext.Provider>
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useMessageRepository() {
|
||
|
|
const repository = React.useContext(MessageRepositoryContext)
|
||
|
|
|
||
|
|
if (!repository) {
|
||
|
|
throw new Error(
|
||
|
|
"MessagePanel requires a MessageRepositoryProvider or a repository prop."
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
return repository
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useOptionalMessageRepository() {
|
||
|
|
return React.useContext(MessageRepositoryContext)
|
||
|
|
}
|