Skip to content

Commit 113f74b

Browse files
authored
Merge pull request #2661 from objectcomputing/bugfix-2654/managers-cannot-approve-assignments
Adjust buttons and chips to work with the review assignment permissions
2 parents 9210c3b + 0f660b0 commit 113f74b

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

web-ui/src/components/reviews/TeamReviews.jsx

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

7477
import 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

Comments
 (0)