react-spatial 1.5.3 → 1.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +262 -0
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +7 -0
- package/components/BaseLayerSwitcher/index.js +1 -0
- package/components/BaseLayerSwitcher/index.js.map +7 -0
- package/{src/components → components}/BasicMap/BasicMap.js +80 -170
- package/components/BasicMap/BasicMap.js.map +7 -0
- package/components/BasicMap/index.js +1 -0
- package/components/BasicMap/index.js.map +7 -0
- package/{src/components → components}/CanvasSaveButton/CanvasSaveButton.js +133 -278
- package/components/CanvasSaveButton/CanvasSaveButton.js.map +7 -0
- package/components/CanvasSaveButton/index.js +1 -0
- package/components/CanvasSaveButton/index.js.map +7 -0
- package/{src/components → components}/Copyright/Copyright.js +21 -41
- package/components/Copyright/Copyright.js.map +7 -0
- package/components/Copyright/index.js +1 -0
- package/components/Copyright/index.js.map +7 -0
- package/components/FeatureExportButton/FeatureExportButton.js +80 -0
- package/components/FeatureExportButton/FeatureExportButton.js.map +7 -0
- package/components/FeatureExportButton/index.js +1 -0
- package/components/FeatureExportButton/index.js.map +7 -0
- package/{src/components → components}/FitExtent/FitExtent.js +16 -30
- package/components/FitExtent/FitExtent.js.map +7 -0
- package/components/FitExtent/index.js +1 -0
- package/components/FitExtent/index.js.map +7 -0
- package/{src/components → components}/Geolocation/Geolocation.js +60 -110
- package/components/Geolocation/Geolocation.js.map +7 -0
- package/components/Geolocation/index.js +1 -0
- package/components/Geolocation/index.js.map +7 -0
- package/{src/components → components}/LayerTree/LayerTree.js +113 -213
- package/components/LayerTree/LayerTree.js.map +7 -0
- package/components/LayerTree/index.js +1 -0
- package/components/LayerTree/index.js.map +7 -0
- package/{src/components → components}/MousePosition/MousePosition.js +37 -70
- package/components/MousePosition/MousePosition.js.map +7 -0
- package/components/MousePosition/index.js +1 -0
- package/components/MousePosition/index.js.map +7 -0
- package/{src/components → components}/NorthArrow/NorthArrow.js +18 -34
- package/components/NorthArrow/NorthArrow.js.map +7 -0
- package/components/NorthArrow/index.js +1 -0
- package/components/NorthArrow/index.js.map +7 -0
- package/{src/components → components}/Overlay/Overlay.js +59 -85
- package/components/Overlay/Overlay.js.map +7 -0
- package/components/Overlay/index.js +1 -0
- package/components/Overlay/index.js.map +7 -0
- package/{src/components → components}/Permalink/Permalink.js +64 -147
- package/components/Permalink/Permalink.js.map +7 -0
- package/components/Permalink/index.js +1 -0
- package/components/Permalink/index.js.map +7 -0
- package/{src/components → components}/Popup/Popup.js +57 -116
- package/components/Popup/Popup.js.map +7 -0
- package/components/Popup/index.js +1 -0
- package/components/Popup/index.js.map +7 -0
- package/{src/components → components}/ResizeHandler/ResizeHandler.js +15 -49
- package/components/ResizeHandler/ResizeHandler.js.map +7 -0
- package/components/ResizeHandler/index.js +1 -0
- package/components/ResizeHandler/index.js.map +7 -0
- package/components/RouteSchedule/RouteSchedule.js +268 -0
- package/components/RouteSchedule/RouteSchedule.js.map +7 -0
- package/components/RouteSchedule/index.js +1 -0
- package/components/RouteSchedule/index.js.map +7 -0
- package/{src/components → components}/ScaleLine/ScaleLine.js +8 -23
- package/components/ScaleLine/ScaleLine.js.map +7 -0
- package/components/ScaleLine/index.js +1 -0
- package/components/ScaleLine/index.js.map +7 -0
- package/{src/components → components}/StopsFinder/StopsFinder.js +74 -103
- package/components/StopsFinder/StopsFinder.js.map +7 -0
- package/components/StopsFinder/StopsFinderOption.js +44 -0
- package/components/StopsFinder/StopsFinderOption.js.map +7 -0
- package/components/StopsFinder/index.js +1 -0
- package/components/StopsFinder/index.js.map +7 -0
- package/{src/components → components}/Zoom/Zoom.js +46 -77
- package/components/Zoom/Zoom.js.map +7 -0
- package/components/Zoom/index.js +1 -0
- package/components/Zoom/index.js.map +7 -0
- package/package.json +32 -31
- package/{src/propTypes.js → propTypes.js} +30 -16
- package/propTypes.js.map +7 -0
- package/{src/setupTests.js → setupTests.js} +1 -1
- package/setupTests.js.map +7 -0
- package/utils/GlobalsForOle.js +94 -0
- package/utils/GlobalsForOle.js.map +7 -0
- package/utils/KML.js +420 -0
- package/utils/KML.js.map +7 -0
- package/{src/utils → utils}/KMLFormat.js +29 -32
- package/utils/KMLFormat.js.map +7 -0
- package/{src/utils → utils}/Styles.js +14 -20
- package/utils/Styles.js.map +7 -0
- package/{src/utils → utils}/getPolygonPattern.js +6 -34
- package/utils/getPolygonPattern.js.map +7 -0
- package/{src/utils → utils}/timeUtils.js +5 -22
- package/utils/timeUtils.js.map +7 -0
- package/.github/workflows/conventional-pr-title.yml +0 -21
- package/.github/workflows/main.yml +0 -28
- package/.husky/commit-msg +0 -4
- package/.husky/post-checkout +0 -4
- package/.husky/post-merge +0 -4
- package/.husky/post-rebase +0 -4
- package/.husky/pre-commit +0 -4
- package/.nvmrc +0 -1
- package/.whitesource +0 -8
- package/CHANGELOG.md +0 -65
- package/DEVELOP.md +0 -113
- package/__mocks__/mapbox-gl.js +0 -11
- package/__mocks__/resize-observer-polyfill.js +0 -9
- package/babel.config.js +0 -3
- package/commitlint.config.js +0 -1
- package/data/topic1.js +0 -119
- package/data/topic2.js +0 -28
- package/doc/README.md +0 -21
- package/doc/doc-config.json +0 -4
- package/pull_request_template.md +0 -16
- package/renovate.json +0 -4
- package/scripts/read-pkg-json.js +0 -17
- package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.js +0 -322
- package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +0 -69
- package/src/components/BaseLayerSwitcher/README.md +0 -61
- package/src/components/BaseLayerSwitcher/__snapshots__/BaseLayerSwitcher.test.js.snap +0 -88
- package/src/components/BaseLayerSwitcher/index.js +0 -1
- package/src/components/BasicMap/BasicMap.test.js +0 -281
- package/src/components/BasicMap/README.md +0 -18
- package/src/components/BasicMap/index.js +0 -1
- package/src/components/CanvasSaveButton/CanvasSaveButton.test.js +0 -148
- package/src/components/CanvasSaveButton/README.md +0 -76
- package/src/components/CanvasSaveButton/__snapshots__/CanvasSaveButton.test.js.snap +0 -76
- package/src/components/CanvasSaveButton/index.js +0 -1
- package/src/components/Copyright/Copyright.test.js +0 -134
- package/src/components/Copyright/README.md +0 -36
- package/src/components/Copyright/index.js +0 -1
- package/src/components/FeatureExportButton/FeatureExportButton.js +0 -118
- package/src/components/FeatureExportButton/FeatureExportButton.test.js +0 -417
- package/src/components/FeatureExportButton/README.md +0 -76
- package/src/components/FeatureExportButton/__snapshots__/FeatureExportButton.test.js.snap +0 -67
- package/src/components/FeatureExportButton/index.js +0 -1
- package/src/components/FitExtent/FitExtent.test.js +0 -48
- package/src/components/FitExtent/README.md +0 -34
- package/src/components/FitExtent/__snapshots__/FitExtent.test.js.snap +0 -13
- package/src/components/FitExtent/index.js +0 -1
- package/src/components/Geolocation/Geolocation.test.js +0 -267
- package/src/components/Geolocation/README.md +0 -25
- package/src/components/Geolocation/__snapshots__/Geolocation.test.js.snap +0 -92
- package/src/components/Geolocation/index.js +0 -1
- package/src/components/LayerTree/LayerTree.test.js +0 -337
- package/src/components/LayerTree/README.md +0 -92
- package/src/components/LayerTree/__snapshots__/LayerTree.test.js.snap +0 -1746
- package/src/components/LayerTree/index.js +0 -1
- package/src/components/MousePosition/MousePosition.test.js +0 -132
- package/src/components/MousePosition/README.md +0 -50
- package/src/components/MousePosition/__snapshots__/MousePosition.test.js.snap +0 -76
- package/src/components/MousePosition/index.js +0 -1
- package/src/components/NorthArrow/NorthArrow.test.js +0 -104
- package/src/components/NorthArrow/README.md +0 -59
- package/src/components/NorthArrow/__snapshots__/NorthArrow.test.js.snap +0 -117
- package/src/components/NorthArrow/index.js +0 -1
- package/src/components/Overlay/Overlay.test.js +0 -149
- package/src/components/Overlay/README.md +0 -59
- package/src/components/Overlay/__snapshots__/Overlay.test.js.snap +0 -9
- package/src/components/Overlay/index.js +0 -1
- package/src/components/Permalink/Permalink.test.js +0 -285
- package/src/components/Permalink/README.md +0 -105
- package/src/components/Permalink/index.js +0 -1
- package/src/components/Popup/Popup.test.js +0 -307
- package/src/components/Popup/README.md +0 -93
- package/src/components/Popup/__snapshots__/Popup.test.js.snap +0 -180
- package/src/components/Popup/index.js +0 -1
- package/src/components/README.md +0 -41
- package/src/components/ResizeHandler/ResizeHandler.test.js +0 -344
- package/src/components/ResizeHandler/index.js +0 -1
- package/src/components/RouteSchedule/README.md +0 -118
- package/src/components/RouteSchedule/RouteSchedule.js +0 -370
- package/src/components/RouteSchedule/RouteSchedule.test.js +0 -113
- package/src/components/RouteSchedule/__snapshots__/RouteSchedule.test.js.snap +0 -248
- package/src/components/RouteSchedule/index.js +0 -1
- package/src/components/ScaleLine/README.md +0 -29
- package/src/components/ScaleLine/ScaleLine.test.js +0 -30
- package/src/components/ScaleLine/__snapshots__/ScaleLine.test.js.snap +0 -7
- package/src/components/ScaleLine/index.js +0 -1
- package/src/components/StopsFinder/README.md +0 -50
- package/src/components/StopsFinder/StopsFinder.test.js +0 -17
- package/src/components/StopsFinder/StopsFinderOption.js +0 -61
- package/src/components/StopsFinder/__snapshots__/StopsFinder.test.js.snap +0 -133
- package/src/components/StopsFinder/index.js +0 -1
- package/src/components/Zoom/README.md +0 -25
- package/src/components/Zoom/Zoom.test.js +0 -141
- package/src/components/Zoom/__snapshots__/Zoom.test.js.snap +0 -201
- package/src/components/Zoom/index.js +0 -1
- package/src/styleguidist/ComponentsList.js +0 -52
- package/src/styleguidist/StyleGuide.js +0 -277
- package/src/styleguidist/styleguidist.css +0 -38
- package/src/utils/GlobalsForOle.js +0 -99
- package/src/utils/KML.js +0 -594
- package/src/utils/KML.test.js +0 -337
- package/src/utils/KMLFormat.test.js +0 -50
- 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
- package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-2-(cross)-color-and-(light-blue)-opacity.canvas-image.png +0 -0
- 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
- 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
- package/src/utils/getPolygonPattern.test.js +0 -61
- package/src/utils/timeUtils.test.js +0 -30
- package/styleguide.config.js +0 -251
- /package/{src/components → components}/BaseLayerSwitcher/BaseLayerSwitcher.md.scss +0 -0
- /package/{src/components → components}/BaseLayerSwitcher/BaseLayerSwitcher.scss +0 -0
- /package/{src/components → components}/BasicMap/BasicMap.md.scss +0 -0
- /package/{src/components → components}/CanvasSaveButton/CanvasSaveButton.md.scss +0 -0
- /package/{src/components → components}/Copyright/Copyright.md.scss +0 -0
- /package/{src/components → components}/FeatureExportButton/FeatureExportButton.md.scss +0 -0
- /package/{src/components → components}/FitExtent/FitExtent.md.scss +0 -0
- /package/{src/components → components}/Geolocation/Geolocation.md.scss +0 -0
- /package/{src/components → components}/Geolocation/Geolocation.scss +0 -0
- /package/{src/components → components}/LayerTree/LayerTree.md.scss +0 -0
- /package/{src/components → components}/LayerTree/LayerTree.scss +0 -0
- /package/{src/components → components}/MousePosition/MousePosition.md.scss +0 -0
- /package/{src/components → components}/NorthArrow/NorthArrow.scss +0 -0
- /package/{src/components → components}/Overlay/Overlay.md.scss +0 -0
- /package/{src/components → components}/Overlay/Overlay.scss +0 -0
- /package/{src/components → components}/Permalink/Permalink.md.scss +0 -0
- /package/{src/components → components}/Popup/Popup.md.scss +0 -0
- /package/{src/components → components}/Popup/Popup.scss +0 -0
- /package/{src/components → components}/RouteSchedule/RouteSchedule.md.scss +0 -0
- /package/{src/components → components}/RouteSchedule/RouteSchedule.scss +0 -0
- /package/{src/components → components}/ScaleLine/ScaleLine.scss +0 -0
- /package/{src/components → components}/Zoom/Zoom.md.scss +0 -0
- /package/{src/components → components}/Zoom/Zoom.scss +0 -0
- /package/{src/images → images}/RouteSchedule/firstStation.png +0 -0
- /package/{src/images → images}/RouteSchedule/lastStation.png +0 -0
- /package/{src/images → images}/RouteSchedule/line.png +0 -0
- /package/{src/images → images}/RouteSchedule/station.png +0 -0
- /package/{src/images → images}/baselayer/baselayer.basebright.png +0 -0
- /package/{src/images → images}/baselayer/baselayer.osm.png +0 -0
- /package/{src/images → images}/baselayer/baselayer.travic.png +0 -0
- /package/{src/images → images}/baselayer/open.topo.map.png +0 -0
- /package/{src/images → images}/baselayer/osm.baselayer.hot.png +0 -0
- /package/{src/images → images}/baselayer/osm.baselayer.png +0 -0
- /package/{src/images → images}/favicon.png +0 -0
- /package/{src/images → images}/geops_logo.png +0 -0
- /package/{src/images → images}/geops_logo.svg +0 -0
- /package/{src/images → images}/geops_qr.png +0 -0
- /package/{src/images → images}/mots/bus_poi-blue-01.svg +0 -0
- /package/{src/images → images}/mots/bus_poi-grey-01.svg +0 -0
- /package/{src/images → images}/mots/bus_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/bus_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/bus_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/bus_square-grey-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_poi-blue-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_poi-grey-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/cable_car_square-grey-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_poi-blue-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_poi-grey-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/ferry_square-grey-01.svg +0 -0
- /package/{src/images → images}/mots/funicular_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/funicular_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/funicular_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/gondola_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/rail_poi-blue-01.svg +0 -0
- /package/{src/images → images}/mots/rail_poi-grey-01.svg +0 -0
- /package/{src/images → images}/mots/rail_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/rail_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/rail_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/rail_square-grey-01.svg +0 -0
- /package/{src/images → images}/mots/subway_round blue-01.svg +0 -0
- /package/{src/images → images}/mots/subway_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/tram_poi-blue-01.svg +0 -0
- /package/{src/images → images}/mots/tram_poi-grey-01.svg +0 -0
- /package/{src/images → images}/mots/tram_round-blue-01.svg +0 -0
- /package/{src/images → images}/mots/tram_round-grey-01.svg +0 -0
- /package/{src/images → images}/mots/tram_square-blue-01.svg +0 -0
- /package/{src/images → images}/mots/tram_square-grey-01.svg +0 -0
- /package/{src/images → images}/northArrow.svg +0 -0
- /package/{src/images → images}/northArrow.url.svg +0 -0
- /package/{src/images → images}/northArrowCircle.svg +0 -0
- /package/{src/images → images}/northArrowCircle.url.svg +0 -0
- /package/{src/themes → themes}/README.md +0 -0
- /package/{src/themes → themes}/default/components.scss +0 -0
- /package/{src/themes → themes}/default/examples.scss +0 -0
- /package/{src/themes → themes}/default/index.scss +0 -0
- /package/{src/themes → themes}/default/mixins.scss +0 -0
- /package/{src/themes → themes}/default/variables.scss +0 -0
|
@@ -1,24 +1,20 @@
|
|
|
1
|
-
import React, { Component } from
|
|
2
|
-
import PropTypes from
|
|
3
|
-
import { Layer, getLayersAsFlatArray } from
|
|
4
|
-
import { unByKey } from
|
|
5
|
-
|
|
1
|
+
import React, { Component } from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
import { Layer, getLayersAsFlatArray } from "mobility-toolbox-js/ol";
|
|
4
|
+
import { unByKey } from "ol/Observable";
|
|
6
5
|
const propTypes = {
|
|
7
6
|
/**
|
|
8
7
|
* Layers provider.
|
|
9
8
|
*/
|
|
10
9
|
layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),
|
|
11
|
-
|
|
12
10
|
/**
|
|
13
11
|
* CSS class to apply on the container.
|
|
14
12
|
*/
|
|
15
13
|
className: PropTypes.string,
|
|
16
|
-
|
|
17
14
|
/**
|
|
18
15
|
* Padding left to apply on each level.
|
|
19
16
|
*/
|
|
20
17
|
padding: PropTypes.number,
|
|
21
|
-
|
|
22
18
|
/**
|
|
23
19
|
* Determine if the item is hidden in the tree or not.
|
|
24
20
|
*
|
|
@@ -27,12 +23,10 @@ const propTypes = {
|
|
|
27
23
|
* @return {bool} true if the item is not displayed in the tree
|
|
28
24
|
*/
|
|
29
25
|
isItemHidden: PropTypes.func,
|
|
30
|
-
|
|
31
26
|
/**
|
|
32
27
|
* Determine the className used by the div containing the parent and its children.
|
|
33
28
|
*/
|
|
34
29
|
getParentClassName: PropTypes.func,
|
|
35
|
-
|
|
36
30
|
/**
|
|
37
31
|
* Custom function to render an item in the tree.
|
|
38
32
|
*
|
|
@@ -41,7 +35,6 @@ const propTypes = {
|
|
|
41
35
|
* @return {node} A jsx node.
|
|
42
36
|
*/
|
|
43
37
|
renderItem: PropTypes.func,
|
|
44
|
-
|
|
45
38
|
/**
|
|
46
39
|
* Custom function to render only the content of an item in the tree.
|
|
47
40
|
* inputProps und toggleProps can be used when calling the default renderItemContent function
|
|
@@ -53,7 +46,6 @@ const propTypes = {
|
|
|
53
46
|
* @return {node} A jsx node.
|
|
54
47
|
*/
|
|
55
48
|
renderItemContent: PropTypes.func,
|
|
56
|
-
|
|
57
49
|
/**
|
|
58
50
|
* Custom function to render custom content before the list of children of an item.
|
|
59
51
|
*
|
|
@@ -62,7 +54,6 @@ const propTypes = {
|
|
|
62
54
|
* @return {node} A jsx node.
|
|
63
55
|
*/
|
|
64
56
|
renderBeforeItem: PropTypes.func,
|
|
65
|
-
|
|
66
57
|
/**
|
|
67
58
|
* Custom function to render custom content after the list of children of an item.
|
|
68
59
|
*
|
|
@@ -71,7 +62,6 @@ const propTypes = {
|
|
|
71
62
|
* @return {node} A jsx node.
|
|
72
63
|
*/
|
|
73
64
|
renderAfterItem: PropTypes.func,
|
|
74
|
-
|
|
75
65
|
/**
|
|
76
66
|
* Custom function to render the label.
|
|
77
67
|
*
|
|
@@ -81,7 +71,6 @@ const propTypes = {
|
|
|
81
71
|
* @return {node} A jsx node.
|
|
82
72
|
*/
|
|
83
73
|
renderLabel: PropTypes.func,
|
|
84
|
-
|
|
85
74
|
/**
|
|
86
75
|
* Object holding title for the layer tree's buttons.
|
|
87
76
|
*/
|
|
@@ -101,32 +90,29 @@ const propTypes = {
|
|
|
101
90
|
/**
|
|
102
91
|
* title on button to show sublayers.
|
|
103
92
|
*/
|
|
104
|
-
subLayerHide: PropTypes.string
|
|
93
|
+
subLayerHide: PropTypes.string
|
|
105
94
|
}),
|
|
106
|
-
|
|
107
95
|
/**
|
|
108
96
|
* Boolean determining whether children collapse/expand when their parent is toggled
|
|
109
97
|
* @param {...(boolean|function)} expandChildren Boolean or function returning a boolean.
|
|
110
98
|
* @return {boolean} True or false
|
|
111
99
|
*/
|
|
112
100
|
expandChildren: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),
|
|
113
|
-
|
|
114
101
|
/**
|
|
115
102
|
* Translation function.
|
|
116
103
|
* @param {function} Translation function returning the translated string.
|
|
117
104
|
*/
|
|
118
|
-
t: PropTypes.func
|
|
105
|
+
t: PropTypes.func
|
|
119
106
|
};
|
|
120
|
-
|
|
121
107
|
const defaultProps = {
|
|
122
108
|
layers: [],
|
|
123
|
-
className:
|
|
109
|
+
className: "rs-layer-tree",
|
|
124
110
|
padding: 30,
|
|
125
111
|
isItemHidden: () => {
|
|
126
112
|
return false;
|
|
127
113
|
},
|
|
128
114
|
getParentClassName: () => {
|
|
129
|
-
return
|
|
115
|
+
return void 0;
|
|
130
116
|
},
|
|
131
117
|
renderItem: null,
|
|
132
118
|
renderItemContent: null,
|
|
@@ -137,82 +123,58 @@ const defaultProps = {
|
|
|
137
123
|
return t(layer.name);
|
|
138
124
|
},
|
|
139
125
|
titles: {
|
|
140
|
-
layerShow:
|
|
141
|
-
layerHide:
|
|
142
|
-
subLayerShow:
|
|
143
|
-
subLayerHide:
|
|
126
|
+
layerShow: "Show layer",
|
|
127
|
+
layerHide: "Hide layer",
|
|
128
|
+
subLayerShow: "Show sublayer",
|
|
129
|
+
subLayerHide: "Hide sublayer"
|
|
144
130
|
},
|
|
145
131
|
t: (s) => {
|
|
146
132
|
return s;
|
|
147
133
|
},
|
|
148
|
-
expandChildren: false
|
|
134
|
+
expandChildren: false
|
|
149
135
|
};
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* The LayerTree component renders an interface for toggling
|
|
153
|
-
* [mobility-toolbox-js layers](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers)
|
|
154
|
-
* and their corresponding child layers.
|
|
155
|
-
*/
|
|
156
|
-
|
|
157
136
|
class LayerTree extends Component {
|
|
158
137
|
constructor(props) {
|
|
159
138
|
super(props);
|
|
160
|
-
|
|
161
139
|
const { layers, isItemHidden } = this.props;
|
|
162
|
-
const initialExpandedLayers = layers
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
.filter((c) => {
|
|
172
|
-
return !isItemHidden(c);
|
|
173
|
-
}).length
|
|
174
|
-
);
|
|
175
|
-
}),
|
|
176
|
-
)
|
|
177
|
-
: [];
|
|
178
|
-
|
|
140
|
+
const initialExpandedLayers = layers ? this.getExpandedLayers(
|
|
141
|
+
layers.filter((l) => {
|
|
142
|
+
return !isItemHidden(l) && (l.children || []).filter((child) => {
|
|
143
|
+
return child.visible;
|
|
144
|
+
}).filter((c) => {
|
|
145
|
+
return !isItemHidden(c);
|
|
146
|
+
}).length;
|
|
147
|
+
})
|
|
148
|
+
) : [];
|
|
179
149
|
this.state = {
|
|
180
150
|
rootLayer: new Layer(),
|
|
181
151
|
expandedLayers: initialExpandedLayers,
|
|
182
|
-
revision: 0
|
|
152
|
+
revision: 0
|
|
183
153
|
};
|
|
184
|
-
// this.updateLayers = this.updateLayers.bind(this);
|
|
185
154
|
this.olKeys = [];
|
|
186
155
|
}
|
|
187
|
-
|
|
188
156
|
componentDidMount() {
|
|
189
157
|
this.updateLayers();
|
|
190
158
|
}
|
|
191
|
-
|
|
192
159
|
componentDidUpdate(prevProps) {
|
|
193
160
|
const { layers } = this.props;
|
|
194
|
-
|
|
195
161
|
if (layers !== prevProps.layers) {
|
|
196
162
|
this.updateLayers();
|
|
197
163
|
}
|
|
198
164
|
}
|
|
199
|
-
|
|
200
165
|
componentWillUnmount() {
|
|
201
166
|
unByKey(this.olKeys);
|
|
202
167
|
this.olKeys = [];
|
|
203
168
|
}
|
|
204
|
-
|
|
205
169
|
onInputClick(layer, toggle = false) {
|
|
206
170
|
if (toggle) {
|
|
207
171
|
this.onToggle(layer);
|
|
208
172
|
} else if (layer.setVisible) {
|
|
209
173
|
layer.setVisible(!layer.visible);
|
|
210
174
|
} else {
|
|
211
|
-
// eslint-disable-next-line no-param-reassign
|
|
212
175
|
layer.visible = !layer.visible;
|
|
213
176
|
}
|
|
214
177
|
}
|
|
215
|
-
|
|
216
178
|
onToggle(layer) {
|
|
217
179
|
const { expandedLayers } = this.state;
|
|
218
180
|
const pos = expandedLayers.indexOf(layer);
|
|
@@ -223,7 +185,6 @@ class LayerTree extends Component {
|
|
|
223
185
|
}
|
|
224
186
|
this.setState({ expandedLayers });
|
|
225
187
|
}
|
|
226
|
-
|
|
227
188
|
/**
|
|
228
189
|
* Get the always expanded ancestors (isAlwaysExpanded=true) of the given layers
|
|
229
190
|
* together with the (given) initially expanded layers
|
|
@@ -235,20 +196,16 @@ class LayerTree extends Component {
|
|
|
235
196
|
const { isItemHidden } = this.props;
|
|
236
197
|
const children = layers.flatMap((l) => {
|
|
237
198
|
return l.children.filter((c) => {
|
|
238
|
-
return !isItemHidden(c) && c.get(
|
|
199
|
+
return !isItemHidden(c) && c.get("isAlwaysExpanded");
|
|
239
200
|
});
|
|
240
201
|
});
|
|
241
|
-
|
|
242
202
|
if (!children.length) {
|
|
243
203
|
return layers;
|
|
244
204
|
}
|
|
245
205
|
return [...layers, this.getExpandedLayers(children)].flat();
|
|
246
206
|
}
|
|
247
|
-
|
|
248
207
|
updateLayers() {
|
|
249
208
|
const { layers, expandChildren } = this.props;
|
|
250
|
-
|
|
251
|
-
// Update the root layer
|
|
252
209
|
let rootLayer = new Layer();
|
|
253
210
|
if (Array.isArray(layers)) {
|
|
254
211
|
if (layers.length === 1) {
|
|
@@ -258,156 +215,124 @@ class LayerTree extends Component {
|
|
|
258
215
|
} else {
|
|
259
216
|
rootLayer = layers;
|
|
260
217
|
}
|
|
261
|
-
|
|
262
218
|
getLayersAsFlatArray(rootLayer).forEach((layer) => {
|
|
263
219
|
this.olKeys.push(
|
|
264
|
-
layer.on(
|
|
220
|
+
layer.on("propertychange", () => {
|
|
265
221
|
const { revision } = this.state;
|
|
266
222
|
this.setState({ revision: revision + 1 });
|
|
267
|
-
})
|
|
223
|
+
})
|
|
268
224
|
);
|
|
269
225
|
});
|
|
270
|
-
|
|
271
226
|
const state = { rootLayer };
|
|
272
|
-
if (
|
|
273
|
-
typeof expandChildren === 'function'
|
|
274
|
-
? expandChildren(layers)
|
|
275
|
-
: expandChildren
|
|
276
|
-
) {
|
|
227
|
+
if (typeof expandChildren === "function" ? expandChildren(layers) : expandChildren) {
|
|
277
228
|
state.expandedLayers = rootLayer.children.flatMap((l) => {
|
|
278
229
|
return this.expandLayer(l);
|
|
279
230
|
});
|
|
280
231
|
}
|
|
281
|
-
|
|
282
232
|
this.setState(state);
|
|
283
233
|
}
|
|
284
|
-
|
|
285
234
|
expandLayer(layer, expLayers = []) {
|
|
286
235
|
const { isItemHidden } = this.props;
|
|
287
236
|
if (layer.visible && !isItemHidden(layer)) {
|
|
288
|
-
const children = layer.children
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
return this.expandLayer(c, expLayers);
|
|
294
|
-
});
|
|
237
|
+
const children = layer.children.filter((c) => {
|
|
238
|
+
return !isItemHidden(c) && !c.get("isAlwaysExpanded");
|
|
239
|
+
}).flatMap((c) => {
|
|
240
|
+
return this.expandLayer(c, expLayers);
|
|
241
|
+
});
|
|
295
242
|
return [...expLayers, ...children, layer];
|
|
296
243
|
}
|
|
297
244
|
return expLayers;
|
|
298
245
|
}
|
|
299
|
-
|
|
300
246
|
renderInput(layer, inputProps) {
|
|
301
247
|
const { titles, isItemHidden } = this.props;
|
|
302
248
|
let tabIndex = 0;
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
return !isItemHidden(c);
|
|
307
|
-
}).length
|
|
308
|
-
) {
|
|
309
|
-
// We forbid focus on keypress event for first level layers and layers without children.
|
|
249
|
+
if (!(layer.children || []).filter((c) => {
|
|
250
|
+
return !isItemHidden(c);
|
|
251
|
+
}).length) {
|
|
310
252
|
tabIndex = -1;
|
|
311
253
|
}
|
|
312
|
-
|
|
313
|
-
const inputType = layer.get('group') ? 'radio' : 'checkbox';
|
|
254
|
+
const inputType = layer.get("group") ? "radio" : "checkbox";
|
|
314
255
|
return (
|
|
315
256
|
// eslint-disable-next-line jsx-a11y/label-has-associated-control,jsx-a11y/no-noninteractive-element-interactions
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
257
|
+
/* @__PURE__ */ React.createElement(
|
|
258
|
+
"label",
|
|
259
|
+
{
|
|
260
|
+
className: `rs-layer-tree-input rs-layer-tree-input-${inputType} rs-${inputType}`,
|
|
261
|
+
tabIndex,
|
|
262
|
+
title: layer.visible ? titles.layerHide : titles.layerShow,
|
|
263
|
+
"aria-label": layer.visible ? titles.layerHide : titles.layerShow,
|
|
264
|
+
onKeyPress: (e) => {
|
|
265
|
+
if (e.which === 13) {
|
|
266
|
+
this.onInputClick(layer);
|
|
267
|
+
}
|
|
324
268
|
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
269
|
+
},
|
|
270
|
+
/* @__PURE__ */ React.createElement(
|
|
271
|
+
"input",
|
|
272
|
+
{
|
|
273
|
+
type: inputType,
|
|
274
|
+
tabIndex: -1,
|
|
275
|
+
checked: layer.visible,
|
|
276
|
+
readOnly: true,
|
|
277
|
+
onClick: () => {
|
|
278
|
+
return this.onInputClick(layer);
|
|
279
|
+
},
|
|
280
|
+
...inputProps
|
|
281
|
+
}
|
|
282
|
+
),
|
|
283
|
+
/* @__PURE__ */ React.createElement("span", null)
|
|
284
|
+
)
|
|
340
285
|
);
|
|
341
286
|
}
|
|
342
|
-
|
|
343
287
|
renderArrow(layer) {
|
|
344
288
|
const { isItemHidden } = this.props;
|
|
345
289
|
const { expandedLayers } = this.state;
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
return !isItemHidden(c);
|
|
350
|
-
}).length ||
|
|
351
|
-
layer.get('isAlwaysExpanded')
|
|
352
|
-
) {
|
|
290
|
+
if (!(layer.children || []).filter((c) => {
|
|
291
|
+
return !isItemHidden(c);
|
|
292
|
+
}).length || layer.get("isAlwaysExpanded")) {
|
|
353
293
|
return null;
|
|
354
294
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
className
|
|
359
|
-
|
|
360
|
-
}`}
|
|
361
|
-
/>
|
|
295
|
+
return /* @__PURE__ */ React.createElement(
|
|
296
|
+
"div",
|
|
297
|
+
{
|
|
298
|
+
className: `rs-layer-tree-arrow rs-layer-tree-arrow-${!expandedLayers.includes(layer) ? "collapsed" : "expanded"}`
|
|
299
|
+
}
|
|
362
300
|
);
|
|
363
301
|
}
|
|
364
|
-
|
|
365
302
|
// Render a button which expands/collapse the layer if there is children
|
|
366
303
|
// or simulate a click on the input otherwise.
|
|
367
304
|
renderToggleButton(layer, toggleProps) {
|
|
368
305
|
const { t, titles, isItemHidden, renderLabel } = this.props;
|
|
369
306
|
const { expandedLayers } = this.state;
|
|
370
|
-
|
|
371
307
|
const onInputClick = () => {
|
|
372
308
|
this.onInputClick(
|
|
373
309
|
layer,
|
|
374
310
|
(layer.children || []).filter((c) => {
|
|
375
311
|
return !isItemHidden(c);
|
|
376
|
-
}).length && !layer.get(
|
|
312
|
+
}).length && !layer.get("isAlwaysExpanded")
|
|
377
313
|
);
|
|
378
314
|
};
|
|
379
|
-
const title = `${t(layer.name)} ${
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
title
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
>
|
|
396
|
-
<div>{renderLabel(layer, this)}</div>
|
|
397
|
-
{this.renderArrow(layer)}
|
|
398
|
-
</div>
|
|
315
|
+
const title = `${t(layer.name)} ${expandedLayers.includes(layer) ? titles.subLayerHide : titles.subLayerShow}`;
|
|
316
|
+
return /* @__PURE__ */ React.createElement(
|
|
317
|
+
"div",
|
|
318
|
+
{
|
|
319
|
+
role: "button",
|
|
320
|
+
tabIndex: 0,
|
|
321
|
+
className: "rs-layer-tree-toggle",
|
|
322
|
+
title,
|
|
323
|
+
"aria-expanded": expandedLayers.includes(layer),
|
|
324
|
+
"aria-label": title,
|
|
325
|
+
onClick: onInputClick,
|
|
326
|
+
onKeyPress: onInputClick,
|
|
327
|
+
...toggleProps
|
|
328
|
+
},
|
|
329
|
+
/* @__PURE__ */ React.createElement("div", null, renderLabel(layer, this)),
|
|
330
|
+
this.renderArrow(layer)
|
|
399
331
|
);
|
|
400
332
|
}
|
|
401
|
-
|
|
402
333
|
renderItemContent(layer, inputProps = {}, toggleProps = {}) {
|
|
403
|
-
return (
|
|
404
|
-
<>
|
|
405
|
-
{this.renderInput(layer, inputProps)}
|
|
406
|
-
{this.renderToggleButton(layer, toggleProps)}
|
|
407
|
-
</>
|
|
408
|
-
);
|
|
334
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, this.renderInput(layer, inputProps), this.renderToggleButton(layer, toggleProps));
|
|
409
335
|
}
|
|
410
|
-
|
|
411
336
|
renderItem(layer, level) {
|
|
412
337
|
const { isItemHidden } = this.props;
|
|
413
338
|
const { expandedLayers } = this.state;
|
|
@@ -417,71 +342,46 @@ class LayerTree extends Component {
|
|
|
417
342
|
renderBeforeItem,
|
|
418
343
|
renderAfterItem,
|
|
419
344
|
padding,
|
|
420
|
-
getParentClassName
|
|
345
|
+
getParentClassName
|
|
421
346
|
} = this.props;
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
}),
|
|
428
|
-
]
|
|
429
|
-
: [];
|
|
430
|
-
|
|
347
|
+
const children = expandedLayers.includes(layer) ? [
|
|
348
|
+
...(layer.children || []).filter((c) => {
|
|
349
|
+
return !isItemHidden(c);
|
|
350
|
+
})
|
|
351
|
+
] : [];
|
|
431
352
|
if (renderItem) {
|
|
432
353
|
return renderItem(layer, this.onInputClick, this.onToggle);
|
|
433
354
|
}
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
</div>
|
|
447
|
-
{renderBeforeItem && renderBeforeItem(layer, level, this)}
|
|
448
|
-
{[...children].reverse().map((child) => {
|
|
449
|
-
return this.renderItem(child, level + 1);
|
|
450
|
-
})}
|
|
451
|
-
{renderAfterItem && renderAfterItem(layer, level, this)}
|
|
452
|
-
</div>
|
|
453
|
-
);
|
|
355
|
+
return /* @__PURE__ */ React.createElement("div", { className: getParentClassName(), key: layer.key }, /* @__PURE__ */ React.createElement(
|
|
356
|
+
"div",
|
|
357
|
+
{
|
|
358
|
+
className: `rs-layer-tree-item ${layer.visible ? "rs-visible" : ""}`,
|
|
359
|
+
style: {
|
|
360
|
+
paddingLeft: `${padding * level}px`
|
|
361
|
+
}
|
|
362
|
+
},
|
|
363
|
+
renderItemContent ? renderItemContent(layer, this) : this.renderItemContent(layer)
|
|
364
|
+
), renderBeforeItem && renderBeforeItem(layer, level, this), [...children].reverse().map((child) => {
|
|
365
|
+
return this.renderItem(child, level + 1);
|
|
366
|
+
}), renderAfterItem && renderAfterItem(layer, level, this));
|
|
454
367
|
}
|
|
455
|
-
|
|
456
368
|
renderTree() {
|
|
457
369
|
const { isItemHidden } = this.props;
|
|
458
370
|
const { rootLayer } = this.state;
|
|
459
|
-
|
|
460
371
|
if (!rootLayer?.children?.length) {
|
|
461
372
|
return null;
|
|
462
373
|
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
return !isItemHidden(l);
|
|
469
|
-
})
|
|
470
|
-
.reverse()
|
|
471
|
-
.map((l) => {
|
|
472
|
-
return this.renderItem(l, 0);
|
|
473
|
-
})}
|
|
474
|
-
</>
|
|
475
|
-
);
|
|
374
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, rootLayer.children.filter((l) => {
|
|
375
|
+
return !isItemHidden(l);
|
|
376
|
+
}).reverse().map((l) => {
|
|
377
|
+
return this.renderItem(l, 0);
|
|
378
|
+
}));
|
|
476
379
|
}
|
|
477
|
-
|
|
478
380
|
render() {
|
|
479
381
|
const { className } = this.props;
|
|
480
|
-
return
|
|
382
|
+
return /* @__PURE__ */ React.createElement("div", { className }, this.renderTree());
|
|
481
383
|
}
|
|
482
384
|
}
|
|
483
|
-
|
|
484
385
|
LayerTree.propTypes = propTypes;
|
|
485
386
|
LayerTree.defaultProps = defaultProps;
|
|
486
|
-
|
|
487
387
|
export default LayerTree;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/LayerTree/LayerTree.js"],
|
|
4
|
+
"sourcesContent": ["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Layer, getLayersAsFlatArray } from 'mobility-toolbox-js/ol';\nimport { unByKey } from 'ol/Observable';\n\nconst propTypes = {\n /**\n * Layers provider.\n */\n layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),\n\n /**\n * CSS class to apply on the container.\n */\n className: PropTypes.string,\n\n /**\n * Padding left to apply on each level.\n */\n padding: PropTypes.number,\n\n /**\n * Determine if the item is hidden in the tree or not.\n *\n * @param {object} item The item to hide or not.\n *\n * @return {bool} true if the item is not displayed in the tree\n */\n isItemHidden: PropTypes.func,\n\n /**\n * Determine the className used by the div containing the parent and its children.\n */\n getParentClassName: PropTypes.func,\n\n /**\n * Custom function to render an item in the tree.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderItem: PropTypes.func,\n\n /**\n * Custom function to render only the content of an item in the tree.\n * inputProps und toggleProps can be used when calling the default renderItemContent function\n * (comp.renderItemContent(layer, inputProps, toggleProps)) to overwrite the default input and label props\n *\n * @param {Layer} layer The layer the item content is created for\n * @param {LayerTree} comp The LayerTree component.\n *\n * @return {node} A jsx node.\n */\n renderItemContent: PropTypes.func,\n\n /**\n * Custom function to render custom content before the list of children of an item.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderBeforeItem: PropTypes.func,\n\n /**\n * Custom function to render custom content after the list of children of an item.\n *\n * @param {object} item The item to render.\n *\n * @return {node} A jsx node.\n */\n renderAfterItem: PropTypes.func,\n\n /**\n * Custom function to render the label.\n *\n * @param {string} item The label to render.\n * @param {LayerTree} comp The LayerTree component.\n *\n * @return {node} A jsx node.\n */\n renderLabel: PropTypes.func,\n\n /**\n * Object holding title for the layer tree's buttons.\n */\n titles: PropTypes.shape({\n /**\n * aria-label on checkbox to show layer.\n */\n layerShow: PropTypes.string,\n /**\n * aria-label on checkbox to hide layer.\n */\n layerHide: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerShow: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerHide: PropTypes.string,\n }),\n\n /**\n * Boolean determining whether children collapse/expand when their parent is toggled\n * @param {...(boolean|function)} expandChildren Boolean or function returning a boolean.\n * @return {boolean} True or false\n */\n expandChildren: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n\n /**\n * Translation function.\n * @param {function} Translation function returning the translated string.\n */\n t: PropTypes.func,\n};\n\nconst defaultProps = {\n layers: [],\n className: 'rs-layer-tree',\n padding: 30,\n isItemHidden: () => {\n return false;\n },\n getParentClassName: () => {\n return undefined;\n },\n renderItem: null,\n renderItemContent: null,\n renderBeforeItem: null,\n renderAfterItem: null,\n renderLabel: (layer, layerComp) => {\n const { t } = layerComp.props;\n return t(layer.name);\n },\n titles: {\n layerShow: 'Show layer',\n layerHide: 'Hide layer',\n subLayerShow: 'Show sublayer',\n subLayerHide: 'Hide sublayer',\n },\n t: (s) => {\n return s;\n },\n expandChildren: false,\n};\n\n/**\n * The LayerTree component renders an interface for toggling\n * [mobility-toolbox-js layers](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers)\n * and their corresponding child layers.\n */\n\nclass LayerTree extends Component {\n constructor(props) {\n super(props);\n\n const { layers, isItemHidden } = this.props;\n const initialExpandedLayers = layers\n ? this.getExpandedLayers(\n layers.filter((l) => {\n return (\n !isItemHidden(l) &&\n (l.children || [])\n .filter((child) => {\n return child.visible;\n })\n .filter((c) => {\n return !isItemHidden(c);\n }).length\n );\n }),\n )\n : [];\n\n this.state = {\n rootLayer: new Layer(),\n expandedLayers: initialExpandedLayers,\n revision: 0,\n };\n // this.updateLayers = this.updateLayers.bind(this);\n this.olKeys = [];\n }\n\n componentDidMount() {\n this.updateLayers();\n }\n\n componentDidUpdate(prevProps) {\n const { layers } = this.props;\n\n if (layers !== prevProps.layers) {\n this.updateLayers();\n }\n }\n\n componentWillUnmount() {\n unByKey(this.olKeys);\n this.olKeys = [];\n }\n\n onInputClick(layer, toggle = false) {\n if (toggle) {\n this.onToggle(layer);\n } else if (layer.setVisible) {\n layer.setVisible(!layer.visible);\n } else {\n // eslint-disable-next-line no-param-reassign\n layer.visible = !layer.visible;\n }\n }\n\n onToggle(layer) {\n const { expandedLayers } = this.state;\n const pos = expandedLayers.indexOf(layer);\n if (pos > -1) {\n expandedLayers.splice(pos, 1);\n } else {\n expandedLayers.push(...this.getExpandedLayers([layer]));\n }\n this.setState({ expandedLayers });\n }\n\n /**\n * Get the always expanded ancestors (isAlwaysExpanded=true) of the given layers\n * together with the (given) initially expanded layers\n *\n * @param {Layer} layers Initially expanded layers\n * @return {Array.<Layer>} Initially expanded layers and all its always expanded ancestors\n */\n getExpandedLayers(layers) {\n const { isItemHidden } = this.props;\n const children = layers.flatMap((l) => {\n return l.children.filter((c) => {\n return !isItemHidden(c) && c.get('isAlwaysExpanded');\n });\n });\n\n if (!children.length) {\n return layers;\n }\n return [...layers, this.getExpandedLayers(children)].flat();\n }\n\n updateLayers() {\n const { layers, expandChildren } = this.props;\n\n // Update the root layer\n let rootLayer = new Layer();\n if (Array.isArray(layers)) {\n if (layers.length === 1) {\n [rootLayer] = layers;\n }\n rootLayer = new Layer({ children: layers });\n } else {\n rootLayer = layers;\n }\n\n getLayersAsFlatArray(rootLayer).forEach((layer) => {\n this.olKeys.push(\n layer.on('propertychange', () => {\n const { revision } = this.state;\n this.setState({ revision: revision + 1 });\n }),\n );\n });\n\n const state = { rootLayer };\n if (\n typeof expandChildren === 'function'\n ? expandChildren(layers)\n : expandChildren\n ) {\n state.expandedLayers = rootLayer.children.flatMap((l) => {\n return this.expandLayer(l);\n });\n }\n\n this.setState(state);\n }\n\n expandLayer(layer, expLayers = []) {\n const { isItemHidden } = this.props;\n if (layer.visible && !isItemHidden(layer)) {\n const children = layer.children\n .filter((c) => {\n return !isItemHidden(c) && !c.get('isAlwaysExpanded');\n })\n .flatMap((c) => {\n return this.expandLayer(c, expLayers);\n });\n return [...expLayers, ...children, layer];\n }\n return expLayers;\n }\n\n renderInput(layer, inputProps) {\n const { titles, isItemHidden } = this.props;\n let tabIndex = 0;\n\n if (\n !(layer.children || []).filter((c) => {\n return !isItemHidden(c);\n }).length\n ) {\n // We forbid focus on keypress event for first level layers and layers without children.\n tabIndex = -1;\n }\n\n const inputType = layer.get('group') ? 'radio' : 'checkbox';\n return (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control,jsx-a11y/no-noninteractive-element-interactions\n <label\n className={`rs-layer-tree-input rs-layer-tree-input-${inputType} rs-${inputType}`}\n tabIndex={tabIndex}\n title={layer.visible ? titles.layerHide : titles.layerShow}\n aria-label={layer.visible ? titles.layerHide : titles.layerShow}\n onKeyPress={(e) => {\n if (e.which === 13) {\n this.onInputClick(layer);\n }\n }}\n >\n <input\n type={inputType}\n tabIndex={-1}\n checked={layer.visible}\n readOnly\n onClick={() => {\n return this.onInputClick(layer);\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...inputProps}\n />\n <span />\n </label>\n );\n }\n\n renderArrow(layer) {\n const { isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n\n if (\n !(layer.children || []).filter((c) => {\n return !isItemHidden(c);\n }).length ||\n layer.get('isAlwaysExpanded')\n ) {\n return null;\n }\n\n return (\n <div\n className={`rs-layer-tree-arrow rs-layer-tree-arrow-${\n !expandedLayers.includes(layer) ? 'collapsed' : 'expanded'\n }`}\n />\n );\n }\n\n // Render a button which expands/collapse the layer if there is children\n // or simulate a click on the input otherwise.\n renderToggleButton(layer, toggleProps) {\n const { t, titles, isItemHidden, renderLabel } = this.props;\n const { expandedLayers } = this.state;\n\n const onInputClick = () => {\n this.onInputClick(\n layer,\n (layer.children || []).filter((c) => {\n return !isItemHidden(c);\n }).length && !layer.get('isAlwaysExpanded'),\n );\n };\n const title = `${t(layer.name)} ${\n expandedLayers.includes(layer) ? titles.subLayerHide : titles.subLayerShow\n }`;\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className=\"rs-layer-tree-toggle\"\n title={title}\n aria-expanded={expandedLayers.includes(layer)}\n aria-label={title}\n onClick={onInputClick}\n onKeyPress={onInputClick}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...toggleProps}\n >\n <div>{renderLabel(layer, this)}</div>\n {this.renderArrow(layer)}\n </div>\n );\n }\n\n renderItemContent(layer, inputProps = {}, toggleProps = {}) {\n return (\n <>\n {this.renderInput(layer, inputProps)}\n {this.renderToggleButton(layer, toggleProps)}\n </>\n );\n }\n\n renderItem(layer, level) {\n const { isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n const {\n renderItem,\n renderItemContent,\n renderBeforeItem,\n renderAfterItem,\n padding,\n getParentClassName,\n } = this.props;\n\n const children = expandedLayers.includes(layer)\n ? [\n ...(layer.children || []).filter((c) => {\n return !isItemHidden(c);\n }),\n ]\n : [];\n\n if (renderItem) {\n return renderItem(layer, this.onInputClick, this.onToggle);\n }\n\n return (\n <div className={getParentClassName()} key={layer.key}>\n <div\n className={`rs-layer-tree-item ${layer.visible ? 'rs-visible' : ''}`}\n style={{\n paddingLeft: `${padding * level}px`,\n }}\n >\n {renderItemContent\n ? renderItemContent(layer, this)\n : this.renderItemContent(layer)}\n </div>\n {renderBeforeItem && renderBeforeItem(layer, level, this)}\n {[...children].reverse().map((child) => {\n return this.renderItem(child, level + 1);\n })}\n {renderAfterItem && renderAfterItem(layer, level, this)}\n </div>\n );\n }\n\n renderTree() {\n const { isItemHidden } = this.props;\n const { rootLayer } = this.state;\n\n if (!rootLayer?.children?.length) {\n return null;\n }\n\n return (\n <>\n {rootLayer.children\n .filter((l) => {\n return !isItemHidden(l);\n })\n .reverse()\n .map((l) => {\n return this.renderItem(l, 0);\n })}\n </>\n );\n }\n\n render() {\n const { className } = this.props;\n return <div className={className}>{this.renderTree()}</div>;\n }\n}\n\nLayerTree.propTypes = propTypes;\nLayerTree.defaultProps = defaultProps;\n\nexport default LayerTree;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./LayerTree";
|