application/redux/reducers/acl-reducers.js
import _ from 'lodash';
import Immutable from 'immutable';
import {
ACLS_REQUEST,
ACLS_RECEIVE,
ACL_RECEIVE,
ACLS_RESOURCES_RECEIVE,
ACLS_INVALIDATE,
ACL_SELECTED,
ACLS_SET_PAGE
} from './../actions/acl-actions';
const PER_PAGE = 20;
export function acls(state = null, action) {
if (state === null) {
state = {
isFetching: false,
didInvalidate: false,
items: Immutable.fromJS({}),
selected: false,
page: 0,
order: "name",
dir: "asc",
filter: false,
resources: {}
};
}
let newState;
switch (action.type) {
case ACLS_INVALIDATE:
return Object.assign({}, state, {
didInvalidate: true,
});
case ACLS_REQUEST:
return Object.assign({}, state, {
isFetching: true,
didInvalidate: false
});
case ACL_SELECTED: {
return Object.assign({}, state, {
selected: action.payload.selected
});
}
case ACLS_RESOURCES_RECEIVE:
return Object.assign({}, state, {
resources: action.payload.resources
});
case ACL_RECEIVE:
const acl = action.payload.acl;
const acls = state.items.map((item, i) => {
if (item.get('name') == acl.get('name')) {
return acl;
}
return item;
});
action.payload.acls = Immutable.fromJS(acls);
case ACLS_RECEIVE:
return Object.assign({}, state, {
isFetching: false,
didInvalidate: false,
items: action.payload.acls
});
}
return state;
};