import { FormMode } from '../../enums/formMode'; import { ProjectsState } from './ProjectsState.interface' import { Project } from './Project.interface'; import { Alert } from '../../interfaces'; type Action = | { type: 'SET_DELETE'; payload: { isConfirmationDialogOpen: boolean; selectedProjectId: string | undefined; }; } | { type: 'SET_PROJECTS'; payload: Project[] } | { type: 'SET_ALERT'; payload: Alert | undefined } | { type: 'SET_FORM_MODE'; payload: FormMode } | { type: 'SET_IS_CONFIRMATION_DIALOG_LOADING'; payload: boolean } | { type: 'SET_IS_LOADING'; payload: boolean } | { type: 'SET_OPEN_CLOSE_PROJECT_FORM'; payload: { formMode: FormMode; selectedProjectId: string | undefined; isFormOpen: boolean; }; }; export const initialState: ProjectsState = { alert: undefined, formMode: FormMode.CANCEL, isConfirmDialogLoading: false, isConfirmDialogOpen: false, isFormOpen: false, isLoading: false, projects: [], selectedProjectId: undefined }; export const reducer = ( state: ProjectsState, action: Action ): ProjectsState => { switch (action.type) { case 'SET_DELETE': { return { ...state, isConfirmDialogOpen: action.payload.isConfirmationDialogOpen, selectedProjectId: action.payload.selectedProjectId }; } case 'SET_PROJECTS': { return { ...state, projects: action.payload }; } case 'SET_ALERT': { return { ...state, alert: action.payload }; } case 'SET_FORM_MODE': { return { ...state, formMode: action.payload }; } case 'SET_IS_CONFIRMATION_DIALOG_LOADING': { return { ...state, isConfirmDialogLoading: action.payload }; } case 'SET_IS_LOADING': { return { ...state, isLoading: action.payload }; } case 'SET_OPEN_CLOSE_PROJECT_FORM': { return { ...state, formMode: action.payload.formMode, isFormOpen: action.payload.isFormOpen, selectedProjectId: action.payload.selectedProjectId }; } default: { return state; } } };