94 lines
2.2 KiB
TypeScript
94 lines
2.2 KiB
TypeScript
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;
|
|
}
|
|
}
|
|
};
|