@@ -34,7 +34,12 @@ import {
3434import { styled } from '@mui/material/styles' ;
3535
3636import ConfirmationDialog from '../dialogs/ConfirmationDialog' ;
37- import { resolve } from '../../api/api.js' ;
37+ import {
38+ getReviewAssignments ,
39+ createReviewAssignments ,
40+ updateReviewAssignment ,
41+ removeReviewAssignment ,
42+ } from '../../api/reviewassignments.js' ;
3843import {
3944 findReviewRequestsByPeriod ,
4045 findSelfReviewRequestsByPeriodAndTeamMembers
@@ -158,8 +163,6 @@ const TeamReviews = ({ onBack, periodId }) => {
158163 const isAdmin = selectIsAdmin ( state ) ;
159164 const period = selectReviewPeriod ( state , periodId ) ;
160165
161- const reviewAssignmentsUrl = '/services/review-assignments' ;
162-
163166 useEffect ( ( ) => {
164167 loadAssignments ( ) ;
165168 } , [ currentMembers ] ) ;
@@ -192,16 +195,7 @@ const TeamReviews = ({ onBack, periodId }) => {
192195 } ;
193196
194197 const loadAssignments = async ( ) => {
195- const myId = currentUser ?. id ;
196- const res = await resolve ( {
197- method : 'GET' ,
198- url : `${ reviewAssignmentsUrl } /period/${ periodId } ` ,
199- headers : {
200- 'X-CSRF-Header' : csrf ,
201- Accept : 'application/json' ,
202- 'Content-Type' : 'application/json;charset=UTF-8'
203- }
204- } ) ;
198+ const res = await getReviewAssignments ( periodId , csrf ) ;
205199 if ( res . error ) return ;
206200
207201 const assignments = res . payload . data ;
@@ -210,12 +204,6 @@ const TeamReviews = ({ onBack, periodId }) => {
210204 } ;
211205
212206 const loadTeamMembers = ( ) => {
213- // If we already have a list of team members, we should not overwrite the
214- // list with the original list of team members.
215- if ( teamMembers . length > 0 ) {
216- return ;
217- }
218-
219207 let source ;
220208 if ( ! approvalMode || ( isAdmin && showAll ) ) {
221209 source = currentMembers ;
@@ -230,38 +218,31 @@ const TeamReviews = ({ onBack, periodId }) => {
230218 // Always filter the members down to existing selected assignments.
231219 // We do not want to add members that were not already selected.
232220 const memberIds = assignments . map ( a => a . revieweeId ) ;
233- let members = source . filter ( m => memberIds . includes ( m . id ) ) ;
221+ const members = source . filter ( m => memberIds . includes ( m . id ) ) ;
234222 setTeamMembers ( members ) ;
235223 } ;
236224
237225 const updateTeamMembers = async teamMembers => {
226+ // First, create a set of team members, each with a default reviewer.
238227 const data = teamMembers . map ( tm => ( {
239228 revieweeId : tm . id ,
240229 reviewerId : tm . supervisorid ,
241230 reviewPeriodId : periodId ,
242231 approved : false
243232 } ) ) ;
244233
245- const res = await resolve ( {
246- method : 'POST' ,
247- url : reviewAssignmentsUrl + '/' + periodId ,
248- data,
249- headers : {
250- 'X-CSRF-Header' : csrf ,
251- Accept : 'application/json' ,
252- 'Content-Type' : 'application/json;charset=UTF-8'
253- }
254- } ) ;
234+ // Set those on the server as the review assignments.
235+ let res = await createReviewAssignments ( periodId , data , csrf ) ;
255236 if ( res . error ) return ;
256237
257- setTeamMembers ( teamMembers ) ;
258- addAssignmentForMemberWithNone ( teamMembers ) ;
238+ // Get the list of review assignments from the server to ensure that we are
239+ // reflecting what was actually created.
240+ res = await getReviewAssignments ( periodId , csrf ) ;
241+ const assignments = res . error ? [ ] : res . payload . data ;
259242
260- // Now that teamMembers has been updated, we need to make sure that the
261- // assignments reflects the set of team members.
262- const ids = teamMembers . map ( m => m . id ) ;
263- const newAssignments = assignments . filter ( a => a . revieweeId && ids . includes ( a . revieweeId ) ) ;
264- setAssignments ( newAssignments ) ;
243+ // Update our reactive assignment and member lists.
244+ setAssignments ( assignments ) ;
245+ setTeamMembers ( teamMembers ) ;
265246 } ;
266247
267248 const addAssignmentForMemberWithNone = async ( members ) => {
@@ -605,11 +586,7 @@ const TeamReviews = ({ onBack, periodId }) => {
605586
606587 const { id, revieweeId, reviewerId } = assignment ;
607588 if ( id ) {
608- const res = await resolve ( {
609- method : 'DELETE' ,
610- url : `${ reviewAssignmentsUrl } /${ id } ` ,
611- headers : { 'X-CSRF-Header' : csrf }
612- } ) ;
589+ const res = await removeReviewAssignment ( id , csrf ) ;
613590
614591 if ( res . error ) {
615592 console . error ( 'Error deleting assignment:' , res . error ) ;
@@ -641,19 +618,7 @@ const TeamReviews = ({ onBack, periodId }) => {
641618 } ;
642619
643620 const updateReviewPeriodStatus = async reviewStatus => {
644- const res = await resolve ( {
645- method : 'PUT' ,
646- url : '/services/review-periods' ,
647- headers : {
648- Accept : 'application/json' ,
649- 'Content-Type' : 'application/json;charset=UTF-8' ,
650- 'X-CSRF-Header' : csrf
651- } ,
652- data : {
653- ...period ,
654- reviewStatus
655- }
656- } ) ;
621+ const res = await updateReviewPeriod ( { ...period , reviewStatus } , csrf ) ;
657622 if ( res . error ) return ;
658623
659624 onBack ( ) ;
@@ -721,16 +686,7 @@ const TeamReviews = ({ onBack, periodId }) => {
721686 }
722687 }
723688
724- const res = await resolve ( {
725- method : 'POST' ,
726- url : `${ reviewAssignmentsUrl } /${ periodId } ` ,
727- data : newAssignments ,
728- headers : {
729- 'X-CSRF-Header' : csrf ,
730- Accept : 'application/json' ,
731- 'Content-Type' : 'application/json;charset=UTF-8'
732- }
733- } ) ;
689+ const res = await createReviewAssignments ( periodId , newAssignments , csrf ) ;
734690 if ( res . error ) return ;
735691
736692 newAssignments = sortMembers ( res . payload . data ) ;
@@ -940,16 +896,7 @@ const TeamReviews = ({ onBack, periodId }) => {
940896 } ;
941897
942898 const approveReviewAssignment = async ( assignment , approved ) => {
943- const res = await resolve ( {
944- method : assignment . id === null ? 'POST' : 'PUT' ,
945- url : '/services/review-assignments' ,
946- headers : {
947- Accept : 'application/json' ,
948- 'Content-Type' : 'application/json;charset=UTF-8' ,
949- 'X-CSRF-Header' : csrf
950- } ,
951- data : { ...assignment , approved }
952- } ) ;
899+ await updateReviewAssignment ( { ...assignment , approved } , csrf ) ;
953900 } ;
954901
955902 const visibleTeamMembers = ( ) => {
0 commit comments