@opentripplanner/map-popup 3.1.1 → 3.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/index.js +14 -2
- package/esm/index.js.map +1 -1
- package/esm/util.js +4 -2
- package/esm/util.js.map +1 -1
- package/i18n/en-US.yml +2 -1
- package/i18n/es.yml +3 -3
- package/i18n/fr.yml +2 -1
- package/i18n/ko.yml +5 -5
- package/i18n/nb_NO.yml +7 -6
- package/i18n/ru.yml +7 -6
- package/i18n/tl.yml +7 -6
- package/i18n/tr.yml +1 -0
- package/i18n/vi.yml +4 -3
- package/i18n/zh_Hans.yml +4 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +14 -1
- package/lib/index.js.map +1 -1
- package/lib/util.d.ts.map +1 -1
- package/lib/util.js +4 -2
- package/lib/util.js.map +1 -1
- package/package.json +5 -5
- package/src/MapPopup.story.tsx +21 -1
- package/src/__snapshots__/MapPopup.story.tsx.snap +302 -0
- package/src/index.tsx +11 -1
- package/src/util.ts +4 -2
- package/tsconfig.tsbuildinfo +1 -1
package/esm/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { useCallback } from "react";
|
|
2
|
-
import FromToLocationPicker from "@opentripplanner/from-to-location-picker";
|
|
2
|
+
import FromToLocationPicker from "@opentripplanner/from-to-location-picker";
|
|
3
|
+
import coreUtils from "@opentripplanner/core-utils"; // eslint-disable-next-line prettier/prettier
|
|
3
4
|
|
|
4
5
|
import { FormattedMessage, useIntl } from "react-intl";
|
|
5
6
|
import { flatten } from "flat";
|
|
@@ -77,6 +78,8 @@ function entityIsStation(entity) {
|
|
|
77
78
|
|
|
78
79
|
|
|
79
80
|
export function MapPopup(_ref3) {
|
|
81
|
+
var _entity$networks;
|
|
82
|
+
|
|
80
83
|
var configCompanies = _ref3.configCompanies,
|
|
81
84
|
entity = _ref3.entity,
|
|
82
85
|
getEntityName = _ref3.getEntityName,
|
|
@@ -86,10 +89,19 @@ export function MapPopup(_ref3) {
|
|
|
86
89
|
if (!entity) return /*#__PURE__*/React.createElement(React.Fragment, null);
|
|
87
90
|
var getNameFunc = getEntityName || makeDefaultGetEntityName(intl, defaultMessages);
|
|
88
91
|
var name = getNameFunc(entity, configCompanies);
|
|
92
|
+
var stationNetwork = "networks" in entity && (coreUtils.itinerary.getCompaniesLabelFromNetworks((entity === null || entity === void 0 ? void 0 : entity.networks) || [], configCompanies) || (entity === null || entity === void 0 ? void 0 : (_entity$networks = entity.networks) === null || _entity$networks === void 0 ? void 0 : _entity$networks[0]));
|
|
89
93
|
var bikesAvailablePresent = entityIsStation(entity);
|
|
90
94
|
var entityIsStationHub = bikesAvailablePresent && (entity === null || entity === void 0 ? void 0 : entity.bikesAvailable) !== undefined && !(entity !== null && entity !== void 0 && entity.isFloatingBike);
|
|
91
95
|
var stopId = !bikesAvailablePresent && (entity === null || entity === void 0 ? void 0 : entity.code) || entity.id.split(":")[1] || entity.id;
|
|
92
|
-
return /*#__PURE__*/React.createElement(S.MapOverlayPopup, null, /*#__PURE__*/React.createElement(S.PopupTitle, null,
|
|
96
|
+
return /*#__PURE__*/React.createElement(S.MapOverlayPopup, null, /*#__PURE__*/React.createElement(S.PopupTitle, null, /*#__PURE__*/React.createElement(FormattedMessage, {
|
|
97
|
+
defaultMessage: defaultMessages["otpUi.MapPopup.popupTitle"],
|
|
98
|
+
description: "Text for title of the popup, contains an optional company name",
|
|
99
|
+
id: "otpUi.MapPopup.popupTitle",
|
|
100
|
+
values: {
|
|
101
|
+
name: name,
|
|
102
|
+
stationNetwork: stationNetwork
|
|
103
|
+
}
|
|
104
|
+
})), entityIsStationHub && /*#__PURE__*/React.createElement(StationHubDetails, {
|
|
93
105
|
station: entity
|
|
94
106
|
}), setViewedStop && !bikesAvailablePresent && /*#__PURE__*/React.createElement(StopDetails, {
|
|
95
107
|
id: stopId,
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"names":["React","useCallback","FromToLocationPicker","FormattedMessage","useIntl","flatten","S","FocusTrapWrapper","defaultEnglishMessages","makeDefaultGetEntityName","defaultMessages","generateLocation","entity","name","entityLon","lon","entityLat","lat","x","y","StationHubDetails","station","value","bikesAvailable","spacesAvailable","StopDetails","id","setViewedStop","stopId","entityIsStation","MapPopup","configCompanies","getEntityName","setLocation","intl","getNameFunc","bikesAvailablePresent","entityIsStationHub","undefined","isFloatingBike","code","split","Styled"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,QAAmC,OAAnC;AACA,OAAOC,oBAAP,MAAiC,0CAAjC,C,
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"names":["React","useCallback","FromToLocationPicker","coreUtils","FormattedMessage","useIntl","flatten","S","FocusTrapWrapper","defaultEnglishMessages","makeDefaultGetEntityName","defaultMessages","generateLocation","entity","name","entityLon","lon","entityLat","lat","x","y","StationHubDetails","station","value","bikesAvailable","spacesAvailable","StopDetails","id","setViewedStop","stopId","entityIsStation","MapPopup","configCompanies","getEntityName","setLocation","intl","getNameFunc","stationNetwork","itinerary","getCompaniesLabelFromNetworks","networks","bikesAvailablePresent","entityIsStationHub","undefined","isFloatingBike","code","split","Styled"],"mappings":"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","sourcesContent":["import React, { useCallback } from \"react\";\nimport FromToLocationPicker from \"@opentripplanner/from-to-location-picker\";\nimport coreUtils from \"@opentripplanner/core-utils\";\n\n// eslint-disable-next-line prettier/prettier\nimport type { Company, ConfiguredCompany, Location, Station, Stop, StopEventHandler } from \"@opentripplanner/types\";\n\nimport { FormattedMessage, useIntl } from \"react-intl\";\nimport { flatten } from \"flat\";\nimport * as S from \"./styled\";\nimport FocusTrapWrapper from \"./FocusTrapWrapper\";\n\n// Load the default messages.\nimport defaultEnglishMessages from \"../i18n/en-US.yml\";\nimport { makeDefaultGetEntityName } from \"./util\";\n\n// HACK: We should flatten the messages loaded above because\n// the YAML loaders behave differently between webpack and our version of jest:\n// - the yaml loader for webpack returns a nested object,\n// - the yaml loader for jest returns messages with flattened ids.\nexport const defaultMessages: { [key: string]: string } = flatten(defaultEnglishMessages);\n\nconst generateLocation = (entity: Entity, name: string) => {\n // @ts-expect-error some of these values may be null, but that's ok\n const { lon: entityLon, lat: entityLat, x, y } = entity\n\n const lat = entityLat || y\n const lon = entityLon || x\n if (!lat || !lon) return null\n\n return { lat, lon, name };\n}\n\nconst StationHubDetails = ({ station }: { station: Station }) => {\n return (\n <S.PopupRow>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableBikes\"]\n }\n description=\"Label text for the number of bikes available\"\n id=\"otpUi.MapPopup.availableBikes\"\n values={{ value: station.bikesAvailable }}\n />\n </div>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableDocks\"]\n }\n description=\"Label text for the number of docks available\"\n id=\"otpUi.MapPopup.availableDocks\"\n values={{ value: station.spacesAvailable }}\n />\n </div>\n </S.PopupRow>\n )\n}\n\nconst StopDetails = ({ id, setViewedStop }: { id: string, setViewedStop: () => void; }) => {\n return (\n <S.PopupRow>\n <strong>\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopId\"]}\n description=\"Displays the stop id\"\n id=\"otpUi.MapPopup.stopId\"\n values={{\n stopId: id\n }}\n />\n </strong>\n <S.ViewStopButton onClick={setViewedStop}>\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopViewer\"]}\n description=\"Text for link that opens the stop viewer\"\n id=\"otpUi.MapPopup.stopViewer\"\n />\n </S.ViewStopButton>\n </S.PopupRow>\n )\n}\n\ntype Entity = Stop | Station\ntype Props = {\n configCompanies?: ConfiguredCompany[];\n entity: Entity\n getEntityName?: (entity: Entity, configCompanies: Company[],) => string;\n setLocation?: ({ location, locationType }: { location: Location, locationType: string }) => void;\n setViewedStop?: StopEventHandler;\n};\n\nfunction entityIsStation(entity: Entity): entity is Station {\n return \"bikesAvailable\" in entity\n}\n\n/**\n * Renders a map popup for a stop, scooter, or shared bike\n */\nexport function MapPopup({ configCompanies, entity, getEntityName, setLocation, setViewedStop }: Props): JSX.Element {\n const intl = useIntl()\n if (!entity) return <></>\n\n const getNameFunc = getEntityName || makeDefaultGetEntityName(intl, defaultMessages);\n const name = getNameFunc(entity, configCompanies);\n\n const stationNetwork = \"networks\" in entity && (coreUtils.itinerary.getCompaniesLabelFromNetworks(entity?.networks || [], configCompanies) || entity?.networks?.[0]);\n\n const bikesAvailablePresent = entityIsStation(entity)\n const entityIsStationHub = bikesAvailablePresent && entity?.bikesAvailable !== undefined && !entity?.isFloatingBike;\n const stopId = !bikesAvailablePresent && entity?.code || entity.id.split(\":\")[1] || entity.id\n\n return (\n <S.MapOverlayPopup>\n <S.PopupTitle>\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.popupTitle\"]}\n description=\"Text for title of the popup, contains an optional company name\"\n id=\"otpUi.MapPopup.popupTitle\"\n values={{ name, stationNetwork }}\n />\n </S.PopupTitle>\n {/* render dock info if it is available */}\n {entityIsStationHub && <StationHubDetails station={entity} />}\n\n {/* render stop viewer link if available */}\n {setViewedStop && !bikesAvailablePresent && (\n <StopDetails\n id={stopId}\n setViewedStop={useCallback(() => setViewedStop(entity), [entity])}\n />\n )}\n\n {/* The \"Set as [from/to]\" ButtonGroup */}\n {setLocation && (\n <S.PopupRow>\n <FromToLocationPicker\n label\n location={generateLocation(entity, name)}\n setLocation={setLocation}\n />\n </S.PopupRow>\n )}\n </S.MapOverlayPopup>\n );\n}\n\nexport default MapPopup;\n\n// Rename styled components for export.\nexport { S as Styled, FocusTrapWrapper };"],"file":"index.js"}
|
package/esm/util.js
CHANGED
|
@@ -4,6 +4,8 @@ export function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
|
4
4
|
return function defaultGetEntityName(entity, configCompanies) {
|
|
5
5
|
var _entity$networks;
|
|
6
6
|
|
|
7
|
+
// TODO: Stop generating this / passing it to the car string? Is it needed?
|
|
8
|
+
// In English we say "Car: " instead
|
|
7
9
|
var stationNetworks = "networks" in entity && (coreUtils.itinerary.getCompaniesLabelFromNetworks((entity === null || entity === void 0 ? void 0 : entity.networks) || [], configCompanies) || (entity === null || entity === void 0 ? void 0 : (_entity$networks = entity.networks) === null || _entity$networks === void 0 ? void 0 : _entity$networks[0]));
|
|
8
10
|
var stationName = entity.name || entity.id; // If the station name or id is a giant UUID (with more than 3 "-" characters)
|
|
9
11
|
// best not to show that at all. The company name will still be shown.
|
|
@@ -19,7 +21,7 @@ export function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
|
19
21
|
description: "Popup title for a free-floating bike",
|
|
20
22
|
id: "otpUi.MapPopup.floatingBike"
|
|
21
23
|
}, {
|
|
22
|
-
name: stationName
|
|
24
|
+
name: stationName
|
|
23
25
|
});
|
|
24
26
|
} else if ("isFloatingCar" in entity && entity.isFloatingCar) {
|
|
25
27
|
stationName = intl.formatMessage({
|
|
@@ -37,7 +39,7 @@ export function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
|
37
39
|
description: "Popup title for a free-floating e-scooter",
|
|
38
40
|
id: "otpUi.MapPopup.floatingEScooter"
|
|
39
41
|
}, {
|
|
40
|
-
name: stationName
|
|
42
|
+
name: stationName
|
|
41
43
|
});
|
|
42
44
|
}
|
|
43
45
|
|
package/esm/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/util.ts"],"names":["coreUtils","makeDefaultGetEntityName","intl","defaultEnglishMessages","defaultGetEntityName","entity","configCompanies","stationNetworks","itinerary","getCompaniesLabelFromNetworks","networks","stationName","name","id","match","length","isFloatingBike","formatMessage","defaultMessage","description","isFloatingCar","company","isFloatingVehicle"],"mappings":"AAEA,OAAOA,SAAP,MAAsB,6BAAtB,C,CAEA;;AACA,OAAO,SAASC,wBAAT,CACLC,IADK,EAELC,sBAFK,EAGL;AACA,SAAO,SAASC,oBAAT,CACLC,MADK,EAELC,eAFK,EAGU;AAAA;;AACf,QAAMC,eAAe,GACnB,cAAcF,MAAd,KACCL,SAAS,CAACQ,SAAV,CAAoBC,6BAApB,CACC,CAAAJ,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEK,QAAR,KAAoB,EADrB,EAECJ,eAFD,MAICD,MAJD,aAICA,MAJD,2CAICA,MAAM,CAAEK,QAJT,qDAIC,iBAAmB,CAAnB,CAJD,CADD,CADF;AAOA,QAAIC,WAA0B,GAAGN,MAAM,CAACO,IAAP,IAAeP,MAAM,CAACQ,EAAvD,
|
|
1
|
+
{"version":3,"sources":["../src/util.ts"],"names":["coreUtils","makeDefaultGetEntityName","intl","defaultEnglishMessages","defaultGetEntityName","entity","configCompanies","stationNetworks","itinerary","getCompaniesLabelFromNetworks","networks","stationName","name","id","match","length","isFloatingBike","formatMessage","defaultMessage","description","isFloatingCar","company","isFloatingVehicle"],"mappings":"AAEA,OAAOA,SAAP,MAAsB,6BAAtB,C,CAEA;;AACA,OAAO,SAASC,wBAAT,CACLC,IADK,EAELC,sBAFK,EAGL;AACA,SAAO,SAASC,oBAAT,CACLC,MADK,EAELC,eAFK,EAGU;AAAA;;AACf;AACA;AACA,QAAMC,eAAe,GACnB,cAAcF,MAAd,KACCL,SAAS,CAACQ,SAAV,CAAoBC,6BAApB,CACC,CAAAJ,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEK,QAAR,KAAoB,EADrB,EAECJ,eAFD,MAICD,MAJD,aAICA,MAJD,2CAICA,MAAM,CAAEK,QAJT,qDAIC,iBAAmB,CAAnB,CAJD,CADD,CADF;AAOA,QAAIC,WAA0B,GAAGN,MAAM,CAACO,IAAP,IAAeP,MAAM,CAACQ,EAAvD,CAVe,CAWf;AACA;AACA;;AACA,QACE,CAACF,WAAW,CAACG,KAAZ,CAAkB,IAAlB,KAA2B,EAA5B,EAAgCC,MAAhC,GAAyC,CAAzC,IACAJ,WAAW,KAAK,sBAFlB,EAGE;AACAA,MAAAA,WAAW,GAAG,IAAd;AACD;;AAED,QAAI,oBAAoBN,MAApB,IAA8BA,MAAM,CAACW,cAAzC,EAAyD;AACvDL,MAAAA,WAAW,GAAGT,IAAI,CAACe,aAAL,CACZ;AACEC,QAAAA,cAAc,EAAEf,sBAAsB,CAAC,6BAAD,CADxC;AAEEgB,QAAAA,WAAW,EAAE,sCAFf;AAGEN,QAAAA,EAAE,EAAE;AAHN,OADY,EAMZ;AAAED,QAAAA,IAAI,EAAED;AAAR,OANY,CAAd;AAQD,KATD,MASO,IAAI,mBAAmBN,MAAnB,IAA6BA,MAAM,CAACe,aAAxC,EAAuD;AAC5DT,MAAAA,WAAW,GAAGT,IAAI,CAACe,aAAL,CACZ;AACEC,QAAAA,cAAc,EAAEf,sBAAsB,CAAC,4BAAD,CADxC;AAEEgB,QAAAA,WAAW,EAAE,qCAFf;AAGEN,QAAAA,EAAE,EAAE;AAHN,OADY,EAMZ;AACEQ,QAAAA,OAAO,EAAEd,eADX;AAEEK,QAAAA,IAAI,EAAED;AAFR,OANY,CAAd;AAWD,KAZM,MAYA,IAAI,uBAAuBN,MAAvB,IAAiCA,MAAM,CAACiB,iBAA5C,EAA+D;AACpE;AACAX,MAAAA,WAAW,GAAGT,IAAI,CAACe,aAAL,CACZ;AACEC,QAAAA,cAAc,EACZf,sBAAsB,CAAC,iCAAD,CAF1B;AAGEgB,QAAAA,WAAW,EAAE,2CAHf;AAIEN,QAAAA,EAAE,EAAE;AAJN,OADY,EAOZ;AAAED,QAAAA,IAAI,EAAED;AAAR,OAPY,CAAd;AASD;;AACD,WAAOA,WAAP;AACD,GA1DD;AA2DD","sourcesContent":["import { Company, Station, Stop } from \"@opentripplanner/types\";\nimport { IntlShape } from \"react-intl\";\nimport coreUtils from \"@opentripplanner/core-utils\";\n\n// eslint-disable-next-line import/prefer-default-export\nexport function makeDefaultGetEntityName(\n intl: IntlShape,\n defaultEnglishMessages: { [key: string]: string }\n) {\n return function defaultGetEntityName(\n entity: Station | Stop,\n configCompanies: Company[]\n ): string | null {\n // TODO: Stop generating this / passing it to the car string? Is it needed?\n // In English we say \"Car: \" instead\n const stationNetworks =\n \"networks\" in entity &&\n (coreUtils.itinerary.getCompaniesLabelFromNetworks(\n entity?.networks || [],\n configCompanies\n ) ||\n entity?.networks?.[0]);\n let stationName: string | null = entity.name || entity.id;\n // If the station name or id is a giant UUID (with more than 3 \"-\" characters)\n // best not to show that at all. The company name will still be shown.\n // Also ignore \"Default Vehicle Type\"\n if (\n (stationName.match(/-/g) || []).length > 3 ||\n stationName === \"Default vehicle type\"\n ) {\n stationName = null;\n }\n\n if (\"isFloatingBike\" in entity && entity.isFloatingBike) {\n stationName = intl.formatMessage(\n {\n defaultMessage: defaultEnglishMessages[\"otpUi.MapPopup.floatingBike\"],\n description: \"Popup title for a free-floating bike\",\n id: \"otpUi.MapPopup.floatingBike\"\n },\n { name: stationName }\n );\n } else if (\"isFloatingCar\" in entity && entity.isFloatingCar) {\n stationName = intl.formatMessage(\n {\n defaultMessage: defaultEnglishMessages[\"otpUi.MapPopup.floatingCar\"],\n description: \"Popup title for a free-floating car\",\n id: \"otpUi.MapPopup.floatingCar\"\n },\n {\n company: stationNetworks,\n name: stationName\n }\n );\n } else if (\"isFloatingVehicle\" in entity && entity.isFloatingVehicle) {\n // assumes that all floating vehicles are E-scooters\n stationName = intl.formatMessage(\n {\n defaultMessage:\n defaultEnglishMessages[\"otpUi.MapPopup.floatingEScooter\"],\n description: \"Popup title for a free-floating e-scooter\",\n id: \"otpUi.MapPopup.floatingEScooter\"\n },\n { name: stationName }\n );\n }\n return stationName;\n };\n}\n"],"file":"util.js"}
|
package/i18n/en-US.yml
CHANGED
|
@@ -3,7 +3,8 @@ otpUi:
|
|
|
3
3
|
availableBikes: "Available bikes: {value}"
|
|
4
4
|
availableDocks: "Available docks: {value}"
|
|
5
5
|
floatingBike: "Free-floating bike: {name}"
|
|
6
|
-
floatingCar: "
|
|
6
|
+
floatingCar: "Car: {name}"
|
|
7
7
|
floatingEScooter: "E-scooter: {name}"
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
8
9
|
stopId: "Stop ID: {stopId}"
|
|
9
10
|
stopViewer: Stop Viewer
|
package/i18n/es.yml
CHANGED
|
@@ -3,8 +3,8 @@ otpUi:
|
|
|
3
3
|
availableBikes: "Bicicletas disponibles: {value}"
|
|
4
4
|
availableDocks: "Estaciones de carga disponibles: {value}"
|
|
5
5
|
floatingBike: "Bicicleta flotante: {name}"
|
|
6
|
-
floatingCar: "
|
|
7
|
-
floatingEScooter:
|
|
8
|
-
|
|
6
|
+
floatingCar: "Carro: {name}"
|
|
7
|
+
floatingEScooter: Scooter eléctrico {name}
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
9
|
stopId: Parada n°{stopId}
|
|
10
10
|
stopViewer: Visor de paradas
|
package/i18n/fr.yml
CHANGED
|
@@ -3,7 +3,8 @@ otpUi:
|
|
|
3
3
|
availableBikes: "Vélos disponibles : {value}"
|
|
4
4
|
availableDocks: "Bornes disponibles : {value}"
|
|
5
5
|
floatingBike: "Vélo flottant : {name}"
|
|
6
|
-
floatingCar: "
|
|
6
|
+
floatingCar: "Voiture : {name}"
|
|
7
7
|
floatingEScooter: Trottinette {name}
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
8
9
|
stopId: Arrêt n°{stopId}
|
|
9
10
|
stopViewer: Info arrêt
|
package/i18n/ko.yml
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
otpUi:
|
|
2
2
|
MapPopup:
|
|
3
|
-
floatingEScooter: "{name} 전동스쿠터"
|
|
4
|
-
availableDocks: "사용 가능한 도크: {value}"
|
|
5
3
|
availableBikes: "사용 가능한 자전거: {value}"
|
|
6
|
-
|
|
4
|
+
availableDocks: "사용 가능한 도크: {value}"
|
|
7
5
|
floatingBike: "프리-플로팅 자전거: {name}"
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
floatingCar: "자동차: {name}"
|
|
7
|
+
floatingEScooter: "{name} 전동스쿠터"
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
10
9
|
stopId: "정류장 ID: {stopId}"
|
|
10
|
+
stopViewer: 정류장 뷰어
|
package/i18n/nb_NO.yml
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
otpUi:
|
|
2
2
|
MapPopup:
|
|
3
|
-
availableBikes:
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
availableBikes: "Tilgjengelige sykler: {value}"
|
|
4
|
+
availableDocks: "Tilgjengelige stasjoner: {value}"
|
|
5
|
+
floatingBike: "Stasjonsløs sykkel: {name}"
|
|
6
|
+
floatingCar: "{company} {name}"
|
|
7
|
+
floatingEScooter: "E-scooter: {name}"
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
|
+
stopId: "Stopp-ID: {stopId}"
|
|
6
10
|
stopViewer: Stopp-viser
|
|
7
|
-
availableDocks: 'Tilgjengelige stasjoner: {value}'
|
|
8
|
-
floatingEScooter: 'E-scooter: {name}'
|
|
9
|
-
floatingBike: 'Stasjonsløs sykkel: {name}'
|
package/i18n/ru.yml
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
otpUi:
|
|
2
2
|
MapPopup:
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
availableBikes: "Доступные велосипеды: {value}"
|
|
4
|
+
availableDocks: "Доступные станции: {value}"
|
|
5
|
+
floatingBike: "Арендный велосипед не на станции: {name}"
|
|
6
|
+
floatingCar: "Авто: {name}"
|
|
7
|
+
floatingEScooter: "Электросамокат: {name}"
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
|
+
stopId: "Идентификатор остановки: {stopId}"
|
|
5
10
|
stopViewer: Средство просмотра остановок
|
|
6
|
-
stopId: 'Идентификатор остановки: {stopId}'
|
|
7
|
-
floatingCar: '{company} {name}'
|
|
8
|
-
availableBikes: 'Доступные велосипеды: {value}'
|
|
9
|
-
floatingEScooter: 'Электросамокат: {name}'
|
package/i18n/tl.yml
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
otpUi:
|
|
2
2
|
MapPopup:
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
availableBikes: "Mga available na bisikleta: {value}"
|
|
4
|
+
availableDocks: "Mga available na dock: {value}"
|
|
5
|
+
floatingBike: "Free-floating na bisikleta: {name}"
|
|
6
|
+
floatingCar: "Sasakyan: {name}"
|
|
7
|
+
floatingEScooter: "E-scooter: {name}"
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
|
+
stopId: "ID ng Hintuan: {stopId}"
|
|
5
10
|
stopViewer: Ihinto ang Viewer
|
|
6
|
-
stopId: 'ID ng Hintuan: {stopId}'
|
|
7
|
-
floatingCar: '{company} {name}'
|
|
8
|
-
availableBikes: 'Mga available na bisikleta: {value}'
|
|
9
|
-
floatingEScooter: 'E-scooter: {name}'
|
package/i18n/tr.yml
CHANGED
|
@@ -5,5 +5,6 @@ otpUi:
|
|
|
5
5
|
floatingBike: "Serbest gezen bisiklet: {name}"
|
|
6
6
|
floatingCar: "{company} {name}"
|
|
7
7
|
floatingEScooter: "E-skuter: {name}"
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
8
9
|
stopId: "Durak ID: {stopId}"
|
|
9
10
|
stopViewer: Durak Gösterici
|
package/i18n/vi.yml
CHANGED
|
@@ -3,7 +3,8 @@ otpUi:
|
|
|
3
3
|
availableBikes: "Xe đạp có sẵn: {value}"
|
|
4
4
|
availableDocks: "Chỗ dựng xe đạp có sẵn: {value}"
|
|
5
5
|
floatingBike: "Xe đạp để tự do: {name}"
|
|
6
|
-
floatingCar: "
|
|
7
|
-
floatingEScooter:
|
|
6
|
+
floatingCar: "Xe hơi: {name}"
|
|
7
|
+
floatingEScooter: Xe tay ga điện {name}
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
|
+
stopId: Điểm dừng số {stopId}
|
|
8
10
|
stopViewer: Xem điểm dừng
|
|
9
|
-
stopId: "Điểm dừng số {stopId}"
|
package/i18n/zh_Hans.yml
CHANGED
|
@@ -3,8 +3,8 @@ otpUi:
|
|
|
3
3
|
availableBikes: "可用的自行车: {value}"
|
|
4
4
|
availableDocks: "可用的充电座: {value}"
|
|
5
5
|
floatingBike: "自由浮动的自行车: {name}"
|
|
6
|
-
floatingCar: "
|
|
6
|
+
floatingCar: "汽车: {name}"
|
|
7
7
|
floatingEScooter: "{name} 电动滑板车"
|
|
8
|
-
|
|
9
|
-
stopId:
|
|
10
|
-
stopViewer:
|
|
8
|
+
popupTitle: "{stationNetwork, select, false {{name}} other {{stationNetwork} {name}}}"
|
|
9
|
+
stopId: "车站 ID: {stopId}"
|
|
10
|
+
stopViewer: 车站查看器
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAIpH,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAUlD,eAAO,MAAM,eAAe,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAoC,CAAC;AAgE1F,aAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAA;AAC5B,aAAK,KAAK,GAAG;IACX,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,KAAM,MAAM,CAAC;IACxE,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjG,aAAa,CAAC,EAAE,gBAAgB,CAAC;CAClC,CAAC;AAMF;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CA8CnH;AAED,eAAe,QAAQ,CAAC;AAGxB,OAAO,EAAE,CAAC,IAAI,MAAM,EAAE,gBAAgB,EAAE,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -18,6 +18,8 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
18
18
|
|
|
19
19
|
var _fromToLocationPicker = _interopRequireDefault(require("@opentripplanner/from-to-location-picker"));
|
|
20
20
|
|
|
21
|
+
var _coreUtils = _interopRequireDefault(require("@opentripplanner/core-utils"));
|
|
22
|
+
|
|
21
23
|
var _reactIntl = require("react-intl");
|
|
22
24
|
|
|
23
25
|
var _flat = require("flat");
|
|
@@ -117,14 +119,25 @@ function MapPopup({
|
|
|
117
119
|
setLocation,
|
|
118
120
|
setViewedStop
|
|
119
121
|
}) {
|
|
122
|
+
var _entity$networks;
|
|
123
|
+
|
|
120
124
|
const intl = (0, _reactIntl.useIntl)();
|
|
121
125
|
if (!entity) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
|
|
122
126
|
const getNameFunc = getEntityName || (0, _util.makeDefaultGetEntityName)(intl, defaultMessages);
|
|
123
127
|
const name = getNameFunc(entity, configCompanies);
|
|
128
|
+
const stationNetwork = "networks" in entity && (_coreUtils.default.itinerary.getCompaniesLabelFromNetworks((entity === null || entity === void 0 ? void 0 : entity.networks) || [], configCompanies) || (entity === null || entity === void 0 ? void 0 : (_entity$networks = entity.networks) === null || _entity$networks === void 0 ? void 0 : _entity$networks[0]));
|
|
124
129
|
const bikesAvailablePresent = entityIsStation(entity);
|
|
125
130
|
const entityIsStationHub = bikesAvailablePresent && (entity === null || entity === void 0 ? void 0 : entity.bikesAvailable) !== undefined && !(entity !== null && entity !== void 0 && entity.isFloatingBike);
|
|
126
131
|
const stopId = !bikesAvailablePresent && (entity === null || entity === void 0 ? void 0 : entity.code) || entity.id.split(":")[1] || entity.id;
|
|
127
|
-
return /*#__PURE__*/_react.default.createElement(S.MapOverlayPopup, null, /*#__PURE__*/_react.default.createElement(S.PopupTitle, null,
|
|
132
|
+
return /*#__PURE__*/_react.default.createElement(S.MapOverlayPopup, null, /*#__PURE__*/_react.default.createElement(S.PopupTitle, null, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, {
|
|
133
|
+
defaultMessage: defaultMessages["otpUi.MapPopup.popupTitle"],
|
|
134
|
+
description: "Text for title of the popup, contains an optional company name",
|
|
135
|
+
id: "otpUi.MapPopup.popupTitle",
|
|
136
|
+
values: {
|
|
137
|
+
name,
|
|
138
|
+
stationNetwork
|
|
139
|
+
}
|
|
140
|
+
})), entityIsStationHub && /*#__PURE__*/_react.default.createElement(StationHubDetails, {
|
|
128
141
|
station: entity
|
|
129
142
|
}), setViewedStop && !bikesAvailablePresent && /*#__PURE__*/_react.default.createElement(StopDetails, {
|
|
130
143
|
id: stopId,
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"names":["defaultMessages","defaultEnglishMessages","generateLocation","entity","name","lon","entityLon","lat","entityLat","x","y","StationHubDetails","station","value","bikesAvailable","spacesAvailable","StopDetails","id","setViewedStop","stopId","entityIsStation","MapPopup","configCompanies","getEntityName","setLocation","intl","getNameFunc","bikesAvailablePresent","entityIsStationHub","undefined","isFloatingBike","code","split"],"mappings":";;;;;;;;;;;;;;;;AAAA;;AACA;;
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"names":["defaultMessages","defaultEnglishMessages","generateLocation","entity","name","lon","entityLon","lat","entityLat","x","y","StationHubDetails","station","value","bikesAvailable","spacesAvailable","StopDetails","id","setViewedStop","stopId","entityIsStation","MapPopup","configCompanies","getEntityName","setLocation","intl","getNameFunc","stationNetwork","coreUtils","itinerary","getCompaniesLabelFromNetworks","networks","bikesAvailablePresent","entityIsStationHub","undefined","isFloatingBike","code","split"],"mappings":"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","sourcesContent":["import React, { useCallback } from \"react\";\nimport FromToLocationPicker from \"@opentripplanner/from-to-location-picker\";\nimport coreUtils from \"@opentripplanner/core-utils\";\n\n// eslint-disable-next-line prettier/prettier\nimport type { Company, ConfiguredCompany, Location, Station, Stop, StopEventHandler } from \"@opentripplanner/types\";\n\nimport { FormattedMessage, useIntl } from \"react-intl\";\nimport { flatten } from \"flat\";\nimport * as S from \"./styled\";\nimport FocusTrapWrapper from \"./FocusTrapWrapper\";\n\n// Load the default messages.\nimport defaultEnglishMessages from \"../i18n/en-US.yml\";\nimport { makeDefaultGetEntityName } from \"./util\";\n\n// HACK: We should flatten the messages loaded above because\n// the YAML loaders behave differently between webpack and our version of jest:\n// - the yaml loader for webpack returns a nested object,\n// - the yaml loader for jest returns messages with flattened ids.\nexport const defaultMessages: { [key: string]: string } = flatten(defaultEnglishMessages);\n\nconst generateLocation = (entity: Entity, name: string) => {\n // @ts-expect-error some of these values may be null, but that's ok\n const { lon: entityLon, lat: entityLat, x, y } = entity\n\n const lat = entityLat || y\n const lon = entityLon || x\n if (!lat || !lon) return null\n\n return { lat, lon, name };\n}\n\nconst StationHubDetails = ({ station }: { station: Station }) => {\n return (\n <S.PopupRow>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableBikes\"]\n }\n description=\"Label text for the number of bikes available\"\n id=\"otpUi.MapPopup.availableBikes\"\n values={{ value: station.bikesAvailable }}\n />\n </div>\n <div>\n <FormattedMessage\n defaultMessage={\n defaultMessages[\"otpUi.MapPopup.availableDocks\"]\n }\n description=\"Label text for the number of docks available\"\n id=\"otpUi.MapPopup.availableDocks\"\n values={{ value: station.spacesAvailable }}\n />\n </div>\n </S.PopupRow>\n )\n}\n\nconst StopDetails = ({ id, setViewedStop }: { id: string, setViewedStop: () => void; }) => {\n return (\n <S.PopupRow>\n <strong>\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopId\"]}\n description=\"Displays the stop id\"\n id=\"otpUi.MapPopup.stopId\"\n values={{\n stopId: id\n }}\n />\n </strong>\n <S.ViewStopButton onClick={setViewedStop}>\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.stopViewer\"]}\n description=\"Text for link that opens the stop viewer\"\n id=\"otpUi.MapPopup.stopViewer\"\n />\n </S.ViewStopButton>\n </S.PopupRow>\n )\n}\n\ntype Entity = Stop | Station\ntype Props = {\n configCompanies?: ConfiguredCompany[];\n entity: Entity\n getEntityName?: (entity: Entity, configCompanies: Company[],) => string;\n setLocation?: ({ location, locationType }: { location: Location, locationType: string }) => void;\n setViewedStop?: StopEventHandler;\n};\n\nfunction entityIsStation(entity: Entity): entity is Station {\n return \"bikesAvailable\" in entity\n}\n\n/**\n * Renders a map popup for a stop, scooter, or shared bike\n */\nexport function MapPopup({ configCompanies, entity, getEntityName, setLocation, setViewedStop }: Props): JSX.Element {\n const intl = useIntl()\n if (!entity) return <></>\n\n const getNameFunc = getEntityName || makeDefaultGetEntityName(intl, defaultMessages);\n const name = getNameFunc(entity, configCompanies);\n\n const stationNetwork = \"networks\" in entity && (coreUtils.itinerary.getCompaniesLabelFromNetworks(entity?.networks || [], configCompanies) || entity?.networks?.[0]);\n\n const bikesAvailablePresent = entityIsStation(entity)\n const entityIsStationHub = bikesAvailablePresent && entity?.bikesAvailable !== undefined && !entity?.isFloatingBike;\n const stopId = !bikesAvailablePresent && entity?.code || entity.id.split(\":\")[1] || entity.id\n\n return (\n <S.MapOverlayPopup>\n <S.PopupTitle>\n <FormattedMessage\n defaultMessage={defaultMessages[\"otpUi.MapPopup.popupTitle\"]}\n description=\"Text for title of the popup, contains an optional company name\"\n id=\"otpUi.MapPopup.popupTitle\"\n values={{ name, stationNetwork }}\n />\n </S.PopupTitle>\n {/* render dock info if it is available */}\n {entityIsStationHub && <StationHubDetails station={entity} />}\n\n {/* render stop viewer link if available */}\n {setViewedStop && !bikesAvailablePresent && (\n <StopDetails\n id={stopId}\n setViewedStop={useCallback(() => setViewedStop(entity), [entity])}\n />\n )}\n\n {/* The \"Set as [from/to]\" ButtonGroup */}\n {setLocation && (\n <S.PopupRow>\n <FromToLocationPicker\n label\n location={generateLocation(entity, name)}\n setLocation={setLocation}\n />\n </S.PopupRow>\n )}\n </S.MapOverlayPopup>\n );\n}\n\nexport default MapPopup;\n\n// Rename styled components for export.\nexport { S as Styled, FocusTrapWrapper };"],"file":"index.js"}
|
package/lib/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,EACf,sBAAsB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,YAGvC,OAAO,GAAG,IAAI,mBACL,OAAO,EAAE,KACzB,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,SAAS,EACf,sBAAsB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,YAGvC,OAAO,GAAG,IAAI,mBACL,OAAO,EAAE,KACzB,MAAM,GAAG,IAAI,CAwDjB"}
|
package/lib/util.js
CHANGED
|
@@ -14,6 +14,8 @@ function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
|
14
14
|
return function defaultGetEntityName(entity, configCompanies) {
|
|
15
15
|
var _entity$networks;
|
|
16
16
|
|
|
17
|
+
// TODO: Stop generating this / passing it to the car string? Is it needed?
|
|
18
|
+
// In English we say "Car: " instead
|
|
17
19
|
const stationNetworks = "networks" in entity && (_coreUtils.default.itinerary.getCompaniesLabelFromNetworks((entity === null || entity === void 0 ? void 0 : entity.networks) || [], configCompanies) || (entity === null || entity === void 0 ? void 0 : (_entity$networks = entity.networks) === null || _entity$networks === void 0 ? void 0 : _entity$networks[0]));
|
|
18
20
|
let stationName = entity.name || entity.id; // If the station name or id is a giant UUID (with more than 3 "-" characters)
|
|
19
21
|
// best not to show that at all. The company name will still be shown.
|
|
@@ -29,7 +31,7 @@ function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
|
29
31
|
description: "Popup title for a free-floating bike",
|
|
30
32
|
id: "otpUi.MapPopup.floatingBike"
|
|
31
33
|
}, {
|
|
32
|
-
name: stationName
|
|
34
|
+
name: stationName
|
|
33
35
|
});
|
|
34
36
|
} else if ("isFloatingCar" in entity && entity.isFloatingCar) {
|
|
35
37
|
stationName = intl.formatMessage({
|
|
@@ -47,7 +49,7 @@ function makeDefaultGetEntityName(intl, defaultEnglishMessages) {
|
|
|
47
49
|
description: "Popup title for a free-floating e-scooter",
|
|
48
50
|
id: "otpUi.MapPopup.floatingEScooter"
|
|
49
51
|
}, {
|
|
50
|
-
name: stationName
|
|
52
|
+
name: stationName
|
|
51
53
|
});
|
|
52
54
|
}
|
|
53
55
|
|
package/lib/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/util.ts"],"names":["makeDefaultGetEntityName","intl","defaultEnglishMessages","defaultGetEntityName","entity","configCompanies","stationNetworks","coreUtils","itinerary","getCompaniesLabelFromNetworks","networks","stationName","name","id","match","length","isFloatingBike","formatMessage","defaultMessage","description","isFloatingCar","company","isFloatingVehicle"],"mappings":";;;;;;;;;AAEA;;AAEA;AACO,SAASA,wBAAT,CACLC,IADK,EAELC,sBAFK,EAGL;AACA,SAAO,SAASC,oBAAT,CACLC,MADK,EAELC,eAFK,EAGU;AAAA;;AACf,UAAMC,eAAe,GACnB,cAAcF,MAAd,KACCG,mBAAUC,SAAV,CAAoBC,6BAApB,CACC,CAAAL,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEM,QAAR,KAAoB,EADrB,EAECL,eAFD,MAICD,MAJD,aAICA,MAJD,2CAICA,MAAM,CAAEM,QAJT,qDAIC,iBAAmB,CAAnB,CAJD,CADD,CADF;AAOA,QAAIC,WAA0B,GAAGP,MAAM,CAACQ,IAAP,IAAeR,MAAM,CAACS,EAAvD,
|
|
1
|
+
{"version":3,"sources":["../src/util.ts"],"names":["makeDefaultGetEntityName","intl","defaultEnglishMessages","defaultGetEntityName","entity","configCompanies","stationNetworks","coreUtils","itinerary","getCompaniesLabelFromNetworks","networks","stationName","name","id","match","length","isFloatingBike","formatMessage","defaultMessage","description","isFloatingCar","company","isFloatingVehicle"],"mappings":";;;;;;;;;AAEA;;AAEA;AACO,SAASA,wBAAT,CACLC,IADK,EAELC,sBAFK,EAGL;AACA,SAAO,SAASC,oBAAT,CACLC,MADK,EAELC,eAFK,EAGU;AAAA;;AACf;AACA;AACA,UAAMC,eAAe,GACnB,cAAcF,MAAd,KACCG,mBAAUC,SAAV,CAAoBC,6BAApB,CACC,CAAAL,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEM,QAAR,KAAoB,EADrB,EAECL,eAFD,MAICD,MAJD,aAICA,MAJD,2CAICA,MAAM,CAAEM,QAJT,qDAIC,iBAAmB,CAAnB,CAJD,CADD,CADF;AAOA,QAAIC,WAA0B,GAAGP,MAAM,CAACQ,IAAP,IAAeR,MAAM,CAACS,EAAvD,CAVe,CAWf;AACA;AACA;;AACA,QACE,CAACF,WAAW,CAACG,KAAZ,CAAkB,IAAlB,KAA2B,EAA5B,EAAgCC,MAAhC,GAAyC,CAAzC,IACAJ,WAAW,KAAK,sBAFlB,EAGE;AACAA,MAAAA,WAAW,GAAG,IAAd;AACD;;AAED,QAAI,oBAAoBP,MAApB,IAA8BA,MAAM,CAACY,cAAzC,EAAyD;AACvDL,MAAAA,WAAW,GAAGV,IAAI,CAACgB,aAAL,CACZ;AACEC,QAAAA,cAAc,EAAEhB,sBAAsB,CAAC,6BAAD,CADxC;AAEEiB,QAAAA,WAAW,EAAE,sCAFf;AAGEN,QAAAA,EAAE,EAAE;AAHN,OADY,EAMZ;AAAED,QAAAA,IAAI,EAAED;AAAR,OANY,CAAd;AAQD,KATD,MASO,IAAI,mBAAmBP,MAAnB,IAA6BA,MAAM,CAACgB,aAAxC,EAAuD;AAC5DT,MAAAA,WAAW,GAAGV,IAAI,CAACgB,aAAL,CACZ;AACEC,QAAAA,cAAc,EAAEhB,sBAAsB,CAAC,4BAAD,CADxC;AAEEiB,QAAAA,WAAW,EAAE,qCAFf;AAGEN,QAAAA,EAAE,EAAE;AAHN,OADY,EAMZ;AACEQ,QAAAA,OAAO,EAAEf,eADX;AAEEM,QAAAA,IAAI,EAAED;AAFR,OANY,CAAd;AAWD,KAZM,MAYA,IAAI,uBAAuBP,MAAvB,IAAiCA,MAAM,CAACkB,iBAA5C,EAA+D;AACpE;AACAX,MAAAA,WAAW,GAAGV,IAAI,CAACgB,aAAL,CACZ;AACEC,QAAAA,cAAc,EACZhB,sBAAsB,CAAC,iCAAD,CAF1B;AAGEiB,QAAAA,WAAW,EAAE,2CAHf;AAIEN,QAAAA,EAAE,EAAE;AAJN,OADY,EAOZ;AAAED,QAAAA,IAAI,EAAED;AAAR,OAPY,CAAd;AASD;;AACD,WAAOA,WAAP;AACD,GA1DD;AA2DD","sourcesContent":["import { Company, Station, Stop } from \"@opentripplanner/types\";\nimport { IntlShape } from \"react-intl\";\nimport coreUtils from \"@opentripplanner/core-utils\";\n\n// eslint-disable-next-line import/prefer-default-export\nexport function makeDefaultGetEntityName(\n intl: IntlShape,\n defaultEnglishMessages: { [key: string]: string }\n) {\n return function defaultGetEntityName(\n entity: Station | Stop,\n configCompanies: Company[]\n ): string | null {\n // TODO: Stop generating this / passing it to the car string? Is it needed?\n // In English we say \"Car: \" instead\n const stationNetworks =\n \"networks\" in entity &&\n (coreUtils.itinerary.getCompaniesLabelFromNetworks(\n entity?.networks || [],\n configCompanies\n ) ||\n entity?.networks?.[0]);\n let stationName: string | null = entity.name || entity.id;\n // If the station name or id is a giant UUID (with more than 3 \"-\" characters)\n // best not to show that at all. The company name will still be shown.\n // Also ignore \"Default Vehicle Type\"\n if (\n (stationName.match(/-/g) || []).length > 3 ||\n stationName === \"Default vehicle type\"\n ) {\n stationName = null;\n }\n\n if (\"isFloatingBike\" in entity && entity.isFloatingBike) {\n stationName = intl.formatMessage(\n {\n defaultMessage: defaultEnglishMessages[\"otpUi.MapPopup.floatingBike\"],\n description: \"Popup title for a free-floating bike\",\n id: \"otpUi.MapPopup.floatingBike\"\n },\n { name: stationName }\n );\n } else if (\"isFloatingCar\" in entity && entity.isFloatingCar) {\n stationName = intl.formatMessage(\n {\n defaultMessage: defaultEnglishMessages[\"otpUi.MapPopup.floatingCar\"],\n description: \"Popup title for a free-floating car\",\n id: \"otpUi.MapPopup.floatingCar\"\n },\n {\n company: stationNetworks,\n name: stationName\n }\n );\n } else if (\"isFloatingVehicle\" in entity && entity.isFloatingVehicle) {\n // assumes that all floating vehicles are E-scooters\n stationName = intl.formatMessage(\n {\n defaultMessage:\n defaultEnglishMessages[\"otpUi.MapPopup.floatingEScooter\"],\n description: \"Popup title for a free-floating e-scooter\",\n id: \"otpUi.MapPopup.floatingEScooter\"\n },\n { name: stationName }\n );\n }\n return stationName;\n };\n}\n"],"file":"util.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentripplanner/map-popup",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.3",
|
|
4
4
|
"description": "A component for displaying map popup contents",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -11,15 +11,15 @@
|
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"private": false,
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@opentripplanner/core-utils": "^11.4.
|
|
15
|
-
"@opentripplanner/from-to-location-picker": "^2.1.
|
|
14
|
+
"@opentripplanner/core-utils": "^11.4.3",
|
|
15
|
+
"@opentripplanner/from-to-location-picker": "^2.1.13",
|
|
16
16
|
"flat": "^5.0.2"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@opentripplanner/types": "^6.5.
|
|
19
|
+
"@opentripplanner/types": "^6.5.2"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
|
-
"react": "^
|
|
22
|
+
"react": "^18.2.0",
|
|
23
23
|
"react-intl": "^5.24.6",
|
|
24
24
|
"styled-components": "^5.3.0"
|
|
25
25
|
},
|
package/src/MapPopup.story.tsx
CHANGED
|
@@ -40,7 +40,7 @@ const FLOATING_VEHICLE = {
|
|
|
40
40
|
id: '"bike_6861"',
|
|
41
41
|
isCarStation: false,
|
|
42
42
|
isFloatingBike: true,
|
|
43
|
-
name: "0541
|
|
43
|
+
name: "0541",
|
|
44
44
|
networks: ["BIKETOWN"],
|
|
45
45
|
realTimeData: true,
|
|
46
46
|
spacesAvailable: 0,
|
|
@@ -48,6 +48,22 @@ const FLOATING_VEHICLE = {
|
|
|
48
48
|
y: 45.525486666666666
|
|
49
49
|
};
|
|
50
50
|
|
|
51
|
+
const FLOATING_CAR = {
|
|
52
|
+
"stroke-width": 1,
|
|
53
|
+
allowDropoff: false,
|
|
54
|
+
allowPickup: true,
|
|
55
|
+
color: "#333",
|
|
56
|
+
id: "car_6861",
|
|
57
|
+
isCarStation: false,
|
|
58
|
+
isFloatingCar: true,
|
|
59
|
+
name: "0541",
|
|
60
|
+
networks: ["MILES"], // https://miles-mobility.com
|
|
61
|
+
realTimeData: true,
|
|
62
|
+
spacesAvailable: 0,
|
|
63
|
+
x: 13.405,
|
|
64
|
+
y: 52.52
|
|
65
|
+
};
|
|
66
|
+
|
|
51
67
|
export const StopEntity = (): JSX.Element => (
|
|
52
68
|
<MapPopupContents
|
|
53
69
|
entity={STOP}
|
|
@@ -68,6 +84,10 @@ export const StationEntity = (): JSX.Element => (
|
|
|
68
84
|
/>
|
|
69
85
|
);
|
|
70
86
|
|
|
87
|
+
export const FloatingCarEntity = (): JSX.Element => (
|
|
88
|
+
<MapPopupContents entity={FLOATING_CAR} setLocation={action("setLocation")} />
|
|
89
|
+
);
|
|
90
|
+
|
|
71
91
|
export const FloatingVehicleEntity = (): JSX.Element => (
|
|
72
92
|
<MapPopupContents
|
|
73
93
|
entity={FLOATING_VEHICLE}
|