application/redux/reducers/entry-reducers.js
- import _ from 'lodash';
- import Immutable from 'immutable';
- import {
- ENTRIES_REQUEST,
- ENTRIES_RECEIVE,
- ENTRIES_RECEIVE_PAGINATION,
- ENTRY_RECEIVE,
- ENTRIES_INVALIDATE,
- ENTRY_SELECTED,
- ENTRIES_SET_PAGE
- } from './../actions/entry-actions';
-
- const PER_PAGE = 20;
-
- export function entries(state = null, action) {
- if (state === null) {
- state = {
- isFetching: false,
- didInvalidate: false,
- items: Immutable.fromJS({}),
- selected: false,
- page: 0,
- pagination: {
- before: 0,
- current: 0,
- first: 0,
- last: 0,
- limit: 0,
- next: 0,
- total_items: 0,
- total_pages: 0
- },
- order: "name",
- dir: "asc",
- filter: false
- };
- }
-
- let newState;
-
- switch (action.type) {
- case ENTRIES_RECEIVE_PAGINATION:
- return Object.assign({}, state, {
- pagination: {
- 'before': action.payload.before,
- 'current': action.payload.current,
- 'first': action.payload.first,
- 'last': action.payload.last,
- 'limit': action.payload.limit,
- 'next': action.payload.next,
- 'total_items': action.payload.total_items,
- 'total_pages': action.payload.total_pages,
- }
- });
- case ENTRIES_INVALIDATE:
- return Object.assign({}, state, {
- didInvalidate: true,
- });
- case ENTRIES_REQUEST:
- return Object.assign({}, state, {
- isFetching: true,
- didInvalidate: false
- });
- case ENTRY_SELECTED: {
- return Object.assign({}, state, {
- selected: action.payload.selected
- });
- }
- case ENTRY_RECEIVE:
- const entry = action.payload.entry;
- let found = false;
- const allEntries = state.items.map((item, i) => {
- if (item.get('uuid') == entry.get('uuid')) {
- found = true;
- return entry;
- }
- return item;
- });
-
- if (!found) {
- let temp = allEntries.toList().asMutable();
- temp.push(entry);
- action.payload.entries = temp.asMutable();
- } else {
- action.payload.entries = allEntries;
- }
- case ENTRIES_RECEIVE:
- return Object.assign({}, state, {
- isFetching: false,
- didInvalidate: false,
- items: action.payload.entries
- });
- }
-
- return state;
- };