1- import React , { useState , useEffect , useMemo } from 'react' ;
1+ import React , {
2+ useState , useEffect , useRef , useMemo ,
3+ } from 'react' ;
24import PT from 'prop-types' ;
35import { connect } from 'react-redux' ;
46import TopBanner from 'assets/images/timeline-wall/top-banner.png' ;
@@ -10,15 +12,19 @@ import cn from 'classnames';
1012import moment from 'moment' ;
1113import { useMediaQuery } from 'react-responsive' ;
1214import _ from 'lodash' ;
15+ import { config } from 'topcoder-react-utils' ;
1316import timelineActions from 'actions/timelineWall' ;
1417import LoadingIndicator from 'components/LoadingIndicator' ;
1518import TimelineEvents from './timeline-events' ;
1619import PendingApprovals from './pending-approvals' ;
1720
1821import './styles.scss' ;
1922
23+
24+ const FETCHING_PENDING_APPROVAL_EVENTS_INTERVAL = _ . get ( config , 'TIMELINE.FETCHING_PENDING_APPROVAL_EVENTS_INTERVAL' , 0 ) ;
2025function TimelineWallContainer ( props ) {
2126 const [ tab , setTab ] = useState ( 0 ) ;
27+ const fetchingApprovalsInterval = useRef ( null ) ;
2228 const [ showRightFilterMobile , setShowRightFilterMobile ] = useState ( false ) ;
2329 const [ selectedFilterValue , setSelectedFilterValue ] = useState ( {
2430 year : 0 ,
@@ -37,6 +43,7 @@ function TimelineWallContainer(props) {
3743 getAvatar,
3844 userAvatars,
3945 pendingApprovals,
46+ loadingApprovals,
4047 uploading,
4148 uploadResult,
4249 } = props ;
@@ -56,9 +63,25 @@ function TimelineWallContainer(props) {
5663 } , [ ] ) ;
5764
5865 useEffect ( ( ) => {
59- if ( authToken && isAdmin && ! pendingApprovals . length ) {
66+ if ( fetchingApprovalsInterval . current ) {
67+ clearInterval ( fetchingApprovalsInterval . current ) ;
68+ fetchingApprovalsInterval . current = null ;
69+ }
70+ if ( authToken && isAdmin ) {
6071 getPendingApprovals ( authToken ) ;
72+ if ( FETCHING_PENDING_APPROVAL_EVENTS_INTERVAL ) {
73+ fetchingApprovalsInterval . current = setInterval ( ( ) => {
74+ getPendingApprovals ( authToken ) ;
75+ } , FETCHING_PENDING_APPROVAL_EVENTS_INTERVAL ) ;
76+ }
6177 }
78+
79+ return ( ) => {
80+ if ( fetchingApprovalsInterval . current ) {
81+ clearInterval ( fetchingApprovalsInterval . current ) ;
82+ fetchingApprovalsInterval . current = null ;
83+ }
84+ } ;
6285 } , [ isAdmin ] ) ;
6386
6487 useEffect ( ( ) => {
@@ -73,7 +96,7 @@ function TimelineWallContainer(props) {
7396 } , [ events ] ) ;
7497
7598 useEffect ( ( ) => {
76- if ( ( pendingApprovals || [ ] ) . length ) {
99+ if ( pendingApprovals . length ) {
77100 _ . uniqBy ( pendingApprovals , 'createdBy' ) . forEach ( ( eventItem ) => {
78101 const photoURL = _ . get ( userAvatars , eventItem . createdBy ) ;
79102 if ( ! photoURL ) {
@@ -229,8 +252,10 @@ function TimelineWallContainer(props) {
229252 />
230253 < React . Fragment >
231254 {
232- loading ? (
233- < LoadingIndicator />
255+ loadingApprovals ? (
256+ < LoadingIndicator
257+ styleName = { cn ( { hide : tab === 0 } ) }
258+ />
234259 ) : (
235260 < PendingApprovals
236261 events = { pendingApprovals }
@@ -256,6 +281,7 @@ TimelineWallContainer.defaultProps = {
256281 auth : null ,
257282 isAdmin : false ,
258283 loading : false ,
284+ loadingApprovals : false ,
259285 uploading : false ,
260286 uploadResult : '' ,
261287 events : [ ] ,
@@ -270,6 +296,7 @@ TimelineWallContainer.propTypes = {
270296 auth : PT . shape ( ) ,
271297 isAdmin : PT . bool ,
272298 loading : PT . bool ,
299+ loadingApprovals : PT . bool ,
273300 uploading : PT . bool ,
274301 uploadResult : PT . string ,
275302 events : PT . arrayOf ( PT . shape ( ) ) ,
@@ -288,11 +315,13 @@ const mapStateToProps = state => ({
288315 } ,
289316 isAdmin : state . timelineWall . isAdmin ,
290317 loading : state . timelineWall . loading ,
318+ loadingApprovals : state . timelineWall . loadingApprovals
319+ && ! ( state . timelineWall . pendingApprovals || [ ] ) . length ,
291320 uploading : state . timelineWall . uploading ,
292321 uploadResult : state . timelineWall . uploadResult ,
293322 events : state . timelineWall . events ,
294323 userAvatars : state . timelineWall . userAvatars ,
295- pendingApprovals : state . timelineWall . pendingApprovals ,
324+ pendingApprovals : state . timelineWall . pendingApprovals || [ ] ,
296325} ) ;
297326
298327function mapDispatchToProps ( dispatch ) {
0 commit comments