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 }