Home Reference Source

application/redux/reducers/assignment-view-reducers.js

import _ from 'lodash';
import {
    ASSIGNMENT_VIEW_UPDATE,
    ASSIGNMENT_VIEW_RESET,
    ASSIGNMENT_VIEW_NOTIFY_NEW,
    ASSIGNMENT_VIEW_CLEAR_NEW
} from './../actions/assignment-view-actions';

const baseState = {
    filtersOn: false,
    hasNew: false,
    page: 1,
    type: 'unscheduled',
    keywords: null,
    workflow: null,
    status: null,
    sorter: 'modified_at',
    flip: false,
    hpd: false,
    cal: false,
    calview: 'issue',
    assignee: null,
    currentView: 'unassigned',
    issues: [],
    start: null,
    end: null,
    useDate: null
};

export function assignmentView(state = null, action) {
    if (state === null) {
        state = baseState;
    }

    switch (action.type) {
        case ASSIGNMENT_VIEW_UPDATE:
            let newState = Object.assign({}, state, action.payload);
            let testState = Object.assign({}, state, action.payload, {
                filtersOn: false,
                hasNew: false,
                page: 1,
                type: 'unscheduled',
                currentView: 'unassigned',
                calview: 'issue',
                issues: [],
                cal: false,
                start: null,
                end: null,
                useDate: null
            });

            if (!_.isEqual(testState, baseState)) {
                newState.filtersOn = true;
            } else {
                newState.filtersOn = false;
            }
            return newState;
        case ASSIGNMENT_VIEW_RESET:
            let updateState = {};
            if (state.type) {
                updateState['type'] = state.type;
            }
            if (localStorage.getItem("assignmentCurrentView")) {
                updateState['currentView'] = localStorage.getItem("assignmentCurrentView");
            }

            return Object.assign({}, baseState, updateState);
        case ASSIGNMENT_VIEW_NOTIFY_NEW:
            return Object.assign({}, state, {hasNew: true});
        case ASSIGNMENT_VIEW_CLEAR_NEW:
            return Object.assign({}, state, {hasNew: false});
    }

    return state;
};