Skip to content

Commit e3ae7c5

Browse files
committed
Filter review periods so that we only show open periods or closed periods in which we were involved.
1 parent e7b5b23 commit e3ae7c5

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

web-ui/src/components/reviews/periods/ReviewPeriods.jsx

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,15 @@ const ReviewStatus = {
9999
UNKNOWN: 'UNKNOWN'
100100
};
101101

102+
// mode will be either "self" or undefined.
103+
const selfReviewMode = "self";
104+
102105
const ReviewPeriods = ({ onPeriodSelected, mode }) => {
103106
const { state, dispatch } = useContext(AppContext);
104107

105108
const [canSave, setCanSave] = useState(false);
106109
const [loading, setLoading] = useState(false);
110+
const [periods, setPeriods] = useState([]);
107111
const [periodToAdd, setPeriodToAdd] = useState({
108112
name: '',
109113
reviewStatus: ReviewStatus.PLANNING,
@@ -119,9 +123,15 @@ const ReviewPeriods = ({ onPeriodSelected, mode }) => {
119123

120124
const currentUserId = selectCurrentUserId(state);
121125
const csrf = selectCsrfToken(state);
122-
const periods = selectReviewPeriods(state);
123126
const userProfile = selectUserProfile(state);
124127

128+
useEffect(() => {
129+
setPeriods(selectReviewPeriods(state)
130+
.filter((r) => mode !== selfReviewMode ||
131+
r.reviewStatus === ReviewStatus.OPEN ||
132+
r.reviewStatus === ReviewStatus.CLOSED));
133+
}, [state, mode]);
134+
125135
useQueryParameters([
126136
{
127137
name: 'add',
@@ -255,6 +265,7 @@ const ReviewPeriods = ({ onPeriodSelected, mode }) => {
255265

256266
useEffect(() => {
257267
const getSelfReviews = async () => {
268+
setLoading(true);
258269
let reviews = {};
259270
Promise.all(
260271
periods.map(async period => {
@@ -280,7 +291,17 @@ const ReviewPeriods = ({ onPeriodSelected, mode }) => {
280291
});
281292
}
282293
})
283-
).then(() => setSelfReviews(reviews));
294+
).then(() => {
295+
// Now that we have the reviews loaded, filter out closed
296+
// self-review periods in which the current user is not involved.
297+
if (mode == selfReviewMode) {
298+
setPeriods(periods.filter((r) =>
299+
r.reviewStatus !== ReviewStatus.CLOSED ||
300+
!!reviews[r.id]));
301+
}
302+
setSelfReviews(reviews);
303+
setLoading(false);
304+
});
284305
};
285306
if (
286307
csrf &&
@@ -291,18 +312,17 @@ const ReviewPeriods = ({ onPeriodSelected, mode }) => {
291312
) {
292313
getSelfReviews();
293314
}
294-
}, [csrf, periods, currentUserId, selfReviews]);
315+
}, [csrf, periods, currentUserId, selfReviews ]);
295316

296317
const onPeriodClick = useCallback(
297318
id => {
298319
const status = selectReviewPeriod(state, id)?.reviewStatus;
299320
switch (status) {
300321
case ReviewStatus.PLANNING:
301-
onPeriodSelected(id);
302-
break;
303322
case ReviewStatus.AWAITING_APPROVAL:
304-
// TODO: Check for the required permission.
305-
onPeriodSelected(id);
323+
if (mode !== selfReviewMode) {
324+
onPeriodSelected(id);
325+
}
306326
break;
307327
case ReviewStatus.OPEN:
308328
onPeriodSelected(id);

0 commit comments

Comments
 (0)