UNPKG

react-snackbars-stack

Version:

A simple and flexible stackable snackbars for React

32 lines (30 loc) 979 B
import { SnackbarAction, SnackbarPayload } from '../types'; import { eventEmitter } from '../event'; export const snackbarReducer = ( state: SnackbarPayload[], action: SnackbarAction, maxSnackbars: number ): SnackbarPayload[] => { switch (action.type) { case 'ADD_SNACKBAR': return [...state, action.payload].slice(-maxSnackbars); // return [...state, action.payload]; case 'CLOSE_SNACKBAR': return state.map(snackbar => { if (snackbar.id === action.payload) { eventEmitter.removeFromActiveMessages(snackbar.message); return { ...snackbar, open: false }; } return snackbar; }); case 'REMOVE_SNACKBAR': return state.filter(snackbar => snackbar.id !== action.payload); case 'CLEAR_ALL': state.forEach(snackbar => { eventEmitter.removeFromActiveMessages(snackbar.message); }); return []; default: return state; } };