react-spatial 1.5.3 → 1.5.4

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 (294) hide show
  1. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +231 -0
  2. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +7 -0
  3. package/components/BaseLayerSwitcher/index.js +1 -0
  4. package/components/BaseLayerSwitcher/index.js.map +7 -0
  5. package/components/BasicMap/BasicMap.js +278 -0
  6. package/components/BasicMap/BasicMap.js.map +7 -0
  7. package/components/BasicMap/index.js +1 -0
  8. package/components/BasicMap/index.js.map +7 -0
  9. package/{src/components → components}/CanvasSaveButton/CanvasSaveButton.js +93 -320
  10. package/components/CanvasSaveButton/CanvasSaveButton.js.map +7 -0
  11. package/components/CanvasSaveButton/index.js +1 -0
  12. package/components/CanvasSaveButton/index.js.map +7 -0
  13. package/components/Copyright/Copyright.js +55 -0
  14. package/components/Copyright/Copyright.js.map +7 -0
  15. package/components/Copyright/index.js +1 -0
  16. package/components/Copyright/index.js.map +7 -0
  17. package/components/FeatureExportButton/FeatureExportButton.js +62 -0
  18. package/components/FeatureExportButton/FeatureExportButton.js.map +7 -0
  19. package/components/FeatureExportButton/index.js +1 -0
  20. package/components/FeatureExportButton/index.js.map +7 -0
  21. package/components/FitExtent/FitExtent.js +32 -0
  22. package/components/FitExtent/FitExtent.js.map +7 -0
  23. package/components/FitExtent/index.js +1 -0
  24. package/components/FitExtent/index.js.map +7 -0
  25. package/{src/components → components}/Geolocation/Geolocation.js +61 -144
  26. package/components/Geolocation/Geolocation.js.map +7 -0
  27. package/components/Geolocation/index.js +1 -0
  28. package/components/Geolocation/index.js.map +7 -0
  29. package/components/LayerTree/LayerTree.js +278 -0
  30. package/components/LayerTree/LayerTree.js.map +7 -0
  31. package/components/LayerTree/index.js +1 -0
  32. package/components/LayerTree/index.js.map +7 -0
  33. package/components/MousePosition/MousePosition.js +110 -0
  34. package/components/MousePosition/MousePosition.js.map +7 -0
  35. package/components/MousePosition/index.js +1 -0
  36. package/components/MousePosition/index.js.map +7 -0
  37. package/components/NorthArrow/NorthArrow.js +43 -0
  38. package/components/NorthArrow/NorthArrow.js.map +7 -0
  39. package/components/NorthArrow/index.js +1 -0
  40. package/components/NorthArrow/index.js.map +7 -0
  41. package/components/Overlay/Overlay.js +122 -0
  42. package/components/Overlay/Overlay.js.map +7 -0
  43. package/components/Overlay/index.js +1 -0
  44. package/components/Overlay/index.js.map +7 -0
  45. package/components/Permalink/Permalink.js +206 -0
  46. package/components/Permalink/Permalink.js.map +7 -0
  47. package/components/Permalink/index.js +1 -0
  48. package/components/Permalink/index.js.map +7 -0
  49. package/{src/components → components}/Popup/Popup.js +55 -165
  50. package/components/Popup/Popup.js.map +7 -0
  51. package/components/Popup/index.js +1 -0
  52. package/components/Popup/index.js.map +7 -0
  53. package/{src/components → components}/ResizeHandler/ResizeHandler.js +15 -50
  54. package/components/ResizeHandler/ResizeHandler.js.map +7 -0
  55. package/components/ResizeHandler/index.js +1 -0
  56. package/components/ResizeHandler/index.js.map +7 -0
  57. package/components/RouteSchedule/RouteSchedule.js +223 -0
  58. package/components/RouteSchedule/RouteSchedule.js.map +7 -0
  59. package/components/RouteSchedule/index.js +1 -0
  60. package/components/RouteSchedule/index.js.map +7 -0
  61. package/components/ScaleLine/ScaleLine.js +32 -0
  62. package/components/ScaleLine/ScaleLine.js.map +7 -0
  63. package/components/ScaleLine/index.js +1 -0
  64. package/components/ScaleLine/index.js.map +7 -0
  65. package/components/StopsFinder/StopsFinder.js +210 -0
  66. package/components/StopsFinder/StopsFinder.js.map +7 -0
  67. package/components/StopsFinder/StopsFinderOption.js +51 -0
  68. package/components/StopsFinder/StopsFinderOption.js.map +7 -0
  69. package/components/StopsFinder/index.js +1 -0
  70. package/components/StopsFinder/index.js.map +7 -0
  71. package/components/Zoom/Zoom.js +130 -0
  72. package/components/Zoom/Zoom.js.map +7 -0
  73. package/components/Zoom/index.js +1 -0
  74. package/components/Zoom/index.js.map +7 -0
  75. package/package.json +1 -1
  76. package/{src/propTypes.js → propTypes.js} +12 -16
  77. package/propTypes.js.map +7 -0
  78. package/{src/setupTests.js → setupTests.js} +1 -1
  79. package/setupTests.js.map +7 -0
  80. package/utils/GlobalsForOle.js +94 -0
  81. package/utils/GlobalsForOle.js.map +7 -0
  82. package/utils/KML.js +412 -0
  83. package/utils/KML.js.map +7 -0
  84. package/utils/KMLFormat.js +69 -0
  85. package/utils/KMLFormat.js.map +7 -0
  86. package/{src/utils → utils}/Styles.js +14 -20
  87. package/utils/Styles.js.map +7 -0
  88. package/{src/utils → utils}/getPolygonPattern.js +6 -34
  89. package/utils/getPolygonPattern.js.map +7 -0
  90. package/{src/utils → utils}/timeUtils.js +5 -22
  91. package/utils/timeUtils.js.map +7 -0
  92. package/.github/workflows/conventional-pr-title.yml +0 -21
  93. package/.github/workflows/main.yml +0 -28
  94. package/.husky/commit-msg +0 -4
  95. package/.husky/post-checkout +0 -4
  96. package/.husky/post-merge +0 -4
  97. package/.husky/post-rebase +0 -4
  98. package/.husky/pre-commit +0 -4
  99. package/.nvmrc +0 -1
  100. package/.whitesource +0 -8
  101. package/CHANGELOG.md +0 -65
  102. package/DEVELOP.md +0 -113
  103. package/__mocks__/mapbox-gl.js +0 -11
  104. package/__mocks__/resize-observer-polyfill.js +0 -9
  105. package/babel.config.js +0 -3
  106. package/commitlint.config.js +0 -1
  107. package/data/topic1.js +0 -119
  108. package/data/topic2.js +0 -28
  109. package/doc/README.md +0 -21
  110. package/doc/doc-config.json +0 -4
  111. package/pull_request_template.md +0 -16
  112. package/renovate.json +0 -4
  113. package/scripts/read-pkg-json.js +0 -17
  114. package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.js +0 -322
  115. package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +0 -69
  116. package/src/components/BaseLayerSwitcher/README.md +0 -61
  117. package/src/components/BaseLayerSwitcher/__snapshots__/BaseLayerSwitcher.test.js.snap +0 -88
  118. package/src/components/BaseLayerSwitcher/index.js +0 -1
  119. package/src/components/BasicMap/BasicMap.js +0 -413
  120. package/src/components/BasicMap/BasicMap.test.js +0 -281
  121. package/src/components/BasicMap/README.md +0 -18
  122. package/src/components/BasicMap/index.js +0 -1
  123. package/src/components/CanvasSaveButton/CanvasSaveButton.test.js +0 -148
  124. package/src/components/CanvasSaveButton/README.md +0 -76
  125. package/src/components/CanvasSaveButton/__snapshots__/CanvasSaveButton.test.js.snap +0 -76
  126. package/src/components/CanvasSaveButton/index.js +0 -1
  127. package/src/components/Copyright/Copyright.js +0 -89
  128. package/src/components/Copyright/Copyright.test.js +0 -134
  129. package/src/components/Copyright/README.md +0 -36
  130. package/src/components/Copyright/index.js +0 -1
  131. package/src/components/FeatureExportButton/FeatureExportButton.js +0 -118
  132. package/src/components/FeatureExportButton/FeatureExportButton.test.js +0 -417
  133. package/src/components/FeatureExportButton/README.md +0 -76
  134. package/src/components/FeatureExportButton/__snapshots__/FeatureExportButton.test.js.snap +0 -67
  135. package/src/components/FeatureExportButton/index.js +0 -1
  136. package/src/components/FitExtent/FitExtent.js +0 -62
  137. package/src/components/FitExtent/FitExtent.test.js +0 -48
  138. package/src/components/FitExtent/README.md +0 -34
  139. package/src/components/FitExtent/__snapshots__/FitExtent.test.js.snap +0 -13
  140. package/src/components/FitExtent/index.js +0 -1
  141. package/src/components/Geolocation/Geolocation.test.js +0 -267
  142. package/src/components/Geolocation/README.md +0 -25
  143. package/src/components/Geolocation/__snapshots__/Geolocation.test.js.snap +0 -92
  144. package/src/components/Geolocation/index.js +0 -1
  145. package/src/components/LayerTree/LayerTree.js +0 -487
  146. package/src/components/LayerTree/LayerTree.test.js +0 -337
  147. package/src/components/LayerTree/README.md +0 -92
  148. package/src/components/LayerTree/__snapshots__/LayerTree.test.js.snap +0 -1746
  149. package/src/components/LayerTree/index.js +0 -1
  150. package/src/components/MousePosition/MousePosition.js +0 -175
  151. package/src/components/MousePosition/MousePosition.test.js +0 -132
  152. package/src/components/MousePosition/README.md +0 -50
  153. package/src/components/MousePosition/__snapshots__/MousePosition.test.js.snap +0 -76
  154. package/src/components/MousePosition/index.js +0 -1
  155. package/src/components/NorthArrow/NorthArrow.js +0 -75
  156. package/src/components/NorthArrow/NorthArrow.test.js +0 -104
  157. package/src/components/NorthArrow/README.md +0 -59
  158. package/src/components/NorthArrow/__snapshots__/NorthArrow.test.js.snap +0 -117
  159. package/src/components/NorthArrow/index.js +0 -1
  160. package/src/components/Overlay/Overlay.js +0 -176
  161. package/src/components/Overlay/Overlay.test.js +0 -149
  162. package/src/components/Overlay/README.md +0 -59
  163. package/src/components/Overlay/__snapshots__/Overlay.test.js.snap +0 -9
  164. package/src/components/Overlay/index.js +0 -1
  165. package/src/components/Permalink/Permalink.js +0 -326
  166. package/src/components/Permalink/Permalink.test.js +0 -285
  167. package/src/components/Permalink/README.md +0 -105
  168. package/src/components/Permalink/index.js +0 -1
  169. package/src/components/Popup/Popup.test.js +0 -307
  170. package/src/components/Popup/README.md +0 -93
  171. package/src/components/Popup/__snapshots__/Popup.test.js.snap +0 -180
  172. package/src/components/Popup/index.js +0 -1
  173. package/src/components/README.md +0 -41
  174. package/src/components/ResizeHandler/ResizeHandler.test.js +0 -344
  175. package/src/components/ResizeHandler/index.js +0 -1
  176. package/src/components/RouteSchedule/README.md +0 -118
  177. package/src/components/RouteSchedule/RouteSchedule.js +0 -370
  178. package/src/components/RouteSchedule/RouteSchedule.test.js +0 -113
  179. package/src/components/RouteSchedule/__snapshots__/RouteSchedule.test.js.snap +0 -248
  180. package/src/components/RouteSchedule/index.js +0 -1
  181. package/src/components/ScaleLine/README.md +0 -29
  182. package/src/components/ScaleLine/ScaleLine.js +0 -50
  183. package/src/components/ScaleLine/ScaleLine.test.js +0 -30
  184. package/src/components/ScaleLine/__snapshots__/ScaleLine.test.js.snap +0 -7
  185. package/src/components/ScaleLine/index.js +0 -1
  186. package/src/components/StopsFinder/README.md +0 -50
  187. package/src/components/StopsFinder/StopsFinder.js +0 -284
  188. package/src/components/StopsFinder/StopsFinder.test.js +0 -17
  189. package/src/components/StopsFinder/StopsFinderOption.js +0 -61
  190. package/src/components/StopsFinder/__snapshots__/StopsFinder.test.js.snap +0 -133
  191. package/src/components/StopsFinder/index.js +0 -1
  192. package/src/components/Zoom/README.md +0 -25
  193. package/src/components/Zoom/Zoom.js +0 -180
  194. package/src/components/Zoom/Zoom.test.js +0 -141
  195. package/src/components/Zoom/__snapshots__/Zoom.test.js.snap +0 -201
  196. package/src/components/Zoom/index.js +0 -1
  197. package/src/styleguidist/ComponentsList.js +0 -52
  198. package/src/styleguidist/StyleGuide.js +0 -277
  199. package/src/styleguidist/styleguidist.css +0 -38
  200. package/src/utils/GlobalsForOle.js +0 -99
  201. package/src/utils/KML.js +0 -594
  202. package/src/utils/KML.test.js +0 -337
  203. package/src/utils/KMLFormat.js +0 -100
  204. package/src/utils/KMLFormat.test.js +0 -50
  205. 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
  206. package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-2-(cross)-color-and-(light-blue)-opacity.canvas-image.png +0 -0
  207. 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
  208. 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
  209. package/src/utils/getPolygonPattern.test.js +0 -61
  210. package/src/utils/timeUtils.test.js +0 -30
  211. package/styleguide.config.js +0 -251
  212. /package/{src/components → components}/BaseLayerSwitcher/BaseLayerSwitcher.md.scss +0 -0
  213. /package/{src/components → components}/BaseLayerSwitcher/BaseLayerSwitcher.scss +0 -0
  214. /package/{src/components → components}/BasicMap/BasicMap.md.scss +0 -0
  215. /package/{src/components → components}/CanvasSaveButton/CanvasSaveButton.md.scss +0 -0
  216. /package/{src/components → components}/Copyright/Copyright.md.scss +0 -0
  217. /package/{src/components → components}/FeatureExportButton/FeatureExportButton.md.scss +0 -0
  218. /package/{src/components → components}/FitExtent/FitExtent.md.scss +0 -0
  219. /package/{src/components → components}/Geolocation/Geolocation.md.scss +0 -0
  220. /package/{src/components → components}/Geolocation/Geolocation.scss +0 -0
  221. /package/{src/components → components}/LayerTree/LayerTree.md.scss +0 -0
  222. /package/{src/components → components}/LayerTree/LayerTree.scss +0 -0
  223. /package/{src/components → components}/MousePosition/MousePosition.md.scss +0 -0
  224. /package/{src/components → components}/NorthArrow/NorthArrow.scss +0 -0
  225. /package/{src/components → components}/Overlay/Overlay.md.scss +0 -0
  226. /package/{src/components → components}/Overlay/Overlay.scss +0 -0
  227. /package/{src/components → components}/Permalink/Permalink.md.scss +0 -0
  228. /package/{src/components → components}/Popup/Popup.md.scss +0 -0
  229. /package/{src/components → components}/Popup/Popup.scss +0 -0
  230. /package/{src/components → components}/RouteSchedule/RouteSchedule.md.scss +0 -0
  231. /package/{src/components → components}/RouteSchedule/RouteSchedule.scss +0 -0
  232. /package/{src/components → components}/ScaleLine/ScaleLine.scss +0 -0
  233. /package/{src/components → components}/Zoom/Zoom.md.scss +0 -0
  234. /package/{src/components → components}/Zoom/Zoom.scss +0 -0
  235. /package/{src/images → images}/RouteSchedule/firstStation.png +0 -0
  236. /package/{src/images → images}/RouteSchedule/lastStation.png +0 -0
  237. /package/{src/images → images}/RouteSchedule/line.png +0 -0
  238. /package/{src/images → images}/RouteSchedule/station.png +0 -0
  239. /package/{src/images → images}/baselayer/baselayer.basebright.png +0 -0
  240. /package/{src/images → images}/baselayer/baselayer.osm.png +0 -0
  241. /package/{src/images → images}/baselayer/baselayer.travic.png +0 -0
  242. /package/{src/images → images}/baselayer/open.topo.map.png +0 -0
  243. /package/{src/images → images}/baselayer/osm.baselayer.hot.png +0 -0
  244. /package/{src/images → images}/baselayer/osm.baselayer.png +0 -0
  245. /package/{src/images → images}/favicon.png +0 -0
  246. /package/{src/images → images}/geops_logo.png +0 -0
  247. /package/{src/images → images}/geops_logo.svg +0 -0
  248. /package/{src/images → images}/geops_qr.png +0 -0
  249. /package/{src/images → images}/mots/bus_poi-blue-01.svg +0 -0
  250. /package/{src/images → images}/mots/bus_poi-grey-01.svg +0 -0
  251. /package/{src/images → images}/mots/bus_round-blue-01.svg +0 -0
  252. /package/{src/images → images}/mots/bus_round-grey-01.svg +0 -0
  253. /package/{src/images → images}/mots/bus_square-blue-01.svg +0 -0
  254. /package/{src/images → images}/mots/bus_square-grey-01.svg +0 -0
  255. /package/{src/images → images}/mots/cable_car_poi-blue-01.svg +0 -0
  256. /package/{src/images → images}/mots/cable_car_poi-grey-01.svg +0 -0
  257. /package/{src/images → images}/mots/cable_car_round-blue-01.svg +0 -0
  258. /package/{src/images → images}/mots/cable_car_round-grey-01.svg +0 -0
  259. /package/{src/images → images}/mots/cable_car_square-blue-01.svg +0 -0
  260. /package/{src/images → images}/mots/cable_car_square-grey-01.svg +0 -0
  261. /package/{src/images → images}/mots/ferry_poi-blue-01.svg +0 -0
  262. /package/{src/images → images}/mots/ferry_poi-grey-01.svg +0 -0
  263. /package/{src/images → images}/mots/ferry_round-blue-01.svg +0 -0
  264. /package/{src/images → images}/mots/ferry_round-grey-01.svg +0 -0
  265. /package/{src/images → images}/mots/ferry_square-blue-01.svg +0 -0
  266. /package/{src/images → images}/mots/ferry_square-grey-01.svg +0 -0
  267. /package/{src/images → images}/mots/funicular_round-blue-01.svg +0 -0
  268. /package/{src/images → images}/mots/funicular_round-grey-01.svg +0 -0
  269. /package/{src/images → images}/mots/funicular_square-blue-01.svg +0 -0
  270. /package/{src/images → images}/mots/gondola_round-blue-01.svg +0 -0
  271. /package/{src/images → images}/mots/rail_poi-blue-01.svg +0 -0
  272. /package/{src/images → images}/mots/rail_poi-grey-01.svg +0 -0
  273. /package/{src/images → images}/mots/rail_round-blue-01.svg +0 -0
  274. /package/{src/images → images}/mots/rail_round-grey-01.svg +0 -0
  275. /package/{src/images → images}/mots/rail_square-blue-01.svg +0 -0
  276. /package/{src/images → images}/mots/rail_square-grey-01.svg +0 -0
  277. /package/{src/images → images}/mots/subway_round blue-01.svg +0 -0
  278. /package/{src/images → images}/mots/subway_round-blue-01.svg +0 -0
  279. /package/{src/images → images}/mots/tram_poi-blue-01.svg +0 -0
  280. /package/{src/images → images}/mots/tram_poi-grey-01.svg +0 -0
  281. /package/{src/images → images}/mots/tram_round-blue-01.svg +0 -0
  282. /package/{src/images → images}/mots/tram_round-grey-01.svg +0 -0
  283. /package/{src/images → images}/mots/tram_square-blue-01.svg +0 -0
  284. /package/{src/images → images}/mots/tram_square-grey-01.svg +0 -0
  285. /package/{src/images → images}/northArrow.svg +0 -0
  286. /package/{src/images → images}/northArrow.url.svg +0 -0
  287. /package/{src/images → images}/northArrowCircle.svg +0 -0
  288. /package/{src/images → images}/northArrowCircle.url.svg +0 -0
  289. /package/{src/themes → themes}/README.md +0 -0
  290. /package/{src/themes → themes}/default/components.scss +0 -0
  291. /package/{src/themes → themes}/default/examples.scss +0 -0
  292. /package/{src/themes → themes}/default/index.scss +0 -0
  293. /package/{src/themes → themes}/default/mixins.scss +0 -0
  294. /package/{src/themes → themes}/default/variables.scss +0 -0
@@ -1,413 +0,0 @@
1
- import React, { PureComponent } from 'react';
2
- import PropTypes from 'prop-types';
3
- import { defaults as defaultInteractions } from 'ol/interaction';
4
- import { equals } from 'ol/extent';
5
- import OLMap from 'ol/Map';
6
- import OLCollection from 'ol/Collection';
7
- import View from 'ol/View';
8
- import { unByKey } from 'ol/Observable';
9
- import Interaction from 'ol/interaction/Interaction';
10
- import { Layer } from 'mobility-toolbox-js/ol';
11
- import ResizeHandler from '../ResizeHandler';
12
-
13
- const propTypes = {
14
- /** Map animation options */
15
- animationOptions: PropTypes.shape({
16
- center: PropTypes.arrayOf(PropTypes.number),
17
- resolution: PropTypes.number,
18
- zoom: PropTypes.number,
19
- }),
20
-
21
- /** Center of the [ol/View](https://openlayers.org/en/latest/apidoc/module-ol_View-View.html). */
22
- center: PropTypes.arrayOf(PropTypes.number),
23
-
24
- /** Class name of the map container */
25
- className: PropTypes.string,
26
-
27
- /** Map extent */
28
- extent: PropTypes.arrayOf(PropTypes.number),
29
-
30
- /** Openlayers [fit options](https://openlayers.org/en/latest/apidoc/module-ol_View-View.html#fit) when extent is updated */
31
- fitOptions: PropTypes.object,
32
-
33
- /** Array of [ol/interaction](https://openlayers.org/en/latest/apidoc/module-ol_interaction_Interaction-Interaction.html). */
34
- interactions: PropTypes.oneOfType([
35
- PropTypes.arrayOf(PropTypes.instanceOf(Interaction)),
36
- PropTypes.instanceOf(OLCollection),
37
- ]),
38
-
39
- /** Array of [mobility-toolbox-js layers](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers) to display. */
40
- layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),
41
-
42
- /** An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html). */
43
- map: PropTypes.instanceOf(OLMap),
44
-
45
- /**
46
- * Callback when a [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html) is clicked.
47
- * @param {OLFeature[]} features An array of [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html).
48
- * @param {ol.MapBrowserEvent} event The singleclick [ol/MapBrowserEvent](https://openlayers.org/en/latest/apidoc/module-ol_MapBrowserEvent-MapBrowserEvent.html#event:singleclick).
49
- */
50
- onFeaturesClick: PropTypes.func,
51
-
52
- /**
53
- * Optional options to pass on feature click. Passed to ol's 'getFeaturesAtPixel' method.
54
- * https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html#getFeaturesAtPixel
55
- */
56
- featuresClickOptions: PropTypes.shape({
57
- layerFilter: PropTypes.func,
58
- hitTolerance: PropTypes.number,
59
- checkWrapped: PropTypes.bool,
60
- }),
61
-
62
- /**
63
- * Callback when a [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html) is hovered.
64
- * @param {OLFeature[]} features An array of [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html).
65
- * @param {ol.MapBrowserEvent} event The pointermove [ol/MapBrowserEvent](https://openlayers.org/en/latest/apidoc/module-ol_MapBrowserEvent-MapBrowserEvent.html#event:pointermove).
66
- */
67
- onFeaturesHover: PropTypes.func,
68
-
69
- /**
70
- * Callback when the map was moved.
71
- * @param {ol.MapEvent} event The movend [ol/MapEvent](https://openlayers.org/en/latest/apidoc/module-ol_MapBrowserEvent-MapBrowserEvent.html#event:moveend).
72
- */
73
- onMapMoved: PropTypes.func,
74
-
75
- /** Map resolution */
76
- resolution: PropTypes.number,
77
-
78
- /** The tabIndex of the map. */
79
- tabIndex: PropTypes.number,
80
-
81
- /** The style of the map. */
82
- style: PropTypes.object,
83
-
84
- /** HTML aria-label. */
85
- ariaLabel: PropTypes.string,
86
-
87
- /** [ol/View](https://openlayers.org/en/latest/apidoc/module-ol_View-View.html) constructor options */
88
- viewOptions: PropTypes.shape({
89
- minZoom: PropTypes.number,
90
- maxZoom: PropTypes.number,
91
- extent: PropTypes.array,
92
- projection: PropTypes.string,
93
- }),
94
-
95
- /** Map zoom level */
96
- zoom: PropTypes.number,
97
- };
98
-
99
- const defaultProps = {
100
- animationOptions: undefined,
101
- center: [0, 0],
102
- className: 'rs-map',
103
- extent: undefined,
104
- fitOptions: {
105
- duration: 1000,
106
- padding: [20, 20, 20, 20],
107
- maxZoom: 23,
108
- },
109
- style: undefined,
110
- interactions: null,
111
- layers: [],
112
- map: null,
113
- onFeaturesClick: undefined,
114
- featuresClickOptions: {
115
- hitTolerance: 0,
116
- },
117
- onFeaturesHover: undefined,
118
- onMapMoved: undefined,
119
- resolution: undefined,
120
- tabIndex: undefined,
121
- ariaLabel: 'map',
122
- viewOptions: {
123
- minZoom: 0,
124
- maxZoom: 22,
125
- extent: undefined,
126
- projection: 'EPSG:3857',
127
- },
128
- zoom: 1,
129
- };
130
-
131
- /**
132
- * The BasicMap component renders an [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).
133
- *
134
- * The map's view is created with the following parameters for the view:
135
- * - projection: 'EPSG:3857'
136
- * - zoom: 0
137
- * - minZoom: 0
138
- * - maxZoom: 22
139
- *
140
- * These options can be overridden using the viewOptions property.
141
- */
142
- class BasicMap extends PureComponent {
143
- constructor(props) {
144
- super(props);
145
- const { map, interactions } = this.props;
146
-
147
- this.map =
148
- map ||
149
- new OLMap({
150
- controls: [],
151
- interactions:
152
- interactions ||
153
- defaultInteractions({
154
- altShiftDragRotate: false,
155
- pinchRotate: false,
156
- }),
157
- });
158
-
159
- this.state = {
160
- node: null,
161
- };
162
-
163
- this.layers = [];
164
- this.moveEndRef = null;
165
- this.singleClickRef = null;
166
- this.pointerMoveRef = null;
167
- this.setNode = this.setNode.bind(this);
168
- }
169
-
170
- componentDidMount() {
171
- const { layers, extent, viewOptions, center, zoom, resolution } =
172
- this.props;
173
- const { node } = this.state;
174
- this.map.setTarget(node);
175
-
176
- // We set the view here otherwise the map is not correctly zoomed.
177
- this.map.setView(new View({ ...viewOptions, center, zoom, resolution }));
178
-
179
- // // Since ol 6.1.0 touch-action is set to auto and creates a bad navigation experience on mobile,
180
- // // so we have to force it to none for mobile.
181
- // // https://github.com/openlayers/openlayers/pull/10187/files
182
- const viewPort = this.map.getViewport();
183
- viewPort.style.touchAction = 'none';
184
- viewPort.style.msTouchAction = 'none';
185
- viewPort.setAttribute('touch-action', 'none');
186
-
187
- // Fit only work if the map has a size.
188
- if (this.map.getSize() && extent) {
189
- this.map.getView().fit(extent);
190
- }
191
-
192
- this.setLayers(layers);
193
- this.listenMoveEnd();
194
- this.listenSingleClick();
195
- this.listenPointerMove();
196
- }
197
-
198
- componentDidUpdate(prevProps, prevState) {
199
- const {
200
- animationOptions,
201
- center,
202
- extent,
203
- fitOptions,
204
- layers,
205
- resolution,
206
- viewOptions,
207
- zoom,
208
- onMapMoved,
209
- onFeaturesClick,
210
- onFeaturesHover,
211
- } = this.props;
212
- const { node } = this.state;
213
-
214
- if (prevState.node !== node) {
215
- this.map.setTarget(node);
216
-
217
- // When the node is set we reinitialize the extent with the extent property.
218
- if (!prevState.node && node && extent) {
219
- this.map.getView().fit(extent);
220
- }
221
- }
222
-
223
- if (prevProps.layers !== layers) {
224
- this.setLayers(layers, prevProps.layers);
225
- }
226
-
227
- // Creates a new view if necessary before updating the others prop.
228
- if (
229
- viewOptions &&
230
- JSON.stringify(viewOptions) !== JSON.stringify(prevProps.viewOptions)
231
- ) {
232
- // Re-create a view, ol doesn't provide any method to setExtent of view.
233
- this.map.setView(
234
- new View({
235
- ...viewOptions,
236
- center,
237
- resolution,
238
- zoom,
239
- }),
240
- );
241
- }
242
-
243
- const view = this.map.getView();
244
-
245
- if (animationOptions && prevProps.animationOptions !== animationOptions) {
246
- view.animate(animationOptions);
247
- }
248
-
249
- if (prevProps.center !== center) {
250
- view.setCenter(center);
251
- }
252
-
253
- if (zoom !== prevProps.zoom) {
254
- view.setZoom(zoom);
255
- }
256
-
257
- if (resolution !== prevProps.resolution) {
258
- view.setResolution(resolution);
259
- }
260
-
261
- if (extent && !equals(extent, prevProps.extent || [])) {
262
- view.fit(extent, fitOptions);
263
- }
264
-
265
- if (onMapMoved !== prevProps.onMapMoved) {
266
- this.listenMoveEnd();
267
- }
268
-
269
- if (onFeaturesClick !== prevProps.onFeaturesClick) {
270
- this.listenSingleClick();
271
- }
272
-
273
- if (onFeaturesHover !== prevProps.onFeaturesHover) {
274
- this.listenPointerMove();
275
- }
276
- }
277
-
278
- componentWillUnmount() {
279
- unByKey([this.moveEndRef, this.singleClickRef, this.pointerMoveRef]);
280
- }
281
-
282
- setNode(node) {
283
- this.setState({ node });
284
- }
285
-
286
- setLayers(layers = [], prevLayers = []) {
287
- for (let i = 0; i < prevLayers.length; i += 1) {
288
- this.terminateLayer(prevLayers[i]);
289
- }
290
- for (let i = 0; i < layers.length; i += 1) {
291
- this.initLayer(layers[i]);
292
- }
293
- this.layers = layers;
294
- }
295
-
296
- initLayer(layer) {
297
- if (layer.attachToMap) {
298
- layer.attachToMap(this.map);
299
- }
300
-
301
- if (layer.init) {
302
- layer.init(this.map);
303
- }
304
-
305
- if (
306
- layer.olLayer &&
307
- this.map.getLayers() &&
308
- !this.map.getLayers().getArray().includes(layer.olLayer)
309
- ) {
310
- this.map.addLayer(layer.olLayer);
311
- }
312
- const layers = layer.children || [];
313
- for (let i = 0; i < layers.length; i += 1) {
314
- this.initLayer(layers[i]);
315
- }
316
- }
317
-
318
- terminateLayer(layer) {
319
- const layers = layer.children || [];
320
- for (let i = 0; i < layers.length; i += 1) {
321
- this.terminateLayer(layers[i]);
322
- }
323
-
324
- if (
325
- layer.olLayer &&
326
- this.map.getLayers() &&
327
- this.map.getLayers().getArray().includes(layer.olLayer)
328
- ) {
329
- this.map.removeLayer(layer.olLayer);
330
- }
331
-
332
- if (layer.terminate) {
333
- layer.terminate(this.map);
334
- }
335
-
336
- if (layer.detachFromMap) {
337
- layer.detachFromMap(this.map);
338
- }
339
- }
340
-
341
- listenMoveEnd() {
342
- const { onMapMoved } = this.props;
343
- unByKey(this.moveEndRef);
344
-
345
- if (!onMapMoved) {
346
- return;
347
- }
348
-
349
- this.moveEndRef = this.map.on('moveend', (evt) => {
350
- return onMapMoved(evt);
351
- });
352
- }
353
-
354
- listenSingleClick() {
355
- const { onFeaturesClick, featuresClickOptions } = this.props;
356
- unByKey(this.singleClickRef);
357
-
358
- if (!onFeaturesClick) {
359
- return;
360
- }
361
-
362
- this.singleClickRef = this.map.on('singleclick', (evt) => {
363
- const features = evt.map.getFeaturesAtPixel(
364
- evt.pixel,
365
- featuresClickOptions,
366
- );
367
- onFeaturesClick(features || [], evt);
368
- });
369
- }
370
-
371
- listenPointerMove() {
372
- const { onFeaturesHover } = this.props;
373
- unByKey(this.pointerMoveRef);
374
-
375
- if (!onFeaturesHover) {
376
- return;
377
- }
378
-
379
- this.pointerMoveRef = this.map.on('pointermove', (evt) => {
380
- const features = evt.map.getFeaturesAtPixel(evt.pixel);
381
- onFeaturesHover(features || [], evt);
382
- });
383
- }
384
-
385
- render() {
386
- const { className, tabIndex, ariaLabel, style } = this.props;
387
- const { node } = this.state;
388
- return (
389
- <div
390
- className={className}
391
- ref={this.setNode}
392
- role="presentation"
393
- aria-label={ariaLabel}
394
- tabIndex={tabIndex}
395
- style={style}
396
- >
397
- <ResizeHandler
398
- maxHeightBrkpts={null}
399
- maxWidthBrkpts={null}
400
- observe={node}
401
- onResize={() => {
402
- this.map.updateSize();
403
- }}
404
- />
405
- </div>
406
- );
407
- }
408
- }
409
-
410
- BasicMap.propTypes = propTypes;
411
- BasicMap.defaultProps = defaultProps;
412
-
413
- export default BasicMap;
@@ -1,281 +0,0 @@
1
- import 'jest-canvas-mock';
2
- import proj4 from 'proj4';
3
- import { register } from 'ol/proj/proj4';
4
- import React from 'react';
5
- import ResizeObserver from 'resize-observer-polyfill';
6
- import { Layer } from 'mobility-toolbox-js/ol';
7
- import MapEvent from 'ol/MapEvent';
8
- import OLLayer from 'ol/layer/Vector';
9
- import OLMap from 'ol/Map';
10
- import OLView from 'ol/View';
11
- import { render } from '@testing-library/react';
12
- import BasicMap from './BasicMap';
13
-
14
- proj4.defs(
15
- 'EPSG:21781',
16
- '+proj=somerc +lat_0=46.95240555555556 ' +
17
- '+lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel ' +
18
- '+towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs',
19
- );
20
-
21
- register(proj4);
22
-
23
- const extent = [0, 0, 1000, 1000];
24
- const olLayers = [
25
- new Layer({
26
- name: 'foo',
27
- olLayer: new OLLayer({}),
28
- visible: true,
29
- }),
30
- ];
31
-
32
- describe('BasicMap', () => {
33
- let olMap;
34
- beforeEach(() => {
35
- const olView = new OLView();
36
- olMap = new OLMap({ view: olView });
37
- });
38
-
39
- test('should be rendered', () => {
40
- const setTarget = jest.spyOn(olMap, 'setTarget');
41
- render(<BasicMap map={olMap} />);
42
- expect(setTarget).toHaveBeenCalled();
43
- });
44
-
45
- test('should be rendered with touchAction to none', () => {
46
- render(<BasicMap map={olMap} />);
47
- expect(olMap.getViewport().style.touchAction).toBe('none');
48
- expect(olMap.getViewport().style.msTouchAction).toBe('none');
49
- expect(olMap.getViewport().getAttribute('touch-action')).toBe('none');
50
- });
51
-
52
- test('uses onMapMoved function', () => {
53
- const spy = jest.fn(() => {});
54
- const spy2 = jest.fn();
55
- const evt = new MapEvent('moveend', olMap);
56
-
57
- // Test componentDidMount
58
- const { rerender } = render(<BasicMap map={olMap} onMapMoved={spy} />);
59
- olMap.dispatchEvent(evt);
60
- expect(spy).toHaveBeenCalledTimes(1);
61
- expect(spy).toHaveBeenCalledWith(evt);
62
-
63
- // Test componentDidUpdate
64
- rerender(<BasicMap map={olMap} onMapMoved={spy2} />);
65
- olMap.dispatchEvent(evt);
66
- expect(spy).toHaveBeenCalledTimes(1);
67
- expect(spy2).toHaveBeenCalledTimes(1);
68
- expect(spy2).toHaveBeenCalledWith(evt);
69
-
70
- // Test componentDidUpdate
71
- rerender(<BasicMap map={olMap} onMapMoved={null} />);
72
- olMap.dispatchEvent(evt);
73
- expect(spy).toHaveBeenCalledTimes(1);
74
- expect(spy2).toHaveBeenCalledTimes(1);
75
- });
76
-
77
- test('uses onFeaturesClick function', () => {
78
- const spy = jest.fn();
79
- const spy2 = jest.fn();
80
- const evt = new MapEvent('singleclick', olMap);
81
-
82
- // Test componentDidMount
83
- const { rerender } = render(<BasicMap map={olMap} onFeaturesClick={spy} />);
84
- olMap.dispatchEvent(evt);
85
- expect(spy).toHaveBeenCalledTimes(1);
86
- expect(spy).toHaveBeenCalledWith([], evt);
87
-
88
- // Test componentDidUpdate
89
- rerender(<BasicMap map={olMap} onFeaturesClick={spy2} />);
90
- olMap.dispatchEvent(evt);
91
- expect(spy).toHaveBeenCalledTimes(1);
92
- expect(spy2).toHaveBeenCalledTimes(1);
93
- expect(spy2).toHaveBeenCalledWith([], evt);
94
-
95
- // Test componentDidUpdate
96
- rerender(<BasicMap map={olMap} onFeaturesClick={null} />);
97
- olMap.dispatchEvent(evt);
98
- expect(spy).toHaveBeenCalledTimes(1);
99
- expect(spy2).toHaveBeenCalledTimes(1);
100
- });
101
-
102
- test('uses onFeaturesHover function', () => {
103
- const spy = jest.fn();
104
- const spy2 = jest.fn();
105
- const evt = new MapEvent('pointermove', olMap);
106
-
107
- // Test componentDidMount
108
- const { rerender } = render(
109
- <BasicMap map={olMap} onFeaturesHover={spy} />,
110
- {
111
- lifecycleExperimental: true,
112
- },
113
- );
114
- olMap.dispatchEvent(evt);
115
- expect(spy).toHaveBeenCalledTimes(1);
116
- expect(spy).toHaveBeenCalledWith([], evt);
117
-
118
- // Test componentDidUpdate
119
- rerender(<BasicMap map={olMap} onFeaturesHover={spy2} />);
120
- olMap.dispatchEvent(evt);
121
- expect(spy).toHaveBeenCalledTimes(1);
122
- expect(spy2).toHaveBeenCalledTimes(1);
123
- expect(spy2).toHaveBeenCalledWith([], evt);
124
-
125
- // Test componentDidUpdate
126
- rerender(<BasicMap map={olMap} onFeaturesHover={null} />);
127
- olMap.dispatchEvent(evt);
128
- expect(spy).toHaveBeenCalledTimes(1);
129
- expect(spy2).toHaveBeenCalledTimes(1);
130
- });
131
-
132
- test('should be rendered with a default map', () => {
133
- const { container } = render(<BasicMap />);
134
- expect(!!container.querySelector('.ol-viewport')).toBe(true);
135
- });
136
-
137
- test('should be rendered with layers and an extent', () => {
138
- render(
139
- <BasicMap
140
- map={olMap}
141
- layers={olLayers}
142
- extent={extent}
143
- viewOptions={{
144
- minZoom: 16,
145
- maxZoom: 22,
146
- projection: 'EPSG:21781',
147
- }}
148
- />,
149
- );
150
- expect(olMap.getLayers().getLength()).toBe(1);
151
- expect(olMap.getView().calculateExtent()).toEqual([
152
- 380.70084231351245, 380.70084231351245, 619.2991576864875,
153
- 619.2991576864875,
154
- ]);
155
- });
156
-
157
- test('center shoud be set', () => {
158
- const { rerender } = render(<BasicMap map={olMap} />);
159
- const setCenter = jest.spyOn(olMap.getView(), 'setCenter');
160
- rerender(<BasicMap map={olMap} center={[0, 0]} />);
161
- expect(setCenter).toHaveBeenCalled();
162
- });
163
-
164
- test('zoom shoud be set', () => {
165
- const { rerender } = render(<BasicMap map={olMap} zoom={5} />);
166
- expect(olMap.getView().getZoom()).toBe(5);
167
- rerender(<BasicMap map={olMap} zoom={2} />);
168
- expect(olMap.getView().getZoom()).toBe(2);
169
- });
170
-
171
- test('resolution shoud be set', () => {
172
- const { rerender } = render(<BasicMap map={olMap} resolution={100} />);
173
- expect(olMap.getView().getResolution()).toBe(100);
174
- rerender(<BasicMap map={olMap} resolution={5} />);
175
- expect(olMap.getView().getResolution()).toBe(5);
176
- });
177
-
178
- test('animation shoud be set', () => {
179
- const obj = {
180
- zoom: 4,
181
- };
182
- const { rerender } = render(<BasicMap map={olMap} />);
183
- const spy = jest.spyOn(olMap.getView(), 'animate');
184
- rerender(<BasicMap map={olMap} animationOptions={obj} />);
185
- expect(spy).toHaveBeenCalledWith(obj);
186
- });
187
-
188
- test('layers shoud be updated', () => {
189
- const addLayer = jest.spyOn(olMap, 'addLayer');
190
- const { rerender } = render(<BasicMap map={olMap} />);
191
- const layer = new Layer({ name: 'test', olLayer: new OLLayer() });
192
- rerender(<BasicMap map={olMap} layers={[layer]} />);
193
- expect(addLayer).toHaveBeenCalled();
194
- });
195
-
196
- test('should be fitted if extent is updated', () => {
197
- const fitExtent = jest.spyOn(OLView.prototype, 'fit');
198
- const { rerender } = render(<BasicMap map={olMap} />);
199
- rerender(<BasicMap map={olMap} extent={[1, 2, 3, 4]} />);
200
- expect(fitExtent).toHaveBeenCalled();
201
- });
202
-
203
- test('should be zoomed if zoom is updated', () => {
204
- const setZoom = jest.spyOn(OLView.prototype, 'setZoom');
205
- const { rerender } = render(<BasicMap map={olMap} />);
206
- rerender(<BasicMap map={olMap} zoom={15} />);
207
- expect(setZoom).toHaveBeenCalledWith(15);
208
- });
209
-
210
- test('should be observed by ResizeHandler', () => {
211
- const spy = jest.spyOn(ResizeObserver.prototype, 'observe');
212
- render(<BasicMap map={olMap} />);
213
- expect(spy).toHaveBeenCalledWith(olMap.getTargetElement());
214
- expect(spy).toHaveBeenCalledTimes(1);
215
- });
216
-
217
- test('size is updated when div is resized', () => {
218
- const spy = jest.spyOn(olMap, 'updateSize');
219
- render(<BasicMap map={olMap} />);
220
- expect(spy).toHaveBeenCalledTimes(2);
221
- // The mock class set the onResize property, we just have to run it to
222
- // simulate a resize
223
- ResizeObserver.onResize([
224
- {
225
- target: olMap.getTargetElement(),
226
- contentRect: {
227
- width: 20,
228
- height: 20,
229
- },
230
- },
231
- ]);
232
- expect(spy).toHaveBeenCalledTimes(3);
233
- });
234
-
235
- describe('#setLayers()', () => {
236
- test('init all layers and terminate al previous layer.', () => {
237
- const layer0 = new Layer({ key: 'test1' });
238
- const spyInit0 = jest.spyOn(layer0, 'attachToMap');
239
- const spyTerminate0 = jest.spyOn(layer0, 'detachFromMap');
240
- const layer1 = new Layer({ key: 'test1' });
241
- const spyInit1 = jest.spyOn(layer1, 'attachToMap');
242
- const spyTerminate1 = jest.spyOn(layer1, 'detachFromMap');
243
- const layer2 = new Layer({ key: 'test2' });
244
- const spyInit2 = jest.spyOn(layer2, 'attachToMap');
245
- const spyTerminate2 = jest.spyOn(layer2, 'detachFromMap');
246
- const layer3 = new Layer({ key: 'test3' });
247
- const spyInit3 = jest.spyOn(layer3, 'attachToMap');
248
- const spyTerminate3 = jest.spyOn(layer3, 'detachFromMap');
249
- const layer4 = new Layer({ key: 'test4' });
250
- const spyInit4 = jest.spyOn(layer4, 'attachToMap');
251
- const spyTerminate4 = jest.spyOn(layer4, 'detachFromMap');
252
- const startLayers = [layer1, layer3];
253
- const { rerender } = render(
254
- <BasicMap map={olMap} layers={startLayers} />,
255
- );
256
- expect(spyInit0).toHaveBeenCalledTimes(0);
257
- expect(spyInit1).toHaveBeenCalledTimes(1);
258
- expect(spyInit2).toHaveBeenCalledTimes(0);
259
- expect(spyInit3).toHaveBeenCalledTimes(1);
260
- expect(spyInit4).toHaveBeenCalledTimes(0);
261
- expect(spyTerminate0).toHaveBeenCalledTimes(0);
262
- expect(spyTerminate1).toHaveBeenCalledTimes(1);
263
- expect(spyTerminate2).toHaveBeenCalledTimes(0);
264
- expect(spyTerminate3).toHaveBeenCalledTimes(1);
265
- expect(spyTerminate4).toHaveBeenCalledTimes(0);
266
-
267
- const layers = [layer0, layer2, layer3, layer4];
268
- rerender(<BasicMap map={olMap} layers={layers} />);
269
- expect(spyInit0).toHaveBeenCalledTimes(1);
270
- expect(spyInit1).toHaveBeenCalledTimes(1);
271
- expect(spyInit2).toHaveBeenCalledTimes(1);
272
- expect(spyInit3).toHaveBeenCalledTimes(2);
273
- expect(spyInit4).toHaveBeenCalledTimes(1);
274
- expect(spyTerminate0).toHaveBeenCalledTimes(1);
275
- expect(spyTerminate1).toHaveBeenCalledTimes(2);
276
- expect(spyTerminate2).toHaveBeenCalledTimes(1);
277
- expect(spyTerminate3).toHaveBeenCalledTimes(3);
278
- expect(spyTerminate4).toHaveBeenCalledTimes(1);
279
- });
280
- });
281
- });
@@ -1,18 +0,0 @@
1
-
2
- The following example demonstrates the use of BasicMap.
3
-
4
- ```jsx
5
- import React from 'react';
6
- import { MapboxLayer } from 'mobility-toolbox-js/ol';
7
- import Tile from 'ol/layer/Tile';
8
- import OSM from 'ol/source/OSM';
9
- import BasicMap from 'react-spatial/components/BasicMap';
10
-
11
- const layers = [
12
- new MapboxLayer({
13
- url: `https://maps.geops.io/styles/travic_v2/style.json?key=${apiKey}`,
14
- })
15
- ];
16
-
17
- <BasicMap layers={layers} tabIndex={0} />;
18
- ```
@@ -1 +0,0 @@
1
- export { default } from './BasicMap';