2025-05-28 15:36:51 -07:00

110 lines
2.2 KiB
TypeScript

import * as actionTypes from "../actions/toastMessage/actionTypes";
import { ToastMessageAction } from "../actions/toastMessage/typings";
import {
MessageState,
ToastMessageMetaState,
ToastMessageState,
ToastState,
} from "../stores/typings";
const initialMessagePayloadState: ToastState = {
title: "",
message: "",
};
/**
*
* @param state
* @param action
*/
function messagePayload(
state: ToastState = initialMessagePayloadState,
action: ToastMessageAction
): ToastState {
switch (action.type) {
case actionTypes.ADD_MESSAGE:
return {
...state,
...action.payload.toast,
};
}
return state;
}
const initialMessageMetaState: ToastMessageMetaState = {
level: "info",
autoDismiss: 5,
dismissible: true,
position: "bc",
};
/**
*
* @param state
* @param action
*/
function messageMeta(
state: ToastMessageMetaState = initialMessageMetaState,
action: ToastMessageAction
): ToastMessageMetaState {
switch (action.type) {
case actionTypes.ADD_MESSAGE:
return {
...state,
...action.payload.meta,
};
}
return state;
}
const initialMessageState: MessageState = {
payload: initialMessagePayloadState,
meta: {},
};
function message(
state: MessageState = initialMessageState,
action: ToastMessageAction
): MessageState {
switch (action.type) {
case actionTypes.ADD_MESSAGE:
return {
...state,
payload: messagePayload(undefined, action),
meta: messageMeta(undefined, action),
};
}
return state;
}
let messageId: number = 0;
/**
*
* @param state
* @param action
*/
function toastMessage(
state: ToastMessageState = {},
action: ToastMessageAction
): ToastMessageState {
switch (action.type) {
case actionTypes.ADD_MESSAGE:
messageId++;
return {
[messageId]: message(undefined, action),
};
case actionTypes.REMOVE_MESSAGE:
let newState: ToastMessageState = {};
Object.keys(state).forEach((messageId) => {
if (messageId !== action.payload.id) {
newState[messageId] = state[messageId];
}
});
return newState;
}
return state;
}
export default toastMessage;