@@ -68,7 +68,10 @@ import {
6868 selectReviewPeriod ,
6969 selectSupervisors ,
7070 selectProfile ,
71- selectTeamMembersBySupervisorId
71+ selectTeamMembersBySupervisorId ,
72+ selectHasCreateReviewAssignmentsPermission ,
73+ selectHasDeleteReviewAssignmentsPermission ,
74+ selectHasUpdateReviewAssignmentsPermission ,
7275} from '../../context/selectors' ;
7376
7477import MemberSelector from '../member_selector/MemberSelector' ;
@@ -127,9 +130,11 @@ const TeamReviews = ({ onBack, periodId }) => {
127130 const location = useLocation ( ) ;
128131
129132 const [ openMode , setOpenMode ] = useState ( false ) ;
130- const [ approvalMode , setApprovalMode ] = useState ( false ) ;
133+ const [ managerApprovalMode , setManagerApprovalMode ] = useState ( false ) ;
134+ const [ approvalState , setApprovalState ] = useState ( false ) ;
131135 const [ assignments , setAssignments ] = useState ( [ ] ) ;
132136 const [ canUpdate , setCanUpdate ] = useState ( false ) ;
137+ const [ canApprove , setCanApprove ] = useState ( false ) ;
133138 const [ confirmApproveAllOpen , setConfirmApproveAllOpen ] = useState ( false ) ;
134139 const [ confirmationDialogOpen , setConfirmationDialogOpen ] = useState ( false ) ;
135140 const [ confirmationText , setConfirmationText ] = useState ( '' ) ;
@@ -173,19 +178,22 @@ const TeamReviews = ({ onBack, periodId }) => {
173178 const isManager = supervisors . some ( s => s . id === myId ) ;
174179 const period = selectReviewPeriod ( state , periodId ) ;
175180 if ( period ) {
176- setApprovalMode (
177- isManager && period . reviewStatus === ReviewStatus . AWAITING_APPROVAL
178- ) ;
179- setOpenMode ( isManager && period . reviewStatus === ReviewStatus . OPEN ) ;
181+ setApprovalState ( period . reviewStatus === ReviewStatus . AWAITING_APPROVAL ) ;
182+ setManagerApprovalMode ( isManager && approvalState ) ;
180183 }
181184
182- setCanUpdate ( selectHasUpdateReviewPeriodPermission ( state ) &&
183- period ?. reviewStatus !== ReviewStatus . OPEN ) ;
185+ setOpenMode ( period ?. reviewStatus === ReviewStatus . OPEN ) ;
186+ setCanUpdate ( ! openMode &&
187+ selectHasUpdateReviewPeriodPermission ( state ) ) ;
188+ setCanApprove ( approvalState &&
189+ selectHasUpdateReviewAssignmentsPermission ( state ) ) ;
190+
191+
184192 } , [ state ] ) ;
185193
186194 useEffect ( ( ) => {
187195 loadTeamMembers ( ) ;
188- } , [ approvalMode , assignments , showAll ] ) ;
196+ } , [ managerApprovalMode , assignments , showAll ] ) ;
189197
190198 const editReviewers = member => {
191199 setSelectedMember ( member ) ;
@@ -205,7 +213,7 @@ const TeamReviews = ({ onBack, periodId }) => {
205213
206214 const loadTeamMembers = ( ) => {
207215 let source ;
208- if ( ! approvalMode || ( isAdmin && showAll ) ) {
216+ if ( ! managerApprovalMode || ( isAdmin && showAll ) ) {
209217 source = currentMembers ;
210218 } else {
211219 // Get the direct reports of the current user who is a manager.
@@ -769,7 +777,8 @@ const TeamReviews = ({ onBack, periodId }) => {
769777 key = { reviewer . id }
770778 label = { openMode ? statusLabel : reviewerName }
771779 variant = { variant }
772- onDelete = { canUpdate && ! openMode && hasReviewer ?
780+ onDelete = { ! openMode && hasReviewer &&
781+ selectHasDeleteReviewAssignmentsPermission ( state ) ?
773782 ( ) => deleteReviewer ( member , reviewer ) : null }
774783 style = { { backgroundColor : backgroundColor } }
775784 /> ) ;
@@ -901,7 +910,7 @@ const TeamReviews = ({ onBack, periodId }) => {
901910
902911 const visibleTeamMembers = ( ) => {
903912 const query = nameQuery . trim ( ) . toLowerCase ( ) ;
904- if ( ! approvalMode || query . length === 0 ) return teamMembers ;
913+ if ( ! managerApprovalMode || query . length === 0 ) return teamMembers ;
905914
906915 return teamMembers . filter ( member =>
907916 member . name . toLowerCase ( ) . includes ( query )
@@ -962,7 +971,7 @@ const TeamReviews = ({ onBack, periodId }) => {
962971 </ Alert >
963972 ) }
964973
965- { approvalMode && (
974+ { approvalState && (
966975 < div id = "approval-row" style = { { display : 'flex' , alignItems : 'center' } } >
967976 { /* Wrapper div for TextField and Switch */ }
968977 < div style = { { display : 'flex' , alignItems : 'center' , flexGrow : 1 } } >
@@ -997,7 +1006,7 @@ const TeamReviews = ({ onBack, periodId }) => {
9971006 ) }
9981007 </ div >
9991008 { /* Button aligned to the right */ }
1000- { canUpdate && (
1009+ { canApprove && (
10011010 < div style = { { marginLeft : 'auto' } } >
10021011 < Button onClick = { ( ) => setConfirmApproveAllOpen ( true ) } >
10031012 Approve All
@@ -1035,7 +1044,9 @@ const TeamReviews = ({ onBack, periodId }) => {
10351044 < Typography > Reviewers:</ Typography >
10361045 { renderReviewers ( member ) }
10371046
1038- { canUpdate && (
1047+ { ! openMode &&
1048+ selectHasCreateReviewAssignmentsPermission ( state ) &&
1049+ selectHasDeleteReviewAssignmentsPermission ( state ) && (
10391050 < IconButton
10401051 aria-label = "Edit Reviewers"
10411052 onClick = { ( ) => editReviewers ( member ) }
@@ -1044,7 +1055,8 @@ const TeamReviews = ({ onBack, periodId }) => {
10441055 </ IconButton >
10451056 ) }
10461057
1047- { canUpdate && approvalMode && (
1058+ { canApprove &&
1059+ selectHasUpdateReviewAssignmentsPermission ( state ) && (
10481060 < Button onClick = { ( ) => toggleApproval ( member ) } >
10491061 { isMemberApproved ( member ) ? 'Unapprove' : 'Approve' }
10501062 </ Button >
0 commit comments