86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
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<AdminStoreModel['lists'], GridOptionsEditDto>
|
|
setJsonValue: Action<AdminStoreModel['lists'], { field: keyof GridOptionsEditDto; data: any[] }>
|
|
getListFormValues: Thunk<
|
|
AdminStoreModel['lists'] & AdminStoreActions['lists'],
|
|
string | undefined,
|
|
Injections
|
|
>
|
|
setStates: Action<AdminStoreModel['lists'], ListState>
|
|
}
|
|
messages: {
|
|
addAiPost: Action<AdminStoreModel['messages'], Message>
|
|
setAiPosts: Action<AdminStoreModel['messages'], Message[]>
|
|
}
|
|
}
|
|
|
|
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
|
|
}),
|
|
},
|
|
}
|