mirror of
https://github.com/HSLdevcom/digitransit-ui
synced 2025-09-20 20:32:47 +02:00
112 lines
3.2 KiB
JavaScript
112 lines
3.2 KiB
JavaScript
import PropTypes from 'prop-types';
|
|
import cx from 'classnames';
|
|
import { FormattedMessage } from 'react-intl';
|
|
import moment from 'moment';
|
|
import React from 'react';
|
|
import Icon from './Icon';
|
|
import { isKeyboardSelectionEvent } from '../util/browser';
|
|
|
|
const AlternativeLegsInfo = ({ legs, showAlternativeLegs, toggle }) => {
|
|
const message =
|
|
(showAlternativeLegs && (
|
|
<FormattedMessage
|
|
className="alternative-leg-info"
|
|
id="itinerary-hide-alternative-legs"
|
|
defaultMessage="Hide alternative legs"
|
|
/>
|
|
)) ||
|
|
(legs.length > 1 ? (
|
|
<FormattedMessage
|
|
className="alternative-leg-info"
|
|
id="alternative-legs"
|
|
values={{
|
|
leg1: legs[0].route.shortName,
|
|
leg2: legs[1].route.shortName,
|
|
startTime1: (
|
|
<span
|
|
className={cx({ realtime: legs[0].realTime })}
|
|
style={{ fontWeight: 500 }}
|
|
>
|
|
{moment(legs[0].startTime).format('HH:mm')}
|
|
{legs[0].realTime && (
|
|
<span className="sr-only">
|
|
<FormattedMessage id="realtime" />
|
|
</span>
|
|
)}
|
|
</span>
|
|
),
|
|
startTime2: (
|
|
<span
|
|
className={cx({ realtime: legs[1].realTime })}
|
|
style={{ fontWeight: 500 }}
|
|
>
|
|
{moment(legs[1].startTime).format('HH:mm')}
|
|
{legs[1].realTime && (
|
|
<span className="sr-only">
|
|
<FormattedMessage id="realtime" />
|
|
</span>
|
|
)}
|
|
</span>
|
|
),
|
|
}}
|
|
defaultMessage="Also {leg1} at {startTime1} and {leg2} at {startTime2}"
|
|
/>
|
|
) : (
|
|
<FormattedMessage
|
|
className="alternative-leg-info"
|
|
id="alternative-legs-single"
|
|
values={{
|
|
leg1: legs[0].route.shortName,
|
|
startTime1: (
|
|
<span
|
|
className={cx({ realtime: legs[0].realTime })}
|
|
style={{ fontWeight: 500 }}
|
|
>
|
|
{moment(legs[0].startTime).format('HH:mm')}
|
|
{legs[0].realTime && (
|
|
<span className="sr-only">
|
|
<FormattedMessage id="realtime" />
|
|
</span>
|
|
)}
|
|
</span>
|
|
),
|
|
}}
|
|
defaultMessage="Also {leg1} at {startTime1}"
|
|
/>
|
|
));
|
|
|
|
return legs ? (
|
|
<div
|
|
role="button"
|
|
tabIndex="0"
|
|
className={cx(
|
|
'alternative-legs-info-container',
|
|
'alternative-legs-clickable',
|
|
'cursor-pointer',
|
|
{ open: showAlternativeLegs },
|
|
)}
|
|
onClick={() => toggle()}
|
|
onKeyPress={e => {
|
|
if (isKeyboardSelectionEvent(e)) {
|
|
e.stopPropagation();
|
|
toggle();
|
|
}
|
|
}}
|
|
>
|
|
<div className="alternative-legs-information">
|
|
{message}
|
|
<Icon
|
|
img="icon-icon_arrow-collapse--right"
|
|
className="itinerary-search-icon"
|
|
/>
|
|
</div>
|
|
</div>
|
|
) : null;
|
|
};
|
|
|
|
AlternativeLegsInfo.propTypes = {
|
|
legs: PropTypes.array.isRequired,
|
|
showAlternativeLegs: PropTypes.bool.isRequired,
|
|
toggle: PropTypes.func.isRequired,
|
|
};
|
|
export default AlternativeLegsInfo;
|