export function planDirectoryReducer()

in src/PortfolioPlanning/Redux/Reducers/PlanDirectoryReducer.ts [7:78]


export function planDirectoryReducer(state: IPlanDirectoryState, action: PlanDirectoryActions): IPlanDirectoryState {
    return produce(state || getDefaultState(), (draft: IPlanDirectoryState) => {
        switch (action.type) {
            case PlanDirectoryActionTypes.Initialize: {
                const { directoryData } = action.payload;

                draft.directoryLoadingStatus = LoadingStatus.Loaded;
                draft.exceptionMessage = directoryData.exceptionMessage;
                draft.plans = directoryData.entries;
                draft.plans.sort((a, b) => caseInsensitiveComparer(a.name, b.name));

                break;
            }
            case PlanDirectoryActionTypes.CreatePlanSucceeded: {
                const { newPlan } = action.payload;

                draft.plans.push(newPlan);
                draft.plans.sort((a, b) => caseInsensitiveComparer(a.name, b.name));
                draft.newPlanDialogVisible = false;

                break;
            }
            case PlanDirectoryActionTypes.DeletePlan: {
                const { id } = action.payload;

                // Remove the plan from local state
                draft.plans = draft.plans.filter(plan => plan.id !== id);

                // Navigate back to directory page
                draft.selectedPlanId = undefined;

                break;
            }
            case PlanDirectoryActionTypes.UpdateProjectsAndTeamsMetadata: {
                const { planId, projectNames, teamNames } = action.payload;

                const planToUpdate = draft.plans.find(plan => plan.id === planId);

                planToUpdate.projectNames = projectNames;
                planToUpdate.teamNames = teamNames;

                break;
            }
            case PlanDirectoryActionTypes.ToggleSelectedPlanId: {
                const { id } = action.payload;

                draft.selectedPlanId = id;

                break;
            }
            case PlanDirectoryActionTypes.ToggleNewPlanDialogVisible: {
                const { visible } = action.payload;

                draft.newPlanDialogVisible = visible;

                break;
            }
            case PlanDirectoryActionTypes.HandleGeneralException: {
                const { exception } = action.payload;

                draft.exceptionMessage = exception.message;

                break;
            }
            case PlanDirectoryActionTypes.DismissErrorMessageCard: {
                draft.exceptionMessage = "";

                break;
            }
        }
    });
}