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,344 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ /* eslint-disable react/no-multi-comp,react/prefer-stateless-function,react/prop-types */
3
+ import React from 'react';
4
+ import { configure, mount, shallow } from 'enzyme';
5
+ import Adapter from '@cfaester/enzyme-adapter-react-18';
6
+ import ResizeObserver from 'resize-observer-polyfill';
7
+ import ResizeHandler from './ResizeHandler';
8
+
9
+ jest.mock('resize-observer-polyfill');
10
+
11
+ configure({ adapter: new Adapter() });
12
+
13
+ class Div extends React.Component {
14
+ render() {
15
+ return <div />;
16
+ }
17
+ }
18
+
19
+ class BasicComponent extends React.Component {
20
+ render() {
21
+ const { onResize, stylePropHeight } = this.props;
22
+ return (
23
+ <div id="basic">
24
+ <ResizeHandler
25
+ observe={this}
26
+ onResize={onResize}
27
+ stylePropHeight={stylePropHeight}
28
+ />
29
+ </div>
30
+ );
31
+ }
32
+ }
33
+
34
+ class BasicComponent3 extends React.Component {
35
+ render() {
36
+ return (
37
+ <div id="basic">
38
+ <ResizeHandler
39
+ observe={this}
40
+ maxHeightBrkpts={{
41
+ niedrig: 150,
42
+ hoch: Infinity,
43
+ }}
44
+ maxWidthBrkpts={{
45
+ schmal: 150,
46
+ breit: Infinity,
47
+ }}
48
+ />
49
+ </div>
50
+ );
51
+ }
52
+ }
53
+
54
+ class StrComponent extends React.Component {
55
+ render() {
56
+ return (
57
+ <span id="basic">
58
+ <ResizeHandler observe="#basic" />
59
+ </span>
60
+ );
61
+ }
62
+ }
63
+
64
+ class ThisComponent extends React.Component {
65
+ render() {
66
+ return (
67
+ <div>
68
+ <ResizeHandler observe={this} />
69
+ </div>
70
+ );
71
+ }
72
+ }
73
+
74
+ class RefComponent extends React.Component {
75
+ constructor(props) {
76
+ super(props);
77
+ this.ref = React.createRef();
78
+ }
79
+
80
+ render() {
81
+ return (
82
+ <>
83
+ <Div ref={this.ref} />
84
+ <ResizeHandler observe={this.ref} />
85
+ </>
86
+ );
87
+ }
88
+ }
89
+
90
+ class CallbackComponent extends React.Component {
91
+ constructor(props) {
92
+ super(props);
93
+ this.state = {
94
+ ref: null,
95
+ };
96
+ }
97
+
98
+ render() {
99
+ const { ref } = this.state;
100
+ return (
101
+ <>
102
+ <div
103
+ ref={(node) => {
104
+ if (node && !ref) {
105
+ this.setState({
106
+ ref: node,
107
+ });
108
+ }
109
+ }}
110
+ />
111
+ <ResizeHandler observe={ref} />
112
+ </>
113
+ );
114
+ }
115
+ }
116
+
117
+ class RefNodeComponent extends React.Component {
118
+ constructor(props) {
119
+ super(props);
120
+ this.ref = React.createRef();
121
+ }
122
+
123
+ render() {
124
+ return (
125
+ <>
126
+ <div ref={this.ref} />
127
+ <ResizeHandler observe={this.ref} />
128
+ </>
129
+ );
130
+ }
131
+ }
132
+
133
+ // eslint-disable-next-line react/prefer-stateless-function
134
+ class CallbackNodeComponent extends React.Component {
135
+ constructor(props) {
136
+ super(props);
137
+ this.state = {
138
+ ref: null,
139
+ };
140
+ }
141
+
142
+ render() {
143
+ const { ref } = this.state;
144
+ return (
145
+ <>
146
+ <div
147
+ ref={(node) => {
148
+ if (node && !ref) {
149
+ this.setState({
150
+ ref: node,
151
+ });
152
+ }
153
+ }}
154
+ />
155
+ <ResizeHandler observe={ref} />
156
+ </>
157
+ );
158
+ }
159
+ }
160
+
161
+ const comps = [
162
+ ThisComponent,
163
+ RefComponent,
164
+ RefNodeComponent,
165
+ CallbackComponent,
166
+ CallbackNodeComponent,
167
+ ];
168
+
169
+ describe('ResizeHandler', () => {
170
+ describe('when observe property is not set', () => {
171
+ test("doesn't observe", () => {
172
+ const spy = jest.spyOn(ResizeObserver.prototype, 'observe');
173
+ shallow(<ResizeHandler />);
174
+ expect(spy).not.toHaveBeenCalled();
175
+ spy.mockRestore();
176
+ });
177
+
178
+ test('disconnect on unmount', () => {
179
+ const wrapper = shallow(<ResizeHandler />);
180
+ const spy = jest.spyOn(wrapper.instance().observer, 'disconnect');
181
+ wrapper.unmount();
182
+ expect(spy).toHaveBeenCalledTimes(1);
183
+ });
184
+ });
185
+
186
+ describe('when observe property is set', () => {
187
+ test('try t get an html node from a string on (un)mount', () => {
188
+ const div = document.createElement('div');
189
+ document.querySelectorAll = jest.fn().mockImplementation(() => {
190
+ return [div];
191
+ });
192
+ const spy = jest.spyOn(ResizeObserver.prototype, 'observe');
193
+ const spy2 = jest.spyOn(ResizeObserver.prototype, 'disconnect');
194
+ mount(<StrComponent />);
195
+ expect(spy).toHaveBeenCalledTimes(1);
196
+ expect(spy.mock.calls[0][0]).toBe(div);
197
+ expect(spy2.mock.calls.length >= 1).toBe(true);
198
+ spy.mockRestore();
199
+ spy2.mockRestore();
200
+ document.querySelectorAll.mockRestore();
201
+ });
202
+
203
+ comps.forEach((Comp) => {
204
+ test(`(un)observes an html node from ${Comp.name} on (un)mount`, () => {
205
+ const spy = jest.spyOn(ResizeObserver.prototype, 'observe');
206
+ const spy2 = jest.spyOn(ResizeObserver.prototype, 'disconnect');
207
+ const wrapper = mount(<Comp />);
208
+ expect(spy).toHaveBeenCalledTimes(1);
209
+ expect(spy.mock.calls[0][0]).toBeInstanceOf(Element);
210
+ expect(spy2.mock.calls.length >= 1).toBe(true);
211
+ ResizeObserver.prototype.observe.mockRestore();
212
+ spy.mockRestore();
213
+ spy2.mockRestore();
214
+ wrapper.unmount();
215
+ });
216
+ });
217
+
218
+ test('set the default css class on resize ', () => {
219
+ const wrapper = mount(<BasicComponent />);
220
+ const basic = wrapper.getDOMNode();
221
+
222
+ // The mock class set the onResize property, we just have to run it to
223
+ // simulate a resize
224
+ ResizeObserver.onResize([
225
+ {
226
+ target: basic,
227
+ contentRect: {
228
+ width: 200,
229
+ height: 200,
230
+ },
231
+ },
232
+ ]);
233
+ expect(basic.className).toBe('rs-w-xs rs-h-xs');
234
+
235
+ ResizeObserver.onResize([
236
+ {
237
+ target: basic,
238
+ contentRect: {
239
+ width: 577,
240
+ height: 577,
241
+ },
242
+ },
243
+ ]);
244
+ expect(basic.className).toBe('rs-w-s rs-h-s');
245
+ ResizeObserver.onResize([
246
+ {
247
+ target: basic,
248
+ contentRect: {
249
+ width: 769,
250
+ height: 769,
251
+ },
252
+ },
253
+ ]);
254
+ expect(basic.className).toBe('rs-w-m rs-h-m');
255
+ ResizeObserver.onResize([
256
+ {
257
+ target: basic,
258
+ contentRect: {
259
+ width: 993,
260
+ height: 993,
261
+ },
262
+ },
263
+ ]);
264
+ expect(basic.className).toBe('rs-w-l rs-h-l');
265
+ ResizeObserver.onResize([
266
+ {
267
+ target: basic,
268
+ contentRect: {
269
+ width: 1201,
270
+ height: 1201,
271
+ },
272
+ },
273
+ ]);
274
+ expect(basic.className).toBe('rs-w-xl rs-h-xl');
275
+ });
276
+
277
+ test('uses user defined breakpoints', () => {
278
+ const wrapper = mount(<BasicComponent3 />);
279
+ const basic = wrapper.getDOMNode();
280
+
281
+ // The mock class set the onResize property, we just have to run it to
282
+ // simulate a resize
283
+ ResizeObserver.onResize([
284
+ {
285
+ target: basic,
286
+ contentRect: {
287
+ width: 100,
288
+ height: 100,
289
+ },
290
+ },
291
+ ]);
292
+ expect(basic.className).toBe('rs-w-schmal rs-h-niedrig');
293
+
294
+ ResizeObserver.onResize([
295
+ {
296
+ target: basic,
297
+ contentRect: {
298
+ width: 1000,
299
+ height: 1000,
300
+ },
301
+ },
302
+ ]);
303
+ expect(basic.className).toBe('rs-w-breit rs-h-hoch');
304
+ });
305
+
306
+ test('calls onResize property', () => {
307
+ const fn = jest.fn();
308
+ const wrapper = mount(<BasicComponent onResize={fn} />);
309
+ const basic = wrapper.getDOMNode();
310
+
311
+ // The mock class set the onResize property, we just have to run it to
312
+ // simulate a resize
313
+ ResizeObserver.onResize([
314
+ {
315
+ target: basic,
316
+ contentRect: {
317
+ width: 100,
318
+ height: 100,
319
+ },
320
+ },
321
+ ]);
322
+ expect(fn).toHaveBeenCalledTimes(1);
323
+ });
324
+
325
+ test('set a style property on resize', () => {
326
+ const spy = jest.spyOn(document.documentElement.style, 'setProperty');
327
+ const wrapper = mount(<BasicComponent stylePropHeight="foo" />);
328
+ const basic = wrapper.getDOMNode();
329
+
330
+ // The mock class set the onResize property, we just have to run it to
331
+ // simulate a resize
332
+ ResizeObserver.onResize([
333
+ {
334
+ target: basic,
335
+ contentRect: {
336
+ width: 100,
337
+ height: 100,
338
+ },
339
+ },
340
+ ]);
341
+ expect(spy).toHaveBeenCalledWith('foo', '7.68px');
342
+ });
343
+ });
344
+ });
@@ -0,0 +1 @@
1
+ export { default } from './ResizeHandler';
@@ -0,0 +1,118 @@
1
+
2
+ The following example demonstrates the use of RouteSchedule.
3
+
4
+ ```jsx
5
+ import React, { useState, useEffect } from 'react';
6
+ import { Layer, RealtimeLayer } 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
+ import RouteSchedule from 'react-spatial/components/RouteSchedule';
11
+ import ToggleButton from '@material-ui/lab/ToggleButton';
12
+ import { FaFilter } from 'react-icons/fa';
13
+ import GpsFixedIcon from '@material-ui/icons/GpsFixed';
14
+
15
+
16
+ // The `apiKey` used here is for demonstration purposes only.
17
+ // Please get your own api key at https://developer.geops.io/.
18
+ const trackerLayer = new RealtimeLayer({
19
+ url: 'wss://tralis-tracker-api.geops.io/ws',
20
+ apiKey: window.apiKey,
21
+ });
22
+
23
+ const layers = [
24
+ new Layer({
25
+ olLayer: new Tile({
26
+ source: new OSM(),
27
+ }),
28
+ }),
29
+ trackerLayer,
30
+ ];
31
+
32
+ let updateInterval;
33
+
34
+
35
+ const getVehicleCoord = (routeIdentifier) => {
36
+ console.log(trackerLayer.getVehicle);
37
+ const [trajectory] = trackerLayer.getVehicle((traj) => {
38
+ return traj.properties.route_identifier === routeIdentifier;
39
+ });
40
+ return trajectory && trajectory.properties.coordinate;
41
+ };
42
+
43
+ function RouteScheduleExample() {
44
+ const [lineInfos, setLineInfos] = useState(null);
45
+ const [filterActive, setFilterActive] = useState(false);
46
+ const [followActive, setFollowActive] = useState(false);
47
+ const [center, setCenter] = useState([951560, 6002550]);
48
+
49
+ useEffect(()=> {
50
+ trackerLayer.onClick(([feature])=> {
51
+ if (feature) {
52
+ const vehicleId = feature.get('train_id');
53
+ trackerLayer.api.getStopSequence(vehicleId).then((stopSequence) => {
54
+ setLineInfos(stopSequence.content[0]);
55
+ });
56
+ } else {
57
+ setLineInfos();
58
+ }
59
+ });
60
+ }, []);
61
+
62
+ useEffect(()=> {
63
+ trackerLayer.map.updateSize();
64
+ }, [lineInfos]);
65
+
66
+
67
+ return (
68
+ <div className="rt-route-schedule-example">
69
+ <RouteSchedule
70
+ lineInfos={lineInfos}
71
+ trackerLayer={trackerLayer}
72
+ renderHeaderButtons={routeIdentifier => (
73
+ <>
74
+ <ToggleButton
75
+ selected={filterActive}
76
+ onClick={() => {
77
+ if (!filterActive) {
78
+ trackerLayer.filter = (trajectory) => {
79
+ return trajectory.properties.route_identifier === routeIdentifier;
80
+ };
81
+ } else {
82
+ trackerLayer.filter = null;
83
+ }
84
+ setFilterActive(!filterActive);
85
+ }}>
86
+ <FaFilter />
87
+ </ToggleButton>
88
+ <ToggleButton
89
+ selected={followActive}
90
+ onClick={() => {
91
+ clearInterval(updateInterval);
92
+ if (!followActive) {
93
+ updateInterval = window.setInterval(() => {
94
+ const coord = getVehicleCoord(routeIdentifier);
95
+ if (coord) {
96
+ setCenter(coord);
97
+ }
98
+ }, 50);
99
+ }
100
+ setFollowActive(!followActive);
101
+ }}>
102
+ <GpsFixedIcon />
103
+ </ToggleButton>
104
+ </>
105
+ )}
106
+ />
107
+ <BasicMap
108
+ center={center}
109
+ zoom={15}
110
+ layers={layers}
111
+ tabIndex={0}
112
+ />
113
+ </div>
114
+ );
115
+ }
116
+
117
+ <RouteScheduleExample />;
118
+ ```