'use client' import { AIMessage } from '@components/Objects/Activities/AI/AIActivityAsk' import React, { createContext, useContext, useReducer } from 'react' export const AIChatBotContext = createContext(null) as any export const AIChatBotDispatchContext = createContext(null) as any export type AIChatBotStateTypes = { messages: AIMessage[] isModalOpen: boolean aichat_uuid: string isWaitingForResponse: boolean chatInputValue: string error: AIError } type AIError = { isError: boolean status: number error_message: string } function AIChatBotProvider({ children }: { children: React.ReactNode }) { const [aiChatBotState, dispatchAIChatBot] = useReducer(aiChatBotReducer, { messages: [] as AIMessage[], isModalOpen: false, aichat_uuid: null, isWaitingForResponse: false, chatInputValue: '', error: { isError: false, status: 0, error_message: ' ' } as AIError, }) return ( {children} ) } export default AIChatBotProvider export function useAIChatBot() { return useContext(AIChatBotContext) } export function useAIChatBotDispatch() { return useContext(AIChatBotDispatchContext) } function aiChatBotReducer(state: any, action: any) { switch (action.type) { case 'setMessages': return { ...state, messages: action.payload } case 'addMessage': return { ...state, messages: [...state.messages, action.payload] } case 'setIsModalOpen': return { ...state, isModalOpen: true } case 'setIsModalClose': return { ...state, isModalOpen: false } case 'setAichat_uuid': return { ...state, aichat_uuid: action.payload } case 'setIsWaitingForResponse': return { ...state, isWaitingForResponse: true } case 'setIsNoLongerWaitingForResponse': return { ...state, isWaitingForResponse: false } case 'setChatInputValue': return { ...state, chatInputValue: action.payload } case 'setError': return { ...state, error: action.payload } default: throw new Error(`Unhandled action type: ${action.type}`) } }