import type { Action } from 'easy-peasy' import { action } from 'easy-peasy' type ChatType = 'chat' | 'query' | 'analyze' interface BaseContent { type: ChatType question: string sql: string | null answer: string | any[] chart?: string error?: string } type MessageContent = string | BaseContent export interface Message { role: 'user' | 'assistant' content: MessageContent } export interface StoreError { id: string title: string message: string cid: string statusCode?: string } export interface BaseStoreModel { common: { currentRouteKey: string tabHasFocus: boolean } messages: { errors: StoreError[] // success: string[] warning: string[] aiPosts: Message[] } } export interface BaseStoreActions { common: { setCurrentRouteKey: Action setTabHasFocus: Action } messages: { addError: Action removeError: Action // setSuccess: Action setWarning: Action addAiPost: Action setAiPosts: Action } } export type BaseModel = BaseStoreModel & BaseStoreActions const initialState: BaseStoreModel = { common: { currentRouteKey: '', tabHasFocus: false }, messages: { errors: [], // success: [], warning: [], aiPosts: [], }, } export const baseModel: BaseModel = { common: { ...initialState.common, setCurrentRouteKey: action((state, payload) => { state.currentRouteKey = payload }), setTabHasFocus: action((state, payload) => { state.tabHasFocus = payload }), }, messages: { ...initialState.messages, addError: action((state, payload) => { state.errors = [...state.errors, payload] }), removeError: action((state, payload) => { state.errors = [...state.errors.filter((a) => a.id != payload)] }), setWarning: action((state, payload) => { if (payload) { state.warning = [payload] } else { state.warning = [] } }), addAiPost: action((state, payload) => { state.aiPosts = [...state.aiPosts, payload] localStorage.setItem('AiPosts', JSON.stringify(state.aiPosts)) }), setAiPosts: action((state, payload) => { state.aiPosts = payload }) }, }