openreplay/frontend/app/duck/funcTools/list/reducer.js
2021-05-01 15:12:01 +05:30

29 lines
857 B
JavaScript

import { Map, List } from 'immutable';
import {
fetchListType,
editInListType,
} from './types';
import { success } from '../tools';
const listInitialState = Map({
list: List(),
});
export const getListInitialState = () => listInitialState;
export const createListReducer = (name, fromJS = r => r, idKey = `${ name }Id`) => {
const FETCH_LIST_SUCCESS = success(fetchListType(name));
const EDIT_IN_LIST = editInListType(name);
return (state = listInitialState, action = {}) => {
switch (action.type) {
case FETCH_LIST_SUCCESS:
return state.set('list', List(action.data).map(fromJS));
case EDIT_IN_LIST:
const itemIndex = state.get('list').findIndex(item => item[ idKey ] === action.item[ idKey ])
return state.mergeIn([ 'list', itemIndex ], action.item);
default:
return state;
}
};
}