``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
110 lines
2.2 KiB
TypeScript
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;
|