@@ -239,22 +239,46 @@ const TeamReviews = ({ onBack, periodId }) => {
239239 } ;
240240
241241 const updateTeamMembers = async teamMembers => {
242- // First, create a set of team members, each with a default reviewer.
243- const data = teamMembers . map ( tm => ( {
242+ // First, get the list of review assignements.
243+ let res = await getReviewAssignments ( periodId , csrf ) ;
244+ if ( res . error ) return ;
245+
246+ // Match up the review assignments with the team members.
247+ const existing = res . payload . data
248+ . filter ( a => teamMembers . find ( m => m . id == a . revieweeId ) ) ;
249+
250+ // Create a set of team members that do not yet have review assignments,
251+ // each with a default reviewer.
252+ const mem = teamMembers . filter (
253+ m => ! existing . find ( a => a . revieweeId == m . id )
254+ ) ;
255+ const data = mem . map ( tm => ( {
244256 revieweeId : tm . id ,
245257 reviewerId : tm . supervisorid ,
246258 reviewPeriodId : periodId ,
247259 approved : false
248260 } ) ) ;
249261
250262 // Set those on the server as the review assignments.
251- let res = await createReviewAssignments ( periodId , data , csrf ) ;
263+ res = await createReviewAssignments ( periodId , data , csrf ) ;
252264 if ( res . error ) return ;
253265
254266 // Get the list of review assignments from the server to ensure that we are
255267 // reflecting what was actually created.
256268 res = await getReviewAssignments ( periodId , csrf ) ;
257- const assignments = res . error ? [ ] : res . payload . data ;
269+ let assignments = res . error ? [ ] : res . payload . data ;
270+
271+ // Remove review assignments for members no longer selected.
272+ for ( let assignment of assignments ) {
273+ if ( ! teamMembers . find ( m => m . id == assignment . revieweeId ) ) {
274+ // Delete review assignments if we do not have the matching member.
275+ await removeReviewAssignment ( assignment . id , csrf ) ;
276+ }
277+ }
278+
279+ // Get the review assignments from the server one more time.
280+ res = await getReviewAssignments ( periodId , csrf ) ;
281+ assignments = res . error ? [ ] : res . payload . data ;
258282
259283 // Update our reactive assignment and member lists.
260284 setAssignments ( assignments ) ;
0 commit comments