| 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/admin-details-page-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 |
return [...state, 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 |
|