Skip to content

Commit 834075b

Browse files
committed
DBC22-4119: moved route switch states to parent panel
1 parent 1c51f9e commit 834075b

3 files changed

Lines changed: 73 additions & 33 deletions

File tree

src/frontend/src/Components/map/panels/RouteDetailsPanel.js

Lines changed: 64 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// React
2-
import React, { useCallback } from 'react';
2+
import React, { useCallback, useEffect, useState } from 'react';
33

44
// Redux
55
import { 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} />

src/frontend/src/Components/routing/RouteDetails.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import 'react-loading-skeleton/dist/skeleton.css'
5656
export default function RouteDetails(props) {
5757
/* Setup */
5858
// Props
59-
const { route, isPanel, setRouteFavCams, setRouteLabel, onMobile, setShowRouteObjs } = props;
59+
const { route, isPanel, setRouteFavCams, setRouteLabel, onMobile, setShowRouteObjs, setRouteSwitched } = props;
6060

6161
// Context
6262
const { authContext, setAuthContext } = useContext(AuthContext);
@@ -322,6 +322,7 @@ export default function RouteDetails(props) {
322322

323323
const switchRouteHandler = () => {
324324
if (!compareRoutes(route, selectedRoute)){
325+
setRouteSwitched(true);
325326
dispatch(updateSelectedRoute(route));
326327
}
327328
}
@@ -723,8 +724,8 @@ export default function RouteDetails(props) {
723724
<Button
724725
variant="light"
725726
className='view-details-btn'
726-
onClick={() => {if (setShowRouteObjs) setShowRouteObjs(true)}}
727-
onKeyDown={() => {if (setShowRouteObjs) setShowRouteObjs(true)}}>
727+
onClick={() => {setShowRouteObjs(true)}}
728+
onKeyDown={() => {setShowRouteObjs(true)}}>
728729

729730
View Details
730731
<FontAwesomeIcon icon={faChevronRight}/>

src/frontend/src/Components/routing/RouteObjectList.js

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default function RouteObjectList(props) {
4545
const largeScreen = useMediaQuery('only screen and (min-width : 768px)');
4646

4747
// Props
48-
const { setShowRouteObjs, clickedFeatureRef, updateClickedFeature } = props;
48+
const { routeSwitched, setShowRouteObjs, clickedFeatureRef, updateClickedFeature } = props;
4949

5050
// Context
5151
const { authContext, setAuthContext } = useContext(AuthContext);
@@ -82,9 +82,6 @@ export default function RouteObjectList(props) {
8282
const [showSavePopup, setShowSavePopup] = useState(false);
8383
const [routeMapImg, setRouteMapImg] = useState(); // for map snapshot
8484
const [objList, setObjList] = useState([]);
85-
const [pendingAdvisories, setPendingAdvisories] = useState(false);
86-
const [pendingEvents, setPendingEvents] = useState(false);
87-
const [pendingFerries, setPendingFerries] = useState(false);
8885

8986
// Effects
9087
useEffect(() => {
@@ -98,25 +95,13 @@ export default function RouteObjectList(props) {
9895
}
9996
}, [authContext, pendingAction]);
10097

101-
// Mark data as not updating when they finish filtering
102-
useEffect(() => {
103-
setPendingAdvisories(true);
104-
}, [filteredAdvisories]);
105-
106-
useEffect(() => {
107-
setPendingEvents(true);
108-
}, [filteredEvents]);
109-
110-
useEffect(() => {
111-
setPendingFerries(true);
112-
}, [filteredFerries]);
113-
11498
// When all data is filtered, rank the object list again
11599
useEffect(() => {
116-
if (pendingAdvisories && pendingEvents && pendingFerries) {
100+
// Only rank when route has finished switching
101+
if (!routeSwitched) {
117102
rankObjectList();
118103
}
119-
}, [pendingAdvisories, pendingEvents, pendingFerries]);
104+
}, [routeSwitched]);
120105

121106
/* Helpers */
122107
const toggleAuthModal = (action) => {
@@ -137,9 +122,6 @@ export default function RouteObjectList(props) {
137122
});
138123

139124
setObjList(projectedObjs);
140-
setPendingAdvisories(false);
141-
setPendingEvents(false);
142-
setPendingFerries(false);
143125
}
144126

145127
const resetPopup = () => {
@@ -219,7 +201,7 @@ export default function RouteObjectList(props) {
219201
}
220202

221203
const getObjectList = () => {
222-
if (pendingAdvisories || pendingEvents || pendingFerries) {
204+
if (routeSwitched) {
223205
return (
224206
<div>
225207
<Skeleton count={5} width={200} />

0 commit comments

Comments
 (0)