UNPKG

stitch-ui

Version:

47 lines (42 loc) 1.39 kB
import { createReducer, createAction } from "redux-act"; import { List } from "immutable"; import { makeAsyncActions } from "../util"; export const makeLoadUsersActions = prefix => makeAsyncActions(`${prefix}load users`); export const makeResetUsersAction = prefix => createAction(`${prefix}reset users`); export const makeAddUserAction = prefix => makeAsyncActions(`${prefix}add user`); export const makeUserReducer = (actionsRoot, resetAction) => createReducer( { [resetAction]: state => ({ ...state, users: List() }), [actionsRoot.req]: state => ({ ...state, loadingUsers: true }), [actionsRoot.fail]: (state, payload) => ({ ...state, loadingUsers: false, loadingUsersError: payload.error }), [actionsRoot.rcv]: (state, payload) => { const newUsers = state.users.concat(payload.payload); let lastUserId = state.lastUserId; if (payload.payload.length > 0) { lastUserId = payload.payload[payload.payload.length - 1]._id; // eslint-disable-line no-underscore-dangle } else { lastUserId = null; } return { ...state, users: newUsers, lastUserId, loadingUsers: false }; } }, { users: List(), lastUserId: null, loadingUsers: false, loadingUsersError: null } );