react-spatial 1.2.0 → 1.2.3-beta.2
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/LayerService.js +128 -184
- package/LayerService.js.map +7 -1
- package/Projections.js +29 -12
- package/Projections.js.map +7 -1
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +163 -221
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +7 -1
- package/components/BaseLayerSwitcher/index.js +1 -3
- package/components/BaseLayerSwitcher/index.js.map +7 -1
- package/components/BasicMap/BasicMap.js +147 -285
- package/components/BasicMap/BasicMap.js.map +7 -1
- package/components/BasicMap/index.js +1 -3
- package/components/BasicMap/index.js.map +7 -1
- package/components/CanvasSaveButton/CanvasSaveButton.js +165 -419
- package/components/CanvasSaveButton/CanvasSaveButton.js.map +7 -1
- package/components/CanvasSaveButton/index.js +1 -3
- package/components/CanvasSaveButton/index.js.map +7 -1
- package/components/Copyright/Copyright.js +29 -70
- package/components/Copyright/Copyright.js.map +7 -1
- package/components/Copyright/index.js +1 -3
- package/components/Copyright/index.js.map +7 -1
- package/components/FeatureExportButton/FeatureExportButton.js +40 -106
- package/components/FeatureExportButton/FeatureExportButton.js.map +7 -1
- package/components/FeatureExportButton/index.js +1 -3
- package/components/FeatureExportButton/index.js.map +7 -1
- package/components/FilterButton/FilterButton.js +41 -106
- package/components/FilterButton/FilterButton.js.map +7 -1
- package/components/FilterButton/index.js +1 -3
- package/components/FilterButton/index.js.map +7 -1
- package/components/FitExtent/FitExtent.js +17 -50
- package/components/FitExtent/FitExtent.js.map +7 -1
- package/components/FitExtent/index.js +1 -3
- package/components/FitExtent/index.js.map +7 -1
- package/components/FollowButton/FollowButton.js +41 -111
- package/components/FollowButton/FollowButton.js.map +7 -1
- package/components/FollowButton/index.js +1 -3
- package/components/FollowButton/index.js.map +7 -1
- package/components/Geolocation/Geolocation.js +104 -213
- package/components/Geolocation/Geolocation.js.map +7 -1
- package/components/Geolocation/index.js +1 -3
- package/components/Geolocation/index.js.map +7 -1
- package/components/LayerTree/LayerTree.js +207 -397
- package/components/LayerTree/LayerTree.js.map +7 -1
- package/components/LayerTree/index.js +1 -3
- package/components/LayerTree/index.js.map +7 -1
- package/components/MousePosition/MousePosition.js +61 -130
- package/components/MousePosition/MousePosition.js.map +7 -1
- package/components/MousePosition/index.js +1 -3
- package/components/MousePosition/index.js.map +7 -1
- package/components/NorthArrow/NorthArrow.js +22 -62
- package/components/NorthArrow/NorthArrow.js.map +7 -1
- package/components/NorthArrow/index.js +1 -3
- package/components/NorthArrow/index.js.map +7 -1
- package/components/Overlay/Overlay.js +85 -132
- package/components/Overlay/Overlay.js.map +7 -1
- package/components/Overlay/index.js +1 -3
- package/components/Overlay/index.js.map +7 -1
- package/components/Permalink/Permalink.js +151 -231
- package/components/Permalink/Permalink.js.map +7 -1
- package/components/Permalink/index.js +1 -3
- package/components/Permalink/index.js.map +7 -1
- package/components/Popup/Popup.js +106 -233
- package/components/Popup/Popup.js.map +7 -1
- package/components/Popup/index.js +1 -3
- package/components/Popup/index.js.map +7 -1
- package/components/ResizeHandler/ResizeHandler.js +60 -115
- package/components/ResizeHandler/ResizeHandler.js.map +7 -1
- package/components/ResizeHandler/index.js +1 -3
- package/components/ResizeHandler/index.js.map +7 -1
- package/components/RouteSchedule/RouteSchedule.js +153 -285
- package/components/RouteSchedule/RouteSchedule.js.map +7 -1
- package/components/RouteSchedule/index.js +1 -3
- package/components/RouteSchedule/index.js.map +7 -1
- package/components/ScaleLine/ScaleLine.js +21 -45
- package/components/ScaleLine/ScaleLine.js.map +7 -1
- package/components/ScaleLine/index.js +1 -3
- package/components/ScaleLine/index.js.map +7 -1
- package/components/Search/Search.js +122 -186
- package/components/Search/Search.js.map +7 -1
- package/components/Search/SearchService.js +45 -69
- package/components/Search/SearchService.js.map +7 -1
- package/components/Search/engines/Engine.js +18 -25
- package/components/Search/engines/Engine.js.map +7 -1
- package/components/Search/engines/StopFinder.js +21 -38
- package/components/Search/engines/StopFinder.js.map +7 -1
- package/components/Search/index.js +3 -6
- package/components/Search/index.js.map +7 -1
- package/components/StopsFinder/StopsFinder.js +123 -174
- package/components/StopsFinder/StopsFinder.js.map +7 -1
- package/components/StopsFinder/StopsFinderOption.js +37 -54
- package/components/StopsFinder/StopsFinderOption.js.map +7 -1
- package/components/StopsFinder/index.js +1 -3
- package/components/StopsFinder/index.js.map +7 -1
- package/components/TrackerControl/TrackerControl.js +73 -128
- package/components/TrackerControl/TrackerControl.js.map +7 -1
- package/components/TrackerControl/index.js +1 -3
- package/components/TrackerControl/index.js.map +7 -1
- package/components/Zoom/Zoom.js +69 -112
- package/components/Zoom/Zoom.js.map +7 -1
- package/components/Zoom/index.js +1 -3
- package/components/Zoom/index.js.map +7 -1
- package/package.json +20 -15
- package/propTypes.js +17 -23
- package/propTypes.js.map +7 -1
- package/setupTests.js +2 -4
- package/setupTests.js.map +7 -1
- package/themes/default/components.scss +0 -1
- package/themes/default/examples.scss +0 -1
- package/utils/GlobalsForOle.js +63 -64
- package/utils/GlobalsForOle.js.map +7 -1
- package/utils/KML.js +178 -364
- package/utils/KML.js.map +7 -1
- package/utils/KMLFormat.js +37 -73
- package/utils/KMLFormat.js.map +7 -1
- package/utils/Styles.js +24 -32
- package/utils/Styles.js.map +7 -1
- package/utils/getPolygonPattern.js +11 -44
- package/utils/getPolygonPattern.js.map +7 -1
- package/utils/timeUtils.js +16 -35
- package/utils/timeUtils.js.map +7 -1
- package/LayerService.test.js +0 -160
- package/LayerService.test.js.map +0 -1
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +0 -88
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js.map +0 -1
- package/components/BaseLayerToggler/BaseLayerToggler.js +0 -490
- package/components/BaseLayerToggler/BaseLayerToggler.js.map +0 -1
- package/components/BaseLayerToggler/BaseLayerToggler.md.scss +0 -9
- package/components/BaseLayerToggler/BaseLayerToggler.scss +0 -49
- package/components/BaseLayerToggler/BaseLayerToggler.test.js +0 -127
- package/components/BaseLayerToggler/BaseLayerToggler.test.js.map +0 -1
- package/components/BaseLayerToggler/index.js +0 -3
- package/components/BaseLayerToggler/index.js.map +0 -1
- package/components/BasicMap/BasicMap.test.js +0 -288
- package/components/BasicMap/BasicMap.test.js.map +0 -1
- package/components/CanvasSaveButton/CanvasSaveButton.test.js +0 -173
- package/components/CanvasSaveButton/CanvasSaveButton.test.js.map +0 -1
- package/components/Copyright/Copyright.test.js +0 -133
- package/components/Copyright/Copyright.test.js.map +0 -1
- package/components/FeatureExportButton/FeatureExportButton.test.js +0 -407
- package/components/FeatureExportButton/FeatureExportButton.test.js.map +0 -1
- package/components/FilterButton/FilterButton.test.js +0 -48
- package/components/FilterButton/FilterButton.test.js.map +0 -1
- package/components/FitExtent/FitExtent.test.js +0 -44
- package/components/FitExtent/FitExtent.test.js.map +0 -1
- package/components/FollowButton/FollowButton.test.js +0 -57
- package/components/FollowButton/FollowButton.test.js.map +0 -1
- package/components/Geolocation/Geolocation.test.js +0 -263
- package/components/Geolocation/Geolocation.test.js.map +0 -1
- package/components/LayerTree/LayerTree.test.js +0 -323
- package/components/LayerTree/LayerTree.test.js.map +0 -1
- package/components/MousePosition/MousePosition.test.js +0 -125
- package/components/MousePosition/MousePosition.test.js.map +0 -1
- package/components/NorthArrow/NorthArrow.test.js +0 -106
- package/components/NorthArrow/NorthArrow.test.js.map +0 -1
- package/components/Overlay/Overlay.test.js +0 -145
- package/components/Overlay/Overlay.test.js.map +0 -1
- package/components/Permalink/Permalink.test.js +0 -267
- package/components/Permalink/Permalink.test.js.map +0 -1
- package/components/Popup/Popup.test.js +0 -291
- package/components/Popup/Popup.test.js.map +0 -1
- package/components/ResizeHandler/ResizeHandler.test.js +0 -410
- package/components/ResizeHandler/ResizeHandler.test.js.map +0 -1
- package/components/RouteSchedule/RouteSchedule.test.js +0 -102
- package/components/RouteSchedule/RouteSchedule.test.js.map +0 -1
- package/components/ScaleLine/ScaleLine.test.js +0 -32
- package/components/ScaleLine/ScaleLine.test.js.map +0 -1
- package/components/Search/Search.test.js +0 -15
- package/components/Search/Search.test.js.map +0 -1
- package/components/StopsFinder/StopsFinder.test.js +0 -19
- package/components/StopsFinder/StopsFinder.test.js.map +0 -1
- package/components/TrackerControl/TrackerControl.test.js +0 -17
- package/components/TrackerControl/TrackerControl.test.js.map +0 -1
- package/components/Zoom/Zoom.test.js +0 -150
- package/components/Zoom/Zoom.test.js.map +0 -1
- package/styleguidist/ComponentsList.js +0 -52
- package/styleguidist/ComponentsList.js.map +0 -1
- package/styleguidist/StyleGuide.js +0 -253
- package/styleguidist/StyleGuide.js.map +0 -1
- package/utils/KML.test.js +0 -163
- package/utils/KML.test.js.map +0 -1
- package/utils/KMLFormat.test.js +0 -22
- package/utils/KMLFormat.test.js.map +0 -1
- package/utils/getPolygonPattern.test.js +0 -66
- package/utils/getPolygonPattern.test.js.map +0 -1
- package/utils/timeUtils.test.js +0 -32
- package/utils/timeUtils.test.js.map +0 -1
|
@@ -1,287 +1,207 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import PropTypes from
|
|
3
|
-
import qs from
|
|
4
|
-
import OLMap from
|
|
5
|
-
import { unByKey } from
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
var propTypes = {
|
|
9
|
-
/**
|
|
10
|
-
* Either 'react-router' history object:
|
|
11
|
-
* https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/history.md<br>
|
|
12
|
-
* or default fallback as HTML5 History:
|
|
13
|
-
* https://developer.mozilla.org/en-US/docs/Web/API/History
|
|
14
|
-
*/
|
|
1
|
+
import { PureComponent } from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
import qs from "query-string";
|
|
4
|
+
import OLMap from "ol/Map";
|
|
5
|
+
import { unByKey } from "ol/Observable";
|
|
6
|
+
import { Layer, getLayersAsFlatArray } from "mobility-toolbox-js/ol";
|
|
7
|
+
const propTypes = {
|
|
15
8
|
history: PropTypes.shape({
|
|
16
|
-
replace: PropTypes.func
|
|
9
|
+
replace: PropTypes.func
|
|
17
10
|
}),
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Layers provider.
|
|
21
|
-
*/
|
|
22
|
-
layerService: PropTypes.instanceOf(LayerService),
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).
|
|
26
|
-
*/
|
|
11
|
+
layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),
|
|
27
12
|
map: PropTypes.instanceOf(OLMap),
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Params to be written in url.
|
|
31
|
-
*/
|
|
32
13
|
params: PropTypes.object,
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Maximum number of decimals allowed for coordinates.
|
|
36
|
-
*/
|
|
37
14
|
coordinateDecimals: PropTypes.number,
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Determine if the layer is hidden in the permalink or not.
|
|
41
|
-
*
|
|
42
|
-
* @param {object} item The item to hide or not.
|
|
43
|
-
*
|
|
44
|
-
* @return {bool} true if the item is not displayed in the permalink
|
|
45
|
-
*/
|
|
46
15
|
isLayerHidden: PropTypes.func,
|
|
16
|
+
isBaseLayer: PropTypes.func,
|
|
17
|
+
replace: PropTypes.func
|
|
47
18
|
};
|
|
48
|
-
|
|
49
|
-
var defaultProps = {
|
|
19
|
+
const defaultProps = {
|
|
50
20
|
history: null,
|
|
51
|
-
|
|
21
|
+
replace: null,
|
|
22
|
+
layers: [],
|
|
52
23
|
map: null,
|
|
53
24
|
params: {},
|
|
54
25
|
coordinateDecimals: 2,
|
|
55
|
-
isLayerHidden:
|
|
26
|
+
isLayerHidden: () => {
|
|
56
27
|
return false;
|
|
57
28
|
},
|
|
29
|
+
isBaseLayer: (layer) => {
|
|
30
|
+
return layer.get("isBaseLayer");
|
|
31
|
+
}
|
|
58
32
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
* __[layerService](https://github.com/geops/react-spatial/blob/master/src/LayerService.js)__
|
|
66
|
-
* (including at least one layer)
|
|
67
|
-
* will add the *baselayers* and/or *layers* parameters. Further parameters can
|
|
68
|
-
* be added using __params__.
|
|
69
|
-
*/
|
|
70
|
-
var Permalink = /*@__PURE__*/(function (Component) {
|
|
71
|
-
function Permalink(props) {
|
|
72
|
-
Component.call(this, props);
|
|
73
|
-
this.state = {};
|
|
74
|
-
this.moveEndRef = null;
|
|
75
|
-
this.updateLayers = this.updateLayers.bind(this);
|
|
33
|
+
class Permalink extends PureComponent {
|
|
34
|
+
constructor(props) {
|
|
35
|
+
super(props);
|
|
36
|
+
this.state = { revision: 0 };
|
|
37
|
+
this.onMoveEndRef = null;
|
|
38
|
+
this.onPropertyChangeKeys = [];
|
|
76
39
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
Permalink.prototype = Object.create( Component && Component.prototype );
|
|
80
|
-
Permalink.prototype.constructor = Permalink;
|
|
81
|
-
|
|
82
|
-
Permalink.prototype.componentDidMount = function componentDidMount () {
|
|
83
|
-
var this$1 = this;
|
|
84
|
-
|
|
85
|
-
var ref = this.props;
|
|
86
|
-
var map = ref.map;
|
|
87
|
-
var layerService = ref.layerService;
|
|
88
|
-
var isLayerHidden = ref.isLayerHidden;
|
|
40
|
+
componentDidMount() {
|
|
41
|
+
const { map, layers, isLayerHidden, isBaseLayer } = this.props;
|
|
89
42
|
if (map) {
|
|
90
|
-
this.moveEndRef = map.on(
|
|
91
|
-
this
|
|
43
|
+
this.moveEndRef = map.on("moveend", () => {
|
|
44
|
+
this.onMapMoved();
|
|
92
45
|
});
|
|
93
46
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
this.updateLayerService();
|
|
97
|
-
|
|
98
|
-
// set layer visibility based on 'layers' parameter.
|
|
99
|
-
var urlParams = qs.parse(window.location.search);
|
|
100
|
-
|
|
47
|
+
if (layers) {
|
|
48
|
+
const urlParams = qs.parse(window.location.search);
|
|
101
49
|
if (urlParams.layers) {
|
|
102
|
-
|
|
103
|
-
|
|
50
|
+
const visibleLayers = urlParams.layers.split(",");
|
|
51
|
+
getLayersAsFlatArray(layers).forEach((l) => {
|
|
104
52
|
if (visibleLayers.includes(l.key)) {
|
|
105
|
-
l.setVisible
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
) {
|
|
111
|
-
|
|
53
|
+
if (l.setVisible) {
|
|
54
|
+
l.setVisible(true);
|
|
55
|
+
} else {
|
|
56
|
+
l.visible = true;
|
|
57
|
+
}
|
|
58
|
+
} else if (!l.isBaseLayer && !(l.hasVisibleChildren || l.children.some((ll) => {
|
|
59
|
+
return ll.visible;
|
|
60
|
+
})) && !isLayerHidden(l)) {
|
|
61
|
+
if (l.setVisible) {
|
|
62
|
+
l.setVisible(false);
|
|
63
|
+
} else {
|
|
64
|
+
l.visible = false;
|
|
65
|
+
}
|
|
112
66
|
}
|
|
113
67
|
});
|
|
114
68
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
var visibleBaseLayers = (urlParams.baselayers || '').split(',');
|
|
118
|
-
layerService.getBaseLayers().forEach(function (baseLayer) {
|
|
69
|
+
const visibleBaseLayers = (urlParams.baselayers || "").split(",");
|
|
70
|
+
getLayersAsFlatArray(layers).filter(isBaseLayer).forEach((baseLayer) => {
|
|
119
71
|
if (baseLayer.key === visibleBaseLayers[0]) {
|
|
120
|
-
baseLayer.setVisible
|
|
72
|
+
if (baseLayer.setVisible) {
|
|
73
|
+
baseLayer.setVisible(true);
|
|
74
|
+
} else {
|
|
75
|
+
baseLayer.visible = true;
|
|
76
|
+
}
|
|
121
77
|
}
|
|
122
78
|
});
|
|
79
|
+
this.updateLayers();
|
|
123
80
|
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
var map = ref.map;
|
|
131
|
-
var layerService = ref.layerService;
|
|
132
|
-
|
|
133
|
-
if (layerService !== prevProps.layerService) {
|
|
134
|
-
this.updateLayerService();
|
|
81
|
+
}
|
|
82
|
+
componentDidUpdate(prevProps, prevState) {
|
|
83
|
+
const { map, layers } = this.props;
|
|
84
|
+
const { revision } = this.state;
|
|
85
|
+
if (layers !== prevProps.layers || revision !== prevState.revision) {
|
|
86
|
+
this.updateLayers();
|
|
135
87
|
}
|
|
136
|
-
|
|
137
88
|
if (map !== prevProps.map) {
|
|
138
|
-
this.moveEndRef
|
|
139
|
-
|
|
89
|
+
unByKey(this.moveEndRef);
|
|
90
|
+
this.moveEndRef = map.on("moveend", () => {
|
|
91
|
+
return this.onMapMoved();
|
|
140
92
|
});
|
|
141
93
|
}
|
|
142
|
-
|
|
143
94
|
this.updateHistory();
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
var ref = this.props;
|
|
148
|
-
var layerService = ref.layerService;
|
|
149
|
-
var map = ref.map;
|
|
150
|
-
|
|
95
|
+
}
|
|
96
|
+
componentWillUnmount() {
|
|
97
|
+
const { map } = this.props;
|
|
151
98
|
if (map) {
|
|
152
99
|
unByKey(this.moveEndRef);
|
|
153
100
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
101
|
+
unByKey(this.onPropertyChangeKeys);
|
|
102
|
+
this.onPropertyChangeKeys = [];
|
|
103
|
+
}
|
|
104
|
+
onMapMoved() {
|
|
105
|
+
const { map } = this.props;
|
|
106
|
+
const mapView = map.getView();
|
|
107
|
+
const center = mapView.getCenter();
|
|
108
|
+
const params = {};
|
|
109
|
+
if (center !== void 0 && center[0] !== void 0 && center[1] !== void 0) {
|
|
110
|
+
params.x = this.roundCoord(center[0]);
|
|
111
|
+
params.y = this.roundCoord(center[1]);
|
|
158
112
|
}
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
Permalink.prototype.onMapMoved = function onMapMoved () {
|
|
162
|
-
var ref = this.props;
|
|
163
|
-
var map = ref.map;
|
|
164
|
-
var mapView = map.getView();
|
|
165
|
-
var ref$1 = mapView.getProperties();
|
|
166
|
-
var center = ref$1.center;
|
|
167
|
-
|
|
168
113
|
this.setState({
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
// rounds zoom to two digits max.
|
|
172
|
-
z: +((Math.round(((parseFloat(mapView.getZoom())) + "e+2"))) + "e-2"),
|
|
114
|
+
...params,
|
|
115
|
+
z: +`${Math.round(`${parseFloat(mapView.getZoom())}e+2`)}e-2`
|
|
173
116
|
});
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
var ref = this.props;
|
|
178
|
-
var coordinateDecimals = ref.coordinateDecimals;
|
|
117
|
+
}
|
|
118
|
+
roundCoord(val) {
|
|
119
|
+
const { coordinateDecimals } = this.props;
|
|
179
120
|
return parseFloat(val.toFixed(coordinateDecimals));
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
var ref = this.props;
|
|
196
|
-
var layerService = ref.layerService;
|
|
197
|
-
var isLayerHidden = ref.isLayerHidden;
|
|
198
|
-
var baseLayers = layerService.getBaseLayers();
|
|
199
|
-
var idx = baseLayers.findIndex(function (l) {
|
|
121
|
+
}
|
|
122
|
+
updateLayers() {
|
|
123
|
+
const { layers, isLayerHidden, isBaseLayer } = this.props;
|
|
124
|
+
const { revision } = this.state;
|
|
125
|
+
const rootLayer = new Layer({ children: layers });
|
|
126
|
+
unByKey(this.onPropertyChangeKeys);
|
|
127
|
+
getLayersAsFlatArray(rootLayer).forEach((layer) => {
|
|
128
|
+
this.onPropertyChangeKeys.push(
|
|
129
|
+
layer.on("change:visible", () => {
|
|
130
|
+
this.setState({ revision: revision + 1 });
|
|
131
|
+
})
|
|
132
|
+
);
|
|
133
|
+
});
|
|
134
|
+
const baseLayers = getLayersAsFlatArray(rootLayer).filter(isBaseLayer);
|
|
135
|
+
const idx = baseLayers.findIndex((l) => {
|
|
200
136
|
return l.visible;
|
|
201
137
|
});
|
|
202
138
|
if (idx !== -1) {
|
|
203
|
-
|
|
139
|
+
const baseLayerVisible = baseLayers.splice(idx, 1);
|
|
204
140
|
baseLayers.unshift(baseLayerVisible[0]);
|
|
205
141
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
var key = ref[0];
|
|
246
|
-
var value = ref[1];
|
|
247
|
-
|
|
248
|
-
if (value === undefined || value === null) {
|
|
142
|
+
const layersParam = getLayersAsFlatArray(layers).filter((l) => {
|
|
143
|
+
const children = l.children || [];
|
|
144
|
+
const allChildrenHidden = children.every((child) => {
|
|
145
|
+
return isLayerHidden(child);
|
|
146
|
+
});
|
|
147
|
+
const hasVisibleChildren = children.some((child) => {
|
|
148
|
+
return child.visible;
|
|
149
|
+
});
|
|
150
|
+
return !isBaseLayer(l) && !isLayerHidden(l) && l.visible && (!hasVisibleChildren || allChildrenHidden);
|
|
151
|
+
}).map((l) => {
|
|
152
|
+
return l.key;
|
|
153
|
+
}).join();
|
|
154
|
+
const baseLayersParam = baseLayers.length > 1 ? baseLayers.sort((a, b) => {
|
|
155
|
+
if (a.visible === b.visible) {
|
|
156
|
+
return 0;
|
|
157
|
+
}
|
|
158
|
+
if (a.visible && !b.visible) {
|
|
159
|
+
return -1;
|
|
160
|
+
}
|
|
161
|
+
return 1;
|
|
162
|
+
}).map((l) => {
|
|
163
|
+
return l.key;
|
|
164
|
+
}).join() : void 0;
|
|
165
|
+
const state = {};
|
|
166
|
+
if (layers?.length) {
|
|
167
|
+
state.layers = layersParam;
|
|
168
|
+
}
|
|
169
|
+
if (baseLayers?.length) {
|
|
170
|
+
state.baselayers = baseLayersParam;
|
|
171
|
+
}
|
|
172
|
+
this.setState(state);
|
|
173
|
+
}
|
|
174
|
+
updateHistory() {
|
|
175
|
+
const { params, history, replace } = this.props;
|
|
176
|
+
const oldParams = qs.parse(window.location.search);
|
|
177
|
+
const parameters = { ...oldParams, ...this.state, ...params };
|
|
178
|
+
delete parameters.revision;
|
|
179
|
+
Object.entries(parameters).forEach(([key, value]) => {
|
|
180
|
+
if (value === void 0 || value === null) {
|
|
249
181
|
delete parameters[key];
|
|
250
182
|
}
|
|
251
183
|
});
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
(qStr && search !== window.location.search)
|
|
260
|
-
) {
|
|
261
|
-
if (history) {
|
|
262
|
-
history.replace({ search: search });
|
|
184
|
+
const qStr = encodeURI(qs.stringify(parameters, { encode: false }));
|
|
185
|
+
const search = qStr ? `?${qStr}` : "";
|
|
186
|
+
if (!qStr && window.location.search || qStr && search !== window.location.search) {
|
|
187
|
+
if (replace) {
|
|
188
|
+
replace({ parameters, search });
|
|
189
|
+
} else if (history) {
|
|
190
|
+
history.replace({ search });
|
|
263
191
|
} else {
|
|
264
|
-
|
|
265
|
-
var hash = ref$1.hash;
|
|
192
|
+
const { hash } = window.location;
|
|
266
193
|
window.history.replaceState(
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
194
|
+
void 0,
|
|
195
|
+
void 0,
|
|
196
|
+
`${search}${hash || ""}`
|
|
270
197
|
);
|
|
271
198
|
}
|
|
272
199
|
}
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
Permalink.prototype.render = function render () {
|
|
200
|
+
}
|
|
201
|
+
render() {
|
|
276
202
|
return null;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
return Permalink;
|
|
280
|
-
}(Component));
|
|
281
|
-
|
|
203
|
+
}
|
|
204
|
+
}
|
|
282
205
|
Permalink.propTypes = propTypes;
|
|
283
206
|
Permalink.defaultProps = defaultProps;
|
|
284
|
-
|
|
285
207
|
export default Permalink;
|
|
286
|
-
|
|
287
|
-
//# sourceMappingURL=Permalink.js.map
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"file":"Permalink.js","sources":["../../../src/components/Permalink/Permalink.js"],"sourcesContent":["import { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport qs from 'query-string';\nimport OLMap from 'ol/Map';\nimport { unByKey } from 'ol/Observable';\nimport LayerService from '../../LayerService';\n\nconst propTypes = {\n /**\n * Either 'react-router' history object:\n * https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/history.md<br>\n * or default fallback as HTML5 History:\n * https://developer.mozilla.org/en-US/docs/Web/API/History\n */\n history: PropTypes.shape({\n replace: PropTypes.func,\n }),\n\n /**\n * Layers provider.\n */\n layerService: PropTypes.instanceOf(LayerService),\n\n /**\n * An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n */\n map: PropTypes.instanceOf(OLMap),\n\n /**\n * Params to be written in url.\n */\n params: PropTypes.object,\n\n /**\n * Maximum number of decimals allowed for coordinates.\n */\n coordinateDecimals: PropTypes.number,\n\n /**\n * Determine if the layer is hidden in the permalink or not.\n *\n * @param {object} item The item to hide or not.\n *\n * @return {bool} true if the item is not displayed in the permalink\n */\n isLayerHidden: PropTypes.func,\n};\n\nconst defaultProps = {\n history: null,\n layerService: null,\n map: null,\n params: {},\n coordinateDecimals: 2,\n isLayerHidden: () => {\n return false;\n },\n};\n\n/**\n * This component handles permalink logic. Injecting an\n * __[ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)__\n * will add the *map center* (x, y) and the *zoom* (z) parameters to the permalink.\n * Injecting a\n * __[layerService](https://github.com/geops/react-spatial/blob/master/src/LayerService.js)__\n * (including at least one layer)\n * will add the *baselayers* and/or *layers* parameters. Further parameters can\n * be added using __params__.\n */\nclass Permalink extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n this.moveEndRef = null;\n this.updateLayers = this.updateLayers.bind(this);\n }\n\n componentDidMount() {\n const { map, layerService, isLayerHidden } = this.props;\n if (map) {\n this.moveEndRef = map.on('moveend', () => {\n this.onMapMoved();\n });\n }\n\n if (layerService) {\n this.updateLayerService();\n\n // set layer visibility based on 'layers' parameter.\n const urlParams = qs.parse(window.location.search);\n\n if (urlParams.layers) {\n const visibleLayers = urlParams.layers.split(',');\n layerService.getLayersAsFlatArray().forEach((l) => {\n if (visibleLayers.includes(l.key)) {\n l.setVisible(true);\n } else if (\n !l.isBaseLayer &&\n !l.hasVisibleChildren() &&\n !isLayerHidden(l)\n ) {\n l.setVisible(false);\n }\n });\n }\n\n // Set baser layer visibility based on 'baseLayers' parameter.\n const visibleBaseLayers = (urlParams.baselayers || '').split(',');\n layerService.getBaseLayers().forEach((baseLayer) => {\n if (baseLayer.key === visibleBaseLayers[0]) {\n baseLayer.setVisible(true); // The radio group will hide the others baseLayers automatically\n }\n });\n }\n }\n\n componentDidUpdate(prevProps) {\n const { map, layerService } = this.props;\n\n if (layerService !== prevProps.layerService) {\n this.updateLayerService();\n }\n\n if (map !== prevProps.map) {\n this.moveEndRef = map.on('moveend', () => {\n return this.onMapMoved();\n });\n }\n\n this.updateHistory();\n }\n\n componentWillUnmount() {\n const { layerService, map } = this.props;\n\n if (map) {\n unByKey(this.moveEndRef);\n }\n\n if (layerService) {\n layerService.un('change:layers', this.updateLayers);\n layerService.un('change:visible', this.updateLayers);\n }\n }\n\n onMapMoved() {\n const { map } = this.props;\n const mapView = map.getView();\n const { center } = mapView.getProperties();\n\n this.setState({\n x: this.roundCoord(center[0]),\n y: this.roundCoord(center[1]),\n // rounds zoom to two digits max.\n z: +`${Math.round(`${parseFloat(mapView.getZoom())}e+2`)}e-2`,\n });\n }\n\n roundCoord(val) {\n const { coordinateDecimals } = this.props;\n return parseFloat(val.toFixed(coordinateDecimals));\n }\n\n updateLayerService() {\n const { layerService } = this.props;\n if (layerService) {\n layerService.un('change:visible', this.updateState);\n layerService.un('change:layers', this.updateLayers);\n this.updateLayers();\n layerService.on('change:layers', this.updateLayers);\n layerService.on('change:visible', this.updateLayers);\n }\n }\n\n updateLayers() {\n const { layerService, isLayerHidden } = this.props;\n const baseLayers = layerService.getBaseLayers();\n const idx = baseLayers.findIndex((l) => {\n return l.visible;\n });\n if (idx !== -1) {\n const baseLayerVisible = baseLayers.splice(idx, 1);\n baseLayers.unshift(baseLayerVisible[0]);\n }\n\n this.setState({\n layers: layerService\n .getLayersAsFlatArray()\n .filter((l) => {\n return (\n !l.isBaseLayer &&\n l.visible &&\n (!l.hasVisibleChildren() ||\n (l.children || []).every((child) => {\n return isLayerHidden(child);\n })) &&\n !isLayerHidden(l)\n );\n })\n .map((l) => {\n return l.key;\n })\n .join(),\n baselayers:\n baseLayers.length > 1\n ? baseLayers\n .map((l) => {\n return l.key;\n })\n .join()\n : undefined,\n });\n }\n\n updateHistory() {\n const { params, history } = this.props;\n const oldParams = qs.parse(window.location.search);\n const parameters = { ...oldParams, ...this.state, ...params };\n\n // Remove parameters that are undefined or null\n Object.entries(parameters).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n delete parameters[key];\n }\n });\n\n // encodeURI to encode spaces, accents, etc. but not characters like ;,/?:@&=+$-_.!~*'()\n const qStr = encodeURI(qs.stringify(parameters, { encode: false }));\n const search = qStr ? `?${qStr}` : '';\n\n if (\n (!qStr && window.location.search) ||\n (qStr && search !== window.location.search)\n ) {\n if (history) {\n history.replace({ search });\n } else {\n const { hash } = window.location;\n window.history.replaceState(\n undefined,\n undefined,\n `${search}${hash || ''}`,\n );\n }\n }\n }\n\n render() {\n return null;\n }\n}\n\nPermalink.propTypes = propTypes;\nPermalink.defaultProps = defaultProps;\n\nexport default Permalink;\n"],"names":["const","super","this"],"mappings":"AAAA,SAAS,SAAS,QAAQ,OAAO,CAAC;AAClC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,cAAc,CAAC;AAC9B,OAAO,KAAK,MAAM,QAAQ,CAAC;AAC3B,SAAS,OAAO,QAAQ,eAAe,CAAC;AACxC,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C;AACAA,GAAK,CAAC,SAAS,GAAG;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC;AAC3B,IAAI,OAAO,EAAE,SAAS,CAAC,IAAI;AAC3B,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,YAAY,EAAE,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC;AAClD;AACA;AACA;AACA;AACA,EAAE,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;AAClC;AACA;AACA;AACA;AACA,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM;AAC1B;AACA;AACA;AACA;AACA,EAAE,kBAAkB,EAAE,SAAS,CAAC,MAAM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,aAAa,EAAE,SAAS,CAAC,IAAI;AAC/B,CAAC,CAAC;AACF;AACAA,GAAK,CAAC,YAAY,GAAG;AACrB,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,YAAY,EAAE,IAAI;AACpB,EAAE,GAAG,EAAE,IAAI;AACX,EAAE,MAAM,EAAE,EAAE;AACZ,EAAE,kBAAkB,EAAE,CAAC;AACvB,EAAE,aAAa,WAAE,GAAM;AACvB,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAM,SAAS,GAAkB;EAC/B,kBAAW,CAAC,KAAK,EAAE;AACrB,IAAIC,cAAK,OAAC,KAAK,CAAC,CAAC;AACjB,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACpB,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC3B,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrD;;;;8CAAG;AACH;AACA,sBAAE,+CAAiB,GAAG;;AAAC;AACvB,WAA8C,GAAG,IAAI,CAAC;IAA1C;IAAK;IAAc,sCAA6B;AAC5D,IAAI,IAAI,GAAG,EAAE;AACb,MAAM,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,SAAS,WAAE,GAAM;AAChD,QAAQC,MAAI,CAAC,UAAU,EAAE,CAAC;AAC1B,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA,IAAI,IAAI,YAAY,EAAE;AACtB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAChC;AACA;AACA,MAAMF,GAAK,CAAC,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACzD;AACA,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE;AAC5B,QAAQA,GAAK,CAAC,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1D,QAAQ,YAAY,CAAC,oBAAoB,EAAE,CAAC,OAAO,UAAC,CAAC,CAAC,EAAK;AAC3D,UAAU,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAC7C,YAAY,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC/B,WAAW,MAAM;AACjB,YAAY,CAAC,CAAC,CAAC,WAAW;AAC1B,YAAY,CAAC,CAAC,CAAC,kBAAkB,EAAE;AACnC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7B,YAAY;AACZ,YAAY,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAChC,WAAW;AACX,SAAS,CAAC,CAAC;AACX,OAAO;AACP;AACA;AACA,MAAMA,GAAK,CAAC,iBAAiB,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxE,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC,OAAO,UAAC,CAAC,SAAS,EAAK;AAC1D,QAAQ,IAAI,SAAS,CAAC,GAAG,KAAK,iBAAiB,CAAC,CAAC,CAAC,EAAE;AACpD,UAAU,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACrC,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAG;AACH;AACA,sBAAE,iDAAkB,CAAC,SAAS,EAAE;;AAAC;AACjC,WAA+B,GAAG,IAAI,CAAC;IAA3B;IAAK,oCAA4B;AAC7C;AACA,IAAI,IAAI,YAAY,KAAK,SAAS,CAAC,YAAY,EAAE;AACjD,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAChC,KAAK;AACL;AACA,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC,GAAG,EAAE;AAC/B,MAAM,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC,SAAS,WAAE,GAAM;AAChD,QAAQ,OAAOE,MAAI,CAAC,UAAU,EAAE,CAAC;AACjC,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;AACzB,IAAG;AACH;AACA,sBAAE,qDAAoB,GAAG;AACzB,WAA+B,GAAG,IAAI,CAAC;IAA3B;IAAc,kBAAmB;AAC7C;AACA,IAAI,IAAI,GAAG,EAAE;AACb,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,IAAI,YAAY,EAAE;AACtB,MAAM,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1D,MAAM,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3D,KAAK;AACL,IAAG;AACH;AACA,sBAAE,iCAAU,GAAG;AACf,WAAiB,GAAG,IAAI,CAAC;IAAb,kBAAmB;AAC/B,IAAIF,GAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;AAClC,aAAoB,GAAG,OAAO,CAAC,aAAa;IAAhC,0BAAmC;AAC/C;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACnC;AACA,MAAM,CAAC,EAAE,GAAI,IAAI,CAAC,KAAK,GAAI,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAC,SAAK,EAAC,SAAK;AACnE,KAAK,CAAC,CAAC;AACP,IAAG;AACH;AACA,sBAAE,iCAAU,CAAC,GAAG,EAAE;AAClB,WAAgC,GAAG,IAAI,CAAC;IAA5B,gDAAkC;AAC9C,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACvD,IAAG;AACH;AACA,sBAAE,iDAAkB,GAAG;AACvB,WAA0B,GAAG,IAAI,CAAC;IAAtB,oCAA4B;AACxC,IAAI,IAAI,YAAY,EAAE;AACtB,MAAM,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1D,MAAM,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1D,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AAC1B,MAAM,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1D,MAAM,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3D,KAAK;AACL,IAAG;AACH;AACA,sBAAE,qCAAY,GAAG;AACjB,WAAyC,GAAG,IAAI,CAAC;IAArC;IAAc,sCAA6B;AACvD,IAAIA,GAAK,CAAC,UAAU,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;AACpD,IAAIA,GAAK,CAAC,GAAG,GAAG,UAAU,CAAC,SAAS,UAAC,CAAC,CAAC,EAAK;AAC5C,MAAM,OAAO,CAAC,CAAC,OAAO,CAAC;AACvB,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;AACpB,MAAMA,GAAK,CAAC,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACzD,MAAM,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,KAAK;AACL;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC;AAClB,MAAM,MAAM,EAAE,YAAY;AAC1B,SAAS,oBAAoB,EAAE;AAC/B,SAAS,MAAM,UAAC,CAAC,CAAC,EAAK;AACvB,UAAU,OAAO;AACjB,YAAY,CAAC,CAAC,CAAC,WAAW;AAC1B,YAAY,CAAC,CAAC,OAAO;AACrB,YAAY,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE;AACpC,cAAc,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,UAAC,CAAC,KAAK,EAAK;AAClD,gBAAgB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5C,eAAe,CAAC,CAAC;AACjB,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7B,WAAW,CAAC;AACZ,SAAS,CAAC;AACV,SAAS,GAAG,UAAC,CAAC,CAAC,EAAK;AACpB,UAAU,OAAO,CAAC,CAAC,GAAG,CAAC;AACvB,SAAS,CAAC;AACV,SAAS,IAAI,EAAE;AACf,MAAM,UAAU;AAChB,QAAQ,UAAU,CAAC,MAAM,GAAG,CAAC;AAC7B,YAAY,UAAU;AACtB,eAAe,GAAG,UAAC,CAAC,CAAC,EAAK;AAC1B,gBAAgB,OAAO,CAAC,CAAC,GAAG,CAAC;AAC7B,eAAe,CAAC;AAChB,eAAe,IAAI,EAAE;AACrB,YAAY,SAAS;AACrB,KAAK,CAAC,CAAC;AACP,IAAG;AACH;AACA,sBAAE,uCAAa,GAAG;AAClB,WAA6B,GAAG,IAAI,CAAC;IAAzB;IAAQ,0BAAuB;AAC3C,IAAIA,GAAK,CAAC,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACvD,IAAIA,GAAK,CAAC,UAAU,GAAG,kBAAK,SAAS,EAAK,IAAI,CAAC,KAAK,EAAK,MAAM,CAAE,CAAC;AAClE;AACA;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,UAAC,IAAa,EAAK,CAAhB;uBAAK;;AAAY;AAC1D,MAAM,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACjD,QAAQ,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AAC/B,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAIA,GAAK,CAAC,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACxE,IAAIA,GAAK,CAAC,MAAM,GAAG,IAAI,GAAG,OAAI,KAAM,GAAG,EAAE,CAAC;AAC1C;AACA,IAAI;AACJ,MAAM,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACvC,MAAM,CAAC,IAAI,IAAI,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjD,MAAM;AACN,MAAM,IAAI,OAAO,EAAE;AACnB,QAAQ,OAAO,CAAC,OAAO,CAAC,UAAE,MAAM,EAAE,CAAC,CAAC;AACpC,OAAO,MAAM;AACb,iBAAsB,GAAG,MAAM,CAAC;QAAhB,sBAAyB;AACzC,QAAQ,MAAM,CAAC,OAAO,CAAC,YAAY;AACnC,UAAU,SAAS;AACnB,UAAU,SAAS;AACnB,UAAU,MAAG,UAAS,IAAI,IAAI,IAAK;AACnC,SAAS,CAAC;AACV,OAAO;AACP,KAAK;AACL,IAAG;AACH;AACA,sBAAE,yBAAM,GAAG;AACX,IAAI,OAAO,IAAI,CAAC;AAChB;;;EApLwB,YAqLvB;AACD;AACA,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;AAChC,SAAS,CAAC,YAAY,GAAG,YAAY,CAAC;AACtC;AACA,eAAe,SAAS,CAAC;"}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/Permalink/Permalink.js"],
|
|
4
|
+
"sourcesContent": ["import { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport qs from 'query-string';\nimport OLMap from 'ol/Map';\nimport { unByKey } from 'ol/Observable';\nimport { Layer, getLayersAsFlatArray } from 'mobility-toolbox-js/ol';\n\nconst propTypes = {\n /**\n * Either 'react-router' history object:\n * https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/history.md<br>\n * or default fallback as HTML5 History:\n * https://developer.mozilla.org/en-US/docs/Web/API/History\n */\n history: PropTypes.shape({\n replace: PropTypes.func,\n }),\n\n /**\n * Layers provider.\n */\n layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),\n\n /**\n * An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n */\n map: PropTypes.instanceOf(OLMap),\n\n /**\n * Params to be written in url.\n */\n params: PropTypes.object,\n\n /**\n * Maximum number of decimals allowed for coordinates.\n */\n coordinateDecimals: PropTypes.number,\n\n /**\n * Determine if the layer is hidden in the permalink or not.\n *\n * @param {object} item The item to hide or not.\n *\n * @return {bool} true if the item is not displayed in the permalink\n */\n isLayerHidden: PropTypes.func,\n\n /**\n * Determine if the layer appears in the baselayers permalink parameter or not.\n *\n * @param {object} item The item to hide or not.\n *\n * @return {bool} true if the item is not displayed in the baselayers permalink parameter\n */\n isBaseLayer: PropTypes.func,\n\n /**\n * Custom function to be called when the permalink is updated.\n * This property has priority over the history parameter and window.history.replaceState calls.\n */\n replace: PropTypes.func,\n};\n\nconst defaultProps = {\n history: null,\n replace: null,\n layers: [],\n map: null,\n params: {},\n coordinateDecimals: 2,\n isLayerHidden: () => {\n return false;\n },\n isBaseLayer: (layer) => {\n return layer.get('isBaseLayer');\n },\n};\n\n/**\n * This component handles permalink logic. Injecting an\n * __[ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)__\n * will add the *map center* (x, y) and the *zoom* (z) parameters to the permalink.\n * Injecting layers will add the *baselayers* and/or *layers* parameters. Further parameters can\n * be added using __params__.\n */\nclass Permalink extends PureComponent {\n constructor(props) {\n super(props);\n this.state = { revision: 0 };\n this.onMoveEndRef = null;\n this.onPropertyChangeKeys = [];\n }\n\n componentDidMount() {\n const { map, layers, isLayerHidden, isBaseLayer } = this.props;\n if (map) {\n this.moveEndRef = map.on('moveend', () => {\n this.onMapMoved();\n });\n }\n\n if (layers) {\n // set layer visibility based on 'layers' parameter.\n const urlParams = qs.parse(window.location.search);\n\n if (urlParams.layers) {\n const visibleLayers = urlParams.layers.split(',');\n getLayersAsFlatArray(layers).forEach((l) => {\n if (visibleLayers.includes(l.key)) {\n if (l.setVisible) {\n l.setVisible(true);\n } else {\n // eslint-disable-next-line no-param-reassign\n l.visible = true;\n }\n } else if (\n !l.isBaseLayer &&\n !(\n l.hasVisibleChildren ||\n l.children.some((ll) => {\n return ll.visible;\n })\n ) &&\n !isLayerHidden(l)\n ) {\n if (l.setVisible) {\n l.setVisible(false);\n } else {\n // eslint-disable-next-line no-param-reassign\n l.visible = false;\n }\n }\n });\n }\n\n // Set baser layer visibility based on 'baseLayers' parameter.\n const visibleBaseLayers = (urlParams.baselayers || '').split(',');\n getLayersAsFlatArray(layers)\n .filter(isBaseLayer)\n .forEach((baseLayer) => {\n if (baseLayer.key === visibleBaseLayers[0]) {\n if (baseLayer.setVisible) {\n baseLayer.setVisible(true); // The radio group will hide the others baseLayers automatically\n } else {\n // eslint-disable-next-line no-param-reassign\n baseLayer.visible = true;\n }\n }\n });\n\n this.updateLayers();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { map, layers } = this.props;\n const { revision } = this.state;\n\n if (layers !== prevProps.layers || revision !== prevState.revision) {\n this.updateLayers();\n }\n\n if (map !== prevProps.map) {\n unByKey(this.moveEndRef);\n this.moveEndRef = map.on('moveend', () => {\n return this.onMapMoved();\n });\n }\n\n this.updateHistory();\n }\n\n componentWillUnmount() {\n const { map } = this.props;\n\n if (map) {\n unByKey(this.moveEndRef);\n }\n unByKey(this.onPropertyChangeKeys);\n this.onPropertyChangeKeys = [];\n }\n\n onMapMoved() {\n const { map } = this.props;\n const mapView = map.getView();\n const center = mapView.getCenter();\n const params = {};\n\n if (\n center !== undefined &&\n center[0] !== undefined &&\n center[1] !== undefined\n ) {\n params.x = this.roundCoord(center[0]);\n params.y = this.roundCoord(center[1]);\n }\n\n this.setState({\n ...params,\n // rounds zoom to two digits max.\n z: +`${Math.round(`${parseFloat(mapView.getZoom())}e+2`)}e-2`,\n });\n }\n\n roundCoord(val) {\n const { coordinateDecimals } = this.props;\n return parseFloat(val.toFixed(coordinateDecimals));\n }\n\n updateLayers() {\n const { layers, isLayerHidden, isBaseLayer } = this.props;\n const { revision } = this.state;\n\n const rootLayer = new Layer({ children: layers });\n\n unByKey(this.onPropertyChangeKeys);\n getLayersAsFlatArray(rootLayer).forEach((layer) => {\n this.onPropertyChangeKeys.push(\n layer.on('change:visible', () => {\n this.setState({ revision: revision + 1 });\n }),\n );\n });\n const baseLayers = getLayersAsFlatArray(rootLayer).filter(isBaseLayer);\n const idx = baseLayers.findIndex((l) => {\n return l.visible;\n });\n if (idx !== -1) {\n const baseLayerVisible = baseLayers.splice(idx, 1);\n baseLayers.unshift(baseLayerVisible[0]);\n }\n\n const layersParam = getLayersAsFlatArray(layers)\n .filter((l) => {\n const children = l.children || [];\n const allChildrenHidden = children.every((child) => {\n return isLayerHidden(child);\n });\n const hasVisibleChildren = children.some((child) => {\n return child.visible;\n });\n return (\n !isBaseLayer(l) &&\n !isLayerHidden(l) &&\n l.visible &&\n (!hasVisibleChildren || allChildrenHidden)\n );\n })\n .map((l) => {\n return l.key;\n })\n .join();\n\n const baseLayersParam =\n baseLayers.length > 1\n ? baseLayers\n .sort((a, b) => {\n if (a.visible === b.visible) {\n return 0;\n }\n if (a.visible && !b.visible) {\n return -1;\n }\n return 1;\n })\n .map((l) => {\n return l.key;\n })\n .join()\n : undefined;\n\n // Only add parameters if there is actually some layers added.\n const state = {};\n\n if (layers?.length) {\n state.layers = layersParam;\n }\n if (baseLayers?.length) {\n state.baselayers = baseLayersParam;\n }\n\n this.setState(state);\n }\n\n updateHistory() {\n const { params, history, replace } = this.props;\n const oldParams = qs.parse(window.location.search);\n const parameters = { ...oldParams, ...this.state, ...params };\n\n delete parameters.revision;\n\n // Remove parameters that are undefined or null\n Object.entries(parameters).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n delete parameters[key];\n }\n });\n\n // encodeURI to encode spaces, accents, etc. but not characters like ;,/?:@&=+$-_.!~*'()\n const qStr = encodeURI(qs.stringify(parameters, { encode: false }));\n const search = qStr ? `?${qStr}` : '';\n\n if (\n (!qStr && window.location.search) ||\n (qStr && search !== window.location.search)\n ) {\n if (replace) {\n replace({ parameters, search });\n } else if (history) {\n history.replace({ search });\n } else {\n const { hash } = window.location;\n window.history.replaceState(\n undefined,\n undefined,\n `${search}${hash || ''}`,\n );\n }\n }\n }\n\n render() {\n return null;\n }\n}\n\nPermalink.propTypes = propTypes;\nPermalink.defaultProps = defaultProps;\n\nexport default Permalink;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/Permalink/index.js"],
|
|
4
|
+
"sourcesContent": ["export { default } from './Permalink';\n"],
|
|
5
|
+
"mappings": "AAAA,wBAAwB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|