1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-03-27 00:19:39 +01:00
unleash.unleash/frontend/src/store/error/index.js
olav dd37100302 refactor: port unleash context to SWR (#683)
Co-authored-by: Fredrik Strand Oseberg <fredrik.no@gmail.com>
2022-02-09 12:56:59 +01:00

90 lines
2.6 KiB
JavaScript

import { List, Map as $Map } from 'immutable';
import { MUTE_ERROR } from './actions';
import {
ERROR_FETCH_FEATURE_TOGGLES,
ERROR_CREATING_FEATURE_TOGGLE,
ERROR_REMOVE_FEATURE_TOGGLE,
ERROR_UPDATE_FEATURE_TOGGLE,
UPDATE_FEATURE_TOGGLE_STRATEGIES,
UPDATE_FEATURE_TOGGLE,
} from '../feature-toggle/actions';
import {
ERROR_UPDATING_STRATEGY,
ERROR_CREATING_STRATEGY,
ERROR_RECEIVE_STRATEGIES,
UPDATE_STRATEGY_SUCCESS,
} from '../strategy/actions';
import {
ERROR_REMOVING_PROJECT,
ERROR_ADD_PROJECT,
ERROR_UPDATE_PROJECT,
} from '../project/actions';
import {
ERROR_ADD_ADDON_CONFIG,
ERROR_UPDATE_ADDON_CONFIG,
ERROR_REMOVING_ADDON_CONFIG,
} from '../addons/actions';
import { UPDATE_APPLICATION_FIELD } from '../application/actions';
import { FORBIDDEN } from '../util';
const debug = require('debug')('unleash:error-store');
function getInitState() {
return new $Map({
list: new List(),
});
}
function addErrorIfNotAlreadyInList(state, error) {
debug('Got error', error);
if (state.get('list').indexOf(error) < 0) {
return state.update('list', list => list.push(error));
}
return state;
}
const strategies = (state = getInitState(), action) => {
switch (action.type) {
case ERROR_CREATING_FEATURE_TOGGLE:
case ERROR_REMOVE_FEATURE_TOGGLE:
case ERROR_FETCH_FEATURE_TOGGLES:
case ERROR_UPDATE_FEATURE_TOGGLE:
case ERROR_UPDATING_STRATEGY:
case ERROR_CREATING_STRATEGY:
case ERROR_RECEIVE_STRATEGIES:
case ERROR_REMOVING_PROJECT:
case ERROR_UPDATE_PROJECT:
case ERROR_ADD_ADDON_CONFIG:
case ERROR_UPDATE_ADDON_CONFIG:
case ERROR_REMOVING_ADDON_CONFIG:
case ERROR_ADD_PROJECT:
return addErrorIfNotAlreadyInList(state, action.error.message);
case FORBIDDEN:
return addErrorIfNotAlreadyInList(
state,
action.error.message || '403 Forbidden'
);
case MUTE_ERROR:
return state.update('list', list =>
list.remove(list.indexOf(action.error))
);
// This reducer controls not only errors, but general information and success
// messages. This can be a little misleading, given it's naming. We should
// revise how this works in a future update.
case UPDATE_FEATURE_TOGGLE:
case UPDATE_FEATURE_TOGGLE_STRATEGIES:
case UPDATE_APPLICATION_FIELD:
case UPDATE_STRATEGY_SUCCESS:
return addErrorIfNotAlreadyInList(state, action.info);
default:
return state;
}
};
export default strategies;