bigbuffet-rw/app/soapbox/reducers/alerts.js
2022-03-11 14:42:52 -06:00

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;
}
}