@opengeoweb/core 20.1.0-nightly-20261018 → 20.2.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.
package/dist/index.esm.js CHANGED
@@ -8363,18 +8363,35 @@ var OlMapViewLayerConnect = function OlMapViewLayerConnect(layerProps) {
8363
8363
  }), "layer-" + (layer == null ? void 0 : layer.id));
8364
8364
  };
8365
8365
 
8366
+ // OpenLayers counterpart of layerUtils.isHiddenFeature
8367
+ var isHiddenOlFeature = function isHiddenOlFeature(feature) {
8368
+ return feature.get('isHidden') === true;
8369
+ };
8370
+ var hideHiddenFeatures = function hideHiddenFeatures(style) {
8371
+ return function (feature, resolution) {
8372
+ if (isHiddenOlFeature(feature)) {
8373
+ return undefined;
8374
+ }
8375
+ return typeof style === 'function' ? style(feature, resolution) : style;
8376
+ };
8377
+ };
8366
8378
  /** Escape drops a multi selection only. A sole selection is kept, matching the
8367
- * plain click behaviour, and edit mode keeps its own Escape handling. */
8368
- var shouldDeselectAllOnEscape = function shouldDeselectAllOnEscape(selectedFeatureCount, isInEditMode, hasRegisteredDrawTool) {
8369
- return hasRegisteredDrawTool && !isInEditMode && selectedFeatureCount > 1;
8379
+ * plain click behaviour, unless the drawing tool is open. Edit mode keeps the
8380
+ * map's own Escape handling, after which onDrawEscape drops the selection. */
8381
+ var shouldDeselectAllOnEscape = function shouldDeselectAllOnEscape(selectedFeatureCount, isInEditMode, hasRegisteredDrawTool, isDrawToolOpen) {
8382
+ if (isDrawToolOpen === void 0) {
8383
+ isDrawToolOpen = false;
8384
+ }
8385
+ return hasRegisteredDrawTool && !isInEditMode && selectedFeatureCount > (isDrawToolOpen ? 0 : 1);
8370
8386
  };
8371
8387
  var useDeselectAllOnEscape = function useDeselectAllOnEscape(_ref) {
8372
8388
  var selectedFeatureCount = _ref.selectedFeatureCount,
8373
8389
  isInEditMode = _ref.isInEditMode,
8374
8390
  hasRegisteredDrawTool = _ref.hasRegisteredDrawTool,
8391
+ isDrawToolOpen = _ref.isDrawToolOpen,
8375
8392
  onDeselectAll = _ref.onDeselectAll;
8376
8393
  React.useEffect(function () {
8377
- if (!shouldDeselectAllOnEscape(selectedFeatureCount, isInEditMode, hasRegisteredDrawTool)) {
8394
+ if (!shouldDeselectAllOnEscape(selectedFeatureCount, isInEditMode, hasRegisteredDrawTool, isDrawToolOpen)) {
8378
8395
  return undefined;
8379
8396
  }
8380
8397
  var onKeyDown = function onKeyDown(event) {
@@ -8387,7 +8404,7 @@ var useDeselectAllOnEscape = function useDeselectAllOnEscape(_ref) {
8387
8404
  return function () {
8388
8405
  return window.removeEventListener('keydown', onKeyDown);
8389
8406
  };
8390
- }, [selectedFeatureCount, isInEditMode, hasRegisteredDrawTool, onDeselectAll]);
8407
+ }, [selectedFeatureCount, isInEditMode, hasRegisteredDrawTool, isDrawToolOpen, onDeselectAll]);
8391
8408
  };
8392
8409
  var shouldClearSelectionOnEmptyClick = function shouldClearSelectionOnEmptyClick(activeDrawToolId, hasRegisteredDrawTool) {
8393
8410
  return !activeDrawToolId && hasRegisteredDrawTool;
@@ -8422,9 +8439,7 @@ var findFeatureIndexByKey = function findFeatureIndexByKey(geojson, feature) {
8422
8439
  if (key === undefined || !geojson) {
8423
8440
  return -1;
8424
8441
  }
8425
- return geojson.features.findIndex(function (feat) {
8426
- return layerUtils.getFeatureSelectionKey(feat) === key;
8427
- });
8442
+ return layerUtils.findFeatureIndexById(geojson, key);
8428
8443
  };
8429
8444
  var getMovableSelectedFeatureIds = function getMovableSelectedFeatureIds(geojson, selectedFeatureIds) {
8430
8445
  if (!(geojson != null && geojson.features.length) || !(selectedFeatureIds != null && selectedFeatureIds.length)) {
@@ -8471,10 +8486,14 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref3
8471
8486
  var dispatch = useDispatch();
8472
8487
  var activeDrawToolId = useSelector(drawingToolSelectors.getActiveDrawToolId);
8473
8488
  var hasRegisteredDrawTool = useSelector(function (state) {
8474
- return drawingToolSelectors.selectAllDrawingTools(state).some(function (tool) {
8475
- return tool.geoJSONLayerId === layerId;
8476
- });
8489
+ return drawingToolSelectors.getHasDrawToolForLayer(state, layerId);
8490
+ });
8491
+ var isDrawToolOpen = useSelector(function (state) {
8492
+ return drawingToolSelectors.getIsDrawToolOpenForLayer(state, layerId);
8477
8493
  });
8494
+ var layerStyle = React.useMemo(function () {
8495
+ return isDrawToolOpen ? hideHiddenFeatures(style) : style;
8496
+ }, [isDrawToolOpen, style]);
8478
8497
  var activeDrawMode = useSelector(function (store) {
8479
8498
  return drawingToolSelectors.getActiveDrawMode(store, activeDrawToolId);
8480
8499
  });
@@ -8539,7 +8558,7 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref3
8539
8558
  });
8540
8559
  }, [layer.geojson, layer.hoveredFeatureIds, layer.originalId, layer.selectedFeatureIds, usesIdSelection]);
8541
8560
  var clearSelection = React.useCallback(function () {
8542
- if (!shouldClearSelectionOnEmptyClick(activeDrawToolId, hasRegisteredDrawTool)) {
8561
+ if (!shouldClearSelectionOnEmptyClick(drawingToolSelectors.getActiveDrawToolId(store.getState()), hasRegisteredDrawTool)) {
8543
8562
  return;
8544
8563
  }
8545
8564
  dispatch(layerActions.setSelectedFeatures({
@@ -8551,7 +8570,13 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref3
8551
8570
  isInEditMode: false,
8552
8571
  drawMode: ''
8553
8572
  }));
8554
- }, [activeDrawToolId, hasRegisteredDrawTool, dispatch, layerId]);
8573
+ }, [store, hasRegisteredDrawTool, dispatch, layerId]);
8574
+ var onDrawEscape = React.useCallback(function () {
8575
+ // the map already ended its own edit or draw mode for this Escape
8576
+ if (document.activeElement === document.body && drawingToolSelectors.getIsDrawToolOpenForLayer(store.getState(), layerId)) {
8577
+ clearSelection();
8578
+ }
8579
+ }, [store, layerId, clearSelection]);
8555
8580
  var onFeatureClick = React.useCallback(function (feature, isShiftClick) {
8556
8581
  var _clickedFeature$prope;
8557
8582
  if (!feature.length) {
@@ -8603,7 +8628,9 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref3
8603
8628
  if (!((_layer$geojson3 = layer.geojson) != null && _layer$geojson3.features.length)) {
8604
8629
  return;
8605
8630
  }
8606
- var boxSelectedIndices = features.map(function (feature) {
8631
+ var boxSelectedIndices = features.filter(function (feature) {
8632
+ return !(isDrawToolOpen && isHiddenOlFeature(feature));
8633
+ }).map(function (feature) {
8607
8634
  return findFeatureIndexByKey(layer.geojson, feature);
8608
8635
  }).filter(function (idx) {
8609
8636
  return idx !== -1;
@@ -8632,7 +8659,7 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref3
8632
8659
  drawMode: ''
8633
8660
  }));
8634
8661
  }
8635
- }, [dispatch, layer.geojson, layer.selectedFeatureIds, layerId]);
8662
+ }, [dispatch, layer.geojson, layer.selectedFeatureIds, layerId, isDrawToolOpen]);
8636
8663
  var boxSelectConfig = React.useMemo(function () {
8637
8664
  return usesIdSelection && !layer.isInEditMode ? {
8638
8665
  onBoxSelect: onBoxSelect,
@@ -8656,6 +8683,7 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref3
8656
8683
  selectedFeatureCount: selectedFeatureIndices.length,
8657
8684
  isInEditMode: layer.isInEditMode,
8658
8685
  hasRegisteredDrawTool: hasRegisteredDrawTool,
8686
+ isDrawToolOpen: isDrawToolOpen,
8659
8687
  onDeselectAll: clearSelection
8660
8688
  });
8661
8689
  var movableSelectedFeatureIds = React.useMemo(function () {
@@ -8731,7 +8759,7 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref3
8731
8759
  modifyFeatures: modifyFeaturesConfig,
8732
8760
  moveFeatures: moveFeaturesConfig,
8733
8761
  opacity: layer.opacity,
8734
- style: style,
8762
+ style: layerStyle,
8735
8763
  visible: layer.enabled,
8736
8764
  zIndex: zIndex
8737
8765
  }), jsx(OpenLayersMapDraw, {
@@ -8740,12 +8768,13 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref3
8740
8768
  exitDrawModeCallback: exitFeatureDrawMode,
8741
8769
  geojson: layer.geojson,
8742
8770
  isInEditMode: layer.isInEditMode || false,
8771
+ onEscape: onDrawEscape,
8743
8772
  onNoFeatureClick: onNoFeatureClick,
8744
8773
  onViewOnlyFeatureClick: onViewOnlyFeatureClick,
8745
8774
  selectedFeatureIndex: activeFeatureIndex,
8746
8775
  selectedFeatureIndices: selectedFeatureIndices,
8747
8776
  updateGeojson: updateFeature,
8748
- viewOnlyStyle: style
8777
+ viewOnlyStyle: layerStyle
8749
8778
  })]
8750
8779
  });
8751
8780
  };
@@ -1,20 +1,23 @@
1
1
  import type { Feature } from 'ol';
2
- import type { StyleLike } from 'ol/style/Style';
2
+ import type { StyleFunction, StyleLike } from 'ol/style/Style';
3
3
  import React from 'react';
4
4
  import type { layerTypes } from '@opengeoweb/store';
5
5
  import type { HoverSelect } from '@opengeoweb/webmap-react';
6
6
  import { getAffectedIndices } from '@opengeoweb/webmap-react';
7
7
  export { getAffectedIndices };
8
+ export declare const hideHiddenFeatures: (style: StyleLike) => StyleFunction;
8
9
  /** Escape drops a multi selection only. A sole selection is kept, matching the
9
- * plain click behaviour, and edit mode keeps its own Escape handling. */
10
- export declare const shouldDeselectAllOnEscape: (selectedFeatureCount: number, isInEditMode: boolean | undefined, hasRegisteredDrawTool: boolean) => boolean;
10
+ * plain click behaviour, unless the drawing tool is open. Edit mode keeps the
11
+ * map's own Escape handling, after which onDrawEscape drops the selection. */
12
+ export declare const shouldDeselectAllOnEscape: (selectedFeatureCount: number, isInEditMode: boolean | undefined, hasRegisteredDrawTool: boolean, isDrawToolOpen?: boolean) => boolean;
11
13
  interface DeselectAllOnEscapeOptions {
12
14
  selectedFeatureCount: number;
13
15
  isInEditMode: boolean | undefined;
14
16
  hasRegisteredDrawTool: boolean;
17
+ isDrawToolOpen?: boolean;
15
18
  onDeselectAll: () => void;
16
19
  }
17
- export declare const useDeselectAllOnEscape: ({ selectedFeatureCount, isInEditMode, hasRegisteredDrawTool, onDeselectAll, }: DeselectAllOnEscapeOptions) => void;
20
+ export declare const useDeselectAllOnEscape: ({ selectedFeatureCount, isInEditMode, hasRegisteredDrawTool, isDrawToolOpen, onDeselectAll, }: DeselectAllOnEscapeOptions) => void;
18
21
  export declare const shouldClearSelectionOnEmptyClick: (activeDrawToolId: string | undefined, hasRegisteredDrawTool: boolean) => boolean;
19
22
  export declare const isSketchInProgress: (isInEditMode: boolean | undefined, drawMode: string | undefined, activeFeature: GeoJSON.Feature | undefined) => boolean;
20
23
  /** Soundings and time series set their own highlight, so they must stay out of this. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/core",
3
- "version": "20.1.0-nightly-20261018",
3
+ "version": "20.2.0",
4
4
  "description": "GeoWeb Core library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -20,28 +20,28 @@
20
20
  }
21
21
  },
22
22
  "dependencies": {
23
- "@opengeoweb/shared": "20.1.0-nightly-20261018",
23
+ "@opengeoweb/shared": "20.2.0",
24
24
  "react-redux": "^9.2.0",
25
- "@opengeoweb/store": "20.1.0-nightly-20261018",
26
- "@opengeoweb/time-slider": "20.1.0-nightly-20261018",
25
+ "@opengeoweb/store": "20.2.0",
26
+ "@opengeoweb/time-slider": "20.2.0",
27
27
  "@reduxjs/toolkit": "^2.6.1",
28
- "@opengeoweb/webmap-react": "20.1.0-nightly-20261018",
29
- "@opengeoweb/webmap": "20.1.0-nightly-20261018",
30
- "@opengeoweb/theme": "20.1.0-nightly-20261018",
31
- "@opengeoweb/layer-select": "20.1.0-nightly-20261018",
28
+ "@opengeoweb/webmap-react": "20.2.0",
29
+ "@opengeoweb/webmap": "20.2.0",
30
+ "@opengeoweb/theme": "20.2.0",
31
+ "@opengeoweb/layer-select": "20.2.0",
32
32
  "lodash": "^4.18.1",
33
33
  "ol": "^10.4.0",
34
34
  "react-sortablejs": "^6.1.4",
35
35
  "sortablejs": "^1.15.1",
36
36
  "@mui/system": "^9.0.1",
37
- "@opengeoweb/snackbar": "20.1.0-nightly-20261018",
37
+ "@opengeoweb/snackbar": "20.2.0",
38
38
  "react-draggable": "^4.4.6",
39
39
  "i18next": "^25.0.1",
40
40
  "react-i18next": "^15.1.1",
41
41
  "dompurify": "^3.4.13",
42
42
  "@mui/material": "^9.0.1",
43
43
  "@tanstack/react-query": "^5.85.5",
44
- "@opengeoweb/api": "20.1.0-nightly-20261018",
44
+ "@opengeoweb/api": "20.2.0",
45
45
  "@types/geojson": "^7946.0.14",
46
46
  "@turf/turf": "^7.2.0",
47
47
  "proj4": "^2.15.0",