react-spatial 1.12.2-beta.0 → 1.12.3-beta.0

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 (34) hide show
  1. package/README.md +3 -3
  2. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +43 -39
  3. package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +2 -2
  4. package/components/BasicMap/BasicMap.js +8 -20
  5. package/components/BasicMap/BasicMap.js.map +2 -2
  6. package/components/Copyright/Copyright.js +15 -26
  7. package/components/Copyright/Copyright.js.map +2 -2
  8. package/components/FeatureExportButton/FeatureExportButton.js +3 -3
  9. package/components/FeatureExportButton/FeatureExportButton.js.map +2 -2
  10. package/components/Geolocation/Geolocation.scss +7 -5
  11. package/components/LayerTree/LayerTree.js +113 -37
  12. package/components/LayerTree/LayerTree.js.map +2 -2
  13. package/components/LayerTree/LayerTree.scss +4 -2
  14. package/components/Permalink/Permalink.js +19 -14
  15. package/components/Permalink/Permalink.js.map +2 -2
  16. package/components/Popup/Popup.scss +3 -1
  17. package/components/RouteSchedule/RouteSchedule.md.scss +3 -1
  18. package/components/RouteSchedule/RouteSchedule.scss +3 -1
  19. package/components/ScaleLine/ScaleLine.scss +5 -3
  20. package/components/StopsFinder/StopsFinder.js +25 -31
  21. package/components/StopsFinder/StopsFinder.js.map +2 -2
  22. package/components/Zoom/Zoom.md.scss +3 -1
  23. package/components/Zoom/Zoom.scss +6 -4
  24. package/package.json +37 -39
  25. package/themes/default/components.scss +9 -9
  26. package/themes/default/examples.scss +19 -17
  27. package/themes/default/index.scss +3 -3
  28. package/themes/default/mixins.scss +7 -5
  29. package/utils/KML.js +3 -4
  30. package/utils/KML.js.map +2 -2
  31. package/utils/getLayersAsFlatArray.js +14 -0
  32. package/utils/getLayersAsFlatArray.js.map +7 -0
  33. package/images/baselayer/osm.baselayer.hot.png +0 -0
  34. package/images/baselayer/osm.baselayer.png +0 -0
@@ -1,7 +1,9 @@
1
- import { getLayersAsFlatArray, Layer } from "mobility-toolbox-js/ol";
1
+ import Layer from "ol/layer/Layer";
2
2
  import { unByKey } from "ol/Observable";
3
+ import { getUid } from "ol/util";
3
4
  import PropTypes from "prop-types";
4
5
  import React, { Component } from "react";
6
+ import getLayersAsFlatArray from "../../utils/getLayersAsFlatArray";
5
7
  const propTypes = {
6
8
  /**
7
9
  * CSS class to apply on the container.
@@ -124,9 +126,8 @@ const defaultProps = {
124
126
  renderCheckbox: null,
125
127
  renderItem: null,
126
128
  renderItemContent: null,
127
- renderLabel: (layer, layerComp) => {
128
- const { t } = layerComp.props;
129
- return t(layer.name);
129
+ renderLabel: (layer) => {
130
+ return layer?.get("name") || "";
130
131
  },
131
132
  t: (s) => {
132
133
  return s;
@@ -139,13 +140,39 @@ const defaultProps = {
139
140
  }
140
141
  };
141
142
  class LayerTree extends Component {
143
+ static getChildren = (layer) => layer?.get("children") || layer?.children || // ol.layer.group
144
+ layer?.getLayers?.().getArray() || [];
145
+ static getVisible = (layer) => layer.getVisible ? layer.getVisible() : layer.visible;
146
+ static listenGroups = (layers) => {
147
+ const flat = getLayersAsFlatArray(layers);
148
+ const keys = flat.map((layer) => {
149
+ return layer.on("change:visible", (e) => {
150
+ const { target } = e;
151
+ if (target.getVisible() && target.get("group")) {
152
+ flat.forEach((l) => {
153
+ if (l.get("group") === target.get("group") && l !== target) {
154
+ l.setVisible(false);
155
+ }
156
+ });
157
+ }
158
+ });
159
+ });
160
+ return keys;
161
+ };
162
+ static setVisible = (layer, visible) => {
163
+ if (layer.setVisible) {
164
+ layer.setVisible(visible);
165
+ return;
166
+ }
167
+ layer.visible = visible;
168
+ };
142
169
  constructor(props) {
143
170
  super(props);
144
171
  const { isItemHidden, layers } = this.props;
145
172
  const initialExpandedLayers = layers ? this.getExpandedLayers(
146
173
  layers.filter((l) => {
147
- return !isItemHidden(l) && (l.children || []).filter((child) => {
148
- return child.visible;
174
+ return !isItemHidden(l) && LayerTree.getChildren(l).filter((child) => {
175
+ return LayerTree.getVisible(child);
149
176
  }).filter((c) => {
150
177
  return !isItemHidden(c);
151
178
  }).length;
@@ -154,7 +181,7 @@ class LayerTree extends Component {
154
181
  this.state = {
155
182
  expandedLayers: initialExpandedLayers,
156
183
  revision: 0,
157
- rootLayer: new Layer()
184
+ rootLayer: new Layer({})
158
185
  };
159
186
  this.olKeys = [];
160
187
  }
@@ -173,8 +200,8 @@ class LayerTree extends Component {
173
200
  }
174
201
  expandLayer(layer, expLayers = []) {
175
202
  const { isItemHidden } = this.props;
176
- if (layer.visible && !isItemHidden(layer)) {
177
- const children = layer.children.filter((c) => {
203
+ if (LayerTree.getVisible(layer) && !isItemHidden(layer)) {
204
+ const children = LayerTree.getChildren(layer).filter((c) => {
178
205
  return !isItemHidden(c) && !c.get("isAlwaysExpanded");
179
206
  }).flatMap((c) => {
180
207
  return this.expandLayer(c, expLayers);
@@ -193,7 +220,7 @@ class LayerTree extends Component {
193
220
  getExpandedLayers(layers) {
194
221
  const { isItemHidden } = this.props;
195
222
  const children = layers.flatMap((l) => {
196
- return l.children.filter((c) => {
223
+ return LayerTree.getChildren(l).filter((c) => {
197
224
  return !isItemHidden(c) && c.get("isAlwaysExpanded");
198
225
  });
199
226
  });
@@ -205,10 +232,8 @@ class LayerTree extends Component {
205
232
  onInputClick(layer, toggle = false) {
206
233
  if (toggle) {
207
234
  this.onToggle(layer);
208
- } else if (layer.setVisible) {
209
- layer.setVisible(!layer.visible);
210
235
  } else {
211
- layer.visible = !layer.visible;
236
+ LayerTree.setVisible(layer, !LayerTree.getVisible(layer));
212
237
  }
213
238
  }
214
239
  onToggle(layer) {
@@ -228,7 +253,7 @@ class LayerTree extends Component {
228
253
  renderArrow(layer) {
229
254
  const { isItemHidden } = this.props;
230
255
  const { expandedLayers } = this.state;
231
- if (!(layer.children || []).filter((c) => {
256
+ if (!LayerTree.getChildren(layer).filter((c) => {
232
257
  return !isItemHidden(c);
233
258
  }).length || layer.get("isAlwaysExpanded")) {
234
259
  return null;
@@ -243,7 +268,7 @@ class LayerTree extends Component {
243
268
  renderInput(layer, inputProps) {
244
269
  const { isItemHidden, renderCheckbox, titles } = this.props;
245
270
  let tabIndex = 0;
246
- if (!(layer.children || []).filter((c) => {
271
+ if (!LayerTree.getChildren(layer).filter((c) => {
247
272
  return !isItemHidden(c);
248
273
  }).length) {
249
274
  tabIndex = -1;
@@ -254,7 +279,6 @@ class LayerTree extends Component {
254
279
  /* @__PURE__ */ React.createElement(
255
280
  "label",
256
281
  {
257
- "aria-label": layer.visible ? titles.layerHide : titles.layerShow,
258
282
  className: `rs-layer-tree-input rs-layer-tree-input-${inputType} rs-${inputType}`,
259
283
  onKeyPress: (e) => {
260
284
  if (e.which === 13) {
@@ -262,12 +286,12 @@ class LayerTree extends Component {
262
286
  }
263
287
  },
264
288
  tabIndex,
265
- title: layer.visible ? titles.layerHide : titles.layerShow
289
+ title: LayerTree.getVisible(layer) ? titles.layerHide : titles.layerShow
266
290
  },
267
291
  /* @__PURE__ */ React.createElement(
268
292
  "input",
269
293
  {
270
- checked: layer.visible,
294
+ checked: LayerTree.getVisible(layer),
271
295
  onClick: () => {
272
296
  return this.onInputClick(layer);
273
297
  },
@@ -281,7 +305,6 @@ class LayerTree extends Component {
281
305
  )
282
306
  );
283
307
  }
284
- // Render a button which expands/collapse the layer if there is children
285
308
  renderItem(layer, level) {
286
309
  const { isItemHidden } = this.props;
287
310
  const { expandedLayers } = this.state;
@@ -294,42 +317,53 @@ class LayerTree extends Component {
294
317
  renderItemContent
295
318
  } = this.props;
296
319
  const children = expandedLayers.includes(layer) ? [
297
- ...(layer.children || []).filter((c) => {
320
+ ...LayerTree.getChildren(layer).filter((c) => {
298
321
  return !isItemHidden(c);
299
322
  })
300
323
  ] : [];
301
324
  if (renderItem) {
302
325
  return renderItem(layer, this.onInputClick, this.onToggle);
303
326
  }
304
- return /* @__PURE__ */ React.createElement("div", { className: getParentClassName(), key: layer.key }, /* @__PURE__ */ React.createElement(
327
+ return /* @__PURE__ */ React.createElement(
305
328
  "div",
306
329
  {
307
- className: `rs-layer-tree-item ${layer.visible ? "rs-visible" : ""}`,
308
- style: {
309
- paddingLeft: `${padding * level}px`
310
- }
330
+ className: getParentClassName(),
331
+ key: layer.key || layer.get("key") || layer.get("name") || getUid(layer)
311
332
  },
312
- renderItemContent ? renderItemContent(layer, this) : this.renderItemContent(layer)
313
- ), renderBeforeItem && renderBeforeItem(layer, level, this), [...children].reverse().map((child) => {
314
- return this.renderItem(child, level + 1);
315
- }), renderAfterItem && renderAfterItem(layer, level, this));
333
+ /* @__PURE__ */ React.createElement(
334
+ "div",
335
+ {
336
+ className: `rs-layer-tree-item ${LayerTree.getVisible(layer) ? "rs-visible" : ""}`,
337
+ style: {
338
+ paddingLeft: `${padding * level}px`
339
+ }
340
+ },
341
+ renderItemContent ? renderItemContent(layer, this) : this.renderItemContent(layer)
342
+ ),
343
+ renderBeforeItem && renderBeforeItem(layer, level, this),
344
+ [...children].reverse().map((child) => {
345
+ return this.renderItem(child, level + 1);
346
+ }),
347
+ renderAfterItem && renderAfterItem(layer, level, this)
348
+ );
316
349
  }
317
350
  renderItemContent(layer, inputProps = {}, toggleProps = {}) {
318
351
  return /* @__PURE__ */ React.createElement(React.Fragment, null, this.renderInput(layer, inputProps), this.renderToggleButton(layer, toggleProps));
319
352
  }
353
+ // Render a button which expands/collapse the layer if there is children
320
354
  // or simulate a click on the input otherwise.
321
355
  renderToggleButton(layer, toggleProps) {
322
- const { isItemHidden, renderLabel, t, titles } = this.props;
356
+ const { isItemHidden, renderLabel, titles } = this.props;
323
357
  const { expandedLayers } = this.state;
324
358
  const onInputClick = () => {
325
359
  this.onInputClick(
326
360
  layer,
327
- (layer.children || []).filter((c) => {
361
+ LayerTree.getChildren(layer).filter((c) => {
328
362
  return !isItemHidden(c);
329
363
  }).length && !layer.get("isAlwaysExpanded")
330
364
  );
331
365
  };
332
- const title = `${t(layer.name)} ${expandedLayers.includes(layer) ? titles.subLayerHide : titles.subLayerShow}`;
366
+ const title = `${renderLabel(layer, this)} ${expandedLayers.includes(layer) ? titles.subLayerHide : titles.subLayerShow}`;
333
367
  return /* @__PURE__ */ React.createElement(
334
368
  "div",
335
369
  {
@@ -350,10 +384,10 @@ class LayerTree extends Component {
350
384
  renderTree() {
351
385
  const { isItemHidden } = this.props;
352
386
  const { rootLayer } = this.state;
353
- if (!rootLayer?.children?.length) {
387
+ if (!LayerTree.getChildren(rootLayer).length) {
354
388
  return null;
355
389
  }
356
- return /* @__PURE__ */ React.createElement(React.Fragment, null, rootLayer.children.filter((l) => {
390
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, LayerTree.getChildren(rootLayer).filter((l) => {
357
391
  return !isItemHidden(l);
358
392
  }).reverse().map((l) => {
359
393
  return this.renderItem(l, 0);
@@ -361,7 +395,7 @@ class LayerTree extends Component {
361
395
  }
362
396
  updateLayers() {
363
397
  const { expandChildren, layers } = this.props;
364
- let rootLayer = new Layer();
398
+ let rootLayer = new Layer({});
365
399
  if (Array.isArray(layers)) {
366
400
  if (layers.length === 1) {
367
401
  [rootLayer] = layers;
@@ -370,17 +404,59 @@ class LayerTree extends Component {
370
404
  } else {
371
405
  rootLayer = layers;
372
406
  }
373
- getLayersAsFlatArray(rootLayer).forEach((layer) => {
407
+ const flat = getLayersAsFlatArray(rootLayer);
408
+ flat.forEach((layer) => {
374
409
  this.olKeys.push(
375
410
  layer.on("propertychange", () => {
376
411
  const { revision } = this.state;
377
412
  this.setState({ revision: revision + 1 });
413
+ }),
414
+ // Manage group visibility
415
+ layer.on("change:visible", (evt) => {
416
+ const { target } = evt;
417
+ if (target.getVisible() && target.get("group")) {
418
+ flat.forEach((l) => {
419
+ if (l.get("group") === target.get("group") && l !== target) {
420
+ l.setVisible(false);
421
+ }
422
+ });
423
+ }
424
+ }),
425
+ // Manage parent/children visibility
426
+ layer.on("change:visible", (evt) => {
427
+ const { target } = evt;
428
+ const parent = target.get("parent");
429
+ const children = LayerTree.getChildren(target);
430
+ if (target.getVisible()) {
431
+ if (parent) {
432
+ parent.setVisible(true);
433
+ }
434
+ if (children && !children.some((child) => child.getVisible())) {
435
+ children.forEach((child) => {
436
+ child.setVisible(true);
437
+ });
438
+ }
439
+ } else {
440
+ children.forEach((child) => {
441
+ child.setVisible(false);
442
+ });
443
+ if (parent?.getVisible() && !parent?.get("children").find((child) => child.getVisible())) {
444
+ parent.setVisible(false);
445
+ }
446
+ }
378
447
  })
379
448
  );
380
449
  });
450
+ flat.forEach((layer) => {
451
+ const children = LayerTree.getChildren(layer);
452
+ children.forEach((child) => {
453
+ child.set("parent", layer);
454
+ });
455
+ });
381
456
  const state = { rootLayer };
382
457
  if (typeof expandChildren === "function" ? expandChildren(layers) : expandChildren) {
383
- state.expandedLayers = rootLayer.children.flatMap((l) => {
458
+ const children = LayerTree.getChildren(rootLayer);
459
+ state.expandedLayers = children.flatMap((l) => {
384
460
  return this.expandLayer(l);
385
461
  });
386
462
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/LayerTree/LayerTree.js"],
4
- "sourcesContent": ["import { getLayersAsFlatArray, Layer } from \"mobility-toolbox-js/ol\";\nimport { unByKey } from \"ol/Observable\";\nimport PropTypes from \"prop-types\";\nimport React, { Component } from \"react\";\n\nconst propTypes = {\n /**\n * CSS class to apply on the container.\n */\n className: PropTypes.string,\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 * Determine the className used by the div containing the parent and its children.\n */\n getParentClassName: PropTypes.func,\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 * Layers provider.\n */\n layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),\n\n /**\n * Padding left to apply on each level.\n */\n padding: PropTypes.number,\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 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 the checkbox.\n */\n renderCheckbox: 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 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 * Translation function.\n * @param {function} Translation function returning the translated string.\n */\n t: 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 hide layer.\n */\n layerHide: PropTypes.string,\n /**\n * aria-label on checkbox to show layer.\n */\n layerShow: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerHide: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerShow: PropTypes.string,\n }),\n};\n\nconst defaultProps = {\n className: \"rs-layer-tree\",\n expandChildren: false,\n getParentClassName: () => {\n return undefined;\n },\n isItemHidden: () => {\n return false;\n },\n layers: [],\n padding: 30,\n renderAfterItem: null,\n renderBeforeItem: null,\n renderCheckbox: null,\n renderItem: null,\n renderItemContent: null,\n renderLabel: (layer, layerComp) => {\n const { t } = layerComp.props;\n return t(layer.name);\n },\n t: (s) => {\n return s;\n },\n titles: {\n layerHide: \"Hide layer\",\n layerShow: \"Show layer\",\n subLayerHide: \"Hide sublayer\",\n subLayerShow: \"Show sublayer\",\n },\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 { isItemHidden, layers } = 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 expandedLayers: initialExpandedLayers,\n revision: 0,\n rootLayer: new Layer(),\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 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 /**\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 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 render() {\n const { className } = this.props;\n return <div className={className}>{this.renderTree()}</div>;\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 renderInput(layer, inputProps) {\n const { isItemHidden, renderCheckbox, titles } = 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 renderCheckbox ? (\n renderCheckbox(layer, this, inputProps)\n ) : (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control,jsx-a11y/no-noninteractive-element-interactions\n <label\n aria-label={layer.visible ? titles.layerHide : titles.layerShow}\n className={`rs-layer-tree-input rs-layer-tree-input-${inputType} rs-${inputType}`}\n onKeyPress={(e) => {\n if (e.which === 13) {\n this.onInputClick(layer);\n }\n }}\n tabIndex={tabIndex}\n title={layer.visible ? titles.layerHide : titles.layerShow}\n >\n <input\n checked={layer.visible}\n onClick={() => {\n return this.onInputClick(layer);\n }}\n readOnly\n tabIndex={-1}\n type={inputType}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...inputProps}\n />\n <span />\n </label>\n );\n }\n\n // Render a button which expands/collapse the layer if there is children\n renderItem(layer, level) {\n const { isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n const {\n getParentClassName,\n padding,\n renderAfterItem,\n renderBeforeItem,\n renderItem,\n renderItemContent,\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 renderItemContent(layer, inputProps = {}, toggleProps = {}) {\n return (\n <>\n {this.renderInput(layer, inputProps)}\n {this.renderToggleButton(layer, toggleProps)}\n </>\n );\n }\n\n // or simulate a click on the input otherwise.\n renderToggleButton(layer, toggleProps) {\n const { isItemHidden, renderLabel, t, titles } = 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 aria-expanded={expandedLayers.includes(layer)}\n aria-label={title}\n className=\"rs-layer-tree-toggle\"\n onClick={onInputClick}\n onKeyPress={onInputClick}\n role=\"button\"\n tabIndex={0}\n title={title}\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 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 updateLayers() {\n const { expandChildren, layers } = 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\nLayerTree.propTypes = propTypes;\nLayerTree.defaultProps = defaultProps;\n\nexport default LayerTree;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import Layer from \"ol/layer/Layer\";\nimport { unByKey } from \"ol/Observable\";\nimport { getUid } from \"ol/util\";\nimport PropTypes from \"prop-types\";\nimport React, { Component } from \"react\";\n\nimport getLayersAsFlatArray from \"../../utils/getLayersAsFlatArray\";\n\nconst propTypes = {\n /**\n * CSS class to apply on the container.\n */\n className: PropTypes.string,\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 * Determine the className used by the div containing the parent and its children.\n */\n getParentClassName: PropTypes.func,\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 * Layers provider.\n */\n layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),\n\n /**\n * Padding left to apply on each level.\n */\n padding: PropTypes.number,\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 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 the checkbox.\n */\n renderCheckbox: 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 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 * Translation function.\n * @param {function} Translation function returning the translated string.\n */\n t: 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 hide layer.\n */\n layerHide: PropTypes.string,\n /**\n * aria-label on checkbox to show layer.\n */\n layerShow: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerHide: PropTypes.string,\n /**\n * title on button to show sublayers.\n */\n subLayerShow: PropTypes.string,\n }),\n};\n\nconst defaultProps = {\n className: \"rs-layer-tree\",\n expandChildren: false,\n getParentClassName: () => {\n return undefined;\n },\n isItemHidden: () => {\n return false;\n },\n layers: [],\n padding: 30,\n renderAfterItem: null,\n renderBeforeItem: null,\n renderCheckbox: null,\n renderItem: null,\n renderItemContent: null,\n renderLabel: (layer) => {\n return layer?.get(\"name\") || \"\";\n },\n t: (s) => {\n return s;\n },\n titles: {\n layerHide: \"Hide layer\",\n layerShow: \"Show layer\",\n subLayerHide: \"Hide sublayer\",\n subLayerShow: \"Show sublayer\",\n },\n};\n\n/**\n * The LayerTree component renders an interface for toggling layers visibility.\n * and their corresponding child layers.\n */\n\nclass LayerTree extends Component {\n static getChildren = (layer) =>\n layer?.get(\"children\") ||\n layer?.children ||\n // ol.layer.group\n layer?.getLayers?.().getArray() ||\n [];\n\n static getVisible = (layer) =>\n layer.getVisible ? layer.getVisible() : layer.visible;\n\n static listenGroups = (layers) => {\n const flat = getLayersAsFlatArray(layers);\n const keys = flat.map((layer) => {\n return layer.on(\"change:visible\", (e) => {\n const { target } = e;\n if (target.getVisible() && target.get(\"group\")) {\n flat.forEach((l) => {\n if (l.get(\"group\") === target.get(\"group\") && l !== target) {\n l.setVisible(false);\n }\n });\n }\n });\n });\n return keys;\n };\n\n static setVisible = (layer, visible) => {\n if (layer.setVisible) {\n layer.setVisible(visible);\n return;\n }\n // eslint-disable-next-line no-param-reassign\n layer.visible = visible;\n };\n\n constructor(props) {\n super(props);\n\n const { isItemHidden, layers } = this.props;\n const initialExpandedLayers = layers\n ? this.getExpandedLayers(\n layers.filter((l) => {\n return (\n !isItemHidden(l) &&\n LayerTree.getChildren(l)\n .filter((child) => {\n return LayerTree.getVisible(child);\n })\n .filter((c) => {\n return !isItemHidden(c);\n }).length\n );\n }),\n )\n : [];\n\n this.state = {\n expandedLayers: initialExpandedLayers,\n revision: 0,\n rootLayer: new Layer({}),\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 expandLayer(layer, expLayers = []) {\n const { isItemHidden } = this.props;\n if (LayerTree.getVisible(layer) && !isItemHidden(layer)) {\n const children = LayerTree.getChildren(layer)\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 /**\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 LayerTree.getChildren(l).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 onInputClick(layer, toggle = false) {\n if (toggle) {\n this.onToggle(layer);\n } else {\n LayerTree.setVisible(layer, !LayerTree.getVisible(layer));\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 render() {\n const { className } = this.props;\n return <div className={className}>{this.renderTree()}</div>;\n }\n\n renderArrow(layer) {\n const { isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n\n if (\n !LayerTree.getChildren(layer).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 renderInput(layer, inputProps) {\n const { isItemHidden, renderCheckbox, titles } = this.props;\n let tabIndex = 0;\n\n if (\n !LayerTree.getChildren(layer).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 renderCheckbox ? (\n renderCheckbox(layer, this, inputProps)\n ) : (\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 onKeyPress={(e) => {\n if (e.which === 13) {\n this.onInputClick(layer);\n }\n }}\n tabIndex={tabIndex}\n title={\n LayerTree.getVisible(layer) ? titles.layerHide : titles.layerShow\n }\n >\n <input\n checked={LayerTree.getVisible(layer)}\n onClick={() => {\n return this.onInputClick(layer);\n }}\n readOnly\n tabIndex={-1}\n type={inputType}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...inputProps}\n />\n <span />\n </label>\n );\n }\n\n renderItem(layer, level) {\n const { isItemHidden } = this.props;\n const { expandedLayers } = this.state;\n const {\n getParentClassName,\n padding,\n renderAfterItem,\n renderBeforeItem,\n renderItem,\n renderItemContent,\n } = this.props;\n\n const children = expandedLayers.includes(layer)\n ? [\n ...LayerTree.getChildren(layer).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\n className={getParentClassName()}\n key={\n layer.key || layer.get(\"key\") || layer.get(\"name\") || getUid(layer)\n }\n >\n <div\n className={`rs-layer-tree-item ${LayerTree.getVisible(layer) ? \"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 renderItemContent(layer, inputProps = {}, toggleProps = {}) {\n return (\n <>\n {this.renderInput(layer, inputProps)}\n {this.renderToggleButton(layer, toggleProps)}\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 { isItemHidden, renderLabel, titles } = this.props;\n const { expandedLayers } = this.state;\n\n const onInputClick = () => {\n this.onInputClick(\n layer,\n LayerTree.getChildren(layer).filter((c) => {\n return !isItemHidden(c);\n }).length && !layer.get(\"isAlwaysExpanded\"),\n );\n };\n const title = `${renderLabel(layer, this)} ${\n expandedLayers.includes(layer) ? titles.subLayerHide : titles.subLayerShow\n }`;\n\n return (\n <div\n aria-expanded={expandedLayers.includes(layer)}\n aria-label={title}\n className=\"rs-layer-tree-toggle\"\n onClick={onInputClick}\n onKeyPress={onInputClick}\n role=\"button\"\n tabIndex={0}\n title={title}\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 renderTree() {\n const { isItemHidden } = this.props;\n const { rootLayer } = this.state;\n\n if (!LayerTree.getChildren(rootLayer).length) {\n return null;\n }\n\n return (\n <>\n {LayerTree.getChildren(rootLayer)\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 updateLayers() {\n const { expandChildren, layers } = 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 const flat = getLayersAsFlatArray(rootLayer);\n flat.forEach((layer) => {\n this.olKeys.push(\n layer.on(\"propertychange\", () => {\n const { revision } = this.state;\n this.setState({ revision: revision + 1 });\n }),\n\n // Manage group visibility\n layer.on(\"change:visible\", (evt) => {\n const { target } = evt;\n if (target.getVisible() && target.get(\"group\")) {\n flat.forEach((l) => {\n if (l.get(\"group\") === target.get(\"group\") && l !== target) {\n l.setVisible(false);\n }\n });\n }\n }),\n\n // Manage parent/children visibility\n layer.on(\"change:visible\", (evt) => {\n const { target } = evt;\n const parent = target.get(\"parent\");\n const children = LayerTree.getChildren(target);\n\n if (target.getVisible()) {\n // We make the parent visible\n if (parent) {\n parent.setVisible(true);\n }\n\n // If children doesn't contain any visible layers, we display all children.\n if (children && !children.some((child) => child.getVisible())) {\n children.forEach((child) => {\n child.setVisible(true);\n });\n }\n } else {\n // We hide all the children\n children.forEach((child) => {\n child.setVisible(false);\n });\n\n // If the parent has no more visible child we also hide it.\n if (\n parent?.getVisible() &&\n !parent?.get(\"children\").find((child) => child.getVisible())\n ) {\n parent.setVisible(false);\n }\n }\n }),\n );\n });\n\n // Set parent property.\n flat.forEach((layer) => {\n const children = LayerTree.getChildren(layer);\n children.forEach((child) => {\n child.set(\"parent\", layer);\n });\n });\n\n const state = { rootLayer };\n if (\n typeof expandChildren === \"function\"\n ? expandChildren(layers)\n : expandChildren\n ) {\n const children = LayerTree.getChildren(rootLayer);\n state.expandedLayers = children.flatMap((l) => {\n return this.expandLayer(l);\n });\n }\n\n this.setState(state);\n }\n}\n\nLayerTree.propTypes = propTypes;\nLayerTree.defaultProps = defaultProps;\n\nexport default LayerTree;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,5 @@
1
+ @use "../../themes/default/variables";
2
+
1
3
  .rs-layer-tree {
2
4
  width: 100%;
3
5
  overflow-y: auto;
@@ -111,7 +113,7 @@
111
113
  top: 1px;
112
114
  width: 5px;
113
115
  height: 10px;
114
- border: solid $brand-primary;
116
+ border: solid variables.$brand-primary;
115
117
  border-width: 0 1px 1px 0;
116
118
  transform: rotate(45deg);
117
119
  }
@@ -123,7 +125,7 @@
123
125
  width: 12px;
124
126
  height: 12px;
125
127
  border-radius: 50%;
126
- background: $brand-primary;
128
+ background: variables.$brand-primary;
127
129
  }
128
130
 
129
131
  label input:checked ~ span::after {
@@ -1,8 +1,9 @@
1
- import { getLayersAsFlatArray, Layer } from "mobility-toolbox-js/ol";
1
+ import Layer from "ol/layer/Layer";
2
2
  import OLMap from "ol/Map";
3
3
  import { unByKey } from "ol/Observable";
4
4
  import PropTypes from "prop-types";
5
5
  import { PureComponent } from "react";
6
+ import getLayersAsFlatArray from "../../utils/getLayersAsFlatArray";
6
7
  const propTypes = {
7
8
  /**
8
9
  * Maximum number of decimals allowed for coordinates.
@@ -83,14 +84,14 @@ class Permalink extends PureComponent {
83
84
  if (urlParams.get("layers")) {
84
85
  const visibleLayers = urlParams.get("layers").split(",");
85
86
  getLayersAsFlatArray(layers).forEach((l) => {
86
- if (visibleLayers.includes(l.key)) {
87
+ if (visibleLayers.includes(l.key || l.get("key"))) {
87
88
  if (l.setVisible) {
88
89
  l.setVisible(true);
89
90
  } else {
90
91
  l.visible = true;
91
92
  }
92
- } else if (!isBaseLayer(l) && !isLayerHidden(l) && !l.children.some((ll) => {
93
- return ll.visible;
93
+ } else if (!isBaseLayer(l) && !isLayerHidden(l) && !(l.children || l.get("children")).some((ll) => {
94
+ return ll.getVisible ? ll.getVisible() : ll.visible;
94
95
  })) {
95
96
  if (l.setVisible) {
96
97
  l.setVisible(false);
@@ -105,7 +106,8 @@ class Permalink extends PureComponent {
105
106
  )[0];
106
107
  if (visibleBaseLayer) {
107
108
  getLayersAsFlatArray(layers).filter(isBaseLayer).forEach((baseLayer) => {
108
- const visible = baseLayer.key === visibleBaseLayer;
109
+ const key = baseLayer.key || baseLayer.get("key");
110
+ const visible = key === visibleBaseLayer;
109
111
  if (baseLayer.setVisible) {
110
112
  baseLayer.setVisible(visible);
111
113
  } else {
@@ -203,37 +205,40 @@ class Permalink extends PureComponent {
203
205
  let layersParam;
204
206
  if (layers.length) {
205
207
  layersParam = getLayersAsFlatArray(layers).filter((l) => {
206
- const children = l.children || [];
208
+ const children = l.get("children") || l.children || [];
207
209
  const allChildrenHidden = children.every((child) => {
208
210
  return isLayerHidden(child);
209
211
  });
210
212
  const hasVisibleChildren = children.some((child) => {
211
- return child.visible;
213
+ return child.getVisible ? child.getVisible() : child.visible;
212
214
  });
213
- return !isBaseLayer(l) && !isLayerHidden(l) && l.visible && (!hasVisibleChildren || allChildrenHidden);
215
+ const isVisible = l.getVisible ? l.getVisible() : l.visible;
216
+ return !isBaseLayer(l) && !isLayerHidden(l) && isVisible && (!hasVisibleChildren || allChildrenHidden);
214
217
  }).map((l) => {
215
- return l.key;
218
+ return l.key || l.get("key");
216
219
  }).join();
217
220
  }
218
221
  let baseLayersParam;
219
222
  const baseLayers = getLayersAsFlatArray(layers).filter(isBaseLayer);
220
223
  if (baseLayers.length) {
221
224
  const visibleBaseLayers = (baseLayers.filter((l) => {
222
- return l.visible;
225
+ return l.getVisible ? l.getVisible() : l.visible;
223
226
  }) || []).reverse();
224
227
  const nonVisibleBaseLayers = baseLayers.filter((l) => {
225
- return !l.visible;
228
+ return !(l.getVisible ? l.getVisible() : l.visible);
226
229
  }) || [];
227
230
  baseLayersParam = [...visibleBaseLayers, ...nonVisibleBaseLayers].sort((a, b) => {
228
- if (a.visible === b.visible) {
231
+ const aVisible = a.getVisible ? a.getVisible() : a.visible;
232
+ const bVisible = b.getVisible ? b.getVisible() : b.visible;
233
+ if (aVisible === bVisible) {
229
234
  return 0;
230
235
  }
231
- if (a.visible && !b.visible) {
236
+ if (aVisible && !bVisible) {
232
237
  return -1;
233
238
  }
234
239
  return 1;
235
240
  }).map((l) => {
236
- return l.key;
241
+ return l.key || l.get("key");
237
242
  }).join();
238
243
  }
239
244
  this.setState({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/Permalink/Permalink.js"],
4
- "sourcesContent": ["import { getLayersAsFlatArray, Layer } from \"mobility-toolbox-js/ol\";\nimport OLMap from \"ol/Map\";\nimport { unByKey } from \"ol/Observable\";\nimport PropTypes from \"prop-types\";\nimport { PureComponent } from \"react\";\n\nconst propTypes = {\n /**\n * Maximum number of decimals allowed for coordinates.\n */\n coordinateDecimals: PropTypes.number,\n\n /**\n * Either 'react-router' history object:\n * https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/history.md<br>\n * or default fallback as HTML5 History:\n * https://developer.mozilla.org/en-US/docs/Web/API/History\n */\n history: PropTypes.shape({\n replace: PropTypes.func,\n }),\n\n /**\n * Determine if the layer appears in the baselayers permalink parameter 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 baselayers permalink parameter\n */\n isBaseLayer: PropTypes.func,\n\n /**\n * Determine if the layer is hidden in the permalink 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 permalink\n */\n isLayerHidden: PropTypes.func,\n\n /**\n * Layers provider.\n */\n layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),\n\n /**\n * An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n */\n map: PropTypes.instanceOf(OLMap),\n\n /**\n * Params to be written in url.\n */\n params: PropTypes.object,\n\n /**\n * Custom function to be called when the permalink is updated.\n * This property has priority over the history parameter and window.history.replaceState calls.\n */\n replace: PropTypes.func,\n};\n\nconst defaultProps = {\n coordinateDecimals: 2,\n history: null,\n isBaseLayer: (layer) => {\n return layer.get(\"isBaseLayer\");\n },\n isLayerHidden: () => {\n return false;\n },\n layers: [],\n map: null,\n params: {},\n replace: null,\n};\n\n/**\n * This component handles permalink logic. Injecting an\n * __[ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)__\n * will add the *map center* (x, y) and the *zoom* (z) parameters to the permalink.\n * Injecting layers will add the *baselayers* and/or *layers* parameters. Further parameters can\n * be added using __params__.\n */\nclass Permalink extends PureComponent {\n constructor(props) {\n super(props);\n this.state = { revision: 0 };\n this.onPropertyChangeKeys = [];\n }\n\n componentDidMount() {\n const { isBaseLayer, isLayerHidden, layers, map } = this.props;\n if (map) {\n this.moveEndRef = map.on(\"moveend\", () => {\n this.onMapMoved();\n });\n }\n\n if (layers) {\n // set layer visibility based on 'layers' parameter.\n const urlParams = new URLSearchParams(window.location.search);\n\n if (urlParams.get(\"layers\")) {\n const visibleLayers = urlParams.get(\"layers\").split(\",\");\n getLayersAsFlatArray(layers).forEach((l) => {\n if (visibleLayers.includes(l.key)) {\n if (l.setVisible) {\n l.setVisible(true);\n } else {\n // eslint-disable-next-line no-param-reassign\n l.visible = true;\n }\n } else if (\n !isBaseLayer(l) &&\n !isLayerHidden(l) &&\n !l.children.some((ll) => {\n return ll.visible;\n })\n ) {\n if (l.setVisible) {\n l.setVisible(false);\n } else {\n // eslint-disable-next-line no-param-reassign\n l.visible = false;\n }\n }\n });\n }\n\n // Set baser layer visibility based on 'baseLayers' parameter.\n // Show the first of the list then hide the others\n const visibleBaseLayer = (urlParams.get(\"baselayers\") || \"\").split(\n \",\",\n )[0];\n if (visibleBaseLayer) {\n getLayersAsFlatArray(layers)\n .filter(isBaseLayer)\n .forEach((baseLayer) => {\n const visible = baseLayer.key === visibleBaseLayer;\n if (baseLayer.setVisible) {\n baseLayer.setVisible(visible);\n } else {\n // eslint-disable-next-line no-param-reassign\n baseLayer.visible = visible;\n }\n });\n }\n this.updateLayers();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { layers, map } = this.props;\n const { revision } = this.state;\n\n if (layers !== prevProps.layers || revision !== prevState.revision) {\n this.updateLayers();\n }\n\n if (map !== prevProps.map) {\n unByKey(this.moveEndRef);\n this.moveEndRef = map.on(\"moveend\", () => {\n return this.onMapMoved();\n });\n }\n\n this.updateHistory();\n }\n\n componentWillUnmount() {\n const { map } = this.props;\n\n if (map) {\n unByKey(this.moveEndRef);\n }\n unByKey(this.onPropertyChangeKeys);\n this.onPropertyChangeKeys = [];\n }\n\n onMapMoved() {\n const { map } = this.props;\n const mapView = map.getView();\n const center = mapView.getCenter();\n const params = {};\n\n if (\n center !== undefined &&\n center[0] !== undefined &&\n center[1] !== undefined\n ) {\n params.x = this.roundCoord(center[0]);\n params.y = this.roundCoord(center[1]);\n }\n\n this.setState({\n ...params,\n // rounds zoom to two digits max.\n z: +`${Math.round(`${parseFloat(mapView.getZoom())}e+2`)}e-2`,\n });\n }\n\n render() {\n return null;\n }\n\n roundCoord(val) {\n const { coordinateDecimals } = this.props;\n return parseFloat(val.toFixed(coordinateDecimals));\n }\n\n updateHistory() {\n const { history, params, replace } = this.props;\n const oldParams = new URLSearchParams(window.location.search);\n const parameters = {\n ...Object.fromEntries(oldParams.entries()),\n ...this.state,\n ...params,\n };\n\n delete parameters.revision;\n\n // Remove parameters that are undefined or null\n Object.entries(parameters).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n delete parameters[key];\n }\n });\n\n // We don't encode the , to leave the permalink lisible\n const qStr = new URLSearchParams(parameters)\n .toString()\n .replace(/%2C/g, \",\");\n const search = qStr ? `?${qStr}` : \"\";\n\n if (\n (!qStr && window.location.search) ||\n (qStr && search !== window.location.search)\n ) {\n if (replace) {\n replace({ parameters, search });\n } else if (history) {\n history.replace({ search });\n } else {\n const { hash } = window.location;\n window.history.replaceState(\n undefined,\n undefined,\n `${search}${hash || \"\"}`,\n );\n }\n }\n }\n\n updateLayers() {\n const { isBaseLayer, isLayerHidden, layers } = this.props;\n const { revision } = this.state;\n\n unByKey(this.onPropertyChangeKeys);\n this.onPropertyChangeKeys = getLayersAsFlatArray(layers).map((layer) => {\n return layer.on(\"change:visible\", () => {\n this.setState({ revision: revision + 1 });\n });\n });\n\n // layers param\n let layersParam;\n if (layers.length) {\n layersParam = getLayersAsFlatArray(layers)\n .filter((l) => {\n const children = l.children || [];\n const allChildrenHidden = children.every((child) => {\n return isLayerHidden(child);\n });\n const hasVisibleChildren = children.some((child) => {\n return child.visible;\n });\n return (\n !isBaseLayer(l) &&\n !isLayerHidden(l) &&\n l.visible &&\n (!hasVisibleChildren || allChildrenHidden)\n );\n })\n .map((l) => {\n return l.key;\n })\n .join();\n }\n\n // baselayers param\n let baseLayersParam;\n const baseLayers = getLayersAsFlatArray(layers).filter(isBaseLayer);\n if (baseLayers.length) {\n // First baselayers in order of visibility, top layer is first\n const visibleBaseLayers = (\n baseLayers.filter((l) => {\n return l.visible;\n }) || []\n ).reverse();\n const nonVisibleBaseLayers =\n baseLayers.filter((l) => {\n return !l.visible;\n }) || [];\n baseLayersParam = [...visibleBaseLayers, ...nonVisibleBaseLayers]\n .sort((a, b) => {\n if (a.visible === b.visible) {\n return 0;\n }\n if (a.visible && !b.visible) {\n return -1;\n }\n return 1;\n })\n .map((l) => {\n return l.key;\n })\n .join();\n }\n\n // Only add parameters if there is actually some layers added.\n this.setState({\n baselayers: baseLayersParam,\n layers: layersParam,\n });\n }\n}\n\nPermalink.propTypes = propTypes;\nPermalink.defaultProps = defaultProps;\n\nexport default Permalink;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import Layer from \"ol/layer/Layer\";\nimport OLMap from \"ol/Map\";\nimport { unByKey } from \"ol/Observable\";\nimport PropTypes from \"prop-types\";\nimport { PureComponent } from \"react\";\n\nimport getLayersAsFlatArray from \"../../utils/getLayersAsFlatArray\";\n\nconst propTypes = {\n /**\n * Maximum number of decimals allowed for coordinates.\n */\n coordinateDecimals: PropTypes.number,\n\n /**\n * Either 'react-router' history object:\n * https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/history.md<br>\n * or default fallback as HTML5 History:\n * https://developer.mozilla.org/en-US/docs/Web/API/History\n */\n history: PropTypes.shape({\n replace: PropTypes.func,\n }),\n\n /**\n * Determine if the layer appears in the baselayers permalink parameter 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 baselayers permalink parameter\n */\n isBaseLayer: PropTypes.func,\n\n /**\n * Determine if the layer is hidden in the permalink 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 permalink\n */\n isLayerHidden: PropTypes.func,\n\n /**\n * Layers provider.\n */\n layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),\n\n /**\n * An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n */\n map: PropTypes.instanceOf(OLMap),\n\n /**\n * Params to be written in url.\n */\n params: PropTypes.object,\n\n /**\n * Custom function to be called when the permalink is updated.\n * This property has priority over the history parameter and window.history.replaceState calls.\n */\n replace: PropTypes.func,\n};\n\nconst defaultProps = {\n coordinateDecimals: 2,\n history: null,\n isBaseLayer: (layer) => {\n return layer.get(\"isBaseLayer\");\n },\n isLayerHidden: () => {\n return false;\n },\n layers: [],\n map: null,\n params: {},\n replace: null,\n};\n\n/**\n * This component handles permalink logic. Injecting an\n * __[ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)__\n * will add the *map center* (x, y) and the *zoom* (z) parameters to the permalink.\n * Injecting layers will add the *baselayers* and/or *layers* parameters. Further parameters can\n * be added using __params__.\n */\nclass Permalink extends PureComponent {\n constructor(props) {\n super(props);\n this.state = { revision: 0 };\n this.onPropertyChangeKeys = [];\n }\n\n componentDidMount() {\n const { isBaseLayer, isLayerHidden, layers, map } = this.props;\n if (map) {\n this.moveEndRef = map.on(\"moveend\", () => {\n this.onMapMoved();\n });\n }\n\n if (layers) {\n // set layer visibility based on 'layers' parameter.\n const urlParams = new URLSearchParams(window.location.search);\n\n if (urlParams.get(\"layers\")) {\n const visibleLayers = urlParams.get(\"layers\").split(\",\");\n getLayersAsFlatArray(layers).forEach((l) => {\n if (visibleLayers.includes(l.key || l.get(\"key\"))) {\n if (l.setVisible) {\n l.setVisible(true);\n } else {\n // eslint-disable-next-line no-param-reassign\n l.visible = true;\n }\n } else if (\n !isBaseLayer(l) &&\n !isLayerHidden(l) &&\n !(l.children || l.get(\"children\")).some((ll) => {\n return ll.getVisible ? ll.getVisible() : ll.visible;\n })\n ) {\n if (l.setVisible) {\n l.setVisible(false);\n } else {\n // eslint-disable-next-line no-param-reassign\n l.visible = false;\n }\n }\n });\n }\n\n // Set baser layer visibility based on 'baseLayers' parameter.\n // Show the first of the list then hide the others\n const visibleBaseLayer = (urlParams.get(\"baselayers\") || \"\").split(\n \",\",\n )[0];\n if (visibleBaseLayer) {\n getLayersAsFlatArray(layers)\n .filter(isBaseLayer)\n .forEach((baseLayer) => {\n const key = baseLayer.key || baseLayer.get(\"key\");\n const visible = key === visibleBaseLayer;\n if (baseLayer.setVisible) {\n baseLayer.setVisible(visible);\n } else {\n // eslint-disable-next-line no-param-reassign\n baseLayer.visible = visible;\n }\n });\n }\n this.updateLayers();\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { layers, map } = this.props;\n const { revision } = this.state;\n\n if (layers !== prevProps.layers || revision !== prevState.revision) {\n this.updateLayers();\n }\n\n if (map !== prevProps.map) {\n unByKey(this.moveEndRef);\n this.moveEndRef = map.on(\"moveend\", () => {\n return this.onMapMoved();\n });\n }\n\n this.updateHistory();\n }\n\n componentWillUnmount() {\n const { map } = this.props;\n\n if (map) {\n unByKey(this.moveEndRef);\n }\n unByKey(this.onPropertyChangeKeys);\n this.onPropertyChangeKeys = [];\n }\n\n onMapMoved() {\n const { map } = this.props;\n const mapView = map.getView();\n const center = mapView.getCenter();\n const params = {};\n\n if (\n center !== undefined &&\n center[0] !== undefined &&\n center[1] !== undefined\n ) {\n params.x = this.roundCoord(center[0]);\n params.y = this.roundCoord(center[1]);\n }\n\n this.setState({\n ...params,\n // rounds zoom to two digits max.\n z: +`${Math.round(`${parseFloat(mapView.getZoom())}e+2`)}e-2`,\n });\n }\n\n render() {\n return null;\n }\n\n roundCoord(val) {\n const { coordinateDecimals } = this.props;\n return parseFloat(val.toFixed(coordinateDecimals));\n }\n\n updateHistory() {\n const { history, params, replace } = this.props;\n const oldParams = new URLSearchParams(window.location.search);\n const parameters = {\n ...Object.fromEntries(oldParams.entries()),\n ...this.state,\n ...params,\n };\n\n delete parameters.revision;\n\n // Remove parameters that are undefined or null\n Object.entries(parameters).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n delete parameters[key];\n }\n });\n\n // We don't encode the , to leave the permalink lisible\n const qStr = new URLSearchParams(parameters)\n .toString()\n .replace(/%2C/g, \",\");\n const search = qStr ? `?${qStr}` : \"\";\n\n if (\n (!qStr && window.location.search) ||\n (qStr && search !== window.location.search)\n ) {\n if (replace) {\n replace({ parameters, search });\n } else if (history) {\n history.replace({ search });\n } else {\n const { hash } = window.location;\n window.history.replaceState(\n undefined,\n undefined,\n `${search}${hash || \"\"}`,\n );\n }\n }\n }\n\n updateLayers() {\n const { isBaseLayer, isLayerHidden, layers } = this.props;\n const { revision } = this.state;\n\n unByKey(this.onPropertyChangeKeys);\n this.onPropertyChangeKeys = getLayersAsFlatArray(layers).map((layer) => {\n return layer.on(\"change:visible\", () => {\n this.setState({ revision: revision + 1 });\n });\n });\n\n // layers param\n let layersParam;\n if (layers.length) {\n layersParam = getLayersAsFlatArray(layers)\n .filter((l) => {\n const children = l.get(\"children\") || l.children || [];\n const allChildrenHidden = children.every((child) => {\n return isLayerHidden(child);\n });\n const hasVisibleChildren = children.some((child) => {\n return child.getVisible ? child.getVisible() : child.visible;\n });\n const isVisible = l.getVisible ? l.getVisible() : l.visible;\n return (\n !isBaseLayer(l) &&\n !isLayerHidden(l) &&\n isVisible &&\n (!hasVisibleChildren || allChildrenHidden)\n );\n })\n .map((l) => {\n return l.key || l.get(\"key\");\n })\n .join();\n }\n\n // baselayers param\n let baseLayersParam;\n const baseLayers = getLayersAsFlatArray(layers).filter(isBaseLayer);\n if (baseLayers.length) {\n // First baselayers in order of visibility, top layer is first\n const visibleBaseLayers = (\n baseLayers.filter((l) => {\n return l.getVisible ? l.getVisible() : l.visible;\n }) || []\n ).reverse();\n const nonVisibleBaseLayers =\n baseLayers.filter((l) => {\n return !(l.getVisible ? l.getVisible() : l.visible);\n }) || [];\n baseLayersParam = [...visibleBaseLayers, ...nonVisibleBaseLayers]\n .sort((a, b) => {\n const aVisible = a.getVisible ? a.getVisible() : a.visible;\n const bVisible = b.getVisible ? b.getVisible() : b.visible;\n if (aVisible === bVisible) {\n return 0;\n }\n if (aVisible && !bVisible) {\n return -1;\n }\n return 1;\n })\n .map((l) => {\n return l.key || l.get(\"key\");\n })\n .join();\n }\n\n // Only add parameters if there is actually some layers added.\n this.setState({\n baselayers: baseLayersParam,\n layers: layersParam,\n });\n }\n}\n\nPermalink.propTypes = propTypes;\nPermalink.defaultProps = defaultProps;\n\nexport default Permalink;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,10 +1,12 @@
1
+ @use "../../themes/default/variables";
2
+
1
3
  .rs-popup {
2
4
  position: absolute;
3
5
 
4
6
  .rs-popup-container {
5
7
  position: absolute;
6
8
  background-color: white;
7
- filter: drop-shadow($box-shadow);
9
+ filter: drop-shadow(variables.$box-shadow);
8
10
  bottom: 12px;
9
11
  left: -50px;
10
12
  min-width: 220px;
@@ -1,5 +1,7 @@
1
+ @use "../../themes/default/variables";
2
+
1
3
  .rt-route-schedule-example {
2
- font-family: $font-family;
4
+ font-family: variables.$font-family;
3
5
  position: relative;
4
6
  display: flex;
5
7