react-toastify-redux
Version:
react-toastify with Redux
28 lines (24 loc) • 903 B
text/typescript
import * as types from './types';
import {Toast, ToastAction, DismissActionPayload, UpdateActionPayload} from './definitions';
const initialState: Toast[] = [];
const handlers = {
[types.TOAST_MESSAGE]: (toasts: Toast[], action: ToastAction<Toast>) => (
toasts.concat(action.payload)
),
[types.TOAST_DISMISS]: (toasts: Toast[], action: ToastAction<DismissActionPayload>) => (
'id' in action.payload
? toasts.filter(toast => toast.id !== action.payload.id)
: []
),
[types.TOAST_UPDATE]: (toasts: Toast[], action: ToastAction<UpdateActionPayload>) => (
toasts.map(toast => toast.id === action.payload.id
? {...toast, ...action.payload.options}
: toast
)
)
};
export default (toasts = initialState, action: ToastAction<any>) => {
return action.type in handlers
? handlers[action.type](toasts, action)
: toasts;
};