sozsoft-platform/ui/src/store/admin.model.ts

87 lines
2.4 KiB
TypeScript
Raw Normal View History

2026-02-24 20:44:16 +00:00
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'
2026-03-21 18:10:40 +00:00
import { Message } from '@/proxy/ai/models'
2026-02-24 20:44:16 +00:00
export interface AdminStoreModel {
lists: {
values: GridOptionsEditDto | undefined
states: ListState[]
}
2026-03-21 18:10:40 +00:00
messages: {
aiPosts: Message[]
}
2026-02-24 20:44:16 +00:00
}
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>
}
2026-03-21 18:10:40 +00:00
messages: {
addAiPost: Action<AdminStoreModel['messages'], Message>
setAiPosts: Action<AdminStoreModel['messages'], Message[]>
}
2026-02-24 20:44:16 +00:00
}
export type AdminModel = AdminStoreModel & AdminStoreActions
const initialState: AdminStoreModel = {
lists: {
values: undefined,
states: [],
},
2026-03-21 18:10:40 +00:00
messages: {
aiPosts: [],
},
2026-02-24 20:44:16 +00:00
}
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)
}),
},
2026-03-21 18:10:40 +00:00
messages: {
...initialState.messages,
addAiPost: action((state, payload) => {
state.aiPosts = [...state.aiPosts, payload]
}),
setAiPosts: action((state, payload) => {
state.aiPosts = payload
}),
},
2026-02-24 20:44:16 +00:00
}