2020-08-06 16:27:51 +02:00
|
|
|
/* eslint-disable consistent-return */
|
|
|
|
import produce from 'immer';
|
2023-03-17 13:38:29 +01:00
|
|
|
import get from 'lodash/get';
|
|
|
|
import set from 'lodash/set';
|
|
|
|
import take from 'lodash/take';
|
2020-08-06 16:27:51 +02:00
|
|
|
|
|
|
|
export const initialState = {
|
2020-08-27 15:57:20 +02:00
|
|
|
initialData: {},
|
2020-08-27 15:00:10 +02:00
|
|
|
modifiedData: {},
|
2020-08-06 16:27:51 +02:00
|
|
|
routes: {},
|
|
|
|
selectedAction: '',
|
|
|
|
policies: [],
|
|
|
|
};
|
|
|
|
|
|
|
|
const reducer = (state, action) =>
|
2022-08-08 23:33:39 +02:00
|
|
|
produce(state, (draftState) => {
|
2020-08-06 16:27:51 +02:00
|
|
|
switch (action.type) {
|
2020-08-27 15:00:10 +02:00
|
|
|
case 'ON_CHANGE': {
|
|
|
|
const keysLength = action.keys.length;
|
|
|
|
const isChangingCheckbox = action.keys[keysLength - 1] === 'enabled';
|
|
|
|
|
|
|
|
if (action.value && isChangingCheckbox) {
|
|
|
|
const selectedAction = take(action.keys, keysLength - 1).join('.');
|
|
|
|
draftState.selectedAction = selectedAction;
|
|
|
|
}
|
|
|
|
|
|
|
|
set(draftState, ['modifiedData', ...action.keys], action.value);
|
2020-08-06 16:27:51 +02:00
|
|
|
break;
|
|
|
|
}
|
2020-08-27 15:00:10 +02:00
|
|
|
case 'ON_CHANGE_SELECT_ALL': {
|
|
|
|
const pathToValue = ['modifiedData', ...action.keys];
|
|
|
|
const oldValues = get(state, pathToValue, {});
|
|
|
|
const updatedValues = Object.keys(oldValues).reduce((acc, current) => {
|
|
|
|
acc[current] = { ...oldValues[current], enabled: action.value };
|
|
|
|
|
|
|
|
return acc;
|
|
|
|
}, {});
|
|
|
|
|
|
|
|
set(draftState, pathToValue, updatedValues);
|
|
|
|
|
2020-08-06 16:27:51 +02:00
|
|
|
break;
|
|
|
|
}
|
2020-08-27 15:57:20 +02:00
|
|
|
case 'ON_RESET': {
|
|
|
|
draftState.modifiedData = state.initialData;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 'ON_SUBMIT_SUCCEEDED': {
|
|
|
|
draftState.initialData = state.modifiedData;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2020-08-27 15:00:10 +02:00
|
|
|
case 'SELECT_ACTION': {
|
|
|
|
const { actionToSelect } = action;
|
|
|
|
draftState.selectedAction = actionToSelect === state.selectedAction ? '' : actionToSelect;
|
2020-08-06 16:27:51 +02:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
return draftState;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
export default reducer;
|