github.com/stampzilla/stampzilla-go@v2.0.0-rc9+incompatible/nodes/stampzilla-server/web/src/ducks/savedstates.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('savedstates', ['ADD', 'SAVE', 'UPDATE']);
     6  
     7  const defaultState = Map({
     8    list: Map(),
     9  });
    10  
    11  // Actions
    12  export function add(states) {
    13    return { type: c.ADD, states };
    14  }
    15  export function save(state) {
    16    return { type: c.SAVE, state };
    17  }
    18  export function update(states) {
    19    return { type: c.UPDATE, states };
    20  }
    21  
    22  // Subscribe to channels and register the action for the packages
    23  export function subscribe(dispatch) {
    24    return {
    25      savedstates: states => dispatch(update(states)),
    26    };
    27  }
    28  
    29  // Reducer
    30  export default function reducer(state = defaultState, action) {
    31    switch (action.type) {
    32      case c.ADD: {
    33        const s = {
    34          ...action.state,
    35          uuid: makeUUID(),
    36        };
    37        return state.setIn(['list', s.uuid], fromJS(s));
    38      }
    39      case c.SAVE: {
    40        return state.mergeIn(['list', action.state.uuid], fromJS(action.state));
    41      }
    42      case c.UPDATE: {
    43        return state.set('list', fromJS(action.states));
    44      }
    45      default:
    46        return state;
    47    }
    48  }