react-spatial 1.5.3 → 1.5.5
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/components/BaseLayerSwitcher/BaseLayerSwitcher.js +262 -0
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +7 -0
- package/components/BaseLayerSwitcher/index.js +1 -0
- package/components/BaseLayerSwitcher/index.js.map +7 -0
- package/{src/components → components}/BasicMap/BasicMap.js +80 -170
- package/components/BasicMap/BasicMap.js.map +7 -0
- package/components/BasicMap/index.js +1 -0
- package/components/BasicMap/index.js.map +7 -0
- package/{src/components → components}/CanvasSaveButton/CanvasSaveButton.js +133 -278
- package/components/CanvasSaveButton/CanvasSaveButton.js.map +7 -0
- package/components/CanvasSaveButton/index.js +1 -0
- package/components/CanvasSaveButton/index.js.map +7 -0
- package/{src/components → components}/Copyright/Copyright.js +21 -41
- package/components/Copyright/Copyright.js.map +7 -0
- package/components/Copyright/index.js +1 -0
- package/components/Copyright/index.js.map +7 -0
- package/components/FeatureExportButton/FeatureExportButton.js +80 -0
- package/components/FeatureExportButton/FeatureExportButton.js.map +7 -0
- package/components/FeatureExportButton/index.js +1 -0
- package/components/FeatureExportButton/index.js.map +7 -0
- package/{src/components → components}/FitExtent/FitExtent.js +16 -30
- package/components/FitExtent/FitExtent.js.map +7 -0
- package/components/FitExtent/index.js +1 -0
- package/components/FitExtent/index.js.map +7 -0
- package/{src/components → components}/Geolocation/Geolocation.js +60 -110
- package/components/Geolocation/Geolocation.js.map +7 -0
- package/components/Geolocation/index.js +1 -0
- package/components/Geolocation/index.js.map +7 -0
- package/{src/components → components}/LayerTree/LayerTree.js +113 -213
- package/components/LayerTree/LayerTree.js.map +7 -0
- package/components/LayerTree/index.js +1 -0
- package/components/LayerTree/index.js.map +7 -0
- package/{src/components → components}/MousePosition/MousePosition.js +37 -70
- package/components/MousePosition/MousePosition.js.map +7 -0
- package/components/MousePosition/index.js +1 -0
- package/components/MousePosition/index.js.map +7 -0
- package/{src/components → components}/NorthArrow/NorthArrow.js +18 -34
- package/components/NorthArrow/NorthArrow.js.map +7 -0
- package/components/NorthArrow/index.js +1 -0
- package/components/NorthArrow/index.js.map +7 -0
- package/{src/components → components}/Overlay/Overlay.js +59 -85
- package/components/Overlay/Overlay.js.map +7 -0
- package/components/Overlay/index.js +1 -0
- package/components/Overlay/index.js.map +7 -0
- package/{src/components → components}/Permalink/Permalink.js +64 -147
- package/components/Permalink/Permalink.js.map +7 -0
- package/components/Permalink/index.js +1 -0
- package/components/Permalink/index.js.map +7 -0
- package/{src/components → components}/Popup/Popup.js +57 -116
- package/components/Popup/Popup.js.map +7 -0
- package/components/Popup/index.js +1 -0
- package/components/Popup/index.js.map +7 -0
- package/{src/components → components}/ResizeHandler/ResizeHandler.js +15 -49
- package/components/ResizeHandler/ResizeHandler.js.map +7 -0
- package/components/ResizeHandler/index.js +1 -0
- package/components/ResizeHandler/index.js.map +7 -0
- package/components/RouteSchedule/RouteSchedule.js +268 -0
- package/components/RouteSchedule/RouteSchedule.js.map +7 -0
- package/components/RouteSchedule/index.js +1 -0
- package/components/RouteSchedule/index.js.map +7 -0
- package/{src/components → components}/ScaleLine/ScaleLine.js +8 -23
- package/components/ScaleLine/ScaleLine.js.map +7 -0
- package/components/ScaleLine/index.js +1 -0
- package/components/ScaleLine/index.js.map +7 -0
- package/{src/components → components}/StopsFinder/StopsFinder.js +74 -103
- package/components/StopsFinder/StopsFinder.js.map +7 -0
- package/components/StopsFinder/StopsFinderOption.js +44 -0
- package/components/StopsFinder/StopsFinderOption.js.map +7 -0
- package/components/StopsFinder/index.js +1 -0
- package/components/StopsFinder/index.js.map +7 -0
- package/{src/components → components}/Zoom/Zoom.js +46 -77
- package/components/Zoom/Zoom.js.map +7 -0
- package/components/Zoom/index.js +1 -0
- package/components/Zoom/index.js.map +7 -0
- package/package.json +32 -31
- package/{src/propTypes.js → propTypes.js} +30 -16
- package/propTypes.js.map +7 -0
- package/{src/setupTests.js → setupTests.js} +1 -1
- package/setupTests.js.map +7 -0
- package/utils/GlobalsForOle.js +94 -0
- package/utils/GlobalsForOle.js.map +7 -0
- package/utils/KML.js +420 -0
- package/utils/KML.js.map +7 -0
- package/{src/utils → utils}/KMLFormat.js +29 -32
- package/utils/KMLFormat.js.map +7 -0
- package/{src/utils → utils}/Styles.js +14 -20
- package/utils/Styles.js.map +7 -0
- package/{src/utils → utils}/getPolygonPattern.js +6 -34
- package/utils/getPolygonPattern.js.map +7 -0
- package/{src/utils → utils}/timeUtils.js +5 -22
- package/utils/timeUtils.js.map +7 -0
- package/.github/workflows/conventional-pr-title.yml +0 -21
- package/.github/workflows/main.yml +0 -28
- package/.husky/commit-msg +0 -4
- package/.husky/post-checkout +0 -4
- package/.husky/post-merge +0 -4
- package/.husky/post-rebase +0 -4
- package/.husky/pre-commit +0 -4
- package/.nvmrc +0 -1
- package/.whitesource +0 -8
- package/CHANGELOG.md +0 -65
- package/DEVELOP.md +0 -113
- package/__mocks__/mapbox-gl.js +0 -11
- package/__mocks__/resize-observer-polyfill.js +0 -9
- package/babel.config.js +0 -3
- package/commitlint.config.js +0 -1
- package/data/topic1.js +0 -119
- package/data/topic2.js +0 -28
- package/doc/README.md +0 -21
- package/doc/doc-config.json +0 -4
- package/pull_request_template.md +0 -16
- package/renovate.json +0 -4
- package/scripts/read-pkg-json.js +0 -17
- package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.js +0 -322
- package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +0 -69
- package/src/components/BaseLayerSwitcher/README.md +0 -61
- package/src/components/BaseLayerSwitcher/__snapshots__/BaseLayerSwitcher.test.js.snap +0 -88
- package/src/components/BaseLayerSwitcher/index.js +0 -1
- package/src/components/BasicMap/BasicMap.test.js +0 -281
- package/src/components/BasicMap/README.md +0 -18
- package/src/components/BasicMap/index.js +0 -1
- package/src/components/CanvasSaveButton/CanvasSaveButton.test.js +0 -148
- package/src/components/CanvasSaveButton/README.md +0 -76
- package/src/components/CanvasSaveButton/__snapshots__/CanvasSaveButton.test.js.snap +0 -76
- package/src/components/CanvasSaveButton/index.js +0 -1
- package/src/components/Copyright/Copyright.test.js +0 -134
- package/src/components/Copyright/README.md +0 -36
- package/src/components/Copyright/index.js +0 -1
- package/src/components/FeatureExportButton/FeatureExportButton.js +0 -118
- package/src/components/FeatureExportButton/FeatureExportButton.test.js +0 -417
- package/src/components/FeatureExportButton/README.md +0 -76
- package/src/components/FeatureExportButton/__snapshots__/FeatureExportButton.test.js.snap +0 -67
- package/src/components/FeatureExportButton/index.js +0 -1
- package/src/components/FitExtent/FitExtent.test.js +0 -48
- package/src/components/FitExtent/README.md +0 -34
- package/src/components/FitExtent/__snapshots__/FitExtent.test.js.snap +0 -13
- package/src/components/FitExtent/index.js +0 -1
- package/src/components/Geolocation/Geolocation.test.js +0 -267
- package/src/components/Geolocation/README.md +0 -25
- package/src/components/Geolocation/__snapshots__/Geolocation.test.js.snap +0 -92
- package/src/components/Geolocation/index.js +0 -1
- package/src/components/LayerTree/LayerTree.test.js +0 -337
- package/src/components/LayerTree/README.md +0 -92
- package/src/components/LayerTree/__snapshots__/LayerTree.test.js.snap +0 -1746
- package/src/components/LayerTree/index.js +0 -1
- package/src/components/MousePosition/MousePosition.test.js +0 -132
- package/src/components/MousePosition/README.md +0 -50
- package/src/components/MousePosition/__snapshots__/MousePosition.test.js.snap +0 -76
- package/src/components/MousePosition/index.js +0 -1
- package/src/components/NorthArrow/NorthArrow.test.js +0 -104
- package/src/components/NorthArrow/README.md +0 -59
- package/src/components/NorthArrow/__snapshots__/NorthArrow.test.js.snap +0 -117
- package/src/components/NorthArrow/index.js +0 -1
- package/src/components/Overlay/Overlay.test.js +0 -149
- package/src/components/Overlay/README.md +0 -59
- package/src/components/Overlay/__snapshots__/Overlay.test.js.snap +0 -9
- package/src/components/Overlay/index.js +0 -1
- package/src/components/Permalink/Permalink.test.js +0 -285
- package/src/components/Permalink/README.md +0 -105
- package/src/components/Permalink/index.js +0 -1
- package/src/components/Popup/Popup.test.js +0 -307
- package/src/components/Popup/README.md +0 -93
- package/src/components/Popup/__snapshots__/Popup.test.js.snap +0 -180
- package/src/components/Popup/index.js +0 -1
- package/src/components/README.md +0 -41
- package/src/components/ResizeHandler/ResizeHandler.test.js +0 -344
- package/src/components/ResizeHandler/index.js +0 -1
- package/src/components/RouteSchedule/README.md +0 -118
- package/src/components/RouteSchedule/RouteSchedule.js +0 -370
- package/src/components/RouteSchedule/RouteSchedule.test.js +0 -113
- package/src/components/RouteSchedule/__snapshots__/RouteSchedule.test.js.snap +0 -248
- package/src/components/RouteSchedule/index.js +0 -1
- package/src/components/ScaleLine/README.md +0 -29
- package/src/components/ScaleLine/ScaleLine.test.js +0 -30
- package/src/components/ScaleLine/__snapshots__/ScaleLine.test.js.snap +0 -7
- package/src/components/ScaleLine/index.js +0 -1
- package/src/components/StopsFinder/README.md +0 -50
- package/src/components/StopsFinder/StopsFinder.test.js +0 -17
- package/src/components/StopsFinder/StopsFinderOption.js +0 -61
- package/src/components/StopsFinder/__snapshots__/StopsFinder.test.js.snap +0 -133
- package/src/components/StopsFinder/index.js +0 -1
- package/src/components/Zoom/README.md +0 -25
- package/src/components/Zoom/Zoom.test.js +0 -141
- package/src/components/Zoom/__snapshots__/Zoom.test.js.snap +0 -201
- package/src/components/Zoom/index.js +0 -1
- package/src/styleguidist/ComponentsList.js +0 -52
- package/src/styleguidist/StyleGuide.js +0 -277
- package/src/styleguidist/styleguidist.css +0 -38
- package/src/utils/GlobalsForOle.js +0 -99
- package/src/utils/KML.js +0 -594
- package/src/utils/KML.test.js +0 -337
- package/src/utils/KMLFormat.test.js +0 -50
- package/src/utils/__snapshots__/KML.test.js.snap.KML-readFeatures()-and-writeFeatures()-should-read-and-write-lineDash-and-fillPattern-style-for-polygon.canvas-image.png +0 -0
- package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-2-(cross)-color-and-(light-blue)-opacity.canvas-image.png +0 -0
- package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-3-(diagonal-line-from-bottom-left-tot-top-right)-with-color-(light-blue)-and-opacity.canvas-image.png +0 -0
- package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-4-(diagonal-line-from-top-left-to-bottom-right)-with-color-(light-blue)-and-opacity.canvas-image.png +0 -0
- package/src/utils/getPolygonPattern.test.js +0 -61
- package/src/utils/timeUtils.test.js +0 -30
- package/styleguide.config.js +0 -251
- /package/{src/components → components}/BaseLayerSwitcher/BaseLayerSwitcher.md.scss +0 -0
- /package/{src/components → components}/BaseLayerSwitcher/BaseLayerSwitcher.scss +0 -0
- /package/{src/components → components}/BasicMap/BasicMap.md.scss +0 -0
- /package/{src/components → components}/CanvasSaveButton/CanvasSaveButton.md.scss +0 -0
- /package/{src/components → components}/Copyright/Copyright.md.scss +0 -0
- /package/{src/components → components}/FeatureExportButton/FeatureExportButton.md.scss +0 -0
- /package/{src/components → components}/FitExtent/FitExtent.md.scss +0 -0
- /package/{src/components → components}/Geolocation/Geolocation.md.scss +0 -0
- /package/{src/components → components}/Geolocation/Geolocation.scss +0 -0
- /package/{src/components → components}/LayerTree/LayerTree.md.scss +0 -0
- /package/{src/components → components}/LayerTree/LayerTree.scss +0 -0
- /package/{src/components → components}/MousePosition/MousePosition.md.scss +0 -0
- /package/{src/components → components}/NorthArrow/NorthArrow.scss +0 -0
- /package/{src/components → components}/Overlay/Overlay.md.scss +0 -0
- /package/{src/components → components}/Overlay/Overlay.scss +0 -0
- /package/{src/components → components}/Permalink/Permalink.md.scss +0 -0
- /package/{src/components → components}/Popup/Popup.md.scss +0 -0
- /package/{src/components → components}/Popup/Popup.scss +0 -0
- /package/{src/components → components}/RouteSchedule/RouteSchedule.md.scss +0 -0
- /package/{src/components → components}/RouteSchedule/RouteSchedule.scss +0 -0
- /package/{src/components → components}/ScaleLine/ScaleLine.scss +0 -0
- /package/{src/components → components}/Zoom/Zoom.md.scss +0 -0
- /package/{src/components → components}/Zoom/Zoom.scss +0 -0
- /package/{src/images → images}/RouteSchedule/firstStation.png +0 -0
- /package/{src/images → images}/RouteSchedule/lastStation.png +0 -0
- /package/{src/images → images}/RouteSchedule/line.png +0 -0
- /package/{src/images → images}/RouteSchedule/station.png +0 -0
- /package/{src/images → images}/baselayer/baselayer.basebright.png +0 -0
- /package/{src/images → images}/baselayer/baselayer.osm.png +0 -0
- /package/{src/images → images}/baselayer/baselayer.travic.png +0 -0
- /package/{src/images → images}/baselayer/open.topo.map.png +0 -0
- /package/{src/images → images}/baselayer/osm.baselayer.hot.png +0 -0
- /package/{src/images → images}/baselayer/osm.baselayer.png +0 -0
- /package/{src/images → images}/favicon.png +0 -0
- /package/{src/images → images}/geops_logo.png +0 -0
- /package/{src/images → images}/geops_logo.svg +0 -0
- /package/{src/images → images}/geops_qr.png +0 -0
- /package/{src/images → images}/mots/bus_poi-blue-01.svg +0 -0
- /package/{src/images → images}/mots/bus_poi-grey-01.svg +0 -0
- /package/{src/images → images}/mots/bus_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/bus_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/bus_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/bus_square-grey-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_poi-blue-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_poi-grey-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_square-grey-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_poi-blue-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_poi-grey-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_square-grey-01.svg +0 -0
- /package/{src/images → images}/mots/funicular_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/funicular_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/funicular_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/gondola_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/rail_poi-blue-01.svg +0 -0
- /package/{src/images → images}/mots/rail_poi-grey-01.svg +0 -0
- /package/{src/images → images}/mots/rail_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/rail_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/rail_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/rail_square-grey-01.svg +0 -0
- /package/{src/images → images}/mots/subway_round blue-01.svg +0 -0
- /package/{src/images → images}/mots/subway_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/tram_poi-blue-01.svg +0 -0
- /package/{src/images → images}/mots/tram_poi-grey-01.svg +0 -0
- /package/{src/images → images}/mots/tram_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/tram_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/tram_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/tram_square-grey-01.svg +0 -0
- /package/{src/images → images}/northArrow.svg +0 -0
- /package/{src/images → images}/northArrow.url.svg +0 -0
- /package/{src/images → images}/northArrowCircle.svg +0 -0
- /package/{src/images → images}/northArrowCircle.url.svg +0 -0
- /package/{src/themes → themes}/README.md +0 -0
- /package/{src/themes → themes}/default/components.scss +0 -0
- /package/{src/themes → themes}/default/examples.scss +0 -0
- /package/{src/themes → themes}/default/index.scss +0 -0
- /package/{src/themes → themes}/default/mixins.scss +0 -0
- /package/{src/themes → themes}/default/variables.scss +0 -0
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
import React, { useMemo, useState, useEffect } from
|
|
2
|
-
import PropTypes from
|
|
3
|
-
import { Autocomplete } from
|
|
4
|
-
import { FaSearch } from
|
|
5
|
-
import TextField from
|
|
6
|
-
import CircularProgress from
|
|
7
|
-
import { StopFinderControl } from
|
|
8
|
-
import { Map } from
|
|
9
|
-
import { makeStyles } from
|
|
10
|
-
import StopsFinderOptions from
|
|
11
|
-
|
|
1
|
+
import React, { useMemo, useState, useEffect } from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
import { Autocomplete } from "@material-ui/lab";
|
|
4
|
+
import { FaSearch } from "react-icons/fa";
|
|
5
|
+
import TextField from "@material-ui/core/TextField";
|
|
6
|
+
import CircularProgress from "@material-ui/core/CircularProgress";
|
|
7
|
+
import { StopFinderControl } from "mobility-toolbox-js/ol";
|
|
8
|
+
import { Map } from "ol";
|
|
9
|
+
import { makeStyles } from "@material-ui/core";
|
|
10
|
+
import StopsFinderOptions from "./StopsFinderOption";
|
|
12
11
|
const useStyles = makeStyles(() => {
|
|
13
12
|
return {
|
|
14
13
|
popupIndicatorOpen: {
|
|
15
|
-
transform:
|
|
16
|
-
}
|
|
14
|
+
transform: "rotate(0)"
|
|
15
|
+
}
|
|
17
16
|
};
|
|
18
17
|
});
|
|
19
|
-
|
|
20
18
|
function StopsFinder({
|
|
21
19
|
agencies,
|
|
22
20
|
apiKey,
|
|
@@ -30,32 +28,31 @@ function StopsFinder({
|
|
|
30
28
|
radius,
|
|
31
29
|
refLocation,
|
|
32
30
|
renderAutocomplete,
|
|
33
|
-
url
|
|
31
|
+
url
|
|
34
32
|
}) {
|
|
35
33
|
const classes = useStyles();
|
|
36
|
-
const [inputValue, setInputValue] = useState(
|
|
34
|
+
const [inputValue, setInputValue] = useState("");
|
|
37
35
|
const [suggestions, setSuggestions] = useState([]);
|
|
38
36
|
const [isLoading, setLoading] = useState(false);
|
|
39
37
|
const [isOpen, setOpen] = useState(false);
|
|
40
|
-
|
|
41
38
|
const control = useMemo(() => {
|
|
42
39
|
return new StopFinderControl({
|
|
43
40
|
url,
|
|
44
41
|
apiKey,
|
|
45
|
-
target: document.createElement(
|
|
46
|
-
element: document.createElement(
|
|
42
|
+
target: document.createElement("div"),
|
|
43
|
+
element: document.createElement("div"),
|
|
47
44
|
render(newSuggestions = { features: [] }) {
|
|
48
45
|
setSuggestions(newSuggestions.features);
|
|
49
46
|
setLoading(false);
|
|
50
|
-
}
|
|
47
|
+
}
|
|
51
48
|
});
|
|
52
49
|
}, [apiKey, url]);
|
|
53
|
-
|
|
54
50
|
useEffect(() => {
|
|
55
51
|
if (!inputValue) {
|
|
56
52
|
setSuggestions([]);
|
|
57
53
|
setLoading(false);
|
|
58
|
-
return () => {
|
|
54
|
+
return () => {
|
|
55
|
+
};
|
|
59
56
|
}
|
|
60
57
|
const abortController = new AbortController();
|
|
61
58
|
setLoading(true);
|
|
@@ -66,7 +63,7 @@ function StopsFinder({
|
|
|
66
63
|
limit,
|
|
67
64
|
mots: mots && mots.toString(),
|
|
68
65
|
radius,
|
|
69
|
-
ref_location: refLocation && refLocation.toString()
|
|
66
|
+
ref_location: refLocation && refLocation.toString()
|
|
70
67
|
};
|
|
71
68
|
control.search(inputValue, abortController);
|
|
72
69
|
return () => {
|
|
@@ -81,26 +78,21 @@ function StopsFinder({
|
|
|
81
78
|
limit,
|
|
82
79
|
mots,
|
|
83
80
|
radius,
|
|
84
|
-
refLocation
|
|
81
|
+
refLocation
|
|
85
82
|
]);
|
|
86
|
-
|
|
87
|
-
// Ensure the control is not associated to the wrong map
|
|
88
83
|
useEffect(() => {
|
|
89
84
|
if (!control) {
|
|
90
|
-
return () => {
|
|
85
|
+
return () => {
|
|
86
|
+
};
|
|
91
87
|
}
|
|
92
|
-
|
|
93
88
|
control.map = map;
|
|
94
|
-
|
|
95
89
|
return () => {
|
|
96
90
|
control.map = null;
|
|
97
91
|
};
|
|
98
92
|
}, [map, control]);
|
|
99
|
-
|
|
100
93
|
if (!control) {
|
|
101
94
|
return null;
|
|
102
95
|
}
|
|
103
|
-
|
|
104
96
|
if (renderAutocomplete) {
|
|
105
97
|
return renderAutocomplete(
|
|
106
98
|
suggestions,
|
|
@@ -109,74 +101,67 @@ function StopsFinder({
|
|
|
109
101
|
isOpen,
|
|
110
102
|
setOpen,
|
|
111
103
|
isLoading,
|
|
112
|
-
setLoading
|
|
104
|
+
setLoading
|
|
113
105
|
);
|
|
114
106
|
}
|
|
115
107
|
const textFieldProps = {
|
|
116
|
-
...(
|
|
108
|
+
...(autocompleteProps || {}).textFieldProps || {}
|
|
117
109
|
};
|
|
118
110
|
const autocProps = { ...autocompleteProps };
|
|
119
111
|
delete autocProps.textFieldProps;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
fullWidth
|
|
124
|
-
autoComplete
|
|
125
|
-
autoHighlight
|
|
126
|
-
selectOnFocus
|
|
127
|
-
getOptionLabel
|
|
112
|
+
return /* @__PURE__ */ React.createElement(
|
|
113
|
+
Autocomplete,
|
|
114
|
+
{
|
|
115
|
+
fullWidth: true,
|
|
116
|
+
autoComplete: true,
|
|
117
|
+
autoHighlight: true,
|
|
118
|
+
selectOnFocus: true,
|
|
119
|
+
getOptionLabel: (option) => {
|
|
128
120
|
return option.properties.name;
|
|
129
|
-
}
|
|
130
|
-
onChange
|
|
131
|
-
if (onSelect && reason ===
|
|
121
|
+
},
|
|
122
|
+
onChange: (evt, value, reason) => {
|
|
123
|
+
if (onSelect && reason === "select-option") {
|
|
132
124
|
onSelect(value, evt);
|
|
133
125
|
}
|
|
134
|
-
}
|
|
135
|
-
popupIcon
|
|
136
|
-
renderInput
|
|
137
|
-
return (
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
126
|
+
},
|
|
127
|
+
popupIcon: /* @__PURE__ */ React.createElement(FaSearch, { focusable: false, size: 15 }),
|
|
128
|
+
renderInput: (params) => {
|
|
129
|
+
return /* @__PURE__ */ React.createElement(
|
|
130
|
+
TextField,
|
|
131
|
+
{
|
|
132
|
+
label: "Search stops",
|
|
133
|
+
...{
|
|
142
134
|
...params,
|
|
143
|
-
...textFieldProps
|
|
144
|
-
}
|
|
145
|
-
InputProps
|
|
135
|
+
...textFieldProps
|
|
136
|
+
},
|
|
137
|
+
InputProps: {
|
|
146
138
|
...params.InputProps,
|
|
147
|
-
endAdornment: (
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
{params.InputProps.endAdornment}
|
|
151
|
-
</>
|
|
152
|
-
),
|
|
153
|
-
}}
|
|
154
|
-
/>
|
|
139
|
+
endAdornment: /* @__PURE__ */ React.createElement(React.Fragment, null, isLoading && /* @__PURE__ */ React.createElement(CircularProgress, { size: 20 }), params.InputProps.endAdornment)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
155
142
|
);
|
|
156
|
-
}
|
|
157
|
-
renderOption
|
|
158
|
-
return
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
{...
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
onOpen={() => {
|
|
143
|
+
},
|
|
144
|
+
renderOption: (option) => {
|
|
145
|
+
return /* @__PURE__ */ React.createElement(StopsFinderOptions, { option });
|
|
146
|
+
},
|
|
147
|
+
...autocProps,
|
|
148
|
+
classes: { ...classes, ...autocompleteProps.classes },
|
|
149
|
+
inputValue,
|
|
150
|
+
open: isOpen,
|
|
151
|
+
options: suggestions,
|
|
152
|
+
loading: isLoading,
|
|
153
|
+
onOpen: () => {
|
|
168
154
|
setOpen(true);
|
|
169
|
-
}
|
|
170
|
-
onClose
|
|
155
|
+
},
|
|
156
|
+
onClose: () => {
|
|
171
157
|
setOpen(false);
|
|
172
|
-
}
|
|
173
|
-
onInputChange
|
|
158
|
+
},
|
|
159
|
+
onInputChange: (evt, val) => {
|
|
174
160
|
setInputValue(val);
|
|
175
|
-
}
|
|
176
|
-
|
|
161
|
+
}
|
|
162
|
+
}
|
|
177
163
|
);
|
|
178
164
|
}
|
|
179
|
-
|
|
180
165
|
StopsFinder.propTypes = {
|
|
181
166
|
/**
|
|
182
167
|
* Array or a comma separated list of agencies which should be available.
|
|
@@ -185,87 +170,74 @@ StopsFinder.propTypes = {
|
|
|
185
170
|
*/
|
|
186
171
|
agencies: PropTypes.oneOfType([
|
|
187
172
|
PropTypes.string,
|
|
188
|
-
PropTypes.arrayOf(PropTypes.string)
|
|
173
|
+
PropTypes.arrayOf(PropTypes.string)
|
|
189
174
|
]),
|
|
190
|
-
|
|
191
175
|
/**
|
|
192
176
|
* geOps api key to access the StopsFinder service.
|
|
193
177
|
*/
|
|
194
178
|
apiKey: PropTypes.string,
|
|
195
|
-
|
|
196
179
|
/**
|
|
197
180
|
* Properties apply to the default [MUI Autocomplete component](https://material-ui.com/api/autocomplete/).
|
|
198
181
|
* We add a custom properties textFieldProps for the default [MUI TextField component](https://material-ui.com/api/text-field/) used by the Autocomplete.
|
|
199
182
|
*/
|
|
200
183
|
autocompleteProps: PropTypes.object,
|
|
201
|
-
|
|
202
184
|
/**
|
|
203
185
|
* minX,minY,maxX,maxY coordinates in WGS84 wherein the station should lie.
|
|
204
186
|
*/
|
|
205
187
|
bbox: PropTypes.oneOfType([
|
|
206
188
|
PropTypes.string,
|
|
207
|
-
PropTypes.arrayOf(PropTypes.number)
|
|
189
|
+
PropTypes.arrayOf(PropTypes.number)
|
|
208
190
|
]),
|
|
209
|
-
|
|
210
191
|
/**
|
|
211
192
|
* Array or a comma separated list of fields which should be used for look up.
|
|
212
193
|
* Available values : id, name, coords
|
|
213
194
|
*/
|
|
214
195
|
field: PropTypes.oneOfType([
|
|
215
196
|
PropTypes.string,
|
|
216
|
-
PropTypes.arrayOf(PropTypes.string)
|
|
197
|
+
PropTypes.arrayOf(PropTypes.string)
|
|
217
198
|
]),
|
|
218
|
-
|
|
219
199
|
/**
|
|
220
200
|
* Control how many matches will be returned.
|
|
221
201
|
*/
|
|
222
202
|
limit: PropTypes.number,
|
|
223
|
-
|
|
224
203
|
/**
|
|
225
204
|
* A map.
|
|
226
205
|
*/
|
|
227
206
|
map: PropTypes.instanceOf(Map).isRequired,
|
|
228
|
-
|
|
229
207
|
/**
|
|
230
208
|
* Array or a comma separated list of mode of transpaorts which should be available.
|
|
231
209
|
* Available values : bus, ferry, gondola, tram, rail, funicular, cable_car, subway
|
|
232
210
|
*/
|
|
233
211
|
mots: PropTypes.oneOfType([
|
|
234
212
|
PropTypes.string,
|
|
235
|
-
PropTypes.arrayOf(PropTypes.string)
|
|
213
|
+
PropTypes.arrayOf(PropTypes.string)
|
|
236
214
|
]),
|
|
237
|
-
|
|
238
215
|
/**
|
|
239
216
|
* Function called when a suggestion is selected.
|
|
240
217
|
*/
|
|
241
218
|
onSelect: PropTypes.func,
|
|
242
|
-
|
|
243
219
|
/**
|
|
244
220
|
* Radius around refLocation in meters that is most relevant.
|
|
245
221
|
* Used as granularity for location rank.
|
|
246
222
|
*/
|
|
247
223
|
radius: PropTypes.number,
|
|
248
|
-
|
|
249
224
|
/**
|
|
250
225
|
* Coordinates in WGS84 (in lat,lon order) used to rank stops close to this position higher.
|
|
251
226
|
* Available values : id, name, coords
|
|
252
227
|
*/
|
|
253
228
|
refLocation: PropTypes.oneOfType([
|
|
254
229
|
PropTypes.string,
|
|
255
|
-
PropTypes.arrayOf(PropTypes.number)
|
|
230
|
+
PropTypes.arrayOf(PropTypes.number)
|
|
256
231
|
]),
|
|
257
|
-
|
|
258
232
|
/**
|
|
259
233
|
* Function to render a different autocomplete input than the default one.
|
|
260
234
|
*/
|
|
261
235
|
renderAutocomplete: PropTypes.func,
|
|
262
|
-
|
|
263
236
|
/**
|
|
264
237
|
* Url of the geOps StopsFinder service.
|
|
265
238
|
*/
|
|
266
|
-
url: PropTypes.string
|
|
239
|
+
url: PropTypes.string
|
|
267
240
|
};
|
|
268
|
-
|
|
269
241
|
StopsFinder.defaultProps = {
|
|
270
242
|
agencies: null,
|
|
271
243
|
apiKey: null,
|
|
@@ -278,7 +250,6 @@ StopsFinder.defaultProps = {
|
|
|
278
250
|
radius: null,
|
|
279
251
|
refLocation: null,
|
|
280
252
|
url: null,
|
|
281
|
-
renderAutocomplete: null
|
|
253
|
+
renderAutocomplete: null
|
|
282
254
|
};
|
|
283
|
-
|
|
284
255
|
export default StopsFinder;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/StopsFinder/StopsFinder.js"],
|
|
4
|
+
"sourcesContent": ["import React, { useMemo, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Autocomplete } from '@material-ui/lab';\nimport { FaSearch } from 'react-icons/fa';\nimport TextField from '@material-ui/core/TextField';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { StopFinderControl } from 'mobility-toolbox-js/ol';\nimport { Map } from 'ol';\nimport { makeStyles } from '@material-ui/core';\nimport StopsFinderOptions from './StopsFinderOption';\n\nconst useStyles = makeStyles(() => {\n return {\n popupIndicatorOpen: {\n transform: 'rotate(0)',\n },\n };\n});\n\nfunction StopsFinder({\n agencies,\n apiKey,\n autocompleteProps,\n bbox,\n field,\n limit,\n map,\n mots,\n onSelect,\n radius,\n refLocation,\n renderAutocomplete,\n url,\n}) {\n const classes = useStyles();\n const [inputValue, setInputValue] = useState('');\n const [suggestions, setSuggestions] = useState([]);\n const [isLoading, setLoading] = useState(false);\n const [isOpen, setOpen] = useState(false);\n\n const control = useMemo(() => {\n return new StopFinderControl({\n url,\n apiKey,\n target: document.createElement('div'),\n element: document.createElement('div'),\n render(newSuggestions = { features: [] }) {\n setSuggestions(newSuggestions.features);\n setLoading(false);\n },\n });\n }, [apiKey, url]);\n\n useEffect(() => {\n if (!inputValue) {\n setSuggestions([]);\n setLoading(false);\n return () => {};\n }\n const abortController = new AbortController();\n setLoading(true);\n control.apiParams = {\n prefAgencies: agencies && agencies.toString(),\n bbox: bbox && bbox.toString(),\n field: field && field.toString(),\n limit,\n mots: mots && mots.toString(),\n radius,\n ref_location: refLocation && refLocation.toString(),\n };\n control.search(inputValue, abortController);\n return () => {\n abortController.abort();\n };\n }, [\n agencies,\n bbox,\n control,\n field,\n inputValue,\n limit,\n mots,\n radius,\n refLocation,\n ]);\n\n // Ensure the control is not associated to the wrong map\n useEffect(() => {\n if (!control) {\n return () => {};\n }\n\n control.map = map;\n\n return () => {\n control.map = null;\n };\n }, [map, control]);\n\n if (!control) {\n return null;\n }\n\n if (renderAutocomplete) {\n return renderAutocomplete(\n suggestions,\n inputValue,\n setInputValue,\n isOpen,\n setOpen,\n isLoading,\n setLoading,\n );\n }\n const textFieldProps = {\n ...((autocompleteProps || {}).textFieldProps || {}),\n };\n const autocProps = { ...autocompleteProps };\n delete autocProps.textFieldProps;\n\n return (\n <Autocomplete\n fullWidth\n autoComplete\n autoHighlight\n selectOnFocus\n getOptionLabel={(option) => {\n return option.properties.name;\n }}\n onChange={(evt, value, reason) => {\n if (onSelect && reason === 'select-option') {\n onSelect(value, evt);\n }\n }}\n popupIcon={<FaSearch focusable={false} size={15} />}\n renderInput={(params) => {\n return (\n <TextField\n label=\"Search stops\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...{\n ...params,\n ...textFieldProps,\n }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {isLoading && <CircularProgress size={20} />}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n );\n }}\n renderOption={(option) => {\n return <StopsFinderOptions option={option} />;\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...autocProps}\n classes={{ ...classes, ...autocompleteProps.classes }}\n inputValue={inputValue}\n open={isOpen}\n options={suggestions}\n loading={isLoading}\n onOpen={() => {\n setOpen(true);\n }}\n onClose={() => {\n setOpen(false);\n }}\n onInputChange={(evt, val) => {\n setInputValue(val);\n }}\n />\n );\n}\n\nStopsFinder.propTypes = {\n /**\n * Array or a comma separated list of agencies which should be available.\n * Order of these agencies chooses which agency will be preferred.\n * Available values : sbb, db\n */\n agencies: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n\n /**\n * geOps api key to access the StopsFinder service.\n */\n apiKey: PropTypes.string,\n\n /**\n * Properties apply to the default [MUI Autocomplete component](https://material-ui.com/api/autocomplete/).\n * We add a custom properties textFieldProps for the default [MUI TextField component](https://material-ui.com/api/text-field/) used by the Autocomplete.\n */\n autocompleteProps: PropTypes.object,\n\n /**\n * minX,minY,maxX,maxY coordinates in WGS84 wherein the station should lie.\n */\n bbox: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.number),\n ]),\n\n /**\n * Array or a comma separated list of fields which should be used for look up.\n * Available values : id, name, coords\n */\n field: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n\n /**\n * Control how many matches will be returned.\n */\n limit: PropTypes.number,\n\n /**\n * A map.\n */\n map: PropTypes.instanceOf(Map).isRequired,\n\n /**\n * Array or a comma separated list of mode of transpaorts which should be available.\n * Available values : bus, ferry, gondola, tram, rail, funicular, cable_car, subway\n */\n mots: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n\n /**\n * Function called when a suggestion is selected.\n */\n onSelect: PropTypes.func,\n\n /**\n * Radius around refLocation in meters that is most relevant.\n * Used as granularity for location rank.\n */\n radius: PropTypes.number,\n\n /**\n * Coordinates in WGS84 (in lat,lon order) used to rank stops close to this position higher.\n * Available values : id, name, coords\n */\n refLocation: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.number),\n ]),\n\n /**\n * Function to render a different autocomplete input than the default one.\n */\n renderAutocomplete: PropTypes.func,\n\n /**\n * Url of the geOps StopsFinder service.\n */\n url: PropTypes.string,\n};\n\nStopsFinder.defaultProps = {\n agencies: null,\n apiKey: null,\n autocompleteProps: {},\n bbox: null,\n field: null,\n limit: null,\n mots: null,\n onSelect: null,\n radius: null,\n refLocation: null,\n url: null,\n renderAutocomplete: null,\n};\n\nexport default StopsFinder;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React, { lazy, Suspense } from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
import { makeStyles } from "@material-ui/core";
|
|
4
|
+
const ext = "_round-blue-01.svg";
|
|
5
|
+
const iconForMot = {};
|
|
6
|
+
[
|
|
7
|
+
"bus",
|
|
8
|
+
"ferry",
|
|
9
|
+
"gondola",
|
|
10
|
+
"tram",
|
|
11
|
+
"rail",
|
|
12
|
+
"funicular",
|
|
13
|
+
"cable_car",
|
|
14
|
+
"subway"
|
|
15
|
+
].forEach((mot) => {
|
|
16
|
+
iconForMot[mot] = lazy(() => {
|
|
17
|
+
return import(`../../images/mots/${mot}${ext}`);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
const useStyles = makeStyles((theme) => {
|
|
21
|
+
return {
|
|
22
|
+
flex: {
|
|
23
|
+
display: "flex",
|
|
24
|
+
alignItems: "center"
|
|
25
|
+
},
|
|
26
|
+
icon: {
|
|
27
|
+
marginRight: theme.spacing(2)
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
function StopsFinderOption({ option }) {
|
|
32
|
+
const classes = useStyles();
|
|
33
|
+
return /* @__PURE__ */ React.createElement(Suspense, { fallback: /* @__PURE__ */ React.createElement("div", null) }, /* @__PURE__ */ React.createElement("div", { className: classes.flex }, Object.entries(option.properties.mot).map(([key, value]) => {
|
|
34
|
+
if (value) {
|
|
35
|
+
const MotIcon = iconForMot[key];
|
|
36
|
+
return /* @__PURE__ */ React.createElement("span", { className: classes.icon, key }, /* @__PURE__ */ React.createElement(MotIcon, null));
|
|
37
|
+
}
|
|
38
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null);
|
|
39
|
+
}), /* @__PURE__ */ React.createElement("span", null, option.properties.name)));
|
|
40
|
+
}
|
|
41
|
+
StopsFinderOption.propTypes = {
|
|
42
|
+
option: PropTypes.object.isRequired
|
|
43
|
+
};
|
|
44
|
+
export default React.memo(StopsFinderOption);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/StopsFinder/StopsFinderOption.js"],
|
|
4
|
+
"sourcesContent": ["import React, { lazy, Suspense } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core';\n\nconst ext = '_round-blue-01.svg';\nconst iconForMot = {};\n[\n 'bus',\n 'ferry',\n 'gondola',\n 'tram',\n 'rail',\n 'funicular',\n 'cable_car',\n 'subway',\n].forEach((mot) => {\n iconForMot[mot] = lazy(() => {\n return import(`../../images/mots/${mot}${ext}`);\n });\n});\n\nconst useStyles = makeStyles((theme) => {\n return {\n flex: {\n display: 'flex',\n alignItems: 'center',\n },\n icon: {\n marginRight: theme.spacing(2),\n },\n };\n});\n\nfunction StopsFinderOption({ option }) {\n const classes = useStyles();\n\n return (\n <Suspense fallback={<div />}>\n <div className={classes.flex}>\n {Object.entries(option.properties.mot).map(([key, value]) => {\n if (value) {\n const MotIcon = iconForMot[key];\n return (\n <span className={classes.icon} key={key}>\n <MotIcon />\n </span>\n );\n }\n return <></>;\n })}\n <span>{option.properties.name}</span>\n </div>\n </Suspense>\n );\n}\n\nStopsFinderOption.propTypes = {\n option: PropTypes.object.isRequired,\n};\n\nexport default React.memo(StopsFinderOption);\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,SAAS,MAAM,gBAAgB;AACtC,OAAO,eAAe;AACtB,SAAS,kBAAkB;AAE3B,MAAM,MAAM;AACZ,MAAM,aAAa,CAAC;AACpB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,QAAQ,CAAC,QAAQ;AACjB,aAAW,GAAG,IAAI,KAAK,MAAM;AAC3B,WAAO,OAAO,qBAAqB,GAAG,GAAG,GAAG;AAAA,EAC9C,CAAC;AACH,CAAC;AAED,MAAM,YAAY,WAAW,CAAC,UAAU;AACtC,SAAO;AAAA,IACL,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,YAAY;AAAA,IACd;AAAA,IACA,MAAM;AAAA,MACJ,aAAa,MAAM,QAAQ,CAAC;AAAA,IAC9B;AAAA,EACF;AACF,CAAC;AAED,SAAS,kBAAkB,EAAE,OAAO,GAAG;AACrC,QAAM,UAAU,UAAU;AAE1B,SACE,oCAAC,YAAS,UAAU,oCAAC,WAAI,KACvB,oCAAC,SAAI,WAAW,QAAQ,QACrB,OAAO,QAAQ,OAAO,WAAW,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAC3D,QAAI,OAAO;AACT,YAAM,UAAU,WAAW,GAAG;AAC9B,aACE,oCAAC,UAAK,WAAW,QAAQ,MAAM,OAC7B,oCAAC,aAAQ,CACX;AAAA,IAEJ;AACA,WAAO,wDAAE;AAAA,EACX,CAAC,GACD,oCAAC,cAAM,OAAO,WAAW,IAAK,CAChC,CACF;AAEJ;AAEA,kBAAkB,YAAY;AAAA,EAC5B,QAAQ,UAAU,OAAO;AAC3B;AAEA,eAAe,MAAM,KAAK,iBAAiB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./StopsFinder";
|
|
@@ -3,61 +3,53 @@ import React, {
|
|
|
3
3
|
useRef,
|
|
4
4
|
useCallback,
|
|
5
5
|
useState,
|
|
6
|
-
useMemo
|
|
7
|
-
} from
|
|
8
|
-
import PropTypes from
|
|
9
|
-
import { FaPlus, FaMinus } from
|
|
10
|
-
import { ZoomSlider } from
|
|
11
|
-
import OLMap from
|
|
12
|
-
import { easeOut } from
|
|
13
|
-
import { unByKey } from
|
|
14
|
-
|
|
6
|
+
useMemo
|
|
7
|
+
} from "react";
|
|
8
|
+
import PropTypes from "prop-types";
|
|
9
|
+
import { FaPlus, FaMinus } from "react-icons/fa";
|
|
10
|
+
import { ZoomSlider } from "ol/control";
|
|
11
|
+
import OLMap from "ol/Map";
|
|
12
|
+
import { easeOut } from "ol/easing";
|
|
13
|
+
import { unByKey } from "ol/Observable";
|
|
15
14
|
const propTypes = {
|
|
16
15
|
/**
|
|
17
16
|
* An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).
|
|
18
17
|
*/
|
|
19
18
|
map: PropTypes.instanceOf(OLMap).isRequired,
|
|
20
|
-
|
|
21
19
|
/**
|
|
22
20
|
* The zoom delta applied on each click.
|
|
23
21
|
*/
|
|
24
22
|
delta: PropTypes.number,
|
|
25
|
-
|
|
26
23
|
/**
|
|
27
24
|
* Titles HTML attribtues for button.
|
|
28
25
|
*/
|
|
29
26
|
titles: PropTypes.shape({
|
|
30
27
|
zoomIn: PropTypes.string,
|
|
31
|
-
zoomOut: PropTypes.string
|
|
28
|
+
zoomOut: PropTypes.string
|
|
32
29
|
}),
|
|
33
|
-
|
|
34
30
|
/**
|
|
35
31
|
* Children content of the zoom in button.
|
|
36
32
|
*/
|
|
37
33
|
zoomInChildren: PropTypes.node,
|
|
38
|
-
|
|
39
34
|
/**
|
|
40
35
|
* Children content of the zoom out button.
|
|
41
36
|
*/
|
|
42
37
|
zoomOutChildren: PropTypes.node,
|
|
43
|
-
|
|
44
38
|
/**
|
|
45
39
|
* Display a slider to zoom.
|
|
46
40
|
*/
|
|
47
|
-
zoomSlider: PropTypes.bool
|
|
41
|
+
zoomSlider: PropTypes.bool
|
|
48
42
|
};
|
|
49
|
-
|
|
50
43
|
const defaultProps = {
|
|
51
44
|
titles: {
|
|
52
|
-
zoomIn:
|
|
53
|
-
zoomOut:
|
|
45
|
+
zoomIn: "Zoom in",
|
|
46
|
+
zoomOut: "Zoom out"
|
|
54
47
|
},
|
|
55
|
-
zoomInChildren:
|
|
56
|
-
zoomOutChildren:
|
|
48
|
+
zoomInChildren: /* @__PURE__ */ React.createElement(FaPlus, { focusable: false }),
|
|
49
|
+
zoomOutChildren: /* @__PURE__ */ React.createElement(FaMinus, { focusable: false }),
|
|
57
50
|
zoomSlider: false,
|
|
58
|
-
delta: 1
|
|
51
|
+
delta: 1
|
|
59
52
|
};
|
|
60
|
-
|
|
61
53
|
const updateZoom = (map, delta) => {
|
|
62
54
|
const view = map.getView();
|
|
63
55
|
const currentZoom = view.getZoom();
|
|
@@ -69,14 +61,9 @@ const updateZoom = (map, delta) => {
|
|
|
69
61
|
view.animate({
|
|
70
62
|
zoom: constrainedZoom,
|
|
71
63
|
duration: 250,
|
|
72
|
-
easing: easeOut
|
|
64
|
+
easing: easeOut
|
|
73
65
|
});
|
|
74
66
|
};
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* The Zoom component creates a zoom wrapper containing zoom-in and zoom-out buttons
|
|
78
|
-
* and an optional [ol/ZoomSlider](https://openlayers.org/en/latest/apidoc/module-ol_control_ZoomSlider-ZoomSlider.html).
|
|
79
|
-
*/
|
|
80
67
|
function Zoom({
|
|
81
68
|
map,
|
|
82
69
|
titles,
|
|
@@ -88,51 +75,36 @@ function Zoom({
|
|
|
88
75
|
}) {
|
|
89
76
|
const ref = useRef();
|
|
90
77
|
const [currentZoom, setZoom] = useState();
|
|
91
|
-
|
|
92
78
|
const zoomIn = useCallback(
|
|
93
79
|
(evt) => {
|
|
94
80
|
if (!evt.which || evt.which === 13) {
|
|
95
81
|
updateZoom(map, delta);
|
|
96
82
|
}
|
|
97
83
|
},
|
|
98
|
-
[delta, map]
|
|
84
|
+
[delta, map]
|
|
99
85
|
);
|
|
100
|
-
|
|
101
86
|
const zoomOut = useCallback(
|
|
102
87
|
(evt) => {
|
|
103
88
|
if (!evt.which || evt.which === 13) {
|
|
104
89
|
updateZoom(map, -delta);
|
|
105
90
|
}
|
|
106
91
|
},
|
|
107
|
-
[delta, map]
|
|
92
|
+
[delta, map]
|
|
108
93
|
);
|
|
109
|
-
|
|
110
94
|
const zoomInDisabled = useMemo(() => {
|
|
111
|
-
return (
|
|
112
|
-
currentZoom >=
|
|
113
|
-
map.getView().getConstrainedZoom(map.getView().getMaxZoom())
|
|
114
|
-
);
|
|
95
|
+
return currentZoom >= map.getView().getConstrainedZoom(map.getView().getMaxZoom());
|
|
115
96
|
}, [currentZoom, map]);
|
|
116
|
-
|
|
117
97
|
const zoomOutDisabled = useMemo(() => {
|
|
118
|
-
return (
|
|
119
|
-
currentZoom <=
|
|
120
|
-
map.getView().getConstrainedZoom(map.getView().getMinZoom())
|
|
121
|
-
);
|
|
98
|
+
return currentZoom <= map.getView().getConstrainedZoom(map.getView().getMinZoom());
|
|
122
99
|
}, [currentZoom, map]);
|
|
123
|
-
|
|
124
100
|
useEffect(() => {
|
|
125
|
-
|
|
126
|
-
const listenerKey = map.on('moveend', () => {
|
|
101
|
+
const listenerKey = map.on("moveend", () => {
|
|
127
102
|
setZoom(map.getView().getZoom());
|
|
128
103
|
});
|
|
129
|
-
|
|
130
104
|
let control;
|
|
131
105
|
if (zoomSlider && ref.current) {
|
|
132
106
|
control = new ZoomSlider();
|
|
133
|
-
// We don't want to navigate to the zoom slider using TAB navigation.
|
|
134
107
|
control.element.firstElementChild.tabIndex = -1;
|
|
135
|
-
// Set the zoom slider in the custom control wrapper.
|
|
136
108
|
control.setTarget(ref.current);
|
|
137
109
|
map.addControl(control);
|
|
138
110
|
}
|
|
@@ -143,38 +115,35 @@ function Zoom({
|
|
|
143
115
|
}
|
|
144
116
|
};
|
|
145
117
|
}, [map, zoomSlider]);
|
|
146
|
-
|
|
147
118
|
return (
|
|
148
119
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
120
|
+
/* @__PURE__ */ React.createElement("div", { className: "rs-zooms-bar", ...other }, /* @__PURE__ */ React.createElement(
|
|
121
|
+
"button",
|
|
122
|
+
{
|
|
123
|
+
type: "button",
|
|
124
|
+
tabIndex: 0,
|
|
125
|
+
className: "rs-zoom-in",
|
|
126
|
+
title: titles.zoomIn,
|
|
127
|
+
onClick: zoomIn,
|
|
128
|
+
onKeyPress: zoomIn,
|
|
129
|
+
disabled: zoomInDisabled
|
|
130
|
+
},
|
|
131
|
+
zoomInChildren
|
|
132
|
+
), zoomSlider ? /* @__PURE__ */ React.createElement("div", { className: "rs-zoomslider-wrapper", ref }) : null, /* @__PURE__ */ React.createElement(
|
|
133
|
+
"button",
|
|
134
|
+
{
|
|
135
|
+
type: "button",
|
|
136
|
+
tabIndex: 0,
|
|
137
|
+
className: "rs-zoom-out",
|
|
138
|
+
title: titles.zoomOut,
|
|
139
|
+
onClick: zoomOut,
|
|
140
|
+
onKeyPress: zoomOut,
|
|
141
|
+
disabled: zoomOutDisabled
|
|
142
|
+
},
|
|
143
|
+
zoomOutChildren
|
|
144
|
+
))
|
|
174
145
|
);
|
|
175
146
|
}
|
|
176
|
-
|
|
177
147
|
Zoom.propTypes = propTypes;
|
|
178
148
|
Zoom.defaultProps = defaultProps;
|
|
179
|
-
|
|
180
149
|
export default React.memo(Zoom);
|