11// React
2- import React , { useCallback } from 'react' ;
2+ import React , { useCallback , useEffect , useState } from 'react' ;
33
44// Redux
55import { useSelector } from 'react-redux' ;
@@ -24,10 +24,56 @@ export default function RouteDetailsPanel(props) {
2424 const { clickedFeatureRef, updateClickedFeature, showRouteObjs, setShowRouteObjs } = props ;
2525
2626 // Redux
27- const { searchedRoutes, selectedRoute } = useSelector ( useCallback ( memoize ( state => ( {
28- searchedRoutes : state . routes . searchedRoutes ,
29- selectedRoute : state . routes . selectedRoute
30- } ) ) ) ) ;
27+ const {
28+ feeds : {
29+ events : { filteredList : filteredEvents } ,
30+ ferries : { filteredList : filteredFerries } ,
31+ } ,
32+ advisories : { filteredList : filteredAdvisories } ,
33+ routes : { selectedRoute, searchedRoutes } ,
34+
35+ } = useSelector (
36+ useCallback (
37+ memoize ( state => ( {
38+ feeds : {
39+ events : state . feeds . events ,
40+ ferries : state . feeds . ferries ,
41+ } ,
42+ advisories : state . cms . advisories ,
43+ routes : state . routes ,
44+ } ) ) ,
45+ ) ,
46+ ) ;
47+
48+ // States
49+ const [ routeSwitched , setRouteSwitched ] = useState ( false ) ;
50+ const [ pendingAdvisories , setPendingAdvisories ] = useState ( false ) ;
51+ const [ pendingEvents , setPendingEvents ] = useState ( false ) ;
52+ const [ pendingFerries , setPendingFerries ] = useState ( false ) ;
53+
54+ // Effects
55+ // Mark data as not updating when they finish filtering
56+ useEffect ( ( ) => {
57+ setPendingAdvisories ( true ) ;
58+ } , [ filteredAdvisories ] ) ;
59+
60+ useEffect ( ( ) => {
61+ setPendingEvents ( true ) ;
62+ } , [ filteredEvents ] ) ;
63+
64+ useEffect ( ( ) => {
65+ setPendingFerries ( true ) ;
66+ } , [ filteredFerries ] ) ;
67+
68+ // When all data is filtered, rank the object list again
69+ useEffect ( ( ) => {
70+ if ( pendingAdvisories && pendingEvents && pendingFerries ) {
71+ setPendingAdvisories ( false ) ;
72+ setPendingEvents ( false ) ;
73+ setPendingFerries ( false ) ;
74+ setRouteSwitched ( false ) ;
75+ }
76+ } , [ pendingAdvisories , pendingEvents , pendingFerries ] ) ;
3177
3278 /* Rendering */
3379 // Sub components
@@ -41,11 +87,21 @@ export default function RouteDetailsPanel(props) {
4187
4288 < div className = "popup__content" >
4389 { largeScreen && searchedRoutes . map ( ( route , index ) => (
44- < RouteDetails route = { route } isPanel = { true } key = { index } setShowRouteObjs = { setShowRouteObjs } />
90+ < RouteDetails
91+ key = { index }
92+ route = { route }
93+ isPanel = { true }
94+ setShowRouteObjs = { setShowRouteObjs }
95+ setRouteSwitched = { setRouteSwitched } />
4596 ) ) }
4697
4798 { ( ! largeScreen && selectedRoute ) &&
48- < RouteDetails route = { selectedRoute } isPanel = { true } onMobile = { true } setShowRouteObjs = { setShowRouteObjs } />
99+ < RouteDetails
100+ route = { selectedRoute }
101+ isPanel = { true }
102+ onMobile = { true }
103+ setShowRouteObjs = { setShowRouteObjs }
104+ setRouteSwitched = { setRouteSwitched } />
49105 }
50106 </ div >
51107 </ div >
@@ -61,6 +117,7 @@ export default function RouteDetailsPanel(props) {
61117
62118 < div className = "popup__content route-object-list" >
63119 < RouteObjectList
120+ routeSwitched = { routeSwitched }
64121 setShowRouteObjs = { setShowRouteObjs }
65122 clickedFeatureRef = { clickedFeatureRef }
66123 updateClickedFeature = { updateClickedFeature } />
0 commit comments