stitch-ui
Version:
47 lines (42 loc) • 1.39 kB
JavaScript
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
}
);