Path: blob/1.0-develop/resources/scripts/state/flashes.ts
7458 views
import { Action, action } from 'easy-peasy';1import { FlashMessageType } from '@/components/MessageBox';2import { httpErrorToHuman } from '@/api/http';34export interface FlashStore {5items: FlashMessage[];6addFlash: Action<FlashStore, FlashMessage>;7addError: Action<FlashStore, { message: string; key?: string }>;8clearAndAddHttpError: Action<FlashStore, { error?: Error | any | null; key?: string }>;9clearFlashes: Action<FlashStore, string | void>;10}1112export interface FlashMessage {13id?: string;14key?: string;15type: FlashMessageType;16title?: string;17message: string;18}1920const flashes: FlashStore = {21items: [],2223addFlash: action((state, payload) => {24state.items.push(payload);25}),2627addError: action((state, payload) => {28state.items.push({ type: 'error', title: 'Error', ...payload });29}),3031clearAndAddHttpError: action((state, payload) => {32if (!payload.error) {33state.items = [];34} else {35console.error(payload.error);3637state.items = [38{39type: 'error',40title: 'Error',41key: payload.key,42message: httpErrorToHuman(payload.error),43},44];45}46}),4748clearFlashes: action((state, payload) => {49state.items = payload ? state.items.filter((flashes) => flashes.key !== payload) : [];50}),51};5253export default flashes;545556