mirror of
https://github.com/HSLdevcom/digitransit-ui
synced 2025-09-20 20:32:47 +02:00
69 lines
2 KiB
JavaScript
69 lines
2 KiB
JavaScript
import PropTypes from 'prop-types';
|
|
import React from 'react';
|
|
import CityBikeAvailability from './CityBikeAvailability';
|
|
import Icon from './Icon';
|
|
import {
|
|
getCityBikeNetworkIcon,
|
|
getCityBikeNetworkConfig,
|
|
getCitybikeCapacity,
|
|
BIKEAVL_UNKNOWN,
|
|
BIKEAVL_WITHMAX,
|
|
BIKESTATION_OFF,
|
|
BIKESTATION_CLOSED,
|
|
} from '../util/citybikes';
|
|
|
|
const CityBikeStopContent = ({ bikeRentalStation }, { config }) => {
|
|
const citybikeCapacity = getCitybikeCapacity(
|
|
config,
|
|
bikeRentalStation.networks[0],
|
|
);
|
|
if (citybikeCapacity === BIKEAVL_UNKNOWN) {
|
|
return null;
|
|
}
|
|
let totalSpaces;
|
|
let fewAvailableCount;
|
|
let fewerAvailableCount;
|
|
|
|
if (citybikeCapacity === BIKEAVL_WITHMAX) {
|
|
totalSpaces =
|
|
bikeRentalStation.capacity ||
|
|
bikeRentalStation.bikesAvailable + bikeRentalStation.spacesAvailable;
|
|
fewAvailableCount = Math.floor(totalSpaces / 3);
|
|
fewerAvailableCount = Math.floor(totalSpaces / 6);
|
|
}
|
|
const disabled =
|
|
bikeRentalStation.state === BIKESTATION_OFF ||
|
|
bikeRentalStation.state === BIKESTATION_CLOSED;
|
|
|
|
const citybikeicon = getCityBikeNetworkIcon(
|
|
getCityBikeNetworkConfig(bikeRentalStation.networks[0], config),
|
|
disabled,
|
|
);
|
|
return (
|
|
<div className="citybike-content-container">
|
|
<Icon img={citybikeicon} />
|
|
<CityBikeAvailability
|
|
disabled={disabled}
|
|
bikesAvailable={bikeRentalStation.bikesAvailable}
|
|
totalSpaces={totalSpaces}
|
|
fewAvailableCount={fewAvailableCount}
|
|
fewerAvailableCount={fewerAvailableCount}
|
|
useSpacesAvailable={citybikeCapacity === BIKEAVL_WITHMAX}
|
|
/>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
CityBikeStopContent.contextTypes = {
|
|
config: PropTypes.object.isRequired,
|
|
};
|
|
CityBikeStopContent.propTypes = {
|
|
bikeRentalStation: PropTypes.shape({
|
|
bikesAvailable: PropTypes.number.isRequired,
|
|
spacesAvailable: PropTypes.number.isRequired,
|
|
capacity: PropTypes.number.isRequired,
|
|
networks: PropTypes.arrayOf(PropTypes.string),
|
|
state: PropTypes.string.isRequired,
|
|
}),
|
|
};
|
|
export default CityBikeStopContent;
|