github.com/stampzilla/stampzilla-go@v2.0.0-rc9+incompatible/nodes/stampzilla-server/web/src/ducks/rules.js (about)

     1  import { Map, fromJS } from 'immutable';
     2  import { defineAction } from 'redux-define';
     3  import makeUUID from 'uuid/v4';
     4  
     5  const c = defineAction(
     6    'rules',
     7    ['ADD', 'SAVE', 'UPDATE', 'UPDATE_STATE'],
     8  );
     9  
    10  const defaultState = Map({
    11    list: Map(),
    12    state: Map(),
    13  });
    14  
    15  // Actions
    16  export function add(rule) {
    17    return { type: c.ADD, rule };
    18  }
    19  export function save(rule) {
    20    return { type: c.SAVE, rule };
    21  }
    22  export function update(rules) {
    23    return { type: c.UPDATE, rules };
    24  }
    25  export function updateState(rules) {
    26    return { type: c.UPDATE_STATE, rules };
    27  }
    28  
    29  // Subscribe to channels and register the action for the packages
    30  export function subscribe(dispatch) {
    31    return {
    32      rules: rules => dispatch(update(rules)),
    33      server: ({ rules }) => rules && dispatch(updateState(rules)),
    34    };
    35  }
    36  
    37  // Reducer
    38  export default function reducer(state = defaultState, action) {
    39    switch (action.type) {
    40      case c.ADD: {
    41        const rule = {
    42          ...action.rule,
    43          uuid: makeUUID(),
    44        };
    45        return state
    46          .setIn(['list', rule.uuid], fromJS(rule));
    47      }
    48      case c.SAVE: {
    49        return state
    50          .mergeIn(['list', action.rule.uuid], fromJS(action.rule));
    51      }
    52      case c.UPDATE: {
    53        return state
    54          .set('list', fromJS(action.rules));
    55      }
    56      case c.UPDATE_STATE: {
    57        return state
    58          .set('state', fromJS(action.rules));
    59      }
    60      default: return state;
    61    }
    62  }