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

     1  import { List, Map } from 'immutable';
     2  import { defineAction } from 'redux-define';
     3  
     4  const c = defineAction(
     5    'connection',
     6    ['CONNECTED', 'DISCONNECTED', 'ERROR', 'RECEIVED'],
     7  );
     8  
     9  const defaultState = Map({
    10    connected: null,
    11    error: null,
    12    messages: List(),
    13  });
    14  
    15  // Actions
    16  export function connected() {
    17    return { type: c.CONNECTED };
    18  }
    19  
    20  export function disconnected() {
    21    return (dispatch, getState) => {
    22      if (getState().getIn(['connection', 'connected']) !== false) {
    23        dispatch({ type: c.DISCONNECTED });
    24      }
    25    };
    26  }
    27  
    28  export function error(err) {
    29    return { type: c.ERROR, error: err };
    30  }
    31  
    32  export function received(message) {
    33    return { type: c.RECEIVED, message };
    34  }
    35  
    36  // Reducer
    37  let idCount = 0;
    38  export default function reducer(state = defaultState, action) {
    39    switch (action.type) {
    40      case c.CONNECTED: {
    41        return state
    42          .set('error', null)
    43          .set('connected', true);
    44      }
    45      case c.DISCONNECTED: {
    46        return state
    47          .set('connected', false);
    48      }
    49      case c.ERROR: {
    50        return state
    51          .set('error', action.error);
    52      }
    53      case c.RECEIVED: {
    54        idCount += 1;
    55        return state
    56          .set('messages', state.get('messages').push({
    57            ...action.message,
    58            id: idCount,
    59          }).slice(-10));
    60      }
    61      default: return state;
    62    }
    63  }