Skip to content

Commit

Permalink
refactor project filtering for PMs (#1644)
Browse files Browse the repository at this point in the history
* refactor project filtering for PMs

* update method name
  • Loading branch information
bkmorgan3 authored May 30, 2024
1 parent 617e52d commit 0f625d8
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 10 deletions.
10 changes: 10 additions & 0 deletions backend/controllers/project.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@ ProjectController.project_list = async function (req, res) {
}
};

ProjectController.pm_filtered_projects = async function(req, res) {
try {
const projectList = await Project.find({})
const projects = projectList.filter(proj => req.body.includes(proj._id.toString()))
return res.status(200).send(projects)
} catch(e) {
return res.sendStatus(400)
}
}

ProjectController.create = async function (req, res) {
const { body } = req;

Expand Down
3 changes: 3 additions & 0 deletions backend/routers/projects.router.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ const { AuthUtil } = require("../middleware");
// The base is /api/projects
router.get('/', ProjectController.project_list);

// Its a put because we have to send the PM projects to be filtered here
router.put('/', ProjectController.pm_filtered_projects);

router.post('/', AuthUtil.verifyCookie, ProjectController.create);

router.get('/:ProjectId', ProjectController.project_by_id);
Expand Down
15 changes: 15 additions & 0 deletions client/src/api/ProjectApiService.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,21 @@ class ProjectApiService {
return undefined;
}
}

async fetchPMProjects(projects) {
const requestOptions = {
headers: this.headers,
method: "PUT",
body: JSON.stringify(projects)
}
try {
const res = await fetch(this.baseProjectUrl, requestOptions);
return await res.json();
} catch(e) {
console.error(e);
return undefined;
}
}
}

export default ProjectApiService;
17 changes: 7 additions & 10 deletions client/src/pages/ProjectList.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,18 @@ export default function ProjectList() {
useEffect(
function getProjectsOnMount() {
async function fetchAllProjects() {
let projectsData = await projectApiService.fetchProjects();
let projectData;

//sort the projects alphabetically
projectsData = projectsData.sort((a, b) =>
a.name?.localeCompare(b.name)
);
if(user?.accessLevel === 'admin') {
projectData = await projectApiService.fetchProjects();
setProjects(projectData);
}

// if user is not admin, but is a project manager, only show projects they manage
if (user?.accessLevel !== 'admin' && user?.managedProjects.length > 0) {
projectsData = projectsData.filter((project) =>
user.managedProjects.includes(project._id)
);
projectData = await projectApiService.fetchPMProjects(user.managedProjects);
setProjects(projectData);
}

setProjects(projectsData);
}

fetchAllProjects();
Expand Down

0 comments on commit 0f625d8

Please sign in to comment.