From f5f94fb8e3cdc1f9f2447922265a4ebb1b13b9fd Mon Sep 17 00:00:00 2001 From: Chad Elliott Date: Fri, 1 Nov 2024 16:10:04 -0500 Subject: [PATCH 1/2] Only make new review assignments for added members and remove review assignments for those no longer selected. --- .../reviews/ReviewAssignmentController.java | 2 +- web-ui/src/components/reviews/TeamReviews.jsx | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/com/objectcomputing/checkins/services/reviews/ReviewAssignmentController.java b/server/src/main/java/com/objectcomputing/checkins/services/reviews/ReviewAssignmentController.java index b695e177db..b6059367fe 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/reviews/ReviewAssignmentController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/reviews/ReviewAssignmentController.java @@ -68,7 +68,7 @@ public HttpResponse createReviewAssignment(@Body @Valid Review public List createReviewAssignment(@NotNull UUID reviewPeriodId, @Body List<@Valid ReviewAssignmentDTO> assignments) { List assignmentEntities = assignments.stream().map(ReviewAssignmentDTO::convertToEntity).toList(); - return reviewAssignmentServices.saveAll(reviewPeriodId, assignmentEntities, true); + return reviewAssignmentServices.saveAll(reviewPeriodId, assignmentEntities, false); } /** diff --git a/web-ui/src/components/reviews/TeamReviews.jsx b/web-ui/src/components/reviews/TeamReviews.jsx index b2502f1d1a..5ffaa93964 100644 --- a/web-ui/src/components/reviews/TeamReviews.jsx +++ b/web-ui/src/components/reviews/TeamReviews.jsx @@ -239,8 +239,20 @@ const TeamReviews = ({ onBack, periodId }) => { }; const updateTeamMembers = async teamMembers => { - // First, create a set of team members, each with a default reviewer. - const data = teamMembers.map(tm => ({ + // First, get the list of review assignements. + let res = await getReviewAssignments(periodId, csrf); + if (res.error) return; + + // Match up the review assignments with the team members. + const existing = res.payload.data + .filter(a => teamMembers.find(m => m.id == a.revieweeId)); + + // Create a set of team members that do not yet have review assignments, + // each with a default reviewer. + const mem = teamMembers.filter( + m => !existing.find(a => a.revieweeId == m.id) + ); + const data = mem.map(tm => ({ revieweeId: tm.id, reviewerId: tm.supervisorid, reviewPeriodId: periodId, @@ -248,7 +260,7 @@ const TeamReviews = ({ onBack, periodId }) => { })); // Set those on the server as the review assignments. - let res = await createReviewAssignments(periodId, data, csrf); + res = await createReviewAssignments(periodId, data, csrf); if (res.error) return; // Get the list of review assignments from the server to ensure that we are From 092593792822ae60ba84690e29f79c83ecdbf246 Mon Sep 17 00:00:00 2001 From: Chad Elliott Date: Fri, 1 Nov 2024 16:11:02 -0500 Subject: [PATCH 2/2] Only make new review assignments for added members and remove review assignments for those no longer selected. --- web-ui/src/components/reviews/TeamReviews.jsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/web-ui/src/components/reviews/TeamReviews.jsx b/web-ui/src/components/reviews/TeamReviews.jsx index 5ffaa93964..6f9867a01a 100644 --- a/web-ui/src/components/reviews/TeamReviews.jsx +++ b/web-ui/src/components/reviews/TeamReviews.jsx @@ -266,7 +266,19 @@ const TeamReviews = ({ onBack, periodId }) => { // Get the list of review assignments from the server to ensure that we are // reflecting what was actually created. res = await getReviewAssignments(periodId, csrf); - const assignments = res.error ? [] : res.payload.data; + let assignments = res.error ? [] : res.payload.data; + + // Remove review assignments for members no longer selected. + for(let assignment of assignments) { + if (!teamMembers.find(m => m.id == assignment.revieweeId)) { + // Delete review assignments if we do not have the matching member. + await removeReviewAssignment(assignment.id, csrf); + } + } + + // Get the review assignments from the server one more time. + res = await getReviewAssignments(periodId, csrf); + assignments = res.error ? [] : res.payload.data; // Update our reactive assignment and member lists. setAssignments(assignments);