46 lines
1 KiB
JavaScript
46 lines
1 KiB
JavaScript
import { Record as ImmutableRecord, List as ImmutableList } from 'immutable';
|
|
|
|
import {
|
|
ALERT_SHOW,
|
|
ALERT_DISMISS,
|
|
ALERT_CLEAR,
|
|
} from '../actions/alerts';
|
|
|
|
const AlertRecord = ImmutableRecord({
|
|
key: 0,
|
|
title: '',
|
|
message: '',
|
|
severity: 'info',
|
|
actionLabel: '',
|
|
actionLink: '',
|
|
});
|
|
|
|
const initialState = ImmutableList();
|
|
|
|
// Get next key based on last alert
|
|
const getNextKey = state => state.size > 0 ? state.last().get('key') + 1 : 0;
|
|
|
|
// Import the alert
|
|
const importAlert = (state, alert) => {
|
|
const key = getNextKey(state);
|
|
const record = AlertRecord({ ...alert, key });
|
|
return state.push(record);
|
|
};
|
|
|
|
// Delete an alert by its key
|
|
const deleteAlert = (state, alert) => {
|
|
return state.filterNot(item => item.key === alert.key);
|
|
};
|
|
|
|
export default function alerts(state = initialState, action) {
|
|
switch(action.type) {
|
|
case ALERT_SHOW:
|
|
return importAlert(state, action);
|
|
case ALERT_DISMISS:
|
|
return deleteAlert(state, action.alert);
|
|
case ALERT_CLEAR:
|
|
return state.clear();
|
|
default:
|
|
return state;
|
|
}
|
|
}
|