Home Manual Reference Source Test

src/reducers/factories.js

import { List } from 'immutable';
import { constJoin } from 'utilities';

export const listReducerFactory = (type) => {
  const phrase = verb => constJoin(verb, type);

  return (list = new List(), action) => {
    const { data, id, comparator } = action;

    switch (action.type) {
      case phrase('append'):
        return list.concat(data);
      case phrase('delete'):
        return list.delete(id);
      case phrase('insert'):
        return list.insert(id, data);
      case phrase('update'):
        return list.update(id, old => ({ ...old, data }));
      case phrase('clear'):
        return list.clear();
      case phrase('sort'):
        return list.sort(comparator);
      default:
        return list;
    }
  }
};