react-spatial 1.5.2 → 1.5.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 (295) hide show
  1. package/.github/workflows/conventional-pr-title.yml +21 -0
  2. package/.github/workflows/main.yml +28 -0
  3. package/.husky/commit-msg +4 -0
  4. package/.husky/post-checkout +4 -0
  5. package/.husky/post-merge +4 -0
  6. package/.husky/post-rebase +4 -0
  7. package/.husky/pre-commit +4 -0
  8. package/.nvmrc +1 -0
  9. package/.whitesource +8 -0
  10. package/CHANGELOG.md +65 -0
  11. package/DEVELOP.md +113 -0
  12. package/__mocks__/mapbox-gl.js +11 -0
  13. package/__mocks__/resize-observer-polyfill.js +9 -0
  14. package/babel.config.js +3 -0
  15. package/commitlint.config.js +1 -0
  16. package/data/topic1.js +119 -0
  17. package/data/topic2.js +28 -0
  18. package/doc/README.md +21 -0
  19. package/doc/doc-config.json +4 -0
  20. package/package.json +4 -3
  21. package/pull_request_template.md +16 -0
  22. package/renovate.json +4 -0
  23. package/scripts/read-pkg-json.js +17 -0
  24. package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.js +322 -0
  25. package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +69 -0
  26. package/src/components/BaseLayerSwitcher/README.md +61 -0
  27. package/src/components/BaseLayerSwitcher/__snapshots__/BaseLayerSwitcher.test.js.snap +88 -0
  28. package/src/components/BaseLayerSwitcher/index.js +1 -0
  29. package/src/components/BasicMap/BasicMap.js +413 -0
  30. package/src/components/BasicMap/BasicMap.test.js +281 -0
  31. package/src/components/BasicMap/README.md +18 -0
  32. package/src/components/BasicMap/index.js +1 -0
  33. package/{components → src/components}/CanvasSaveButton/CanvasSaveButton.js +320 -93
  34. package/src/components/CanvasSaveButton/CanvasSaveButton.test.js +148 -0
  35. package/src/components/CanvasSaveButton/README.md +76 -0
  36. package/src/components/CanvasSaveButton/__snapshots__/CanvasSaveButton.test.js.snap +76 -0
  37. package/src/components/CanvasSaveButton/index.js +1 -0
  38. package/src/components/Copyright/Copyright.js +89 -0
  39. package/src/components/Copyright/Copyright.test.js +134 -0
  40. package/src/components/Copyright/README.md +36 -0
  41. package/src/components/Copyright/index.js +1 -0
  42. package/src/components/FeatureExportButton/FeatureExportButton.js +118 -0
  43. package/src/components/FeatureExportButton/FeatureExportButton.test.js +417 -0
  44. package/src/components/FeatureExportButton/README.md +76 -0
  45. package/src/components/FeatureExportButton/__snapshots__/FeatureExportButton.test.js.snap +67 -0
  46. package/src/components/FeatureExportButton/index.js +1 -0
  47. package/src/components/FitExtent/FitExtent.js +62 -0
  48. package/src/components/FitExtent/FitExtent.test.js +48 -0
  49. package/src/components/FitExtent/README.md +34 -0
  50. package/src/components/FitExtent/__snapshots__/FitExtent.test.js.snap +13 -0
  51. package/src/components/FitExtent/index.js +1 -0
  52. package/{components → src/components}/Geolocation/Geolocation.js +144 -61
  53. package/src/components/Geolocation/Geolocation.test.js +267 -0
  54. package/src/components/Geolocation/README.md +25 -0
  55. package/src/components/Geolocation/__snapshots__/Geolocation.test.js.snap +92 -0
  56. package/src/components/Geolocation/index.js +1 -0
  57. package/src/components/LayerTree/LayerTree.js +487 -0
  58. package/src/components/LayerTree/LayerTree.test.js +337 -0
  59. package/src/components/LayerTree/README.md +92 -0
  60. package/src/components/LayerTree/__snapshots__/LayerTree.test.js.snap +1746 -0
  61. package/src/components/LayerTree/index.js +1 -0
  62. package/src/components/MousePosition/MousePosition.js +175 -0
  63. package/src/components/MousePosition/MousePosition.test.js +132 -0
  64. package/src/components/MousePosition/README.md +50 -0
  65. package/src/components/MousePosition/__snapshots__/MousePosition.test.js.snap +76 -0
  66. package/src/components/MousePosition/index.js +1 -0
  67. package/src/components/NorthArrow/NorthArrow.js +75 -0
  68. package/src/components/NorthArrow/NorthArrow.test.js +104 -0
  69. package/src/components/NorthArrow/README.md +59 -0
  70. package/src/components/NorthArrow/__snapshots__/NorthArrow.test.js.snap +117 -0
  71. package/src/components/NorthArrow/index.js +1 -0
  72. package/src/components/Overlay/Overlay.js +176 -0
  73. package/src/components/Overlay/Overlay.test.js +149 -0
  74. package/src/components/Overlay/README.md +59 -0
  75. package/src/components/Overlay/__snapshots__/Overlay.test.js.snap +9 -0
  76. package/src/components/Overlay/index.js +1 -0
  77. package/src/components/Permalink/Permalink.js +326 -0
  78. package/src/components/Permalink/Permalink.test.js +285 -0
  79. package/src/components/Permalink/README.md +105 -0
  80. package/src/components/Permalink/index.js +1 -0
  81. package/{components → src/components}/Popup/Popup.js +165 -55
  82. package/src/components/Popup/Popup.test.js +307 -0
  83. package/src/components/Popup/README.md +93 -0
  84. package/src/components/Popup/__snapshots__/Popup.test.js.snap +180 -0
  85. package/src/components/Popup/index.js +1 -0
  86. package/src/components/README.md +41 -0
  87. package/{components → src/components}/ResizeHandler/ResizeHandler.js +50 -15
  88. package/src/components/ResizeHandler/ResizeHandler.test.js +344 -0
  89. package/src/components/ResizeHandler/index.js +1 -0
  90. package/src/components/RouteSchedule/README.md +118 -0
  91. package/src/components/RouteSchedule/RouteSchedule.js +370 -0
  92. package/src/components/RouteSchedule/RouteSchedule.test.js +113 -0
  93. package/src/components/RouteSchedule/__snapshots__/RouteSchedule.test.js.snap +248 -0
  94. package/src/components/RouteSchedule/index.js +1 -0
  95. package/src/components/ScaleLine/README.md +29 -0
  96. package/src/components/ScaleLine/ScaleLine.js +50 -0
  97. package/src/components/ScaleLine/ScaleLine.test.js +30 -0
  98. package/src/components/ScaleLine/__snapshots__/ScaleLine.test.js.snap +7 -0
  99. package/src/components/ScaleLine/index.js +1 -0
  100. package/src/components/StopsFinder/README.md +50 -0
  101. package/src/components/StopsFinder/StopsFinder.js +284 -0
  102. package/src/components/StopsFinder/StopsFinder.test.js +17 -0
  103. package/src/components/StopsFinder/StopsFinderOption.js +61 -0
  104. package/src/components/StopsFinder/__snapshots__/StopsFinder.test.js.snap +133 -0
  105. package/src/components/StopsFinder/index.js +1 -0
  106. package/src/components/Zoom/README.md +25 -0
  107. package/src/components/Zoom/Zoom.js +180 -0
  108. package/src/components/Zoom/Zoom.test.js +141 -0
  109. package/src/components/Zoom/__snapshots__/Zoom.test.js.snap +201 -0
  110. package/src/components/Zoom/index.js +1 -0
  111. package/{propTypes.js → src/propTypes.js} +16 -12
  112. package/{setupTests.js → src/setupTests.js} +1 -1
  113. package/src/styleguidist/ComponentsList.js +52 -0
  114. package/src/styleguidist/StyleGuide.js +277 -0
  115. package/src/styleguidist/styleguidist.css +38 -0
  116. package/src/utils/GlobalsForOle.js +99 -0
  117. package/src/utils/KML.js +594 -0
  118. package/src/utils/KML.test.js +337 -0
  119. package/src/utils/KMLFormat.js +100 -0
  120. package/src/utils/KMLFormat.test.js +50 -0
  121. package/{utils → src/utils}/Styles.js +20 -14
  122. 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
  123. package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-2-(cross)-color-and-(light-blue)-opacity.canvas-image.png +0 -0
  124. 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
  125. 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
  126. package/{utils → src/utils}/getPolygonPattern.js +34 -6
  127. package/src/utils/getPolygonPattern.test.js +61 -0
  128. package/src/utils/timeUtils.js +52 -0
  129. package/src/utils/timeUtils.test.js +30 -0
  130. package/styleguide.config.js +251 -0
  131. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +0 -231
  132. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +0 -7
  133. package/components/BaseLayerSwitcher/index.js +0 -1
  134. package/components/BaseLayerSwitcher/index.js.map +0 -7
  135. package/components/BasicMap/BasicMap.js +0 -278
  136. package/components/BasicMap/BasicMap.js.map +0 -7
  137. package/components/BasicMap/index.js +0 -1
  138. package/components/BasicMap/index.js.map +0 -7
  139. package/components/CanvasSaveButton/CanvasSaveButton.js.map +0 -7
  140. package/components/CanvasSaveButton/index.js +0 -1
  141. package/components/CanvasSaveButton/index.js.map +0 -7
  142. package/components/Copyright/Copyright.js +0 -55
  143. package/components/Copyright/Copyright.js.map +0 -7
  144. package/components/Copyright/index.js +0 -1
  145. package/components/Copyright/index.js.map +0 -7
  146. package/components/FeatureExportButton/FeatureExportButton.js +0 -62
  147. package/components/FeatureExportButton/FeatureExportButton.js.map +0 -7
  148. package/components/FeatureExportButton/index.js +0 -1
  149. package/components/FeatureExportButton/index.js.map +0 -7
  150. package/components/FitExtent/FitExtent.js +0 -32
  151. package/components/FitExtent/FitExtent.js.map +0 -7
  152. package/components/FitExtent/index.js +0 -1
  153. package/components/FitExtent/index.js.map +0 -7
  154. package/components/Geolocation/Geolocation.js.map +0 -7
  155. package/components/Geolocation/index.js +0 -1
  156. package/components/Geolocation/index.js.map +0 -7
  157. package/components/LayerTree/LayerTree.js +0 -278
  158. package/components/LayerTree/LayerTree.js.map +0 -7
  159. package/components/LayerTree/index.js +0 -1
  160. package/components/LayerTree/index.js.map +0 -7
  161. package/components/MousePosition/MousePosition.js +0 -110
  162. package/components/MousePosition/MousePosition.js.map +0 -7
  163. package/components/MousePosition/index.js +0 -1
  164. package/components/MousePosition/index.js.map +0 -7
  165. package/components/NorthArrow/NorthArrow.js +0 -43
  166. package/components/NorthArrow/NorthArrow.js.map +0 -7
  167. package/components/NorthArrow/index.js +0 -1
  168. package/components/NorthArrow/index.js.map +0 -7
  169. package/components/Overlay/Overlay.js +0 -122
  170. package/components/Overlay/Overlay.js.map +0 -7
  171. package/components/Overlay/index.js +0 -1
  172. package/components/Overlay/index.js.map +0 -7
  173. package/components/Permalink/Permalink.js +0 -206
  174. package/components/Permalink/Permalink.js.map +0 -7
  175. package/components/Permalink/index.js +0 -1
  176. package/components/Permalink/index.js.map +0 -7
  177. package/components/Popup/Popup.js.map +0 -7
  178. package/components/Popup/index.js +0 -1
  179. package/components/Popup/index.js.map +0 -7
  180. package/components/ResizeHandler/ResizeHandler.js.map +0 -7
  181. package/components/ResizeHandler/index.js +0 -1
  182. package/components/ResizeHandler/index.js.map +0 -7
  183. package/components/RouteSchedule/RouteSchedule.js +0 -220
  184. package/components/RouteSchedule/RouteSchedule.js.map +0 -7
  185. package/components/RouteSchedule/index.js +0 -1
  186. package/components/RouteSchedule/index.js.map +0 -7
  187. package/components/ScaleLine/ScaleLine.js +0 -32
  188. package/components/ScaleLine/ScaleLine.js.map +0 -7
  189. package/components/ScaleLine/index.js +0 -1
  190. package/components/ScaleLine/index.js.map +0 -7
  191. package/components/StopsFinder/StopsFinder.js +0 -210
  192. package/components/StopsFinder/StopsFinder.js.map +0 -7
  193. package/components/StopsFinder/StopsFinderOption.js +0 -51
  194. package/components/StopsFinder/StopsFinderOption.js.map +0 -7
  195. package/components/StopsFinder/index.js +0 -1
  196. package/components/StopsFinder/index.js.map +0 -7
  197. package/components/Zoom/Zoom.js +0 -130
  198. package/components/Zoom/Zoom.js.map +0 -7
  199. package/components/Zoom/index.js +0 -1
  200. package/components/Zoom/index.js.map +0 -7
  201. package/propTypes.js.map +0 -7
  202. package/setupTests.js.map +0 -7
  203. package/utils/GlobalsForOle.js +0 -94
  204. package/utils/GlobalsForOle.js.map +0 -7
  205. package/utils/KML.js +0 -412
  206. package/utils/KML.js.map +0 -7
  207. package/utils/KMLFormat.js +0 -69
  208. package/utils/KMLFormat.js.map +0 -7
  209. package/utils/Styles.js.map +0 -7
  210. package/utils/getPolygonPattern.js.map +0 -7
  211. package/utils/timeUtils.js +0 -31
  212. package/utils/timeUtils.js.map +0 -7
  213. /package/{components → src/components}/BaseLayerSwitcher/BaseLayerSwitcher.md.scss +0 -0
  214. /package/{components → src/components}/BaseLayerSwitcher/BaseLayerSwitcher.scss +0 -0
  215. /package/{components → src/components}/BasicMap/BasicMap.md.scss +0 -0
  216. /package/{components → src/components}/CanvasSaveButton/CanvasSaveButton.md.scss +0 -0
  217. /package/{components → src/components}/Copyright/Copyright.md.scss +0 -0
  218. /package/{components → src/components}/FeatureExportButton/FeatureExportButton.md.scss +0 -0
  219. /package/{components → src/components}/FitExtent/FitExtent.md.scss +0 -0
  220. /package/{components → src/components}/Geolocation/Geolocation.md.scss +0 -0
  221. /package/{components → src/components}/Geolocation/Geolocation.scss +0 -0
  222. /package/{components → src/components}/LayerTree/LayerTree.md.scss +0 -0
  223. /package/{components → src/components}/LayerTree/LayerTree.scss +0 -0
  224. /package/{components → src/components}/MousePosition/MousePosition.md.scss +0 -0
  225. /package/{components → src/components}/NorthArrow/NorthArrow.scss +0 -0
  226. /package/{components → src/components}/Overlay/Overlay.md.scss +0 -0
  227. /package/{components → src/components}/Overlay/Overlay.scss +0 -0
  228. /package/{components → src/components}/Permalink/Permalink.md.scss +0 -0
  229. /package/{components → src/components}/Popup/Popup.md.scss +0 -0
  230. /package/{components → src/components}/Popup/Popup.scss +0 -0
  231. /package/{components → src/components}/RouteSchedule/RouteSchedule.md.scss +0 -0
  232. /package/{components → src/components}/RouteSchedule/RouteSchedule.scss +0 -0
  233. /package/{components → src/components}/ScaleLine/ScaleLine.scss +0 -0
  234. /package/{components → src/components}/Zoom/Zoom.md.scss +0 -0
  235. /package/{components → src/components}/Zoom/Zoom.scss +0 -0
  236. /package/{images → src/images}/RouteSchedule/firstStation.png +0 -0
  237. /package/{images → src/images}/RouteSchedule/lastStation.png +0 -0
  238. /package/{images → src/images}/RouteSchedule/line.png +0 -0
  239. /package/{images → src/images}/RouteSchedule/station.png +0 -0
  240. /package/{images → src/images}/baselayer/baselayer.basebright.png +0 -0
  241. /package/{images → src/images}/baselayer/baselayer.osm.png +0 -0
  242. /package/{images → src/images}/baselayer/baselayer.travic.png +0 -0
  243. /package/{images → src/images}/baselayer/open.topo.map.png +0 -0
  244. /package/{images → src/images}/baselayer/osm.baselayer.hot.png +0 -0
  245. /package/{images → src/images}/baselayer/osm.baselayer.png +0 -0
  246. /package/{images → src/images}/favicon.png +0 -0
  247. /package/{images → src/images}/geops_logo.png +0 -0
  248. /package/{images → src/images}/geops_logo.svg +0 -0
  249. /package/{images → src/images}/geops_qr.png +0 -0
  250. /package/{images → src/images}/mots/bus_poi-blue-01.svg +0 -0
  251. /package/{images → src/images}/mots/bus_poi-grey-01.svg +0 -0
  252. /package/{images → src/images}/mots/bus_round-blue-01.svg +0 -0
  253. /package/{images → src/images}/mots/bus_round-grey-01.svg +0 -0
  254. /package/{images → src/images}/mots/bus_square-blue-01.svg +0 -0
  255. /package/{images → src/images}/mots/bus_square-grey-01.svg +0 -0
  256. /package/{images → src/images}/mots/cable_car_poi-blue-01.svg +0 -0
  257. /package/{images → src/images}/mots/cable_car_poi-grey-01.svg +0 -0
  258. /package/{images → src/images}/mots/cable_car_round-blue-01.svg +0 -0
  259. /package/{images → src/images}/mots/cable_car_round-grey-01.svg +0 -0
  260. /package/{images → src/images}/mots/cable_car_square-blue-01.svg +0 -0
  261. /package/{images → src/images}/mots/cable_car_square-grey-01.svg +0 -0
  262. /package/{images → src/images}/mots/ferry_poi-blue-01.svg +0 -0
  263. /package/{images → src/images}/mots/ferry_poi-grey-01.svg +0 -0
  264. /package/{images → src/images}/mots/ferry_round-blue-01.svg +0 -0
  265. /package/{images → src/images}/mots/ferry_round-grey-01.svg +0 -0
  266. /package/{images → src/images}/mots/ferry_square-blue-01.svg +0 -0
  267. /package/{images → src/images}/mots/ferry_square-grey-01.svg +0 -0
  268. /package/{images → src/images}/mots/funicular_round-blue-01.svg +0 -0
  269. /package/{images → src/images}/mots/funicular_round-grey-01.svg +0 -0
  270. /package/{images → src/images}/mots/funicular_square-blue-01.svg +0 -0
  271. /package/{images → src/images}/mots/gondola_round-blue-01.svg +0 -0
  272. /package/{images → src/images}/mots/rail_poi-blue-01.svg +0 -0
  273. /package/{images → src/images}/mots/rail_poi-grey-01.svg +0 -0
  274. /package/{images → src/images}/mots/rail_round-blue-01.svg +0 -0
  275. /package/{images → src/images}/mots/rail_round-grey-01.svg +0 -0
  276. /package/{images → src/images}/mots/rail_square-blue-01.svg +0 -0
  277. /package/{images → src/images}/mots/rail_square-grey-01.svg +0 -0
  278. /package/{images → src/images}/mots/subway_round blue-01.svg +0 -0
  279. /package/{images → src/images}/mots/subway_round-blue-01.svg +0 -0
  280. /package/{images → src/images}/mots/tram_poi-blue-01.svg +0 -0
  281. /package/{images → src/images}/mots/tram_poi-grey-01.svg +0 -0
  282. /package/{images → src/images}/mots/tram_round-blue-01.svg +0 -0
  283. /package/{images → src/images}/mots/tram_round-grey-01.svg +0 -0
  284. /package/{images → src/images}/mots/tram_square-blue-01.svg +0 -0
  285. /package/{images → src/images}/mots/tram_square-grey-01.svg +0 -0
  286. /package/{images → src/images}/northArrow.svg +0 -0
  287. /package/{images → src/images}/northArrow.url.svg +0 -0
  288. /package/{images → src/images}/northArrowCircle.svg +0 -0
  289. /package/{images → src/images}/northArrowCircle.url.svg +0 -0
  290. /package/{themes → src/themes}/README.md +0 -0
  291. /package/{themes → src/themes}/default/components.scss +0 -0
  292. /package/{themes → src/themes}/default/examples.scss +0 -0
  293. /package/{themes → src/themes}/default/index.scss +0 -0
  294. /package/{themes → src/themes}/default/mixins.scss +0 -0
  295. /package/{themes → src/themes}/default/variables.scss +0 -0
@@ -0,0 +1,248 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`RouteSchedule matches snapshots. 1`] = `
4
+ <div
5
+ className="rt-route-schedule"
6
+ >
7
+ <div
8
+ className="rt-route-header"
9
+ >
10
+ <span
11
+ className="rt-route-icon"
12
+ style={
13
+ {
14
+ "backgroundColor": "#ffb400",
15
+ "color": "black",
16
+ }
17
+ }
18
+ >
19
+ 3
20
+ </span>
21
+ <div
22
+ className="rt-route-title"
23
+ >
24
+ <span
25
+ className="rt-route-name"
26
+ >
27
+ Station name
28
+ </span>
29
+ <span>
30
+ T 3
31
+ (3634)
32
+ </span>
33
+ </div>
34
+ <div
35
+ className="rt-route-buttons"
36
+ >
37
+ <div>
38
+ Button
39
+ </div>
40
+ </div>
41
+ </div>
42
+ <div
43
+ className="rt-route-body"
44
+ >
45
+ <div
46
+ className="rt-route-station"
47
+ onClick={[Function]}
48
+ onKeyPress={[Function]}
49
+ role="button"
50
+ tabIndex={0}
51
+ >
52
+ <div
53
+ className="rt-route-delay"
54
+ >
55
+ <span
56
+ className="rt-route-delay-departure green"
57
+ >
58
+ +1m
59
+ </span>
60
+ </div>
61
+ <div
62
+ className="rt-route-times"
63
+ >
64
+ <span
65
+ className="rt-route-time-arrival "
66
+ >
67
+ 09:01
68
+ </span>
69
+ <span
70
+ className="rt-route-time-departure "
71
+ >
72
+ 09:01
73
+ </span>
74
+ </div>
75
+ <img
76
+ alt="routeScheduleLine"
77
+ className="rt-route-icon"
78
+ src="src"
79
+ />
80
+ <div
81
+ className=""
82
+ >
83
+ first stop
84
+ </div>
85
+ </div>
86
+ <div
87
+ className="rt-route-station"
88
+ onClick={[Function]}
89
+ onKeyPress={[Function]}
90
+ role="button"
91
+ tabIndex={0}
92
+ >
93
+ <div
94
+ className="rt-route-delay"
95
+ >
96
+ <span
97
+ className="rt-route-delay-arrival green"
98
+ >
99
+ +0
100
+ </span>
101
+ <span
102
+ className="rt-route-delay-departure green"
103
+ >
104
+ +2m
105
+ </span>
106
+ </div>
107
+ <div
108
+ className="rt-route-times"
109
+ >
110
+ <span
111
+ className="rt-route-time-arrival "
112
+ >
113
+ 09:01
114
+ </span>
115
+ <span
116
+ className="rt-route-time-departure "
117
+ >
118
+ 09:01
119
+ </span>
120
+ </div>
121
+ <img
122
+ alt="routeScheduleLine"
123
+ className="rt-route-icon"
124
+ src="src"
125
+ />
126
+ <div
127
+ className=""
128
+ >
129
+ second stop
130
+ </div>
131
+ </div>
132
+ <div
133
+ className="rt-route-station rt-no-stop"
134
+ onClick={[Function]}
135
+ onKeyPress={[Function]}
136
+ role="button"
137
+ tabIndex={0}
138
+ >
139
+ <div
140
+ className="rt-route-delay"
141
+ >
142
+ <span
143
+ className="rt-route-delay-arrival green"
144
+ >
145
+ +0
146
+ </span>
147
+ <span
148
+ className="rt-route-delay-departure green"
149
+ >
150
+ +0
151
+ </span>
152
+ </div>
153
+ <div
154
+ className="rt-route-times"
155
+ >
156
+ <span
157
+ className="rt-route-time-arrival "
158
+ />
159
+ <span
160
+ className="rt-route-time-departure "
161
+ />
162
+ </div>
163
+ <img
164
+ alt="routeScheduleLine"
165
+ className="rt-route-icon"
166
+ src="src"
167
+ />
168
+ <div
169
+ className=""
170
+ >
171
+ no stop
172
+ </div>
173
+ </div>
174
+ <div
175
+ className="rt-route-station"
176
+ onClick={[Function]}
177
+ onKeyPress={[Function]}
178
+ role="button"
179
+ tabIndex={0}
180
+ >
181
+ <div
182
+ className="rt-route-delay"
183
+ >
184
+ <span
185
+ className="rt-route-delay-arrival orange"
186
+ >
187
+ +4m
188
+ </span>
189
+ </div>
190
+ <div
191
+ className="rt-route-times"
192
+ >
193
+ <span
194
+ className="rt-route-time-arrival "
195
+ >
196
+ 09:01
197
+ </span>
198
+ <span
199
+ className="rt-route-time-departure "
200
+ />
201
+ </div>
202
+ <img
203
+ alt="routeScheduleLine"
204
+ className="rt-route-icon"
205
+ src="src"
206
+ />
207
+ <div
208
+ className=""
209
+ >
210
+ third stop
211
+ </div>
212
+ </div>
213
+ </div>
214
+ <div
215
+ className="rt-route-footer"
216
+ >
217
+ <span
218
+ className="rt-route-copyright"
219
+ >
220
+ <div
221
+ className="rt-route-copyright-link"
222
+ >
223
+ <a
224
+ href="foo.ch"
225
+ rel="noreferrer"
226
+ target="_blank"
227
+ >
228
+ foo
229
+ </a>
230
+ </div>
231
+ <span>
232
+  - 
233
+ </span>
234
+ <div
235
+ className="rt-route-copyright-link"
236
+ >
237
+ <a
238
+ href="bar.ch"
239
+ rel="noreferrer"
240
+ target="_blank"
241
+ >
242
+ bar
243
+ </a>
244
+ </div>
245
+ </span>
246
+ </div>
247
+ </div>
248
+ `;
@@ -0,0 +1 @@
1
+ export { default } from './RouteSchedule';
@@ -0,0 +1,29 @@
1
+
2
+ The following example demonstrates the use of ScaleLine.
3
+
4
+ ```js
5
+ import React, { Component } 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 Map from 'ol/Map';
10
+ import BasicMap from 'react-spatial/components/BasicMap';
11
+ import ScaleLine from 'react-spatial/components/ScaleLine';
12
+
13
+ const map = new Map({ controls: [] });
14
+
15
+ const layers = [
16
+ new MapboxLayer({
17
+ url: `https://maps.geops.io/styles/travic_v2/style.json?key=${apiKey}`,
18
+ }),
19
+ ];
20
+
21
+ <div style={{position:'relative'}}>
22
+ <BasicMap
23
+ map={map}
24
+ layers={layers}
25
+ tabIndex={0}
26
+ />
27
+ <ScaleLine map={map} />
28
+ </div>
29
+ ```
@@ -0,0 +1,50 @@
1
+ import React, { useRef, useEffect } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import OLScaleLine from 'ol/control/ScaleLine';
4
+ import OLMap from 'ol/Map';
5
+
6
+ const propTypes = {
7
+ /**
8
+ * ol/map.
9
+ */
10
+ map: PropTypes.instanceOf(OLMap).isRequired,
11
+
12
+ /**
13
+ * Options for ol/control/ScaleLine.
14
+ * See https://openlayers.org/en/latest/apidoc/module-ol_control_ScaleLine-ScaleLine.html
15
+ */
16
+ options: PropTypes.object,
17
+ };
18
+
19
+ const defaultProps = {
20
+ options: {},
21
+ };
22
+
23
+ /**
24
+ * The ScaleLine component creates an
25
+ * [ol/control/ScaleLine](https://openlayers.org/en/latest/apidoc/module-ol_control_ScaleLine-ScaleLine.html)
26
+ * for an [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).
27
+ */
28
+ function ScaleLine({ map, options, ...other }) {
29
+ const ref = useRef();
30
+
31
+ useEffect(() => {
32
+ const control = new OLScaleLine({
33
+ ...options,
34
+ ...{ target: ref.current },
35
+ });
36
+
37
+ map.addControl(control);
38
+ return () => {
39
+ map.removeControl(control);
40
+ };
41
+ }, [map, options]);
42
+
43
+ // eslint-disable-next-line react/jsx-props-no-spreading
44
+ return <div className="rs-scale-line" ref={ref} {...other} />;
45
+ }
46
+
47
+ ScaleLine.propTypes = propTypes;
48
+ ScaleLine.defaultProps = defaultProps;
49
+
50
+ export default React.memo(ScaleLine);
@@ -0,0 +1,30 @@
1
+ import 'jest-canvas-mock';
2
+ import React from 'react';
3
+ import { configure, mount } from 'enzyme';
4
+ import OLMap from 'ol/Map';
5
+ import OLView from 'ol/View';
6
+ import Adapter from '@cfaester/enzyme-adapter-react-18';
7
+ import renderer from 'react-test-renderer';
8
+ import ScaleLine from './ScaleLine';
9
+
10
+ configure({ adapter: new Adapter() });
11
+
12
+ describe('ScaleLine', () => {
13
+ test('matches snapshot', () => {
14
+ const map = new OLMap({ view: new OLView({ zoom: 7, center: [0, 0] }) });
15
+ const component = renderer.create(<ScaleLine map={map} />);
16
+ const tree = component.toJSON();
17
+ expect(tree).toMatchSnapshot();
18
+ });
19
+
20
+ test('remove control on unmount.', () => {
21
+ const map = new OLMap({});
22
+ const spy = jest.spyOn(map, 'removeControl');
23
+ const spy2 = jest.spyOn(map, 'addControl');
24
+ const wrapper = mount(<ScaleLine map={map} />);
25
+ expect(spy).toHaveBeenCalledTimes(0);
26
+ wrapper.unmount();
27
+ expect(spy).toHaveBeenCalledTimes(1);
28
+ expect(spy.mock.calls[0][0]).toBe(spy2.mock.calls[0][0]);
29
+ });
30
+ });
@@ -0,0 +1,7 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ScaleLine matches snapshot 1`] = `
4
+ <div
5
+ className="rs-scale-line"
6
+ />
7
+ `;
@@ -0,0 +1 @@
1
+ export { default } from './ScaleLine';
@@ -0,0 +1,50 @@
1
+
2
+ This demonstrates the use of the StopsFinder component.
3
+
4
+ ```jsx
5
+ import React from 'react';
6
+ import { Layer } from 'mobility-toolbox-js/ol';
7
+ import Map from 'ol/Map';
8
+ import Tile from 'ol/layer/Tile';
9
+ import { fromLonLat } from 'ol/proj';
10
+ import OSM from 'ol/source/OSM';
11
+ import BasicMap from 'react-spatial/components/BasicMap';
12
+ import StopsFinder from 'react-spatial/components/StopsFinder';
13
+
14
+ const map = new Map({ controls: [] });
15
+
16
+ const layers = [
17
+ new Layer({
18
+ olLayer: new Tile({
19
+ source: new OSM(),
20
+ }),
21
+ }),
22
+ ];
23
+
24
+ // The `apiKey` used here is for demonstration purposes only.
25
+ // Please get your own api key at https://developer.geops.io/.
26
+ const { apiKey } = window;
27
+
28
+ <>
29
+ <BasicMap
30
+ map={map}
31
+ center={[951560, 6002550]}
32
+ zoom={14}
33
+ layers={layers}
34
+ tabIndex={0}
35
+ />
36
+
37
+ <StopsFinder
38
+ map={map}
39
+ apiKey={apiKey}
40
+ onSelect={({ geometry }) => {
41
+ map.getView().setCenter(fromLonLat(geometry.coordinates));
42
+ }}
43
+ autocompleteProps={{
44
+ textFieldProps: {
45
+ label: 'Search for stops',
46
+ },
47
+ }}
48
+ />
49
+ </>
50
+ ```
@@ -0,0 +1,284 @@
1
+ import React, { useMemo, useState, useEffect } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Autocomplete } from '@material-ui/lab';
4
+ import { FaSearch } from 'react-icons/fa';
5
+ import TextField from '@material-ui/core/TextField';
6
+ import CircularProgress from '@material-ui/core/CircularProgress';
7
+ import { StopFinderControl } from 'mobility-toolbox-js/ol';
8
+ import { Map } from 'ol';
9
+ import { makeStyles } from '@material-ui/core';
10
+ import StopsFinderOptions from './StopsFinderOption';
11
+
12
+ const useStyles = makeStyles(() => {
13
+ return {
14
+ popupIndicatorOpen: {
15
+ transform: 'rotate(0)',
16
+ },
17
+ };
18
+ });
19
+
20
+ function StopsFinder({
21
+ agencies,
22
+ apiKey,
23
+ autocompleteProps,
24
+ bbox,
25
+ field,
26
+ limit,
27
+ map,
28
+ mots,
29
+ onSelect,
30
+ radius,
31
+ refLocation,
32
+ renderAutocomplete,
33
+ url,
34
+ }) {
35
+ const classes = useStyles();
36
+ const [inputValue, setInputValue] = useState('');
37
+ const [suggestions, setSuggestions] = useState([]);
38
+ const [isLoading, setLoading] = useState(false);
39
+ const [isOpen, setOpen] = useState(false);
40
+
41
+ const control = useMemo(() => {
42
+ return new StopFinderControl({
43
+ url,
44
+ apiKey,
45
+ target: document.createElement('div'),
46
+ element: document.createElement('div'),
47
+ render(newSuggestions = { features: [] }) {
48
+ setSuggestions(newSuggestions.features);
49
+ setLoading(false);
50
+ },
51
+ });
52
+ }, [apiKey, url]);
53
+
54
+ useEffect(() => {
55
+ if (!inputValue) {
56
+ setSuggestions([]);
57
+ setLoading(false);
58
+ return () => {};
59
+ }
60
+ const abortController = new AbortController();
61
+ setLoading(true);
62
+ control.apiParams = {
63
+ prefAgencies: agencies && agencies.toString(),
64
+ bbox: bbox && bbox.toString(),
65
+ field: field && field.toString(),
66
+ limit,
67
+ mots: mots && mots.toString(),
68
+ radius,
69
+ ref_location: refLocation && refLocation.toString(),
70
+ };
71
+ control.search(inputValue, abortController);
72
+ return () => {
73
+ abortController.abort();
74
+ };
75
+ }, [
76
+ agencies,
77
+ bbox,
78
+ control,
79
+ field,
80
+ inputValue,
81
+ limit,
82
+ mots,
83
+ radius,
84
+ refLocation,
85
+ ]);
86
+
87
+ // Ensure the control is not associated to the wrong map
88
+ useEffect(() => {
89
+ if (!control) {
90
+ return () => {};
91
+ }
92
+
93
+ control.map = map;
94
+
95
+ return () => {
96
+ control.map = null;
97
+ };
98
+ }, [map, control]);
99
+
100
+ if (!control) {
101
+ return null;
102
+ }
103
+
104
+ if (renderAutocomplete) {
105
+ return renderAutocomplete(
106
+ suggestions,
107
+ inputValue,
108
+ setInputValue,
109
+ isOpen,
110
+ setOpen,
111
+ isLoading,
112
+ setLoading,
113
+ );
114
+ }
115
+ const textFieldProps = {
116
+ ...((autocompleteProps || {}).textFieldProps || {}),
117
+ };
118
+ const autocProps = { ...autocompleteProps };
119
+ delete autocProps.textFieldProps;
120
+
121
+ return (
122
+ <Autocomplete
123
+ fullWidth
124
+ autoComplete
125
+ autoHighlight
126
+ selectOnFocus
127
+ getOptionLabel={(option) => {
128
+ return option.properties.name;
129
+ }}
130
+ onChange={(evt, value, reason) => {
131
+ if (onSelect && reason === 'select-option') {
132
+ onSelect(value, evt);
133
+ }
134
+ }}
135
+ popupIcon={<FaSearch focusable={false} size={15} />}
136
+ renderInput={(params) => {
137
+ return (
138
+ <TextField
139
+ label="Search stops"
140
+ // eslint-disable-next-line react/jsx-props-no-spreading
141
+ {...{
142
+ ...params,
143
+ ...textFieldProps,
144
+ }}
145
+ InputProps={{
146
+ ...params.InputProps,
147
+ endAdornment: (
148
+ <>
149
+ {isLoading && <CircularProgress size={20} />}
150
+ {params.InputProps.endAdornment}
151
+ </>
152
+ ),
153
+ }}
154
+ />
155
+ );
156
+ }}
157
+ renderOption={(option) => {
158
+ return <StopsFinderOptions option={option} />;
159
+ }}
160
+ // eslint-disable-next-line react/jsx-props-no-spreading
161
+ {...autocProps}
162
+ classes={{ ...classes, ...autocompleteProps.classes }}
163
+ inputValue={inputValue}
164
+ open={isOpen}
165
+ options={suggestions}
166
+ loading={isLoading}
167
+ onOpen={() => {
168
+ setOpen(true);
169
+ }}
170
+ onClose={() => {
171
+ setOpen(false);
172
+ }}
173
+ onInputChange={(evt, val) => {
174
+ setInputValue(val);
175
+ }}
176
+ />
177
+ );
178
+ }
179
+
180
+ StopsFinder.propTypes = {
181
+ /**
182
+ * Array or a comma separated list of agencies which should be available.
183
+ * Order of these agencies chooses which agency will be preferred.
184
+ * Available values : sbb, db
185
+ */
186
+ agencies: PropTypes.oneOfType([
187
+ PropTypes.string,
188
+ PropTypes.arrayOf(PropTypes.string),
189
+ ]),
190
+
191
+ /**
192
+ * geOps api key to access the StopsFinder service.
193
+ */
194
+ apiKey: PropTypes.string,
195
+
196
+ /**
197
+ * Properties apply to the default [MUI Autocomplete component](https://material-ui.com/api/autocomplete/).
198
+ * We add a custom properties textFieldProps for the default [MUI TextField component](https://material-ui.com/api/text-field/) used by the Autocomplete.
199
+ */
200
+ autocompleteProps: PropTypes.object,
201
+
202
+ /**
203
+ * minX,minY,maxX,maxY coordinates in WGS84 wherein the station should lie.
204
+ */
205
+ bbox: PropTypes.oneOfType([
206
+ PropTypes.string,
207
+ PropTypes.arrayOf(PropTypes.number),
208
+ ]),
209
+
210
+ /**
211
+ * Array or a comma separated list of fields which should be used for look up.
212
+ * Available values : id, name, coords
213
+ */
214
+ field: PropTypes.oneOfType([
215
+ PropTypes.string,
216
+ PropTypes.arrayOf(PropTypes.string),
217
+ ]),
218
+
219
+ /**
220
+ * Control how many matches will be returned.
221
+ */
222
+ limit: PropTypes.number,
223
+
224
+ /**
225
+ * A map.
226
+ */
227
+ map: PropTypes.instanceOf(Map).isRequired,
228
+
229
+ /**
230
+ * Array or a comma separated list of mode of transpaorts which should be available.
231
+ * Available values : bus, ferry, gondola, tram, rail, funicular, cable_car, subway
232
+ */
233
+ mots: PropTypes.oneOfType([
234
+ PropTypes.string,
235
+ PropTypes.arrayOf(PropTypes.string),
236
+ ]),
237
+
238
+ /**
239
+ * Function called when a suggestion is selected.
240
+ */
241
+ onSelect: PropTypes.func,
242
+
243
+ /**
244
+ * Radius around refLocation in meters that is most relevant.
245
+ * Used as granularity for location rank.
246
+ */
247
+ radius: PropTypes.number,
248
+
249
+ /**
250
+ * Coordinates in WGS84 (in lat,lon order) used to rank stops close to this position higher.
251
+ * Available values : id, name, coords
252
+ */
253
+ refLocation: PropTypes.oneOfType([
254
+ PropTypes.string,
255
+ PropTypes.arrayOf(PropTypes.number),
256
+ ]),
257
+
258
+ /**
259
+ * Function to render a different autocomplete input than the default one.
260
+ */
261
+ renderAutocomplete: PropTypes.func,
262
+
263
+ /**
264
+ * Url of the geOps StopsFinder service.
265
+ */
266
+ url: PropTypes.string,
267
+ };
268
+
269
+ StopsFinder.defaultProps = {
270
+ agencies: null,
271
+ apiKey: null,
272
+ autocompleteProps: {},
273
+ bbox: null,
274
+ field: null,
275
+ limit: null,
276
+ mots: null,
277
+ onSelect: null,
278
+ radius: null,
279
+ refLocation: null,
280
+ url: null,
281
+ renderAutocomplete: null,
282
+ };
283
+
284
+ export default StopsFinder;