@@ -34,7 +34,12 @@ import {
34
34
import { styled } from '@mui/material/styles' ;
35
35
36
36
import 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' ;
38
43
import {
39
44
findReviewRequestsByPeriod ,
40
45
findSelfReviewRequestsByPeriodAndTeamMembers
@@ -158,8 +163,6 @@ const TeamReviews = ({ onBack, periodId }) => {
158
163
const isAdmin = selectIsAdmin ( state ) ;
159
164
const period = selectReviewPeriod ( state , periodId ) ;
160
165
161
- const reviewAssignmentsUrl = '/services/review-assignments' ;
162
-
163
166
useEffect ( ( ) => {
164
167
loadAssignments ( ) ;
165
168
} , [ currentMembers ] ) ;
@@ -192,16 +195,7 @@ const TeamReviews = ({ onBack, periodId }) => {
192
195
} ;
193
196
194
197
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 ) ;
205
199
if ( res . error ) return ;
206
200
207
201
const assignments = res . payload . data ;
@@ -210,12 +204,6 @@ const TeamReviews = ({ onBack, periodId }) => {
210
204
} ;
211
205
212
206
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
-
219
207
let source ;
220
208
if ( ! approvalMode || ( isAdmin && showAll ) ) {
221
209
source = currentMembers ;
@@ -230,38 +218,31 @@ const TeamReviews = ({ onBack, periodId }) => {
230
218
// Always filter the members down to existing selected assignments.
231
219
// We do not want to add members that were not already selected.
232
220
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 ) ) ;
234
222
setTeamMembers ( members ) ;
235
223
} ;
236
224
237
225
const updateTeamMembers = async teamMembers => {
226
+ // First, create a set of team members, each with a default reviewer.
238
227
const data = teamMembers . map ( tm => ( {
239
228
revieweeId : tm . id ,
240
229
reviewerId : tm . supervisorid ,
241
230
reviewPeriodId : periodId ,
242
231
approved : false
243
232
} ) ) ;
244
233
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 ) ;
255
236
if ( res . error ) return ;
256
237
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 ;
259
242
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 ) ;
265
246
} ;
266
247
267
248
const addAssignmentForMemberWithNone = async ( members ) => {
@@ -605,11 +586,7 @@ const TeamReviews = ({ onBack, periodId }) => {
605
586
606
587
const { id, revieweeId, reviewerId } = assignment ;
607
588
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 ) ;
613
590
614
591
if ( res . error ) {
615
592
console . error ( 'Error deleting assignment:' , res . error ) ;
@@ -641,19 +618,7 @@ const TeamReviews = ({ onBack, periodId }) => {
641
618
} ;
642
619
643
620
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 ) ;
657
622
if ( res . error ) return ;
658
623
659
624
onBack ( ) ;
@@ -721,16 +686,7 @@ const TeamReviews = ({ onBack, periodId }) => {
721
686
}
722
687
}
723
688
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 ) ;
734
690
if ( res . error ) return ;
735
691
736
692
newAssignments = sortMembers ( res . payload . data ) ;
@@ -940,16 +896,7 @@ const TeamReviews = ({ onBack, periodId }) => {
940
896
} ;
941
897
942
898
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 ) ;
953
900
} ;
954
901
955
902
const visibleTeamMembers = ( ) => {
0 commit comments