74 lines
1.7 KiB
TypeScript
74 lines
1.7 KiB
TypeScript
|
|
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 = []
|
||
|
|
}
|
||
|
|
}),
|
||
|
|
},
|
||
|
|
}
|