56 lines
1.7 KiB
JavaScript
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;
|
|
}
|
|
}
|