import type { Action, Thunk } from 'easy-peasy' import { action, thunk } from 'easy-peasy' import { Injections } from './store' import { GridOptionsEditDto } from '../proxy/form/models' import setNull from '../utils/setNull' import { ListState } from '@/proxy/admin/list-form/models' import { Message } from '@/proxy/ai/models' export interface AdminStoreModel { lists: { values: GridOptionsEditDto | undefined states: ListState[] } messages: { aiPosts: Message[] } } export interface AdminStoreActions { lists: { setListFormValues: Action setJsonValue: Action getListFormValues: Thunk< AdminStoreModel['lists'] & AdminStoreActions['lists'], string | undefined, Injections > setStates: Action } messages: { addAiPost: Action setAiPosts: Action } } export type AdminModel = AdminStoreModel & AdminStoreActions const initialState: AdminStoreModel = { lists: { values: undefined, states: [], }, messages: { aiPosts: [], }, } export const adminModel: AdminModel = { lists: { ...initialState.lists, setStates: action((state, payload) => { const stateId = state.states.findIndex((s) => s.listFormCode === payload.listFormCode) if (stateId !== -1) { state.states[stateId] = payload } else { state.states = [...state.states, payload] } }), setListFormValues: action((state, payload) => { state.values = { ...state.values, ...payload } }), setJsonValue: action((state, payload) => { if (state.values) { state.values[payload.field] = payload.data } }), getListFormValues: thunk(async (actions, payload, helpers) => { if (!payload) return const service = helpers.injections.listFormService const result = await service.getListFormByCode(payload) setNull(result.data) actions.setListFormValues(result.data) }), }, messages: { ...initialState.messages, addAiPost: action((state, payload) => { state.aiPosts = [...state.aiPosts, payload] }), setAiPosts: action((state, payload) => { state.aiPosts = payload }), }, }