95 lines
2.4 KiB
JavaScript
95 lines
2.4 KiB
JavaScript
import ApplicationActionTypes from "./application.types";
|
|
|
|
const INITIAL_STATE = {
|
|
loading: false,
|
|
breadcrumbs: [],
|
|
recentItems: [],
|
|
selectedHeader: "home",
|
|
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.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,
|
|
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 };
|
|
|
|
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)];
|
|
}
|
|
};
|