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

74 lines
1.7 KiB
TypeScript
Raw Normal View History

2026-02-24 20:44:16 +00:00
import type { Action } from 'easy-peasy'
import { action } from 'easy-peasy'
export interface StoreError {
id: string
title: string
message: string
cid: string
statusCode?: string
}
export interface BaseStoreModel {
common: {
currentRouteKey: string
tabHasFocus: boolean
}
messages: {
errors: StoreError[]
warning: string[]
}
}
export interface BaseStoreActions {
common: {
setCurrentRouteKey: Action<BaseStoreModel['common'], string>
setTabHasFocus: Action<BaseStoreModel['common'], boolean>
}
messages: {
addError: Action<BaseStoreModel['messages'], StoreError>
removeError: Action<BaseStoreModel['messages'], string>
// setSuccess: Action<BaseStoreModel, string>
setWarning: Action<BaseStoreModel['messages'], string>
}
}
export type BaseModel = BaseStoreModel & BaseStoreActions
const initialState: BaseStoreModel = {
common: { currentRouteKey: '', tabHasFocus: false },
messages: {
errors: [],
// success: [],
warning: [],
},
}
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 = []
}
}),
},
}