@opengeoweb/core 19.1.1 → 19.3.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
@@ -2,18 +2,19 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { FormControl, MenuItem, Grid, InputLabel, Paper, Box, Typography, CircularProgress, List, ListSubheader, ListItemButton, ListItemText, DialogContentText, TextField, InputAdornment, Button, useTheme, Tooltip, ListItem, ListItemIcon, Checkbox, Popper, Fade, styled, LinearProgress, Autocomplete, Switch, Select } from '@mui/material';
3
3
  import React, { useMemo, useState, useCallback, useEffect, useContext } from 'react';
4
4
  import { safelyInitI18nForTestsAndStories, sharedTranslations, SHARED_NAMESPACE, TooltipSelect, CustomIconButton, CustomDialog, CustomTooltip, ToggleMenu, AlertIcon, useConfirmationDialog, useScrollingInIsolation, sliderHeaderStyle, CustomSlider, tooltipContainerStyles, renderCounter, AlertBanner, CustomAccordion, PROJECTION, calculateStartSize, useWheelStopPropagation, ToolContainerDraggable, dateUtils, sessionStorageProvider, useDebounce, usePrevious } from '@opengeoweb/shared';
5
- import { webmapUtils, queryWMSLayersTree, invalidateWMSGetCapabilities, LayerType, WMDefaultStyleName, queryWMSServiceInfo, queryWMSLayers, getWMSServiceId, handleDateUtilsISOString, generateLayerId, WMJSDimension, getWMLayerById, getMapDimURL, WMLayer } from '@opengeoweb/webmap';
5
+ import { webmapUtils, queryWMSLayersTree, invalidateWMSGetCapabilities, LayerType, WMDefaultStyleName, WMJSMAP_LONLAT_EPSGCODE, queryWMSServiceInfo, queryWMSLayers, getWMSServiceId, handleDateUtilsISOString, generateLayerId, WMJSDimension, getWMLayerById, getMapDimURL, WMLayer } from '@opengeoweb/webmap';
6
6
  import _, { isEqual, isArray, range, zip, throttle } from 'lodash';
7
- import { useDispatch, useSelector, connect, useStore, Provider } from 'react-redux';
8
- import { mapSelectors, layerSelectors, layerActions, layerTypes, filterLayers, mapActions, mapEnums, loadingIndicatorSelectors, layerUtils, serviceSelectors, serviceActions, uiSelectors, uiTypes, useSetupDialog, getUserAddedServices, uiActions, genericActions, drawingToolSelectors, syncGroupsSelectors, syncConstants, getViewObjectForSyncGroup, getViewObjectForMapId, loadingIndicatorActions, genericSelectors, defaultLayers, getSingularDrawtoolDrawLayerId, syncGroupsSelector, syncGroupsActions, routerUtils, mapUtils } from '@opengeoweb/store';
7
+ import { useDispatch, useSelector, connect, useStore, shallowEqual, Provider } from 'react-redux';
8
+ import { mapSelectors, layerSelectors, layerActions, layerTypes, filterLayers, mapActions, mapEnums, loadingIndicatorSelectors, layerUtils, serviceSelectors, serviceActions, uiSelectors, uiTypes, useSetupDialog, getUserAddedServices, uiActions, genericActions, drawingToolSelectors, syncGroupsSelectors, syncConstants, getViewObjectForSyncGroup, getViewObjectForMapId, loadingIndicatorActions, genericSelectors, PUBLIC_WARNING_DRAW_TOOL_ID, defaultLayers, getSingularDrawtoolDrawLayerId, syncGroupsSelector, syncGroupsActions, routerUtils, mapUtils } from '@opengeoweb/store';
9
9
  import i18n from 'i18next';
10
10
  import { useTranslation, Trans, I18nextProvider } from 'react-i18next';
11
11
  import { TIME_SLIDER_NAMESPACE, timesliderTranslations, defaultTimeSpan, AnimationLengthButton, AnimationLength, AutoUpdateButton, BackwardForwardStepButton, NowButton, handleSetNowEvent, PlayButton, defaultTimeStep, SpeedButton, TimeSpanButton, secondsPerPxFromCanvasWidth, getNewCenterOfFixedPointZoom, TimeStepButton, OptionsMenuButton, TimeSliderButtons, TimeSliderCurrentTimeBox, TimeSliderLegend, onsetNewDateDebounced, getFilteredTime, defaultSecondsPerPx, moveSelectedTimePx, TimeSlider } from '@opengeoweb/time-slider';
12
- import { webmapReactTranslations, WEBMAP_REACT_NAMESPACE, webmapTranslations, WEBMAP_NAMESPACE, openLayersGetMapImageStore, LayerInfoButton, useEDRGetCollectionDetails, useStacCollection, getRendersAsStyles, defaultEdrStyles, LayerInfoDialog, MapControlButton, MapDimensionSelect, dimensionConfig, DimensionSelectDialog, DimensionSelectButton, Clock, LegendDialog, LegendButton, MapContext, emptyGeoJSON, MapFeatureClass, setMapCenter, makeTimeList, useGetWMLayerInstance, getIsInsideAcceptanceTime, OpenLayersLayer, isGeoJSONGeometryEmpty, OpenLayersFeatureLayer, OpenLayersMapDraw, MapMeasure, useSetIntervalWhenVisible, TimeContext, OpenLayersMapView, WMSLayer, genericOpenLayersFeatureStyle, OpenLayersGetFeatureInfo, MapControls, OpenLayersZoomControl, getLayerUpdateInfo, publicLayers } from '@opengeoweb/webmap-react';
13
- import { Cached, Add, MapAdd, CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, LayersAdd, CloudLoading, ColumnCollapsed, ColumnCollapse, DragHandle as DragHandle$1, None, FastForward, AutoUpdateActive, Both, Delete, Visibility, VisibilityOff, Copy, Overlayers, WorldMapProjection, Layers, Search, Exclamation, MyLocation, Airplane, Region, Pinned, Close, ExitDomain, LocationInfo, Measure, Options, Info, ThemeWrapper, lightTheme, FlagBritain, FlagNetherlands, FlagFinland, FlagNorway } from '@opengeoweb/theme';
12
+ import { webmapReactTranslations, WEBMAP_REACT_NAMESPACE, webmapTranslations, WEBMAP_NAMESPACE, openLayersGetMapImageStore, LayerInfoButton, useGetWMLayerInstance, useEDRGetCollectionDetails, useStacCollection, getRendersAsStyles, defaultEdrStyles, LayerInfoDialog, MapControlButton, MapDimensionSelect, dimensionConfig, DimensionSelectDialog, DimensionSelectButton, Clock, LegendDialog, LegendButton, MapContext, emptyGeoJSON, MapFeatureClass, setMapCenter, makeTimeList, getIsInsideAcceptanceTime, OpenLayersLayer, isGeoJSONGeometryEmpty, OpenLayersFeatureLayer, OpenLayersMapDraw, MapMeasure, useSetIntervalWhenVisible, TimeContext, OpenLayersMapView, WMSLayer, genericOpenLayersFeatureStyle, OpenLayersGetFeatureInfo, MapControls, OpenLayersZoomControl, getLayerUpdateInfo, publicLayers } from '@opengeoweb/webmap-react';
13
+ import { Cached, Add, MapAdd, CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, LayersAdd, CloudLoading, ColumnCollapsed, ColumnCollapse, DragHandle as DragHandle$1, None, FastForward, AutoUpdateActive, Both, Delete, Visibility, VisibilityOff, Copy, ZoomToLayer, Overlayers, WorldMapProjection, Layers, Search, Exclamation, MyLocation, Airplane, Region, Pinned, Close, ExitDomain, LocationInfo, Measure, Options, Info, ThemeWrapper, lightTheme, FlagBritain, FlagNetherlands, FlagFinland, FlagNorway } from '@opengeoweb/theme';
14
14
  import { ReactSortable } from 'react-sortablejs';
15
15
  import Sortable from 'sortablejs';
16
16
  import { Box as Box$1, Stack } from '@mui/system';
17
+ import { transformExtent, toLonLat, fromLonLat } from 'ol/proj';
17
18
  import { LayerSelectButtonConnect, LayerSelectConnect, DataExplorerButtonConnect } from '@opengeoweb/layer-select';
18
19
  import { unByKey } from 'ol/Observable';
19
20
  import { useQuery, QueryClient, QueryClientProvider } from '@tanstack/react-query';
@@ -22,7 +23,6 @@ import { bbox } from '@turf/turf';
22
23
  import proj4 from 'proj4';
23
24
  import { getIntersection } from 'ol/extent';
24
25
  import GeoJSON from 'ol/format/GeoJSON';
25
- import { toLonLat } from 'ol/proj';
26
26
  import axios from 'axios';
27
27
  import { ImageWMS } from 'ol/source';
28
28
  import DOMPurify from 'dompurify';
@@ -73,6 +73,7 @@ var en = {
73
73
  "layermanager-layer-duplicate": "Duplicate layer",
74
74
  "layermanager-layer-duplicate-to-other-maps": "Copy layer to other maps",
75
75
  "layermanager-layer-remove-from-other-maps": "Remove layer from other maps",
76
+ "layermanager-layer-zoom-to-extent": "Zoom to layer",
76
77
  "layermanager-options": "Options",
77
78
  "layermanager-baselayers-tooltip": "Add base layers",
78
79
  "layermanager-header-button-small": "small",
@@ -169,6 +170,7 @@ var fi = {
169
170
  "layermanager-layer-duplicate": "Monista karttataso",
170
171
  "layermanager-layer-duplicate-to-other-maps": "Kopioi karttataso muihin karttoihin",
171
172
  "layermanager-layer-remove-from-other-maps": "Poista karttataso muista kartoista",
173
+ "layermanager-layer-zoom-to-extent": "Zoomaa karttatasoon",
172
174
  "layermanager-options": "Valinnat",
173
175
  "layermanager-baselayers-tooltip": "Lisää pohjakartta",
174
176
  "layermanager-header-button-small": "Pieni",
@@ -256,6 +258,7 @@ var no = {
256
258
  "layermanager-layer-duplicate": "Duplikat lag",
257
259
  "layermanager-layer-duplicate-to-other-maps": "Kopier lag til andre kart",
258
260
  "layermanager-layer-remove-from-other-maps": "Fjern lag fra andre kart",
261
+ "layermanager-layer-zoom-to-extent": "Zoom til lag",
259
262
  "layermanager-options": "Laginnstillinger",
260
263
  "layermanager-baselayers-tooltip": "Legg til basislag",
261
264
  "layermanager-header-button-small": "liten",
@@ -344,6 +347,7 @@ var nl = {
344
347
  "layermanager-layer-duplicate": "Dupliceren",
345
348
  "layermanager-layer-duplicate-to-other-maps": "Kopieer laag naar andere kaarten",
346
349
  "layermanager-layer-remove-from-other-maps": "Verwijder laag van andere kaarten",
350
+ "layermanager-layer-zoom-to-extent": "Zoom naar laag",
347
351
  "layermanager-options": "Opties",
348
352
  "layermanager-baselayers-tooltip": "Basislagen toevoegen",
349
353
  "layermanager-header-button-small": "klein",
@@ -838,7 +842,7 @@ var preset = {
838
842
  },
839
843
  {
840
844
  name: "KNMIgeoservicesObs",
841
- url: "https://geoservices.knmi.nl/adagucserver?dataset=OBS",
845
+ url: "https://geoservices.knmi.nl/adagucserver?dataset=10-minute-in-situ-meteorological-observations",
842
846
  id: "KNMIgeoservicesObs"
843
847
  },
844
848
  {
@@ -2940,6 +2944,9 @@ var DeleteLayerConnect = function DeleteLayerConnect(_ref) {
2940
2944
  var layerType = useSelector(function (store) {
2941
2945
  return layerSelectors.getLayerType(store, layerId);
2942
2946
  });
2947
+ var isFeatureSyncLayer = useSelector(function (store) {
2948
+ return layerSelectors.getIsFeatureSyncLayer(store, layerId);
2949
+ });
2943
2950
  var isLayerEnabled = useSelector(function (store) {
2944
2951
  return layerSelectors.getLayerEnabled(store, layerId);
2945
2952
  });
@@ -2956,6 +2963,9 @@ var DeleteLayerConnect = function DeleteLayerConnect(_ref) {
2956
2963
  var onDelete = React.useCallback(function (_ref3) {
2957
2964
  var mapId = _ref3.mapId,
2958
2965
  layerId = _ref3.layerId;
2966
+ if (isFeatureSyncLayer) {
2967
+ return;
2968
+ }
2959
2969
  if (layerType === LayerType.edrFeatureLayer) {
2960
2970
  void confirmationDialog({
2961
2971
  title: t('delete-dialog-title'),
@@ -2974,16 +2984,17 @@ var DeleteLayerConnect = function DeleteLayerConnect(_ref) {
2974
2984
  layerId: layerId
2975
2985
  });
2976
2986
  }
2977
- }, [layerType, confirmationDialog, t, layerDelete]);
2987
+ }, [isFeatureSyncLayer, layerType, confirmationDialog, t, layerDelete]);
2978
2988
  return jsx(CustomIconButton, {
2979
2989
  "data-testid": "deleteButton",
2990
+ disabled: isFeatureSyncLayer,
2980
2991
  onClick: function onClick() {
2981
2992
  return onDelete({
2982
2993
  mapId: mapId,
2983
2994
  layerId: layerId
2984
2995
  });
2985
2996
  },
2986
- shouldShowAsDisabled: !isLayerEnabled,
2997
+ shouldShowAsDisabled: !isLayerEnabled || isFeatureSyncLayer,
2987
2998
  tooltipTitle: nonEmptyTooltipTitle,
2988
2999
  children: icon
2989
3000
  });
@@ -3206,13 +3217,13 @@ var LoadDuration = function LoadDuration(_ref) {
3206
3217
  title: tooltipText,
3207
3218
  children: jsxs(Typography, {
3208
3219
  component: "div",
3209
- variant: "subtitle2",
3210
3220
  sx: {
3211
3221
  whiteSpace: 'nowrap',
3212
3222
  fontSize: 12,
3213
3223
  width: '100%',
3214
3224
  textAlign: 'center'
3215
3225
  },
3226
+ variant: "subtitle2",
3216
3227
  children: [percentage < 100 && jsx(LoadingIndicatorProgressBar, {
3217
3228
  height: 4,
3218
3229
  progressPercentage: percentage,
@@ -3273,10 +3284,15 @@ var useLoadDurationLabel = function useLoadDurationLabel(mapId, layerId) {
3273
3284
  var SelectableFeatures = function SelectableFeatures(_ref) {
3274
3285
  var layerId = _ref.layerId,
3275
3286
  isSelectable = _ref.isSelectable,
3276
- onToggleSelectable = _ref.onToggleSelectable;
3287
+ onToggleSelectable = _ref.onToggleSelectable,
3288
+ _ref$disabled = _ref.disabled,
3289
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled;
3277
3290
  var _useCoreTranslation = useCoreTranslation(),
3278
3291
  t = _useCoreTranslation.t;
3279
3292
  var onClickCheckbox = function onClickCheckbox() {
3293
+ if (disabled) {
3294
+ return;
3295
+ }
3280
3296
  onToggleSelectable();
3281
3297
  };
3282
3298
  return jsx(ListItem, {
@@ -3287,7 +3303,9 @@ var SelectableFeatures = function SelectableFeatures(_ref) {
3287
3303
  borderBottom: '1px solid #E0E0E0'
3288
3304
  },
3289
3305
  children: jsxs(ListItemButton, {
3306
+ "data-testid": "selectablefeatures-checkbox-" + layerId,
3290
3307
  disableGutters: true,
3308
+ disabled: disabled,
3291
3309
  onClick: function onClick() {
3292
3310
  return onClickCheckbox();
3293
3311
  },
@@ -3312,8 +3330,8 @@ var SelectableFeatures = function SelectableFeatures(_ref) {
3312
3330
  },
3313
3331
  children: jsx(Checkbox, {
3314
3332
  checked: isSelectable,
3315
- "data-testid": "selectablefeatures-checkbox-" + layerId,
3316
3333
  disableRipple: true,
3334
+ disabled: disabled,
3317
3335
  name: "selectablefeatures-checkbox-" + layerId,
3318
3336
  tabIndex: -1
3319
3337
  })
@@ -3323,7 +3341,8 @@ var SelectableFeatures = function SelectableFeatures(_ref) {
3323
3341
  };
3324
3342
 
3325
3343
  var SelectableFeaturesCheckboxConnect = function SelectableFeaturesCheckboxConnect(_ref) {
3326
- var layerId = _ref.layerId;
3344
+ var layerId = _ref.layerId,
3345
+ disabled = _ref.disabled;
3327
3346
  var dispatch = useDispatch();
3328
3347
  var isSelectable = useSelector(function (store) {
3329
3348
  return layerSelectors.getIsLayerSelectable(store, layerId);
@@ -3334,6 +3353,7 @@ var SelectableFeaturesCheckboxConnect = function SelectableFeaturesCheckboxConne
3334
3353
  }));
3335
3354
  }, [dispatch, layerId]);
3336
3355
  return jsx(SelectableFeatures, {
3356
+ disabled: disabled,
3337
3357
  isSelectable: isSelectable,
3338
3358
  layerId: layerId,
3339
3359
  onToggleSelectable: toggleSelectable
@@ -3345,9 +3365,14 @@ var LayerManagerMenuButton = function LayerManagerMenuButton(_ref) {
3345
3365
  layerId = _ref.layerId,
3346
3366
  _ref$isFeatureLayer = _ref.isFeatureLayer,
3347
3367
  isFeatureLayer = _ref$isFeatureLayer === void 0 ? false : _ref$isFeatureLayer,
3368
+ _ref$isFeatureSyncLay = _ref.isFeatureSyncLayer,
3369
+ isFeatureSyncLayer = _ref$isFeatureSyncLay === void 0 ? false : _ref$isFeatureSyncLay,
3348
3370
  onLayerDuplicate = _ref.onLayerDuplicate,
3349
3371
  onLayerCopyToOtherMaps = _ref.onLayerCopyToOtherMaps,
3350
3372
  onLayerRemoveFromOtherMaps = _ref.onLayerRemoveFromOtherMaps,
3373
+ onLayerZoomToExtent = _ref.onLayerZoomToExtent,
3374
+ _ref$canZoomToLayerEx = _ref.canZoomToLayerExtent,
3375
+ canZoomToLayerExtent = _ref$canZoomToLayerEx === void 0 ? true : _ref$canZoomToLayerEx,
3351
3376
  tooltipTitle = _ref.tooltipTitle,
3352
3377
  icon = _ref.icon;
3353
3378
  var _useCoreTranslation = useCoreTranslation(),
@@ -3365,6 +3390,9 @@ var LayerManagerMenuButton = function LayerManagerMenuButton(_ref) {
3365
3390
  var onClickRemoveFromOtherMaps = function onClickRemoveFromOtherMaps() {
3366
3391
  onLayerRemoveFromOtherMaps == null || onLayerRemoveFromOtherMaps();
3367
3392
  };
3393
+ var onClickZoomToExtent = function onClickZoomToExtent() {
3394
+ onLayerZoomToExtent == null || onLayerZoomToExtent();
3395
+ };
3368
3396
  return jsx(ToggleMenu, {
3369
3397
  buttonIcon: icon,
3370
3398
  buttonSx: {
@@ -3378,19 +3406,28 @@ var LayerManagerMenuButton = function LayerManagerMenuButton(_ref) {
3378
3406
  menuItems: [{
3379
3407
  text: t('layermanager-layer-duplicate'),
3380
3408
  action: onClickDuplicate,
3381
- icon: jsx(Copy, {})
3409
+ icon: jsx(Copy, {}),
3410
+ isDisabled: isFeatureSyncLayer
3382
3411
  }, {
3383
3412
  text: t('layermanager-layer-duplicate-to-other-maps'),
3384
3413
  action: onClickCopyToOtherMaps,
3385
- icon: jsx(Copy, {})
3414
+ icon: jsx(Copy, {}),
3415
+ isDisabled: isFeatureSyncLayer
3386
3416
  }, {
3387
3417
  text: t('layermanager-layer-remove-from-other-maps'),
3388
3418
  action: onClickRemoveFromOtherMaps,
3389
- icon: jsx(Delete, {})
3419
+ icon: jsx(Delete, {}),
3420
+ isDisabled: isFeatureSyncLayer
3421
+ }, {
3422
+ text: t('layermanager-layer-zoom-to-extent'),
3423
+ action: onClickZoomToExtent,
3424
+ icon: jsx(ZoomToLayer, {}),
3425
+ isDisabled: !canZoomToLayerExtent
3390
3426
  }],
3391
3427
  menuPosition: "bottom",
3392
3428
  tooltipTitle: nonEmptyTooltipTitle,
3393
3429
  children: !!isFeatureLayer && jsx(SelectableFeaturesCheckboxConnect, {
3430
+ disabled: isFeatureSyncLayer,
3394
3431
  layerId: layerId
3395
3432
  })
3396
3433
  });
@@ -4283,16 +4320,38 @@ var Accordion = function Accordion(_ref0) {
4283
4320
  });
4284
4321
  };
4285
4322
 
4323
+ var wmLayerHasZoomExtent = function wmLayerHasZoomExtent(wmLayer, mapSrs) {
4324
+ if (!wmLayer) {
4325
+ return false;
4326
+ }
4327
+ var crs = wmLayer.getCRSByName(mapSrs);
4328
+ if (crs != null && crs.bbox) {
4329
+ return true;
4330
+ }
4331
+ return !!wmLayer.geographicBoundingBox;
4332
+ };
4286
4333
  var LayerManagerMenuButtonConnect = function LayerManagerMenuButtonConnect(_ref) {
4287
4334
  var layerId = _ref.layerId,
4288
4335
  mapId = _ref.mapId,
4289
4336
  tooltipTitle = _ref.tooltipTitle,
4290
4337
  icon = _ref.icon;
4291
4338
  var dispatch = useDispatch();
4339
+ var layer = useSelector(function (store) {
4340
+ return layerSelectors.getLayerById(store, layerId);
4341
+ });
4292
4342
  var layerType = useSelector(function (store) {
4293
4343
  return layerSelectors.getLayerType(store, layerId);
4294
4344
  });
4345
+ var isFeatureSyncLayer = useSelector(function (store) {
4346
+ return layerSelectors.getIsFeatureSyncLayer(store, layerId);
4347
+ });
4295
4348
  var isFeatureLayer = layerType === LayerType.featureLayer;
4349
+ var mapSrs = useSelector(function (store) {
4350
+ return mapSelectors.getSrs(store, mapId);
4351
+ });
4352
+ var _useGetWMLayerInstanc = useGetWMLayerInstance(layer),
4353
+ wmLayer = _useGetWMLayerInstanc.wmLayer;
4354
+ var canZoomToLayerExtent = !!(layerId && mapSrs && wmLayerHasZoomExtent(wmLayer, mapSrs));
4296
4355
  // get all map ids
4297
4356
  var allMapIds = useSelector(mapSelectors.getAllMapIds);
4298
4357
  var allOtherMapIdsExceptCurrentOne = allMapIds.filter(function (id) {
@@ -4336,6 +4395,50 @@ var LayerManagerMenuButtonConnect = function LayerManagerMenuButtonConnect(_ref)
4336
4395
  }));
4337
4396
  });
4338
4397
  }, [dispatch, allLayers, mapId, layerId]);
4398
+ var zoomToLayerExtent = React.useCallback(function () {
4399
+ if (!layerId || !mapSrs || !wmLayer) {
4400
+ return;
4401
+ }
4402
+ var crs = wmLayer.getCRSByName(mapSrs);
4403
+ if (crs != null && crs.bbox) {
4404
+ var _crs$bbox$getExtent = crs.bbox.getExtent(),
4405
+ left = _crs$bbox$getExtent[0],
4406
+ bottom = _crs$bbox$getExtent[1],
4407
+ right = _crs$bbox$getExtent[2],
4408
+ top = _crs$bbox$getExtent[3];
4409
+ dispatch(mapActions.setBbox({
4410
+ mapId: mapId,
4411
+ srs: mapSrs,
4412
+ bbox: {
4413
+ left: left,
4414
+ bottom: bottom,
4415
+ right: right,
4416
+ top: top
4417
+ },
4418
+ origin: layerTypes.LayerActionOrigin.layerManager
4419
+ }));
4420
+ return;
4421
+ }
4422
+ var geo = wmLayer.geographicBoundingBox;
4423
+ if (geo) {
4424
+ var _transformExtent = transformExtent([parseFloat(geo.west), parseFloat(geo.south), parseFloat(geo.east), parseFloat(geo.north)], WMJSMAP_LONLAT_EPSGCODE, mapSrs),
4425
+ _left = _transformExtent[0],
4426
+ _bottom = _transformExtent[1],
4427
+ _right = _transformExtent[2],
4428
+ _top = _transformExtent[3];
4429
+ dispatch(mapActions.setBbox({
4430
+ mapId: mapId,
4431
+ srs: mapSrs,
4432
+ bbox: {
4433
+ left: _left,
4434
+ bottom: _bottom,
4435
+ right: _right,
4436
+ top: _top
4437
+ },
4438
+ origin: layerTypes.LayerActionOrigin.layerManager
4439
+ }));
4440
+ }
4441
+ }, [dispatch, layerId, mapId, mapSrs, wmLayer]);
4339
4442
  var duplicateLayer = React.useCallback(function (_ref3) {
4340
4443
  var newLayerId = _ref3.newLayerId,
4341
4444
  mapId = _ref3.mapId;
@@ -4347,8 +4450,10 @@ var LayerManagerMenuButtonConnect = function LayerManagerMenuButtonConnect(_ref)
4347
4450
  }));
4348
4451
  }, [dispatch, layerId]);
4349
4452
  return jsx(LayerManagerMenuButton, {
4453
+ canZoomToLayerExtent: canZoomToLayerExtent,
4350
4454
  icon: icon,
4351
4455
  isFeatureLayer: isFeatureLayer,
4456
+ isFeatureSyncLayer: isFeatureSyncLayer,
4352
4457
  layerId: layerId,
4353
4458
  mapId: mapId,
4354
4459
  onLayerCopyToOtherMaps: copyLayerToOtherMaps,
@@ -4359,6 +4464,7 @@ var LayerManagerMenuButtonConnect = function LayerManagerMenuButtonConnect(_ref)
4359
4464
  });
4360
4465
  },
4361
4466
  onLayerRemoveFromOtherMaps: removeLayerFromAllMaps,
4467
+ onLayerZoomToExtent: zoomToLayerExtent,
4362
4468
  tooltipTitle: tooltipTitle
4363
4469
  });
4364
4470
  };
@@ -5897,24 +6003,30 @@ var useFetchServices = function useFetchServices(dialogType, preloadedServices,
5897
6003
  shouldDisableFetch = false;
5898
6004
  }
5899
6005
  var dispatch = useDispatch();
6006
+ var store = useStore();
5900
6007
  var isOpenInStore = useSelector(function (store) {
5901
6008
  return uiSelectors.getisDialogOpen(store, dialogType);
5902
6009
  });
5903
- var services = useSelector(function (store) {
5904
- return serviceSelectors.getServiceIds(store);
5905
- });
5906
6010
  var fetchInitialServices = useCallback(function (services) {
5907
6011
  dispatch(serviceActions.fetchInitialServices({
5908
6012
  services: services
5909
6013
  }));
5910
6014
  }, [dispatch]);
5911
6015
  useEffect(function () {
5912
- if (!shouldDisableFetch && isOpenInStore && preloadedServices && preloadedServices.length > 0 && !services.length) {
6016
+ if (!shouldDisableFetch && isOpenInStore && preloadedServices && preloadedServices.length > 0) {
5913
6017
  var allServicesToLoad = mergePresetsAndUserAddedServices(preloadedServices, getUserAddedServices());
5914
- void getServicesToLoad(allServicesToLoad).then(fetchInitialServices);
6018
+ void getServicesToLoad(allServicesToLoad).then(function (servicesToLoad) {
6019
+ var currentServiceIds = serviceSelectors.getServiceIds(store.getState());
6020
+ var missingServices = servicesToLoad.filter(function (service) {
6021
+ return !currentServiceIds.includes(service.id);
6022
+ });
6023
+ if (missingServices.length > 0) {
6024
+ fetchInitialServices(missingServices);
6025
+ }
6026
+ });
5915
6027
  }
5916
6028
  // eslint-disable-next-line react-hooks/exhaustive-deps
5917
- }, [isOpenInStore, services]);
6029
+ }, [isOpenInStore]);
5918
6030
  };
5919
6031
  var mergePresetsAndUserAddedServices = function mergePresetsAndUserAddedServices(presets, userAddedServices) {
5920
6032
  return Object.values(Object.assign({}, presets.reduce(function (byUrl, preset) {
@@ -7794,7 +7906,9 @@ var createLinkedFeatureCollection = function createLinkedFeatureCollection(linke
7794
7906
  var isSelected = selectedFeatureIds == null ? void 0 : selectedFeatureIds.has((_getGeoFeatureSelecti = getGeoFeatureSelectionKey(geoFeature)) != null ? _getGeoFeatureSelecti : '');
7795
7907
  var existingProperties = geoFeature.properties && typeof geoFeature.properties === 'object' ? geoFeature.properties : {};
7796
7908
  return Object.assign({}, geoFeature, {
7797
- properties: Object.assign({}, existingProperties, isSelected ? {
7909
+ properties: Object.assign({}, existingProperties, {
7910
+ sourceLayerId: featureLayer.id
7911
+ }, isSelected ? {
7798
7912
  highlightSelectedFeature: true
7799
7913
  } : undefined, featureLayer.originalId ? {
7800
7914
  originalId: featureLayer.originalId
@@ -8292,6 +8406,7 @@ var OpenLayersFeatureLayerConnect = function OpenLayersFeatureLayerConnect(_ref2
8292
8406
  } : undefined,
8293
8407
  featureCollection: !layer.isInEditMode ? displayGeojson : undefined,
8294
8408
  hoverSelect: hoverSelect,
8409
+ layerId: layerId,
8295
8410
  opacity: layer.opacity,
8296
8411
  style: style,
8297
8412
  visible: layer.enabled,
@@ -8519,6 +8634,32 @@ var sanitizeHTML = function sanitizeHTML(htmlToBeSanitized) {
8519
8634
  };
8520
8635
  };
8521
8636
 
8637
+ var getMapPinLocation = function getMapPinLocation(mapPinLocation, map) {
8638
+ if (!mapPinLocation) {
8639
+ return undefined;
8640
+ }
8641
+ if (mapPinLocation.projectionX !== undefined && mapPinLocation.projectionY !== undefined && mapPinLocation.resolution !== undefined && mapPinLocation.srs) {
8642
+ return mapPinLocation;
8643
+ }
8644
+ if (!map) {
8645
+ return mapPinLocation;
8646
+ }
8647
+ var view = map.getView();
8648
+ var projection = view == null ? void 0 : view.getProjection();
8649
+ var resolution = view == null ? void 0 : view.getResolution();
8650
+ if (!projection || resolution === undefined) {
8651
+ return mapPinLocation;
8652
+ }
8653
+ var _fromLonLat = fromLonLat([mapPinLocation.lon, mapPinLocation.lat], projection),
8654
+ projectionX = _fromLonLat[0],
8655
+ projectionY = _fromLonLat[1];
8656
+ return Object.assign({}, mapPinLocation, {
8657
+ projectionX: projectionX,
8658
+ projectionY: projectionY,
8659
+ resolution: resolution,
8660
+ srs: projection.getCode()
8661
+ });
8662
+ };
8522
8663
  var GetFeatureInfoDialog = function GetFeatureInfoDialog(_ref) {
8523
8664
  var layers = _ref.layers,
8524
8665
  isOpen = _ref.isOpen,
@@ -8535,8 +8676,10 @@ var GetFeatureInfoDialog = function GetFeatureInfoDialog(_ref) {
8535
8676
  mapPinLocation = _ref.mapPinLocation;
8536
8677
  var _useCoreTranslation = useCoreTranslation(),
8537
8678
  t = _useCoreTranslation.t;
8679
+ var _React$useContext = React.useContext(MapContext),
8680
+ map = _React$useContext.map;
8538
8681
  /* Ref, state and update function for results per layer map */
8539
- var gfiResultMap = React.useRef(new Map()).current;
8682
+ var gfiResultMap = React.useRef(new globalThis.Map()).current;
8540
8683
  // eslint-disable-next-line react/hook-use-state
8541
8684
  var _React$useState = React.useState(),
8542
8685
  triggerRerender = _React$useState[1];
@@ -8551,7 +8694,10 @@ var GetFeatureInfoDialog = function GetFeatureInfoDialog(_ref) {
8551
8694
  triggerRerender("" + layerId + isLoading);
8552
8695
  };
8553
8696
  /* Build a layerlist array with a set of arguments per layer to do the query for */
8554
- var layerToUpdateList = isOpen && mapPinLocation ? getLayersToUpdate(mapPinLocation, layers) : [];
8697
+ var mapPinLocationCoordinates = React.useMemo(function () {
8698
+ return getMapPinLocation(mapPinLocation, map);
8699
+ }, [map, mapPinLocation]);
8700
+ var layerToUpdateList = isOpen && mapPinLocationCoordinates ? getLayersToUpdate(mapPinLocationCoordinates, layers) : [];
8555
8701
  /*
8556
8702
  Build a string based on the GFI urls. If this changes for whatever reason we need to update.
8557
8703
  These strings can change very often, therefore they need to be debounced and only use the most recent result must be used.
@@ -8615,7 +8761,7 @@ var GetFeatureInfoDialog = function GetFeatureInfoDialog(_ref) {
8615
8761
  }();
8616
8762
  /* For each changed getfeature url string, load new data using WMS GetFeatureInfo */
8617
8763
  React.useEffect(function () {
8618
- if (mapPinLocation && isOpen) {
8764
+ if (mapPinLocationCoordinates && isOpen) {
8619
8765
  layerToUpdateList.forEach(function (_ref4) {
8620
8766
  var url = _ref4.url,
8621
8767
  layerId = _ref4.layerId;
@@ -8645,7 +8791,7 @@ var GetFeatureInfoDialog = function GetFeatureInfoDialog(_ref) {
8645
8791
  sx: {
8646
8792
  padding: 0
8647
8793
  },
8648
- children: [!!isOpen && !!hasLayers && !!mapPinLocation && jsx(Box, {
8794
+ children: [!!isOpen && !!hasLayers && !!mapPinLocationCoordinates && jsx(Box, {
8649
8795
  "data-testid": "GetFeatureInfoList",
8650
8796
  ref: stopWheelEventPropagationRef,
8651
8797
  children: layerToUpdateList.map(function (layer) {
@@ -8698,7 +8844,7 @@ var GetFeatureInfoDialog = function GetFeatureInfoDialog(_ref) {
8698
8844
  })]
8699
8845
  }, layerId);
8700
8846
  })
8701
- }), !!hasLayers && !mapPinLocation && jsx(Typography, {
8847
+ }), !!hasLayers && !mapPinLocationCoordinates && jsx(Typography, {
8702
8848
  "data-testid": "click-on-map-for-info",
8703
8849
  sx: {
8704
8850
  padding: '10px'
@@ -8859,11 +9005,16 @@ var MapOptionsButtonConnect = function MapOptionsButtonConnect(_ref) {
8859
9005
  var isFeatureInfoActive = useSelector(function (store) {
8860
9006
  return uiSelectors.getisDialogOpen(store, gfiType);
8861
9007
  });
9008
+ var previousIsMeasureToolActive = usePrevious(isMeasureToolActive);
9009
+ var previousIsFeatureInfoActive = usePrevious(isFeatureInfoActive);
8862
9010
  React.useEffect(function () {
8863
9011
  if (!isMapOptionsOpen && (isMeasureToolActive || isFeatureInfoActive)) {
8864
9012
  setIsMapOptionsOpen(true);
8865
9013
  }
8866
- }, [isFeatureInfoActive, isMapOptionsOpen, isMeasureToolActive]);
9014
+ if (isMapOptionsOpen && !isMeasureToolActive && !isFeatureInfoActive && (previousIsMeasureToolActive || previousIsFeatureInfoActive)) {
9015
+ setIsMapOptionsOpen(false);
9016
+ }
9017
+ }, [isFeatureInfoActive, isMapOptionsOpen, isMeasureToolActive, previousIsFeatureInfoActive, previousIsMeasureToolActive]);
8867
9018
  return getFeatureInfo && measureTool ? jsxs(Stack, {
8868
9019
  direction: "row",
8869
9020
  spacing: 1,
@@ -8965,12 +9116,24 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
8965
9116
  });
8966
9117
  return visibilityById;
8967
9118
  }, [layersState]);
8968
- var warningDialogFeatureLayers = useSelector(function (state) {
9119
+ var allWarningDialogFeatureLayers = useSelector(function (state) {
8969
9120
  return genericSelectors.selectFeatureSyncLayersForPanel(state, 'warning-dialog');
8970
9121
  });
9122
+ var warningDialogFeatureLayers = React.useMemo(function () {
9123
+ return allWarningDialogFeatureLayers.filter(function (layer) {
9124
+ return layer.mapId === mapId;
9125
+ });
9126
+ }, [allWarningDialogFeatureLayers, mapId]);
8971
9127
  var warningDialogFeatures = React.useMemo(function () {
8972
9128
  return createWarningDialogFeatureLayers(warningDialogFeatureLayers);
8973
9129
  }, [warningDialogFeatureLayers]);
9130
+ var hasPublicWarningDrawLayer = featureLayers.some(function (layer) {
9131
+ var _layer$id;
9132
+ return (_layer$id = layer.id) == null ? void 0 : _layer$id.startsWith("drawLayer-" + PUBLIC_WARNING_DRAW_TOOL_ID + "-");
9133
+ });
9134
+ var warningDialogFeaturesForHighlight = React.useMemo(function () {
9135
+ return hasPublicWarningDrawLayer ? [] : warningDialogFeatures;
9136
+ }, [hasPublicWarningDrawLayer, warningDialogFeatures]);
8974
9137
  var warningDialogFeatureKeys = React.useMemo(function () {
8975
9138
  return createWarningDialogFeatureKeys(warningDialogFeatures);
8976
9139
  }, [warningDialogFeatures]);
@@ -8979,11 +9142,6 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
8979
9142
  var linkedFeaturesFromState = useSelector(function (store) {
8980
9143
  return genericSelectors.selectLinkedFeatureLayersForMap(store, mapId);
8981
9144
  });
8982
- // Form-specific features (draft/edit geometries) from linked panels.
8983
- // Kept separate from linkedFeatures so edit-mode filtering can be applied.
8984
- var linkedFormFeaturesFromState = useSelector(function (store) {
8985
- return genericSelectors.selectLinkedFormFeaturesForMap(store, mapId);
8986
- });
8987
9145
  // Raw shared-data payload grouped per linked panel id.
8988
9146
  // Needed for ownership lookup (feature key -> panel id(s)) when routing
8989
9147
  // selection/hover updates back to the correct source panel(s).
@@ -9014,19 +9172,6 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
9014
9172
  return featureCollection.features.length > 0;
9015
9173
  });
9016
9174
  }, [featureSyncLayerVisibilityById, linkedFeaturesFromState, selectedFeatureIdsByLayerKey, warningDialogFeatureKeys]);
9017
- var linkedFormFeatures = React.useMemo(function () {
9018
- return {
9019
- type: 'FeatureCollection',
9020
- features: linkedFormFeaturesFromState.flatMap(function (feature) {
9021
- var _feature$geoJSON$feat;
9022
- // Filter out any form features currently in Edit mode
9023
- if ((_feature$geoJSON$feat = feature.geoJSON.features[0]) != null && (_feature$geoJSON$feat = _feature$geoJSON$feat.properties) != null && _feature$geoJSON$feat.inEditMode) {
9024
- return [];
9025
- }
9026
- return feature.geoJSON.features;
9027
- })
9028
- };
9029
- }, [linkedFormFeaturesFromState]);
9030
9175
  var srs = useSelector(function (store) {
9031
9176
  return mapSelectors.getSrs(store, mapId);
9032
9177
  });
@@ -9115,20 +9260,43 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
9115
9260
  var disableMapPin = useSelector(function (store) {
9116
9261
  return mapSelectors.getDisableMapPin(store, mapId);
9117
9262
  });
9263
+ var isCurrentMapDrawToolActive = useSelector(function (state) {
9264
+ return drawingToolSelectors.selectAllDrawingTools(state).some(function (tool) {
9265
+ var _layerSelectors$getLa;
9266
+ if (!tool.activeDrawModeId) {
9267
+ return false;
9268
+ }
9269
+ return ((_layerSelectors$getLa = layerSelectors.getLayerById(state, tool.geoJSONLayerId)) == null ? void 0 : _layerSelectors$getLa.mapId) === mapId;
9270
+ });
9271
+ });
9272
+ var drawToolLayerIds = useSelector(function (state) {
9273
+ return drawingToolSelectors.selectAllDrawingTools(state).map(function (tool) {
9274
+ return tool.geoJSONLayerId;
9275
+ }).filter(function (layerId) {
9276
+ return Boolean(layerId);
9277
+ });
9278
+ }, shallowEqual);
9279
+ var shouldHandleMapPinClick = React.useCallback(function (event) {
9280
+ var clickedLayerIds = new Set();
9281
+ event.map.forEachFeatureAtPixel(event.pixel, function (_feature, layerAtPixel) {
9282
+ var layerId = layerAtPixel == null ? void 0 : layerAtPixel.get('layerId');
9283
+ if (typeof layerId === 'string') {
9284
+ clickedLayerIds.add(layerId);
9285
+ }
9286
+ });
9287
+ return !drawToolLayerIds.some(function (layerId) {
9288
+ return clickedLayerIds.has(layerId);
9289
+ });
9290
+ }, [drawToolLayerIds]);
9118
9291
  var mapPinChangeLocation = React.useCallback(function (clickedLocation) {
9119
- var _hoverLinkedFeature$g, _hoverLinkedFeature$g2;
9120
- if (disableMapPin) {
9292
+ var _hoverLinkedFeature$g, _hoverLinkedFeature$g2, _hoverLinkedFeature$g3;
9293
+ if (disableMapPin || isCurrentMapDrawToolActive) {
9121
9294
  return;
9122
9295
  }
9123
9296
  var mapPinLocation = getCenterOfLinkedFeature(hoverLinkedFeature, srs) || clickedLocation;
9124
9297
  var selectedFeatureId = (hoverLinkedFeature == null || (_hoverLinkedFeature$g = hoverLinkedFeature.getId()) == null ? void 0 : _hoverLinkedFeature$g.toString()) || (hoverLinkedFeature == null || (_hoverLinkedFeature$g2 = hoverLinkedFeature.get('originalId')) == null ? void 0 : _hoverLinkedFeature$g2.toString()) || '';
9125
- var shouldMirrorSelectionToDrawLayer = hoverLinkedFeature && hoverLinkedFeature.get('isReadonly') !== true;
9126
- if (shouldMirrorSelectionToDrawLayer) {
9127
- dispatch(layerActions.setSelectedFeatures({
9128
- layerId: "drawlayer-" + mapId,
9129
- selectedFeatureIds: selectedFeatureId ? [selectedFeatureId] : []
9130
- }));
9131
- }
9298
+ var hoveredFeatureSourceLayerId = hoverLinkedFeature == null || (_hoverLinkedFeature$g3 = hoverLinkedFeature.get('sourceLayerId')) == null ? void 0 : _hoverLinkedFeature$g3.toString();
9299
+ var isHoveredFeatureSyncLayer = hoveredFeatureSourceLayerId ? layerSelectors.getIsFeatureSyncLayer(store.getState(), hoveredFeatureSourceLayerId) : false;
9132
9300
  var state = store.getState();
9133
9301
  var directlyLinkedPanelIds = genericSelectors.selectLinkedPanelIdsForMap(state, mapId);
9134
9302
  var connectedMapIds = new Set([mapId]);
@@ -9160,6 +9328,13 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
9160
9328
  });
9161
9329
  var targetPanelIds = getFeatureSelectionTargetPanelIds(selectedFeatureId, featureOwnerPanelIdsById, directlyLinkedPanelIds);
9162
9330
  var mapIdsToUpdate = directlyLinkedMapIds.size > 0 ? Array.from(directlyLinkedMapIds) : [mapId];
9331
+ var shouldMirrorSelectionToDrawLayer = hoverLinkedFeature && hoverLinkedFeature.get('isReadonly') !== true && !isHoveredFeatureSyncLayer && targetPanelIds.length === 0;
9332
+ if (shouldMirrorSelectionToDrawLayer) {
9333
+ dispatch(layerActions.setSelectedFeatures({
9334
+ layerId: "drawlayer-" + mapId,
9335
+ selectedFeatureIds: selectedFeatureId ? [selectedFeatureId] : []
9336
+ }));
9337
+ }
9163
9338
  if (targetPanelIds.length > 0) {
9164
9339
  directlyLinkedPanelIds.forEach(function (panelId) {
9165
9340
  var featureIdForPanel = targetPanelIds.includes(panelId) ? selectedFeatureId : '';
@@ -9178,7 +9353,7 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
9178
9353
  mapPinLocation: mapPinLocation
9179
9354
  }));
9180
9355
  });
9181
- }, [dispatch, featureOwnerPanelIdsById, disableMapPin, hoverLinkedFeature, mapId, setSelectedFeatureIdsForPanel, srs, store]);
9356
+ }, [dispatch, featureOwnerPanelIdsById, disableMapPin, hoverLinkedFeature, isCurrentMapDrawToolActive, mapId, setSelectedFeatureIdsForPanel, srs, store]);
9182
9357
  var isActiveWindowId = useSelector(function (store) {
9183
9358
  return uiSelectors.getIsActiveWindowId(store, mapId);
9184
9359
  });
@@ -9227,8 +9402,8 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
9227
9402
  };
9228
9403
  }, [view, mapId, srs, dispatch]);
9229
9404
  var featureProperties = React.useMemo(function () {
9230
- var _hoverLinkedFeature$g3;
9231
- return (_hoverLinkedFeature$g3 = hoverLinkedFeature == null || hoverLinkedFeature.getProperties == null ? void 0 : hoverLinkedFeature.getProperties()) != null ? _hoverLinkedFeature$g3 : {};
9405
+ var _hoverLinkedFeature$g4;
9406
+ return (_hoverLinkedFeature$g4 = hoverLinkedFeature == null || hoverLinkedFeature.getProperties == null ? void 0 : hoverLinkedFeature.getProperties()) != null ? _hoverLinkedFeature$g4 : {};
9232
9407
  }, [hoverLinkedFeature]);
9233
9408
  var hoverIdFromFeature = hoverLinkedFeature == null ? void 0 : hoverLinkedFeature.get('originalId');
9234
9409
  var hoverId = typeof hoverIdFromFeature === 'string' && hoverIdFromFeature || (typeof (featureProperties == null ? void 0 : featureProperties.originalId) === 'string' ? featureProperties.originalId : undefined);
@@ -9377,7 +9552,7 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
9377
9552
  }, [isSearchDialogOpen]);
9378
9553
  useFitAndHighlightWarningFeature({
9379
9554
  view: view,
9380
- warningDialogFeatures: warningDialogFeatures,
9555
+ warningDialogFeatures: warningDialogFeaturesForHighlight,
9381
9556
  srs: srs,
9382
9557
  mapId: mapId
9383
9558
  });
@@ -9398,23 +9573,12 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
9398
9573
  })
9399
9574
  };
9400
9575
  }, [hoveredLinkedFeatureIds, linkedFeatureCollections]);
9401
- var filteredLinkedFormFeatures = React.useMemo(function () {
9402
- return {
9403
- type: 'FeatureCollection',
9404
- features: linkedFormFeatures.features.filter(function (feature) {
9405
- var _feature$properties2;
9406
- var featureId = feature.id !== undefined ? String(feature.id) : undefined;
9407
- var originalId = typeof ((_feature$properties2 = feature.properties) == null ? void 0 : _feature$properties2.originalId) === 'string' ? feature.properties.originalId : undefined;
9408
- return !(featureId && warningDialogFeatureKeys.has(featureId) || originalId && warningDialogFeatureKeys.has(originalId));
9409
- })
9410
- };
9411
- }, [linkedFormFeatures, warningDialogFeatureKeys]);
9412
9576
  var combinedLinkedFeatures = React.useMemo(function () {
9413
9577
  return {
9414
9578
  type: 'FeatureCollection',
9415
- features: [].concat(linkedFeatureCollectionsWithHover.features, filteredLinkedFormFeatures.features)
9579
+ features: linkedFeatureCollectionsWithHover.features
9416
9580
  };
9417
- }, [linkedFeatureCollectionsWithHover, filteredLinkedFormFeatures]);
9581
+ }, [linkedFeatureCollectionsWithHover]);
9418
9582
  return jsx(TimeContext.Provider, {
9419
9583
  value: prefetchTimespan,
9420
9584
  children: jsxs(OpenLayersMapView, {
@@ -9464,7 +9628,8 @@ var OlMapViewConnect = function OlMapViewConnect(_ref) {
9464
9628
  disableMapPin: disableMapPin,
9465
9629
  displayMapPin: displayMapPin,
9466
9630
  mapPinLocation: mapPinLocation,
9467
- selectLocation: mapPinChangeLocation
9631
+ selectLocation: mapPinChangeLocation,
9632
+ shouldHandleClick: shouldHandleMapPinClick
9468
9633
  })]
9469
9634
  }), jsxs(MapControls, {
9470
9635
  "data-testid": "mapControls",
@@ -1,16 +1,19 @@
1
1
  import React from 'react';
2
- interface LayerManagerButtonProps {
2
+ interface LayerManagerMenuButtonProps {
3
3
  mapId: string;
4
4
  layerId?: string;
5
5
  isFeatureLayer?: boolean;
6
+ isFeatureSyncLayer?: boolean;
6
7
  onLayerDuplicate?: (payload: {
7
8
  mapId: string;
8
9
  layerId: string;
9
10
  }) => void;
10
11
  onLayerCopyToOtherMaps?: () => void;
11
12
  onLayerRemoveFromOtherMaps?: () => void;
13
+ onLayerZoomToExtent?: () => void;
14
+ canZoomToLayerExtent?: boolean;
12
15
  tooltipTitle?: string;
13
16
  icon?: React.ReactNode;
14
17
  }
15
- declare const LayerManagerMenuButton: React.FC<LayerManagerButtonProps>;
18
+ declare const LayerManagerMenuButton: React.FC<LayerManagerMenuButtonProps>;
16
19
  export default LayerManagerMenuButton;
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- interface LayerManagerButtonProps {
2
+ interface LayerManagerMenuButtonConnectProps {
3
3
  mapId: string;
4
4
  layerId?: string;
5
5
  tooltipTitle?: string;
6
6
  icon?: React.ReactNode;
7
7
  }
8
- declare const LayerManagerMenuButtonConnect: React.FC<LayerManagerButtonProps>;
8
+ declare const LayerManagerMenuButtonConnect: React.FC<LayerManagerMenuButtonConnectProps>;
9
9
  export default LayerManagerMenuButtonConnect;
@@ -3,6 +3,7 @@ interface SelectableFeaturesProps {
3
3
  layerId: string;
4
4
  isSelectable: boolean;
5
5
  onToggleSelectable: () => void;
6
+ disabled?: boolean;
6
7
  }
7
8
  declare const SelectableFeatures: React.FC<SelectableFeaturesProps>;
8
9
  export default SelectableFeatures;
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  interface SelectableFeaturesCheckboxConnectProps {
3
3
  layerId: string;
4
+ disabled?: boolean;
4
5
  }
5
6
  declare const SelectableFeaturesCheckboxConnect: React.FC<SelectableFeaturesCheckboxConnectProps>;
6
7
  export default SelectableFeaturesCheckboxConnect;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/core",
3
- "version": "19.1.1",
3
+ "version": "19.3.0",
4
4
  "description": "GeoWeb Core library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -28,7 +28,7 @@
28
28
  "@opengeoweb/webmap-react": "*",
29
29
  "@opengeoweb/webmap": "*",
30
30
  "@opengeoweb/theme": "*",
31
- "axios": "^1.16.0",
31
+ "axios": "^1.18.0",
32
32
  "@opengeoweb/layer-select": "*",
33
33
  "lodash": "^4.18.1",
34
34
  "ol": "^10.4.0",