'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}`) } }