mirror of
https://github.com/HSLdevcom/digitransit-ui
synced 2026-01-31 03:00:29 +01:00
68 lines
2.1 KiB
JavaScript
68 lines
2.1 KiB
JavaScript
import PropTypes from 'prop-types';
|
|
import React, { memo } from 'react';
|
|
import { routerShape } from 'found';
|
|
import DTAutoSuggest from '@digitransit-component/digitransit-component-autosuggest';
|
|
import { filterSearchResultsByMode } from '@digitransit-search-util/digitransit-search-util-query-utils';
|
|
import { configShape } from '../../util/shapes';
|
|
import { withSearchContext } from '../WithSearchContext';
|
|
import { getStopRoutePath } from '../../util/path';
|
|
|
|
const DTAutoSuggestWithSearchContext = withSearchContext(DTAutoSuggest);
|
|
const searchSources = ['Favourite', 'History', 'Datasource'];
|
|
|
|
function StopRouteSearch({ mode, ...rest }, { router, config }) {
|
|
const transportMode = `route-${mode}`;
|
|
|
|
const filter = config.stopSearchFilter
|
|
? (results, transportmode, type) =>
|
|
filterSearchResultsByMode(results, transportmode, type).filter(
|
|
config.stopSearchFilter,
|
|
)
|
|
: filterSearchResultsByMode;
|
|
const selectHandler = item => {
|
|
router.push(getStopRoutePath(item));
|
|
};
|
|
let targets;
|
|
switch (mode) {
|
|
case 'CITYBIKE':
|
|
targets = ['VehicleRentalStations'];
|
|
break;
|
|
case 'BIKEPARK':
|
|
case 'CARPARK':
|
|
targets = ['ParkingAreas'];
|
|
break;
|
|
default:
|
|
targets = ['Stops', 'Stations', 'Routes'];
|
|
break;
|
|
}
|
|
return (
|
|
<div className="near-you-search-container">
|
|
<DTAutoSuggestWithSearchContext
|
|
icon="search"
|
|
id="stop-route-station"
|
|
className="destination"
|
|
placeholder={`stop-near-you-${mode.toLowerCase()}`}
|
|
transportMode={transportMode}
|
|
geocodingSize={40}
|
|
value=""
|
|
filterResults={filter}
|
|
sources={searchSources}
|
|
targets={targets}
|
|
selectHandler={selectHandler} // prop for context handler
|
|
getAutoSuggestIcons={config.getAutoSuggestIcons}
|
|
colors={config.colors}
|
|
modeSet={config.iconModeSet}
|
|
{...rest}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
StopRouteSearch.propTypes = { mode: PropTypes.string.isRequired };
|
|
|
|
StopRouteSearch.contextTypes = {
|
|
router: routerShape.isRequired,
|
|
config: configShape.isRequired,
|
|
};
|
|
|
|
export default memo(StopRouteSearch);
|