index.ts
35 lines
| 1 | import {createReduxStore, register} from '@wordpress/data'; |
| 2 | import * as actions from './actions'; |
| 3 | import * as selectors from './selectors'; |
| 4 | |
| 5 | export type Notification = { |
| 6 | id: string; |
| 7 | notificationType: 'notice' | 'snackbar'; |
| 8 | type: 'error' | 'warning' | 'info' | 'success'; |
| 9 | isDismissible?: boolean; |
| 10 | duration: number, |
| 11 | content: string; |
| 12 | } |
| 13 | |
| 14 | export const store = createReduxStore('givewp/campaign-notifications', { |
| 15 | reducer(state = [], action) { |
| 16 | switch (action.type) { |
| 17 | case 'ADD_NOTIFICATION': |
| 18 | const notificationExist = state.filter((notification: { id: string }) => notification.id === action.notification.id); |
| 19 | if (!notificationExist.length) { |
| 20 | state.push(action.notification); |
| 21 | } |
| 22 | return state; |
| 23 | |
| 24 | case 'DISMISS_NOTIFICATION': |
| 25 | return state.filter((notification: Notification) => notification.id !== action.id); |
| 26 | } |
| 27 | |
| 28 | return state; |
| 29 | }, |
| 30 | actions, |
| 31 | selectors, |
| 32 | }); |
| 33 | |
| 34 | register(store); |
| 35 |