react-spatial 1.2.2 → 1.2.3-beta.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.
Files changed (186) hide show
  1. package/LayerService.js +128 -184
  2. package/LayerService.js.map +7 -1
  3. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +163 -221
  4. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +7 -1
  5. package/components/BaseLayerSwitcher/index.js +1 -3
  6. package/components/BaseLayerSwitcher/index.js.map +7 -1
  7. package/components/BasicMap/BasicMap.js +147 -285
  8. package/components/BasicMap/BasicMap.js.map +7 -1
  9. package/components/BasicMap/index.js +1 -3
  10. package/components/BasicMap/index.js.map +7 -1
  11. package/components/CanvasSaveButton/CanvasSaveButton.js +165 -419
  12. package/components/CanvasSaveButton/CanvasSaveButton.js.map +7 -1
  13. package/components/CanvasSaveButton/index.js +1 -3
  14. package/components/CanvasSaveButton/index.js.map +7 -1
  15. package/components/Copyright/Copyright.js +29 -70
  16. package/components/Copyright/Copyright.js.map +7 -1
  17. package/components/Copyright/index.js +1 -3
  18. package/components/Copyright/index.js.map +7 -1
  19. package/components/FeatureExportButton/FeatureExportButton.js +40 -106
  20. package/components/FeatureExportButton/FeatureExportButton.js.map +7 -1
  21. package/components/FeatureExportButton/index.js +1 -3
  22. package/components/FeatureExportButton/index.js.map +7 -1
  23. package/components/FilterButton/FilterButton.js +41 -106
  24. package/components/FilterButton/FilterButton.js.map +7 -1
  25. package/components/FilterButton/index.js +1 -3
  26. package/components/FilterButton/index.js.map +7 -1
  27. package/components/FitExtent/FitExtent.js +17 -50
  28. package/components/FitExtent/FitExtent.js.map +7 -1
  29. package/components/FitExtent/index.js +1 -3
  30. package/components/FitExtent/index.js.map +7 -1
  31. package/components/FollowButton/FollowButton.js +41 -111
  32. package/components/FollowButton/FollowButton.js.map +7 -1
  33. package/components/FollowButton/index.js +1 -3
  34. package/components/FollowButton/index.js.map +7 -1
  35. package/components/Geolocation/Geolocation.js +104 -213
  36. package/components/Geolocation/Geolocation.js.map +7 -1
  37. package/components/Geolocation/index.js +1 -3
  38. package/components/Geolocation/index.js.map +7 -1
  39. package/components/LayerTree/LayerTree.js +204 -410
  40. package/components/LayerTree/LayerTree.js.map +7 -1
  41. package/components/LayerTree/index.js +1 -3
  42. package/components/LayerTree/index.js.map +7 -1
  43. package/components/MousePosition/MousePosition.js +61 -130
  44. package/components/MousePosition/MousePosition.js.map +7 -1
  45. package/components/MousePosition/index.js +1 -3
  46. package/components/MousePosition/index.js.map +7 -1
  47. package/components/NorthArrow/NorthArrow.js +22 -62
  48. package/components/NorthArrow/NorthArrow.js.map +7 -1
  49. package/components/NorthArrow/index.js +1 -3
  50. package/components/NorthArrow/index.js.map +7 -1
  51. package/components/Overlay/Overlay.js +83 -130
  52. package/components/Overlay/Overlay.js.map +7 -1
  53. package/components/Overlay/index.js +1 -3
  54. package/components/Overlay/index.js.map +7 -1
  55. package/components/Permalink/Permalink.js +150 -244
  56. package/components/Permalink/Permalink.js.map +7 -1
  57. package/components/Permalink/index.js +1 -3
  58. package/components/Permalink/index.js.map +7 -1
  59. package/components/Popup/Popup.js +106 -233
  60. package/components/Popup/Popup.js.map +7 -1
  61. package/components/Popup/index.js +1 -3
  62. package/components/Popup/index.js.map +7 -1
  63. package/components/ResizeHandler/ResizeHandler.js +58 -113
  64. package/components/ResizeHandler/ResizeHandler.js.map +7 -1
  65. package/components/ResizeHandler/index.js +1 -3
  66. package/components/ResizeHandler/index.js.map +7 -1
  67. package/components/RouteSchedule/RouteSchedule.js +150 -283
  68. package/components/RouteSchedule/RouteSchedule.js.map +7 -1
  69. package/components/RouteSchedule/index.js +1 -3
  70. package/components/RouteSchedule/index.js.map +7 -1
  71. package/components/ScaleLine/ScaleLine.js +21 -45
  72. package/components/ScaleLine/ScaleLine.js.map +7 -1
  73. package/components/ScaleLine/index.js +1 -3
  74. package/components/ScaleLine/index.js.map +7 -1
  75. package/components/Search/Search.js +122 -186
  76. package/components/Search/Search.js.map +7 -1
  77. package/components/Search/SearchService.js +45 -69
  78. package/components/Search/SearchService.js.map +7 -1
  79. package/components/Search/engines/Engine.js +18 -25
  80. package/components/Search/engines/Engine.js.map +7 -1
  81. package/components/Search/engines/StopFinder.js +21 -38
  82. package/components/Search/engines/StopFinder.js.map +7 -1
  83. package/components/Search/index.js +3 -6
  84. package/components/Search/index.js.map +7 -1
  85. package/components/StopsFinder/StopsFinder.js +123 -174
  86. package/components/StopsFinder/StopsFinder.js.map +7 -1
  87. package/components/StopsFinder/StopsFinderOption.js +37 -54
  88. package/components/StopsFinder/StopsFinderOption.js.map +7 -1
  89. package/components/StopsFinder/index.js +1 -3
  90. package/components/StopsFinder/index.js.map +7 -1
  91. package/components/TrackerControl/TrackerControl.js +73 -128
  92. package/components/TrackerControl/TrackerControl.js.map +7 -1
  93. package/components/TrackerControl/index.js +1 -3
  94. package/components/TrackerControl/index.js.map +7 -1
  95. package/components/Zoom/Zoom.js +69 -112
  96. package/components/Zoom/Zoom.js.map +7 -1
  97. package/components/Zoom/index.js +1 -3
  98. package/components/Zoom/index.js.map +7 -1
  99. package/package.json +10 -5
  100. package/propTypes.js +17 -23
  101. package/propTypes.js.map +7 -1
  102. package/setupTests.js +2 -4
  103. package/setupTests.js.map +7 -1
  104. package/themes/README.md +26 -0
  105. package/themes/default/components.scss +0 -1
  106. package/themes/default/examples.scss +0 -1
  107. package/utils/GlobalsForOle.js +63 -64
  108. package/utils/GlobalsForOle.js.map +7 -1
  109. package/utils/KML.js +178 -364
  110. package/utils/KML.js.map +7 -1
  111. package/utils/KMLFormat.js +37 -73
  112. package/utils/KMLFormat.js.map +7 -1
  113. package/utils/Styles.js +24 -32
  114. package/utils/Styles.js.map +7 -1
  115. package/utils/getPolygonPattern.js +11 -44
  116. package/utils/getPolygonPattern.js.map +7 -1
  117. package/utils/timeUtils.js +16 -35
  118. package/utils/timeUtils.js.map +7 -1
  119. package/LayerService.test.js +0 -160
  120. package/LayerService.test.js.map +0 -1
  121. package/Projections.js +0 -16
  122. package/Projections.js.map +0 -1
  123. package/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +0 -88
  124. package/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js.map +0 -1
  125. package/components/BaseLayerToggler/BaseLayerToggler.js +0 -490
  126. package/components/BaseLayerToggler/BaseLayerToggler.js.map +0 -1
  127. package/components/BaseLayerToggler/BaseLayerToggler.md.scss +0 -9
  128. package/components/BaseLayerToggler/BaseLayerToggler.scss +0 -49
  129. package/components/BaseLayerToggler/BaseLayerToggler.test.js +0 -127
  130. package/components/BaseLayerToggler/BaseLayerToggler.test.js.map +0 -1
  131. package/components/BaseLayerToggler/index.js +0 -3
  132. package/components/BaseLayerToggler/index.js.map +0 -1
  133. package/components/BasicMap/BasicMap.test.js +0 -288
  134. package/components/BasicMap/BasicMap.test.js.map +0 -1
  135. package/components/CanvasSaveButton/CanvasSaveButton.test.js +0 -173
  136. package/components/CanvasSaveButton/CanvasSaveButton.test.js.map +0 -1
  137. package/components/Copyright/Copyright.test.js +0 -133
  138. package/components/Copyright/Copyright.test.js.map +0 -1
  139. package/components/FeatureExportButton/FeatureExportButton.test.js +0 -407
  140. package/components/FeatureExportButton/FeatureExportButton.test.js.map +0 -1
  141. package/components/FilterButton/FilterButton.test.js +0 -48
  142. package/components/FilterButton/FilterButton.test.js.map +0 -1
  143. package/components/FitExtent/FitExtent.test.js +0 -44
  144. package/components/FitExtent/FitExtent.test.js.map +0 -1
  145. package/components/FollowButton/FollowButton.test.js +0 -57
  146. package/components/FollowButton/FollowButton.test.js.map +0 -1
  147. package/components/Geolocation/Geolocation.test.js +0 -263
  148. package/components/Geolocation/Geolocation.test.js.map +0 -1
  149. package/components/LayerTree/LayerTree.test.js +0 -323
  150. package/components/LayerTree/LayerTree.test.js.map +0 -1
  151. package/components/MousePosition/MousePosition.test.js +0 -125
  152. package/components/MousePosition/MousePosition.test.js.map +0 -1
  153. package/components/NorthArrow/NorthArrow.test.js +0 -106
  154. package/components/NorthArrow/NorthArrow.test.js.map +0 -1
  155. package/components/Overlay/Overlay.test.js +0 -145
  156. package/components/Overlay/Overlay.test.js.map +0 -1
  157. package/components/Permalink/Permalink.test.js +0 -267
  158. package/components/Permalink/Permalink.test.js.map +0 -1
  159. package/components/Popup/Popup.test.js +0 -291
  160. package/components/Popup/Popup.test.js.map +0 -1
  161. package/components/ResizeHandler/ResizeHandler.test.js +0 -410
  162. package/components/ResizeHandler/ResizeHandler.test.js.map +0 -1
  163. package/components/RouteSchedule/RouteSchedule.test.js +0 -102
  164. package/components/RouteSchedule/RouteSchedule.test.js.map +0 -1
  165. package/components/ScaleLine/ScaleLine.test.js +0 -32
  166. package/components/ScaleLine/ScaleLine.test.js.map +0 -1
  167. package/components/Search/Search.test.js +0 -15
  168. package/components/Search/Search.test.js.map +0 -1
  169. package/components/StopsFinder/StopsFinder.test.js +0 -19
  170. package/components/StopsFinder/StopsFinder.test.js.map +0 -1
  171. package/components/TrackerControl/TrackerControl.test.js +0 -17
  172. package/components/TrackerControl/TrackerControl.test.js.map +0 -1
  173. package/components/Zoom/Zoom.test.js +0 -150
  174. package/components/Zoom/Zoom.test.js.map +0 -1
  175. package/styleguidist/ComponentsList.js +0 -52
  176. package/styleguidist/ComponentsList.js.map +0 -1
  177. package/styleguidist/StyleGuide.js +0 -253
  178. package/styleguidist/StyleGuide.js.map +0 -1
  179. package/utils/KML.test.js +0 -163
  180. package/utils/KML.test.js.map +0 -1
  181. package/utils/KMLFormat.test.js +0 -22
  182. package/utils/KMLFormat.test.js.map +0 -1
  183. package/utils/getPolygonPattern.test.js +0 -66
  184. package/utils/getPolygonPattern.test.js.map +0 -1
  185. package/utils/timeUtils.test.js +0 -32
  186. package/utils/timeUtils.test.js.map +0 -1
@@ -1,307 +1,180 @@
1
- function objectWithoutProperties (obj, exclude) { var target = {}; for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k]; return target; }
2
- import React, { PureComponent } from 'react';
3
- import PropTypes from 'prop-types';
4
-
5
- import { MdClose } from 'react-icons/md';
6
- import OLMap from 'ol/Map';
7
- import Feature from 'ol/Feature';
8
- import { getCenter } from 'ol/extent';
9
- import { unByKey } from 'ol/Observable';
10
-
11
- var propTypes = {
12
- /**
13
- * React Children.
14
- */
1
+ import React, { PureComponent } from "react";
2
+ import PropTypes from "prop-types";
3
+ import { MdClose } from "react-icons/md";
4
+ import OLMap from "ol/Map";
5
+ import Feature from "ol/Feature";
6
+ import { getCenter } from "ol/extent";
7
+ import { unByKey } from "ol/Observable";
8
+ const propTypes = {
15
9
  children: PropTypes.node.isRequired,
16
-
17
- /**
18
- * An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).
19
- */
20
10
  map: PropTypes.instanceOf(OLMap).isRequired,
21
-
22
- /**
23
- * An [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html).
24
- */
25
11
  feature: PropTypes.instanceOf(Feature),
26
-
27
- /**
28
- * Popup title.
29
- */
30
12
  header: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),
31
-
32
- /**
33
- * If true, the popup is panned in the map's viewport.
34
- */
35
13
  panIntoView: PropTypes.bool,
36
-
37
- /**
38
- * Custom BoundingClientRect to fit popup into.
39
- * Use if panIntoView is true. Default is the map's BoundingClientRect.
40
- */
41
14
  panRect: PropTypes.objectOf(PropTypes.number),
42
-
43
- /**
44
- * Coordinate position of the popup.
45
- */
46
15
  popupCoordinate: PropTypes.arrayOf(PropTypes.number),
47
-
48
- /**
49
- * Class name of the popup.
50
- */
51
16
  className: PropTypes.string,
52
-
53
- /**
54
- * Title HTML attributes.
55
- */
56
17
  titles: PropTypes.shape({
57
- closeButton: PropTypes.string,
18
+ closeButton: PropTypes.string
58
19
  }),
59
-
60
- /**
61
- * Function triggered on close button click.
62
- */
63
20
  onCloseClick: PropTypes.func,
64
-
65
- /**
66
- * HTML tabIndex attribute.
67
- */
68
21
  tabIndex: PropTypes.string,
69
-
70
- /**
71
- * Render the header
72
- */
73
22
  renderHeader: PropTypes.func,
74
-
75
- /**
76
- * Render the close button
77
- */
78
23
  renderCloseButton: PropTypes.func,
79
-
80
- /**
81
- * Render the footer
82
- */
83
- renderFooter: PropTypes.func,
24
+ renderFooter: PropTypes.func
84
25
  };
85
-
86
- var defaultProps = {
26
+ const defaultProps = {
87
27
  header: null,
88
28
  feature: null,
89
29
  panIntoView: false,
90
30
  panRect: null,
91
31
  popupCoordinate: null,
92
- className: 'rs-popup',
93
- tabIndex: '',
94
- titles: { closeButton: 'Close' },
95
- onCloseClick: function () {},
32
+ className: "rs-popup",
33
+ tabIndex: "",
34
+ titles: { closeButton: "Close" },
35
+ onCloseClick: () => {
36
+ },
96
37
  renderHeader: null,
97
38
  renderCloseButton: null,
98
- renderFooter: function () {
39
+ renderFooter: () => {
99
40
  return null;
100
- },
41
+ }
101
42
  };
102
-
103
- /**
104
- * The Popup component renders a popup over an
105
- * [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html)
106
- * on click.
107
- */
108
- var Popup = /*@__PURE__*/(function (PureComponent) {
109
- function Popup(props) {
110
- PureComponent.call(this, props);
43
+ class Popup extends PureComponent {
44
+ static renderHeader(props) {
45
+ const { header, renderCloseButton } = props;
46
+ return /* @__PURE__ */ React.createElement("div", {
47
+ className: "rs-popup-header"
48
+ }, header, (renderCloseButton || Popup.renderCloseButton)(props));
49
+ }
50
+ static renderCloseButton({ onCloseClick, titles }) {
51
+ return /* @__PURE__ */ React.createElement("div", {
52
+ role: "button",
53
+ tabIndex: 0,
54
+ className: "rs-popup-close-bt",
55
+ title: titles.closeButton,
56
+ "aria-label": titles.closeButton,
57
+ onClick: () => {
58
+ return onCloseClick();
59
+ },
60
+ onKeyPress: (evt) => {
61
+ return evt.which === 13 && onCloseClick();
62
+ }
63
+ }, /* @__PURE__ */ React.createElement(MdClose, {
64
+ focusable: false
65
+ }));
66
+ }
67
+ constructor(props) {
68
+ super(props);
111
69
  this.state = {
112
70
  popupElement: null,
113
71
  top: 0,
114
- left: 0,
72
+ left: 0
115
73
  };
116
74
  this.postrenderKey = null;
117
75
  }
118
-
119
- if ( PureComponent ) Popup.__proto__ = PureComponent;
120
- Popup.prototype = Object.create( PureComponent && PureComponent.prototype );
121
- Popup.prototype.constructor = Popup;
122
-
123
- Popup.renderHeader = function renderHeader (props) {
124
- var header = props.header;
125
- var renderCloseButton = props.renderCloseButton;
126
- return (
127
- React.createElement( 'div', { className: "rs-popup-header" },
128
- header,
129
- (renderCloseButton || Popup.renderCloseButton)(props)
130
- )
131
- );
132
- };
133
-
134
- Popup.renderCloseButton = function renderCloseButton (ref) {
135
- var onCloseClick = ref.onCloseClick;
136
- var titles = ref.titles;
137
-
138
- return (
139
- React.createElement( 'div', {
140
- role: "button", tabIndex: 0, className: "rs-popup-close-bt", title: titles.closeButton, 'aria-label': titles.closeButton, onClick: function () {
141
- return onCloseClick();
142
- }, onKeyPress: function (evt) {
143
- return evt.which === 13 && onCloseClick();
144
- } },
145
- React.createElement( MdClose, { focusable: false })
146
- )
147
- );
148
- };
149
-
150
- Popup.prototype.componentDidMount = function componentDidMount () {
151
- var this$1 = this;
152
-
153
- var ref = this.props;
154
- var map = ref.map;
76
+ componentDidMount() {
77
+ const { map } = this.props;
155
78
  this.updatePixelPosition();
156
-
157
- this.postrenderKey = map.on('postrender', function () {
158
- this$1.updatePixelPosition();
79
+ this.postrenderKey = map.on("postrender", () => {
80
+ this.updatePixelPosition();
159
81
  });
160
- };
161
-
162
- Popup.prototype.componentDidUpdate = function componentDidUpdate (prevProps, prevState) {
163
- var ref = this.props;
164
- var feature = ref.feature;
165
- var panIntoView = ref.panIntoView;
166
- var popupCoordinate = ref.popupCoordinate;
167
- var ref$1 = this.state;
168
- var popupElement = ref$1.popupElement;
169
- if (
170
- feature !== prevProps.feature ||
171
- popupCoordinate !== prevProps.popupCoordinate
172
- ) {
82
+ }
83
+ componentDidUpdate(prevProps, prevState) {
84
+ const { feature, panIntoView, popupCoordinate } = this.props;
85
+ const { popupElement } = this.state;
86
+ if (feature !== prevProps.feature || popupCoordinate !== prevProps.popupCoordinate) {
173
87
  this.updatePixelPosition();
174
88
  }
175
-
176
- if (
177
- panIntoView &&
178
- popupElement &&
179
- popupElement !== prevState.popupElement
180
- ) {
89
+ if (panIntoView && popupElement && popupElement !== prevState.popupElement) {
181
90
  this.panIntoView();
182
91
  }
183
- };
184
-
185
- Popup.prototype.componentWillUnmount = function componentWillUnmount () {
92
+ }
93
+ componentWillUnmount() {
186
94
  unByKey(this.postrenderKey);
187
- };
188
-
189
- Popup.prototype.panIntoView = function panIntoView () {
190
- var ref = this.props;
191
- var map = ref.map;
192
- var panRect = ref.panRect;
193
- var ref$1 = this.state;
194
- var popupElement = ref$1.popupElement;
195
-
196
- var mapRect = panRect || map.getTarget().getBoundingClientRect();
197
- var popupRect = popupElement.getBoundingClientRect();
198
- var ref$2 = map.getView().getCenter();
199
- var x = ref$2[0];
200
- var y = ref$2[1];
201
- var res = map.getView().getResolution();
202
- var newCenter = [x, y];
203
-
95
+ }
96
+ panIntoView() {
97
+ const { map, panRect } = this.props;
98
+ const { popupElement } = this.state;
99
+ const mapRect = panRect || map.getTarget().getBoundingClientRect();
100
+ const popupRect = popupElement.getBoundingClientRect();
101
+ const [x, y] = map.getView().getCenter();
102
+ const res = map.getView().getResolution();
103
+ const newCenter = [x, y];
204
104
  if (mapRect.top > popupRect.top) {
205
105
  newCenter[1] = y + (mapRect.top - popupRect.top) * res;
206
106
  }
207
-
208
107
  if (mapRect.left > popupRect.left) {
209
108
  newCenter[0] = x - (mapRect.left - popupRect.left) * res;
210
109
  }
211
-
212
110
  if (mapRect.right < popupRect.right) {
213
111
  newCenter[0] = x + (popupRect.right - mapRect.right) * res;
214
112
  }
215
-
216
113
  if (mapRect.bottom < popupRect.bottom) {
217
114
  newCenter[1] = y - (popupRect.bottom - mapRect.bottom) * res;
218
115
  }
219
-
220
116
  if (newCenter[0] !== x || newCenter[1] !== y) {
221
117
  map.getView().animate({ center: newCenter, duration: 500 });
222
118
  }
223
- };
224
-
225
- Popup.prototype.updatePixelPosition = function updatePixelPosition () {
226
- var ref = this.props;
227
- var map = ref.map;
228
- var feature = ref.feature;
229
- var popupCoordinate = ref.popupCoordinate;
230
- var coord = popupCoordinate;
231
-
119
+ }
120
+ updatePixelPosition() {
121
+ const { map, feature, popupCoordinate } = this.props;
122
+ let coord = popupCoordinate;
232
123
  if (feature && !coord) {
233
124
  coord = getCenter(feature.getGeometry().getExtent());
234
125
  }
235
-
236
126
  if (coord) {
237
- var pos = map.getPixelFromCoordinate(coord);
238
-
127
+ const pos = map.getPixelFromCoordinate(coord);
239
128
  if (pos && pos.length === 2) {
240
129
  this.setState({
241
130
  left: pos[0],
242
- top: pos[1],
131
+ top: pos[1]
243
132
  });
244
133
  }
245
134
  }
246
- };
247
-
248
- Popup.prototype.render = function render () {
249
- var this$1 = this;
250
-
251
- var ref = this.props;
252
- var feature = ref.feature;
253
- var popupCoordinate = ref.popupCoordinate;
254
- var children = ref.children;
255
- var header = ref.header;
256
- var titles = ref.titles;
257
- var tabIndex = ref.tabIndex;
258
- var renderHeader = ref.renderHeader;
259
- var renderFooter = ref.renderFooter;
260
- var rest = objectWithoutProperties( ref, ["feature", "popupCoordinate", "children", "header", "titles", "tabIndex", "renderHeader", "renderFooter"] );
261
- var other = rest;
262
-
135
+ }
136
+ render() {
137
+ const {
138
+ feature,
139
+ popupCoordinate,
140
+ children,
141
+ header,
142
+ titles,
143
+ tabIndex,
144
+ renderHeader,
145
+ renderFooter,
146
+ ...other
147
+ } = this.props;
263
148
  if (!feature && !popupCoordinate) {
264
149
  return null;
265
150
  }
266
-
267
151
  delete other.panIntoView;
268
152
  delete other.panRect;
269
153
  delete other.map;
270
154
  delete other.header;
271
155
  delete other.onCloseClick;
272
156
  delete other.renderCloseButton;
273
-
274
- var ref$1 = this.state;
275
- var top = ref$1.top;
276
- var left = ref$1.left;
277
-
278
- // force re-render if the feature or the coordinate changes.
279
- // this is needed to update the popupElement ref
280
- var key = feature ? feature.getId() : popupCoordinate.join();
281
- return (
282
- React.createElement( 'div', Object.assign({},
283
- { className: "rs-popup", style: {
284
- left: left,
285
- top: top,
286
- } }, other),
287
- React.createElement( 'div', {
288
- className: "rs-popup-container", tabIndex: tabIndex, key: key, ref: function (popupElement) {
289
- this$1.setState({ popupElement: popupElement });
290
- } },
291
- (renderHeader || Popup.renderHeader)(this.props),
292
- React.createElement( 'div', { className: "rs-popup-body" }, children),
293
- renderFooter(this.props)
294
- )
295
- )
296
- );
297
- };
298
-
299
- return Popup;
300
- }(PureComponent));
301
-
157
+ const { top, left } = this.state;
158
+ const key = feature ? feature.getId() : popupCoordinate.join();
159
+ return /* @__PURE__ */ React.createElement("div", {
160
+ className: "rs-popup",
161
+ style: {
162
+ left,
163
+ top
164
+ },
165
+ ...other
166
+ }, /* @__PURE__ */ React.createElement("div", {
167
+ className: "rs-popup-container",
168
+ tabIndex,
169
+ key,
170
+ ref: (popupElement) => {
171
+ this.setState({ popupElement });
172
+ }
173
+ }, (renderHeader || Popup.renderHeader)(this.props), /* @__PURE__ */ React.createElement("div", {
174
+ className: "rs-popup-body"
175
+ }, children), renderFooter(this.props)));
176
+ }
177
+ }
302
178
  Popup.propTypes = propTypes;
303
179
  Popup.defaultProps = defaultProps;
304
-
305
180
  export default Popup;
306
-
307
- //# sourceMappingURL=Popup.js.map
@@ -1 +1,7 @@
1
- {"version":3,"file":"Popup.js","sources":["../../../src/components/Popup/Popup.js"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { MdClose } from 'react-icons/md';\nimport OLMap from 'ol/Map';\nimport Feature from 'ol/Feature';\nimport { getCenter } from 'ol/extent';\nimport { unByKey } from 'ol/Observable';\n\nconst propTypes = {\n /**\n * React Children.\n */\n children: PropTypes.node.isRequired,\n\n /**\n * An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n */\n map: PropTypes.instanceOf(OLMap).isRequired,\n\n /**\n * An [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html).\n */\n feature: PropTypes.instanceOf(Feature),\n\n /**\n * Popup title.\n */\n header: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n\n /**\n * If true, the popup is panned in the map's viewport.\n */\n panIntoView: PropTypes.bool,\n\n /**\n * Custom BoundingClientRect to fit popup into.\n * Use if panIntoView is true. Default is the map's BoundingClientRect.\n */\n panRect: PropTypes.objectOf(PropTypes.number),\n\n /**\n * Coordinate position of the popup.\n */\n popupCoordinate: PropTypes.arrayOf(PropTypes.number),\n\n /**\n * Class name of the popup.\n */\n className: PropTypes.string,\n\n /**\n * Title HTML attributes.\n */\n titles: PropTypes.shape({\n closeButton: PropTypes.string,\n }),\n\n /**\n * Function triggered on close button click.\n */\n onCloseClick: PropTypes.func,\n\n /**\n * HTML tabIndex attribute.\n */\n tabIndex: PropTypes.string,\n\n /**\n * Render the header\n */\n renderHeader: PropTypes.func,\n\n /**\n * Render the close button\n */\n renderCloseButton: PropTypes.func,\n\n /**\n * Render the footer\n */\n renderFooter: PropTypes.func,\n};\n\nconst defaultProps = {\n header: null,\n feature: null,\n panIntoView: false,\n panRect: null,\n popupCoordinate: null,\n className: 'rs-popup',\n tabIndex: '',\n titles: { closeButton: 'Close' },\n onCloseClick: () => {},\n renderHeader: null,\n renderCloseButton: null,\n renderFooter: () => {\n return null;\n },\n};\n\n/**\n * The Popup component renders a popup over an\n * [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html)\n * on click.\n */\nclass Popup extends PureComponent {\n static renderHeader(props) {\n const { header, renderCloseButton } = props;\n return (\n <div className=\"rs-popup-header\">\n {header}\n {(renderCloseButton || Popup.renderCloseButton)(props)}\n </div>\n );\n }\n\n static renderCloseButton({ onCloseClick, titles }) {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"rs-popup-close-bt\"\n title={titles.closeButton}\n aria-label={titles.closeButton}\n onClick={() => {\n return onCloseClick();\n }}\n onKeyPress={(evt) => {\n return evt.which === 13 && onCloseClick();\n }}\n >\n <MdClose focusable={false} />\n </div>\n );\n }\n\n constructor(props) {\n super(props);\n this.state = {\n popupElement: null,\n top: 0,\n left: 0,\n };\n this.postrenderKey = null;\n }\n\n componentDidMount() {\n const { map } = this.props;\n this.updatePixelPosition();\n\n this.postrenderKey = map.on('postrender', () => {\n this.updatePixelPosition();\n });\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { feature, panIntoView, popupCoordinate } = this.props;\n const { popupElement } = this.state;\n if (\n feature !== prevProps.feature ||\n popupCoordinate !== prevProps.popupCoordinate\n ) {\n this.updatePixelPosition();\n }\n\n if (\n panIntoView &&\n popupElement &&\n popupElement !== prevState.popupElement\n ) {\n this.panIntoView();\n }\n }\n\n componentWillUnmount() {\n unByKey(this.postrenderKey);\n }\n\n panIntoView() {\n const { map, panRect } = this.props;\n const { popupElement } = this.state;\n\n const mapRect = panRect || map.getTarget().getBoundingClientRect();\n const popupRect = popupElement.getBoundingClientRect();\n const [x, y] = map.getView().getCenter();\n const res = map.getView().getResolution();\n const newCenter = [x, y];\n\n if (mapRect.top > popupRect.top) {\n newCenter[1] = y + (mapRect.top - popupRect.top) * res;\n }\n\n if (mapRect.left > popupRect.left) {\n newCenter[0] = x - (mapRect.left - popupRect.left) * res;\n }\n\n if (mapRect.right < popupRect.right) {\n newCenter[0] = x + (popupRect.right - mapRect.right) * res;\n }\n\n if (mapRect.bottom < popupRect.bottom) {\n newCenter[1] = y - (popupRect.bottom - mapRect.bottom) * res;\n }\n\n if (newCenter[0] !== x || newCenter[1] !== y) {\n map.getView().animate({ center: newCenter, duration: 500 });\n }\n }\n\n updatePixelPosition() {\n const { map, feature, popupCoordinate } = this.props;\n let coord = popupCoordinate;\n\n if (feature && !coord) {\n coord = getCenter(feature.getGeometry().getExtent());\n }\n\n if (coord) {\n const pos = map.getPixelFromCoordinate(coord);\n\n if (pos && pos.length === 2) {\n this.setState({\n left: pos[0],\n top: pos[1],\n });\n }\n }\n }\n\n render() {\n const {\n feature,\n popupCoordinate,\n children,\n header,\n titles,\n tabIndex,\n renderHeader,\n renderFooter,\n ...other\n } = this.props;\n\n if (!feature && !popupCoordinate) {\n return null;\n }\n\n delete other.panIntoView;\n delete other.panRect;\n delete other.map;\n delete other.header;\n delete other.onCloseClick;\n delete other.renderCloseButton;\n\n const { top, left } = this.state;\n\n // force re-render if the feature or the coordinate changes.\n // this is needed to update the popupElement ref\n const key = feature ? feature.getId() : popupCoordinate.join();\n return (\n <div\n className=\"rs-popup\"\n style={{\n left,\n top,\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n >\n <div\n className=\"rs-popup-container\"\n tabIndex={tabIndex}\n key={key}\n ref={(popupElement) => {\n this.setState({ popupElement });\n }}\n >\n {(renderHeader || Popup.renderHeader)(this.props)}\n <div className=\"rs-popup-body\">{children}</div>\n {renderFooter(this.props)}\n </div>\n </div>\n );\n }\n}\n\nPopup.propTypes = propTypes;\nPopup.defaultProps = defaultProps;\n\nexport default Popup;\n"],"names":["const","super","this","let"],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/Popup/Popup.js"],
4
+ "sourcesContent": ["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { MdClose } from 'react-icons/md';\nimport OLMap from 'ol/Map';\nimport Feature from 'ol/Feature';\nimport { getCenter } from 'ol/extent';\nimport { unByKey } from 'ol/Observable';\n\nconst propTypes = {\n /**\n * React Children.\n */\n children: PropTypes.node.isRequired,\n\n /**\n * An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n */\n map: PropTypes.instanceOf(OLMap).isRequired,\n\n /**\n * An [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html).\n */\n feature: PropTypes.instanceOf(Feature),\n\n /**\n * Popup title.\n */\n header: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n\n /**\n * If true, the popup is panned in the map's viewport.\n */\n panIntoView: PropTypes.bool,\n\n /**\n * Custom BoundingClientRect to fit popup into.\n * Use if panIntoView is true. Default is the map's BoundingClientRect.\n */\n panRect: PropTypes.objectOf(PropTypes.number),\n\n /**\n * Coordinate position of the popup.\n */\n popupCoordinate: PropTypes.arrayOf(PropTypes.number),\n\n /**\n * Class name of the popup.\n */\n className: PropTypes.string,\n\n /**\n * Title HTML attributes.\n */\n titles: PropTypes.shape({\n closeButton: PropTypes.string,\n }),\n\n /**\n * Function triggered on close button click.\n */\n onCloseClick: PropTypes.func,\n\n /**\n * HTML tabIndex attribute.\n */\n tabIndex: PropTypes.string,\n\n /**\n * Render the header\n */\n renderHeader: PropTypes.func,\n\n /**\n * Render the close button\n */\n renderCloseButton: PropTypes.func,\n\n /**\n * Render the footer\n */\n renderFooter: PropTypes.func,\n};\n\nconst defaultProps = {\n header: null,\n feature: null,\n panIntoView: false,\n panRect: null,\n popupCoordinate: null,\n className: 'rs-popup',\n tabIndex: '',\n titles: { closeButton: 'Close' },\n onCloseClick: () => {},\n renderHeader: null,\n renderCloseButton: null,\n renderFooter: () => {\n return null;\n },\n};\n\n/**\n * The Popup component renders a popup over an\n * [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html)\n * on click.\n */\nclass Popup extends PureComponent {\n static renderHeader(props) {\n const { header, renderCloseButton } = props;\n return (\n <div className=\"rs-popup-header\">\n {header}\n {(renderCloseButton || Popup.renderCloseButton)(props)}\n </div>\n );\n }\n\n static renderCloseButton({ onCloseClick, titles }) {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"rs-popup-close-bt\"\n title={titles.closeButton}\n aria-label={titles.closeButton}\n onClick={() => {\n return onCloseClick();\n }}\n onKeyPress={(evt) => {\n return evt.which === 13 && onCloseClick();\n }}\n >\n <MdClose focusable={false} />\n </div>\n );\n }\n\n constructor(props) {\n super(props);\n this.state = {\n popupElement: null,\n top: 0,\n left: 0,\n };\n this.postrenderKey = null;\n }\n\n componentDidMount() {\n const { map } = this.props;\n this.updatePixelPosition();\n\n this.postrenderKey = map.on('postrender', () => {\n this.updatePixelPosition();\n });\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { feature, panIntoView, popupCoordinate } = this.props;\n const { popupElement } = this.state;\n if (\n feature !== prevProps.feature ||\n popupCoordinate !== prevProps.popupCoordinate\n ) {\n this.updatePixelPosition();\n }\n\n if (\n panIntoView &&\n popupElement &&\n popupElement !== prevState.popupElement\n ) {\n this.panIntoView();\n }\n }\n\n componentWillUnmount() {\n unByKey(this.postrenderKey);\n }\n\n panIntoView() {\n const { map, panRect } = this.props;\n const { popupElement } = this.state;\n\n const mapRect = panRect || map.getTarget().getBoundingClientRect();\n const popupRect = popupElement.getBoundingClientRect();\n const [x, y] = map.getView().getCenter();\n const res = map.getView().getResolution();\n const newCenter = [x, y];\n\n if (mapRect.top > popupRect.top) {\n newCenter[1] = y + (mapRect.top - popupRect.top) * res;\n }\n\n if (mapRect.left > popupRect.left) {\n newCenter[0] = x - (mapRect.left - popupRect.left) * res;\n }\n\n if (mapRect.right < popupRect.right) {\n newCenter[0] = x + (popupRect.right - mapRect.right) * res;\n }\n\n if (mapRect.bottom < popupRect.bottom) {\n newCenter[1] = y - (popupRect.bottom - mapRect.bottom) * res;\n }\n\n if (newCenter[0] !== x || newCenter[1] !== y) {\n map.getView().animate({ center: newCenter, duration: 500 });\n }\n }\n\n updatePixelPosition() {\n const { map, feature, popupCoordinate } = this.props;\n let coord = popupCoordinate;\n\n if (feature && !coord) {\n coord = getCenter(feature.getGeometry().getExtent());\n }\n\n if (coord) {\n const pos = map.getPixelFromCoordinate(coord);\n\n if (pos && pos.length === 2) {\n this.setState({\n left: pos[0],\n top: pos[1],\n });\n }\n }\n }\n\n render() {\n const {\n feature,\n popupCoordinate,\n children,\n header,\n titles,\n tabIndex,\n renderHeader,\n renderFooter,\n ...other\n } = this.props;\n\n if (!feature && !popupCoordinate) {\n return null;\n }\n\n delete other.panIntoView;\n delete other.panRect;\n delete other.map;\n delete other.header;\n delete other.onCloseClick;\n delete other.renderCloseButton;\n\n const { top, left } = this.state;\n\n // force re-render if the feature or the coordinate changes.\n // this is needed to update the popupElement ref\n const key = feature ? feature.getId() : popupCoordinate.join();\n return (\n <div\n className=\"rs-popup\"\n style={{\n left,\n top,\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n >\n <div\n className=\"rs-popup-container\"\n tabIndex={tabIndex}\n key={key}\n ref={(popupElement) => {\n this.setState({ popupElement });\n }}\n >\n {(renderHeader || Popup.renderHeader)(this.props)}\n <div className=\"rs-popup-body\">{children}</div>\n {renderFooter(this.props)}\n </div>\n </div>\n );\n }\n}\n\nPopup.propTypes = propTypes;\nPopup.defaultProps = defaultProps;\n\nexport default Popup;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,3 +1 @@
1
- export { default } from './Popup';
2
-
3
- //# sourceMappingURL=index.js.map
1
+ export { default } from "./Popup";
@@ -1 +1,7 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Popup/index.js"],"sourcesContent":["export { default } from './Popup';\n"],"names":[],"mappings":"AAAA,SAAS,OAAO,QAAQ,SAAS,CAAC;"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/Popup/index.js"],
4
+ "sourcesContent": ["export { default } from './Popup';\n"],
5
+ "mappings": "AAAA,wBAAwB;",
6
+ "names": []
7
+ }