| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import { createContext, useContext, type PropsWithChildren } from 'react'
- export type AddToolApprovalResponse = (args: {
- id: string
- approved: boolean
- reason?: string
- }) => void | PromiseLike<void>
- export interface MessageInfo {
- id: string
- variant?: 'default' | 'warning'
- isLoading: boolean
- readOnly?: boolean
- isUserMessage?: boolean
- isLastMessage?: boolean
- state: 'idle' | 'editing' | 'predecessor-editing'
- rating?: 'positive' | 'negative' | null
- }
- export interface MessageActions {
- addToolApprovalResponse?: AddToolApprovalResponse
- onDelete: (id: string) => void
- onEdit: (id: string) => void
- onCancelEdit: () => void
- onRate?: (id: string, rating: 'positive' | 'negative', reason?: string) => void
- }
- const MessageInfoContext = createContext<MessageInfo | null>(null)
- const MessageActionsContext = createContext<MessageActions | null>(null)
- export function useMessageInfoContext() {
- const ctx = useContext(MessageInfoContext)
- if (!ctx) {
- throw Error('useMessageInfoContext must be used within a MessageProvider')
- }
- return ctx
- }
- export function useMessageActionsContext() {
- const ctx = useContext(MessageActionsContext)
- if (!ctx) {
- throw Error('useMessageActionsContext must be used within a MessageProvider')
- }
- return ctx
- }
- export function MessageProvider({
- messageInfo,
- messageActions,
- children,
- }: PropsWithChildren<{ messageInfo: MessageInfo; messageActions: MessageActions }>) {
- return (
- <MessageInfoContext.Provider value={messageInfo}>
- <MessageActionsContext.Provider value={messageActions}>
- {children}
- </MessageActionsContext.Provider>
- </MessageInfoContext.Provider>
- )
- }
|