2019-07-17 17:39:43 +02:00
|
|
|
import { fromJS } from 'immutable';
|
|
|
|
|
2019-07-18 16:53:12 +02:00
|
|
|
const initialState = fromJS({ collapses: [], collapsesToOpen: [] });
|
2019-07-17 17:39:43 +02:00
|
|
|
|
|
|
|
function reducer(state, action) {
|
|
|
|
switch (action.type) {
|
|
|
|
case 'ADD_NEW_FIELD':
|
|
|
|
return state.update('collapses', list => {
|
|
|
|
return list
|
|
|
|
.map(obj => obj.update('isOpen', () => false))
|
|
|
|
.push(fromJS({ isOpen: true }));
|
|
|
|
});
|
|
|
|
case 'COLLAPSE_ALL':
|
2019-08-09 15:46:23 +02:00
|
|
|
return state
|
|
|
|
.update('collapsesToOpen', () => fromJS([]))
|
|
|
|
.update('collapses', list =>
|
|
|
|
list.map(obj => obj.update('isOpen', () => false))
|
|
|
|
);
|
2019-07-18 16:53:12 +02:00
|
|
|
case 'OPEN_COLLAPSES_THAT_HAVE_ERRORS':
|
|
|
|
return state
|
|
|
|
.update('collapsesToOpen', () => fromJS(action.collapsesToOpen))
|
|
|
|
.update('collapses', list => {
|
|
|
|
return list.map((obj, index) => {
|
|
|
|
if (action.collapsesToOpen.indexOf(index.toString()) !== -1) {
|
|
|
|
return obj.update('isOpen', () => true);
|
|
|
|
}
|
|
|
|
|
|
|
|
return obj.update('isOpen', () => false);
|
|
|
|
});
|
|
|
|
});
|
2019-07-17 17:39:43 +02:00
|
|
|
case 'TOGGLE_COLLAPSE':
|
|
|
|
return state.update('collapses', list => {
|
|
|
|
return list.map((obj, index) => {
|
|
|
|
if (index === action.index) {
|
|
|
|
return obj.update('isOpen', v => !v);
|
|
|
|
}
|
|
|
|
|
2019-07-18 16:53:12 +02:00
|
|
|
if (
|
|
|
|
state
|
|
|
|
.get('collapsesToOpen')
|
|
|
|
.toJS()
|
|
|
|
.indexOf(index.toString()) !== -1
|
|
|
|
) {
|
|
|
|
return obj;
|
|
|
|
}
|
|
|
|
|
2019-07-17 17:39:43 +02:00
|
|
|
return obj.update('isOpen', () => false);
|
|
|
|
});
|
|
|
|
});
|
2019-07-18 16:53:12 +02:00
|
|
|
|
2019-07-17 17:39:43 +02:00
|
|
|
case 'REMOVE_COLLAPSE':
|
|
|
|
return state
|
|
|
|
.removeIn(['collapses', action.index])
|
|
|
|
.update('collapses', list => list.map(obj => obj.set('isOpen', false)))
|
|
|
|
.update('collapses', list => {
|
|
|
|
if (action.shouldAddEmptyField) {
|
|
|
|
return list.push(fromJS({ isOpen: true }));
|
|
|
|
}
|
|
|
|
|
|
|
|
return list;
|
|
|
|
});
|
|
|
|
default:
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default reducer;
|
|
|
|
export { initialState };
|