import ApplicationActionTypes from "./application.types"; const INITIAL_STATE = { loading: false, online: true, breadcrumbs: [], recentItems: [], selectedHeader: "home", problemJobs: [], scheduleLoad: { load: {}, calculating: false, error: null, }, jobReadOnly: false, partnerVersion: null, }; const applicationReducer = (state = INITIAL_STATE, action) => { switch (action.type) { case ApplicationActionTypes.SET_SELECTED_HEADER: return { ...state, selectedHeader: action.payload, }; case ApplicationActionTypes.SET_ONLINE_STATUS: return { ...state, online: action.payload, }; case ApplicationActionTypes.ADD_RECENT_ITEM: return { ...state, recentItems: updateRecentItemsArray(state, action.payload), }; case ApplicationActionTypes.SET_BREAD_CRUMBS: return { ...state, breadcrumbs: action.payload, }; case ApplicationActionTypes.CALCULATE_SCHEDULE_LOAD: return { ...state, problemJobs: [], scheduleLoad: { ...state.scheduleLoad, calculating: true, error: null }, }; case ApplicationActionTypes.CALCULATE_SCHEDULE_LOAD_SUCCESS: return { ...state, scheduleLoad: { ...state.scheduleLoad, load: action.payload, calculating: false, }, }; case ApplicationActionTypes.CALCULATE_SCHEDULE_LOAD_FAILURE: return { ...state, scheduleLoad: { ...state.scheduleLoad, calculating: false, error: action.payload, }, }; case ApplicationActionTypes.START_LOADING: return { ...state, loading: true, }; case ApplicationActionTypes.END_LOADING: return { ...state, loading: false, }; case ApplicationActionTypes.SET_JOB_READONLY: return { ...state, jobReadOnly: action.payload }; case ApplicationActionTypes.SET_PARTNER_VERSION: return { ...state, partnerVersion: action.payload }; case ApplicationActionTypes.SET_PROBLEM_JOBS: { return { ...state, problemJobs: action.payload }; } default: return state; } }; export default applicationReducer; const updateRecentItemsArray = (state, newItem) => { //Check to see if the new item is in the list. const matchingIndex = state.recentItems.findIndex((i) => i.id === newItem.id); if (matchingIndex >= 0) { return [ newItem, ...state.recentItems.slice(0, matchingIndex), ...state.recentItems.slice(matchingIndex + 1, 9), ]; } else { return [newItem, ...state.recentItems.slice(0, 9)]; } };