59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import _ from 'lodash/fp';
 | 
						|
import {
 | 
						|
  createTypes,
 | 
						|
  createAction,
 | 
						|
  createAsyncTypes,
 | 
						|
  composeReducers,
 | 
						|
  handleActions
 | 
						|
} from 'berkeleys-redux-utils';
 | 
						|
 | 
						|
import * as utils from './utils.js';
 | 
						|
import getMessagesEpic from './get-messages-epic.js';
 | 
						|
import ns from '../ns.json';
 | 
						|
 | 
						|
// export all the utils
 | 
						|
export { utils };
 | 
						|
export const epics = [getMessagesEpic];
 | 
						|
export const types = createTypes([
 | 
						|
  'clickOnClose',
 | 
						|
  createAsyncTypes('fetchMessages')
 | 
						|
], ns);
 | 
						|
 | 
						|
export const clickOnClose = createAction(types.clickOnClose, _.noop);
 | 
						|
export const fetchMessagesComplete = createAction(types.fetchMessages.complete);
 | 
						|
export const fetchMessagesError = createAction(types.fetchMessages.error);
 | 
						|
 | 
						|
const defaultState = [];
 | 
						|
 | 
						|
const getNS = _.property(ns);
 | 
						|
 | 
						|
export const latestMessageSelector = _.flow(
 | 
						|
  getNS,
 | 
						|
  _.head,
 | 
						|
  _.defaultTo({})
 | 
						|
);
 | 
						|
 | 
						|
export default composeReducers(
 | 
						|
  ns,
 | 
						|
  handleActions(
 | 
						|
    () => ({
 | 
						|
      [types.clickOnClose]: _.tail,
 | 
						|
      [types.fetchMessages.complete]: (state, { payload }) => [
 | 
						|
        ...state,
 | 
						|
        ...utils.expressToStack(payload)
 | 
						|
      ]
 | 
						|
    }),
 | 
						|
    defaultState,
 | 
						|
  ),
 | 
						|
  function metaReducer(state = defaultState, action) {
 | 
						|
    if (utils.isFlashAction(action)) {
 | 
						|
      const { payload } = utils.getFlashAction(action);
 | 
						|
      return [
 | 
						|
        ...state,
 | 
						|
        ...payload
 | 
						|
      ];
 | 
						|
    }
 | 
						|
    return state;
 | 
						|
  }
 | 
						|
);
 |