@@ -99,11 +99,15 @@ const ReviewStatus = {
9999 UNKNOWN : 'UNKNOWN'
100100} ;
101101
102+ // mode will be either "self" or undefined.
103+ const selfReviewMode = "self" ;
104+
102105const 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