Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Track realtime state of itinerary legs #5072

Merged
merged 86 commits into from
Oct 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
b31dd0e
feat: navigator content when journey is over
vesameskanen Sep 10, 2024
340d454
Merge branch 'v3' into query-legs
vesameskanen Sep 10, 2024
f3f49aa
feat: query leg states
vesameskanen Sep 11, 2024
a9dbaa5
chore: update schema
vesameskanen Sep 11, 2024
be46bbf
feat: query realtime state of legs
vesameskanen Sep 11, 2024
c48d39e
Merge branch 'v3' into navi-query-realtime
vesameskanen Sep 13, 2024
6b71a66
fix: currentLeg can be null during journey (waiting periods)
vesameskanen Sep 13, 2024
92dc750
fix: several typos and wrong docs
vesameskanen Sep 13, 2024
4cdf870
navilabel, very much wip
Antiik91 Sep 13, 2024
f7351aa
fix: query rt leg id
vesameskanen Sep 13, 2024
6f69e30
feat: validate itinerary transfers by realtime
vesameskanen Sep 13, 2024
79df104
initial top label for navigator
Antiik91 Sep 16, 2024
54e51d1
feat: new bottom sheet content for navigator
vesameskanen Sep 16, 2024
ce84538
merge vesa draft pr
Antiik91 Sep 16, 2024
e06ecbd
findtransferproblems out of the Navigator function
Antiik91 Sep 16, 2024
b239685
feat: maximize map when navigation starts
vesameskanen Sep 16, 2024
46fe182
chore: remove scrollTo code which seems to do nothing
vesameskanen Sep 16, 2024
d12532d
review observations
Antiik91 Sep 16, 2024
523f24c
Merge pull request #5074 from HSLdevcom/navi-top-cards
vesameskanen Sep 16, 2024
ff635ea
Merge branch 'navi-query-realtime' into navi-bottom
vesameskanen Sep 16, 2024
655fca4
fix: remove dead code
vesameskanen Sep 16, 2024
c66ca8e
Merge pull request #5075 from HSLdevcom/navi-bottom
Antiik91 Sep 17, 2024
c365c3b
Proper styles and data for NaviContainer
Antiik91 Sep 17, 2024
fb6233c
revert line removal
Antiik91 Sep 17, 2024
feebba3
sanity check dis and dur
Antiik91 Sep 17, 2024
87a1dfb
duration to navigator legquery
Antiik91 Sep 17, 2024
827296d
formattedmessage to platformcode
Antiik91 Sep 17, 2024
852c1ba
remove dist dur from realtimeleg
Antiik91 Sep 17, 2024
e247134
Merge pull request #5077 from HSLdevcom/navi-top-styles
vesameskanen Sep 17, 2024
c2d14ba
fix: rewrite mobile bottom sheet scroll mess
vesameskanen Sep 18, 2024
09419a9
refactor navigator data handling to naviContainer
Antiik91 Sep 18, 2024
57e882b
fix: add pading also on top
vesameskanen Sep 18, 2024
dbda141
remove unnecessary props from navigator
Antiik91 Sep 18, 2024
675dbf7
navigator -> naviTop
Antiik91 Sep 18, 2024
eaf62d7
fix styles
Antiik91 Sep 18, 2024
aa6d608
Merge pull request #5081 from HSLdevcom/nave-refactor-structure
vesameskanen Sep 18, 2024
ff27b40
chore: document map bottomsheet context
vesameskanen Sep 18, 2024
61f24ac
Merge pull request #5080 from HSLdevcom/fix-scroll
Antiik91 Sep 18, 2024
94cfa8e
rename queries
Antiik91 Sep 18, 2024
1529132
Merge pull request #5083 from HSLdevcom/navi-fix-query
vesameskanen Sep 18, 2024
32aac04
feat: bottomsheet scroll to back to middle
vesameskanen Sep 18, 2024
ba2d86f
fix: limit bottom padding
vesameskanen Sep 18, 2024
cc2946e
fix: restore map content after navigation
vesameskanen Sep 18, 2024
eff3eaf
feat: show arrival estimate
vesameskanen Sep 18, 2024
6b11d61
fix: use existing translaton for duration
vesameskanen Sep 19, 2024
1909334
feat: improve bottom sheet control
vesameskanen Sep 20, 2024
52ed6ea
Merge pull request #5085 from HSLdevcom/more-navi-logic
Antiik91 Sep 20, 2024
adc27d5
chore: tune map padding
vesameskanen Sep 20, 2024
2959872
feat: change MobileView to class component
vesameskanen Sep 20, 2024
4048cfd
feat: use the new MobileView class method to change the bottom sheet …
vesameskanen Sep 20, 2024
cc0c2e3
chore: Bottom sheet context is no longer needed
vesameskanen Sep 20, 2024
a765b9b
initial information stack
Antiik91 Sep 23, 2024
12b235f
add translationfields
Antiik91 Sep 23, 2024
c951dae
fix: set zoom when focusing to a point of an itinerary
vesameskanen Sep 23, 2024
032a4cb
chore: simplify props flow
vesameskanen Sep 23, 2024
e88fdd7
chore: get map ref from stopsnearyou page
vesameskanen Sep 23, 2024
e05dfe6
chore: pass match
vesameskanen Sep 23, 2024
6872d6e
reaname stacs and infos, refactoring, add more styles
Antiik91 Sep 23, 2024
c585a8c
keep the arrow in place
Antiik91 Sep 23, 2024
bd00f32
tweak translation keys
Antiik91 Sep 23, 2024
618152a
little more tweaking
Antiik91 Sep 23, 2024
749a6f1
navi info currently does not need bgcolor
Antiik91 Sep 23, 2024
0fa9d2d
variable type -> info
Antiik91 Sep 23, 2024
b949879
css tweaks
Antiik91 Sep 23, 2024
7d4cc40
Revert "Update redis dependencies"
vesameskanen Sep 23, 2024
3ac2e4e
chore: set bottom sheet at mounting
vesameskanen Sep 23, 2024
e910d5b
fix: set bottom sheet when deader changes, set proper padding defaults
vesameskanen Sep 24, 2024
2d7e497
refactor: content from NaviInfo to NaviStack
Antiik91 Sep 24, 2024
0685494
refactor: canceled, transferproblems etc to correct components
Antiik91 Sep 24, 2024
e754bd4
Merge pull request #5088 from HSLdevcom/navi-add-info
vesameskanen Sep 24, 2024
ef9151d
chore: update leg query and graphql schema
vesameskanen Sep 24, 2024
0b0d4b3
fix: use new leg query data
vesameskanen Sep 25, 2024
453a373
Merge branch 'navi-query-realtime' into working-map-padding
vesameskanen Sep 25, 2024
0ff8027
fix: access padding correctly
vesameskanen Sep 25, 2024
3a7f057
fix: use unmodified padding from props
vesameskanen Sep 25, 2024
9a22369
fix: consisten mapref type
vesameskanen Sep 25, 2024
f261bc3
chore: bring back bottomsheetcontext
vesameskanen Sep 25, 2024
f593717
chore: remove unused context
vesameskanen Sep 26, 2024
080552e
Merge pull request #5092 from HSLdevcom/working-map-padding
Antiik91 Sep 26, 2024
a6a273e
Merge branch 'v3' into navi-query-realtime
vesameskanen Sep 26, 2024
a2b5c1c
chore: enable navi in hsl
vesameskanen Sep 26, 2024
bf921c5
fix: use router util when possible
vesameskanen Sep 27, 2024
7163c21
chore: change MobileView back to function component
vesameskanen Sep 27, 2024
3c65f9b
chore: update schema
vesameskanen Sep 27, 2024
006091a
fix: update leg query parameter type
vesameskanen Sep 27, 2024
4387346
Merge pull request #5094 from HSLdevcom/mobiletuning
Antiik91 Sep 27, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
210 changes: 116 additions & 94 deletions app/component/MobileView.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
import PropTypes from 'prop-types';
import React, { useRef, useLayoutEffect, useState } from 'react';
import { configShape } from '../util/shapes';
import React, {
useRef,
useLayoutEffect,
useState,
forwardRef,
useImperativeHandle,
} from 'react';
import MapBottomsheetContext from './map/MapBottomsheetContext';
import MobileFooter from './MobileFooter';

function slowlyScrollTo(el, to = 0, duration = 1000) {
const BOTTOM_SHEET_OFFSET = 20;
const topBarHeight = 64;

function getMiddlePosition() {
return Math.floor((window.innerHeight - topBarHeight) * 0.45);
}

function slowlyScrollTo(el, to, done) {
const element = el;
const duration = 500;
const start = element.scrollTop;
const change = to - start;
const increment = 20;
Expand All @@ -20,6 +33,8 @@ function slowlyScrollTo(el, to = 0, duration = 1000) {

if (currentTime < duration) {
setTimeout(animateScroll, increment);
} else {
done();
}
};

Expand All @@ -36,101 +51,109 @@ Math.easeInOutQuad = function easeInOutQuad(a, b, c, d) {
return (-c / 2) * (t * (t - 2) - 1) + b;
};

export default function MobileView({
header,
map,
content,
settingsDrawer,
selectFromMapHeader,
expandMap,
searchBox,
}) {
if (settingsDrawer) {
return <div className="mobile">{settingsDrawer}</div>;
}
const scrollRef = useRef(null);
const topBarHeight = 64;
// pass these to map according to bottom sheet placement
const [bottomsheetState, changeBottomsheetState] = useState({
context: { mapBottomPadding: 0, buttonBottomPadding: 0 },
});

useLayoutEffect(() => {
if (map) {
const paddingHeight = (window.innerHeight - topBarHeight) * 0.9; // height of .drawer-padding, defined as 90% of map height
const newSheetPosition = paddingHeight / 2;
scrollRef.current.scrollTop = newSheetPosition;
changeBottomsheetState({
context: {
mapBottomPadding: newSheetPosition,
buttonBottomPadding: newSheetPosition,
},
});
}
}, [header]);

useLayoutEffect(() => {
if (map && expandMap) {
const newSheetPosition = 0;
slowlyScrollTo(scrollRef.current);
changeBottomsheetState({
context: {
mapBottomPadding: newSheetPosition,
buttonBottomPadding: newSheetPosition,
},
});
const MobileView = forwardRef(
(
{
header,
map,
content,
settingsDrawer,
selectFromMapHeader,
mapRef,
searchBox,
},
ref,
) => {
if (settingsDrawer) {
return <div className="mobile">{settingsDrawer}</div>;
}
}, [expandMap]);
const scrollRef = useRef(null);

const onScroll = e => {
if (map) {
// pass these to map according to bottom sheet placement
const [bottomPadding, setBottomPadding] = useState(getMiddlePosition());

const onScroll = e => {
if (e.target.className === 'drawer-container') {
const scroll = e.target.scrollTop;
changeBottomsheetState({
context: { ...bottomsheetState.context, buttonBottomPadding: scroll },
mapRef?.setBottomPadding(e.target.scrollTop);
setBottomPadding(e.target.scrollTop);
}
};

const changeBottomPadding = (padding, slowly) => {
if (slowly) {
slowlyScrollTo(scrollRef.current, padding, () => {
mapRef?.forceRefresh();
mapRef?.setBottomPadding(padding);
setBottomPadding(padding);
});
} else {
if (scrollRef.current) {
scrollRef.current.scrollTop = padding;
}
mapRef?.setBottomPadding(padding);
setBottomPadding(padding);
}
}
};
};

useImperativeHandle(ref, () => ({
setBottomSheet: (pos, slowly) => {
const pad =
pos === 'middle' ? getMiddlePosition() : BOTTOM_SHEET_OFFSET;
changeBottomPadding(pad, slowly);
},
}));

useLayoutEffect(() => {
if (map) {
changeBottomPadding(getMiddlePosition());
}
}, [header]);

return (
<div className="mobile">
{selectFromMapHeader}
{searchBox}
{map ? (
<>
<MapBottomsheetContext.Provider value={bottomsheetState.context}>
{map}
</MapBottomsheetContext.Provider>
<div
className="drawer-container"
onScroll={onScroll}
ref={scrollRef}
role="main"
>
<div className="drawer-padding" />
<div className="drawer-content">
<div className="drag-line" />
<div className="content-container">
{header}
{content}
useLayoutEffect(() => {
if (map) {
changeBottomPadding(getMiddlePosition());
}
}, []);

return (
<div className="mobile">
{selectFromMapHeader}
{searchBox}
{map ? (
<>
<MapBottomsheetContext.Provider value={bottomPadding}>
{map}
</MapBottomsheetContext.Provider>
<div
className="drawer-container"
onScroll={onScroll}
ref={scrollRef}
role="main"
>
<div className="drawer-padding" />
<div className="drawer-content">
<div className="drag-line" />
<div className="content-container">
{header}
{content}
</div>
</div>
</div>
</div>
</>
) : (
<div role="main" className="mobile-main-container">
<div className="mobile-main-content-container">
{header}
{content}
</div>
</>
) : (
<div role="main" className="mobile-main-container">
<div className="mobile-main-content-container">
{header}
{content}
</div>

<MobileFooter />
</div>
)}
</div>
);
}
<MobileFooter />
</div>
)}
</div>
);
},
);

MobileView.propTypes = {
header: PropTypes.node,
Expand All @@ -139,7 +162,8 @@ MobileView.propTypes = {
settingsDrawer: PropTypes.node,
selectFromMapHeader: PropTypes.node,
searchBox: PropTypes.node,
expandMap: PropTypes.number,
// eslint-disable-next-line
mapRef: PropTypes.object,
};

MobileView.defaultProps = {
Expand All @@ -149,9 +173,7 @@ MobileView.defaultProps = {
settingsDrawer: undefined,
selectFromMapHeader: undefined,
searchBox: undefined,
expandMap: undefined,
mapRef: undefined,
};

MobileView.contextTypes = {
config: configShape.isRequired,
};
export default MobileView;
9 changes: 9 additions & 0 deletions app/component/StopsNearYouPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,11 @@ class StopsNearYouPage extends React.Component {
}
};

// store ref to map
setMWTRef = ref => {
this.MWTRef = ref;
};

updateLocation = () => {
const { centerOfMap } = this;
const { mode } = this.props.match.params;
Expand Down Expand Up @@ -695,6 +700,7 @@ class StopsNearYouPage extends React.Component {
...this.props.favouriteVehicleStationIds,
]}
breakpoint={this.props.breakpoint}
setMWTRef={this.setMWTRef}
/>
);
}
Expand Down Expand Up @@ -766,6 +772,7 @@ class StopsNearYouPage extends React.Component {
onEndNavigation={this.setCenterOfMap}
onMapTracking={this.setCenterOfMap}
breakpoint={this.props.breakpoint}
setMWTRef={this.setMWTRef}
/>
);
}}
Expand Down Expand Up @@ -949,6 +956,8 @@ class StopsNearYouPage extends React.Component {
content={this.renderContent()}
map={this.renderMap()}
searchBox={this.renderSearchBox()}
mapRef={this.MWTRef}
match={this.props.match}
/>
)}
/>
Expand Down
1 change: 1 addition & 0 deletions app/component/TopLevel.js
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ class TopLevel extends React.Component {
content={this.props.content}
header={this.props.header}
selectFromMapHeader={this.props.selectFromMapHeader}
match={this.props.match}
/>
)}
desktop={() => (
Expand Down
Loading
Loading