in src/PortfolioPlanning/Redux/Reducers/EpicTimelineReducer.ts [13:131]
export function epicTimelineReducer(state: IEpicTimelineState, action: EpicTimelineActions): IEpicTimelineState {
return produce(state || getDefaultState(), (draft: IEpicTimelineState) => {
switch (action.type) {
case EpicTimelineActionTypes.UpdateDates: {
const { epicId, startDate, endDate } = action.payload;
const epicToUpdate = draft.epics.find(epic => epic.id === epicId);
epicToUpdate.startDate = startDate.toDate();
epicToUpdate.startDate.setHours(0, 0, 0, 0);
epicToUpdate.endDate = endDate.toDate();
epicToUpdate.endDate.setHours(0, 0, 0, 0);
epicToUpdate.itemUpdating = true;
break;
}
case EpicTimelineActionTypes.ShiftItem: {
const { itemId, startDate } = action.payload;
const epicToUpdate = draft.epics.find(epic => epic.id === itemId);
const epicDuration = epicToUpdate.endDate.getTime() - epicToUpdate.startDate.getTime();
epicToUpdate.startDate = startDate.toDate();
epicToUpdate.startDate.setHours(0, 0, 0, 0);
epicToUpdate.endDate = startDate.add(epicDuration, "milliseconds").toDate();
epicToUpdate.endDate.setHours(0, 0, 0, 0);
epicToUpdate.itemUpdating = true;
break;
}
case EpicTimelineActionTypes.UpdateItemFinished: {
const { itemId } = action.payload;
const epicToUpdate = draft.epics.find(epic => epic.id === itemId);
epicToUpdate.itemUpdating = false;
break;
}
case EpicTimelineActionTypes.ToggleItemDetailsDialogHidden: {
const { hidden } = action.payload;
draft.setDatesDialogHidden = hidden;
break;
}
case EpicTimelineActionTypes.SetSelectedItemId: {
const { id } = action.payload;
draft.selectedItemId = id;
break;
}
case EpicTimelineActionTypes.PortfolioItemsReceived:
const { result } = action.payload;
const { items, projects } = result;
draft.planLoadingStatus = LoadingStatus.Loaded;
draft.exceptionMessage = items.exceptionMessage || projects.exceptionMessage;
return handlePortfolioItemsReceived(draft, action as PortfolioItemsReceivedAction);
case EpicTimelineActionTypes.OpenAddItemPanel: {
draft.addItemsPanelOpen = true;
break;
}
case EpicTimelineActionTypes.CloseAddItemPanel: {
draft.addItemsPanelOpen = false;
draft.isNewPlanExperience = false;
break;
}
case EpicTimelineActionTypes.PortfolioItemDeleted: {
return handlePortfolioItemDeleted(state, action as PortfolioItemDeletedAction);
}
case EpicTimelineActionTypes.ToggleProgressTrackingCriteria: {
draft.progressTrackingCriteria = action.payload.criteria;
break;
}
case EpicTimelineActionTypes.ToggleLoadingStatus: {
const { status } = action.payload;
draft.planLoadingStatus = status;
break;
}
case EpicTimelineActionTypes.ResetPlanState: {
draft.planLoadingStatus = LoadingStatus.NotLoaded;
draft.selectedItemId = undefined;
draft.setDatesDialogHidden = true;
draft.addItemsPanelOpen = false;
draft.planSettingsPanelOpen = false;
draft.epics = [];
draft.projects = [];
draft.teams = {};
draft.isNewPlanExperience = false;
draft.deletePlanDialogHidden = true;
break;
}
case EpicTimelineActionTypes.TogglePlanSettingsPanelOpen: {
const { isOpen } = action.payload;
draft.planSettingsPanelOpen = isOpen;
break;
}
case EpicTimelineActionTypes.ToggleIsNewPlanExperience: {
draft.isNewPlanExperience = action.payload.isNewPlanExperience;
break;
}
case EpicTimelineActionTypes.ToggleDeletePlanDialogHidden: {
draft.deletePlanDialogHidden = action.payload.hidden;
break;
}
case EpicTimelineActionTypes.HandleGeneralException: {
draft.exceptionMessage = action.payload.message || action.payload.exceptionMessage;
break;
}
case EpicTimelineActionTypes.DismissErrorMessageCard: {
draft.exceptionMessage = "";
break;
}
}
});
}