p00002/redux/reducers/projectsReducer.jsx
2024-09-07 07:52:09 -04:00

56 lines
1.7 KiB
JavaScript

import {
ADD_PROJECT,
SELECT_PROJECT,
ARCHIVE_PROJECT,
} from "../actionTypes";
const initialState = {
projects: [],
selectedProjectId: "0",
};
export default function projectReducer(state = initialState, action) {
switch (action.type) {
// Projects are added only during initialization of the program
// New projects and resources it can use are defined outside of the client program
// Project initiation and closure are considered a separate endeavors
// to project planning, execution, and control in this application.
case ADD_PROJECT: {
return {
...state,
projects: [
...state.projects,
{
projectId: action.project.projectId,
projectName: action.project.projectName,
description: action.project.projectDescription,
},
],
selectedProjectId: action.project.projectId,
};
}
// This is an important switch as everything user does in the session is tied to
// selected project. Selected project must always be prominently displayed in every
// view.
case SELECT_PROJECT: {
return {
...state,
projects: [...state.projects],
selectedProjectId: action.id,
};
}
// Default action when project is closed. Not yet implemented. Archived projects are just
// moved to another view. Project deletion can only be done through admin program and will
// only become noticeable to user after client program restart.
case ARCHIVE_PROJECT: {
return {
...state,
projects: state.projects.map((project) => project.id === action.id),
selectedProjectId: 0,
};
}
default:
return state;
}
}