@opengeoweb/core 20.0.1 → 20.1.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 (2) hide show
  1. package/dist/index.esm.js +31 -52
  2. package/package.json +10 -10
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  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
- import { safelyInitI18nForTestsAndStories, sharedTranslations, SHARED_NAMESPACE, TooltipSelect, CustomIconButton, CustomDialog, CustomTooltip, ToggleMenu, AlertIcon, useConfirmationDialog, useScrollingInIsolation, sliderHeaderStyle, CustomSlider, SearchField, SearchHighlight, tooltipContainerStyles, renderCounter, AlertBanner, CustomAccordion, PROJECTION, calculateStartSize, useWheelStopPropagation, ToolContainerDraggable, useDebounce, dateUtils, sessionStorageProvider, usePrevious } from '@opengeoweb/shared';
4
+ import { safelyInitI18nForTestsAndStories, sharedTranslations, SHARED_NAMESPACE, TooltipSelect, CustomIconButton, CustomDialog, CustomTooltip, ToggleMenu, AlertIcon, useScrollingInIsolation, sliderHeaderStyle, CustomSlider, SearchField, SearchHighlight, tooltipContainerStyles, renderCounter, AlertBanner, CustomAccordion, PROJECTION, calculateStartSize, useWheelStopPropagation, ToolContainerDraggable, useDebounce, dateUtils, sessionStorageProvider, usePrevious } from '@opengeoweb/shared';
5
5
  import { webmapUtils, queryWMSLayersTree, invalidateWMSGetCapabilities, LayerType, WMJSDimension, WMDefaultStyleName, queryWMSServiceInfo, queryWMSLayers, getWMSServiceId, handleDateUtilsISOString, generateLayerId, getWMLayerById, getMapDimURL, WMLayer } from '@opengeoweb/webmap';
6
6
  import _, { isEqual, isArray, range, zip, throttle } from 'lodash';
7
7
  import { useDispatch, useSelector, connect, useStore, shallowEqual, Provider } from 'react-redux';
@@ -129,10 +129,6 @@ var en = {
129
129
  "featureinfo-title": "Feature info",
130
130
  "featureinfo-id": "ID",
131
131
  "featureinfo-location": "Location",
132
- "delete-dialog-title": "Delete layer",
133
- "delete-dialog-description": "Are you sure you want to delete this layer? EDR layers are not yet available in the Layer Select.",
134
- "delete-dialog-cancel": "Cancel",
135
- "delete-dialog-confirm": "Delete",
136
132
  "map-options-button": "Location or Measuring tool",
137
133
  "map-measure-tool": "Measuring tool",
138
134
  "data-outdated": "Outdated data"
@@ -410,10 +406,6 @@ var nl = {
410
406
  "featureinfo-title": "niet vertaald",
411
407
  "featureinfo-id": "niet vertaald",
412
408
  "featureinfo-location": "niet vertaald",
413
- "delete-dialog-title": "Laag verwijderen",
414
- "delete-dialog-description": "Weet je zeker dat je deze laag wilt verwijderen? EDR lagen zijn nog niet beschikbaar in de Layer Select.",
415
- "delete-dialog-cancel": "Annuleren",
416
- "delete-dialog-confirm": "Verwijderen",
417
409
  "map-options-button": "Locatie informatie en Meten",
418
410
  "map-measure-tool": "Meten",
419
411
  "data-outdated": "Data is niet actueel"
@@ -2951,14 +2943,10 @@ var DeleteLayerConnect = function DeleteLayerConnect(_ref) {
2951
2943
  var _useCoreTranslation = useCoreTranslation(),
2952
2944
  t = _useCoreTranslation.t;
2953
2945
  var dispatch = useDispatch();
2954
- var confirmationDialog = useConfirmationDialog();
2955
2946
  var nonEmptyTooltipTitle = tooltipTitle != null ? tooltipTitle : t('layermanager-layer-delete');
2956
2947
  var layerIndex = useSelector(function (store) {
2957
2948
  return mapSelectors.getLayerIndexByLayerId(store, mapId, layerId);
2958
2949
  });
2959
- var layerType = useSelector(function (store) {
2960
- return layerSelectors.getLayerType(store, layerId);
2961
- });
2962
2950
  var isFeatureSyncLayer = useSelector(function (store) {
2963
2951
  return layerSelectors.getIsFeatureSyncLayer(store, layerId);
2964
2952
  });
@@ -2978,28 +2966,13 @@ var DeleteLayerConnect = function DeleteLayerConnect(_ref) {
2978
2966
  var onDelete = React.useCallback(function (_ref3) {
2979
2967
  var mapId = _ref3.mapId,
2980
2968
  layerId = _ref3.layerId;
2981
- if (isFeatureSyncLayer) {
2982
- return;
2983
- }
2984
- if (layerType === LayerType.edrFeatureLayer) {
2985
- void confirmationDialog({
2986
- title: t('delete-dialog-title'),
2987
- description: t('delete-dialog-description'),
2988
- confirmLabel: t('delete-dialog-confirm'),
2989
- cancelLabel: t('delete-dialog-cancel')
2990
- }).then(function () {
2991
- layerDelete({
2992
- mapId: mapId,
2993
- layerId: layerId
2994
- });
2995
- });
2996
- } else {
2969
+ if (!isFeatureSyncLayer) {
2997
2970
  layerDelete({
2998
2971
  mapId: mapId,
2999
2972
  layerId: layerId
3000
2973
  });
3001
2974
  }
3002
- }, [isFeatureSyncLayer, layerType, confirmationDialog, t, layerDelete]);
2975
+ }, [isFeatureSyncLayer, layerDelete]);
3003
2976
  return jsx(CustomIconButton, {
3004
2977
  "data-testid": "deleteButton",
3005
2978
  disabled: isFeatureSyncLayer,
@@ -4838,7 +4811,12 @@ var RenderLayersConnect = function RenderLayersConnect(_ref) {
4838
4811
  var serviceUrl = useSelector(function (store) {
4839
4812
  return layerSelectors.getLayerService(store, layerId);
4840
4813
  });
4841
- var resolvedServiceUrl = isStacGeoTIFFLayer ? layerUtils.getSTACServiceRootUrl(serviceUrl) : serviceUrl;
4814
+ var resolvedServiceUrl = serviceUrl;
4815
+ if (isStacGeoTIFFLayer) {
4816
+ resolvedServiceUrl = layerUtils.getSTACServiceRootUrl(serviceUrl);
4817
+ } else if (isEdrLayer) {
4818
+ resolvedServiceUrl = layerUtils.getEDRServiceRootUrl(serviceUrl);
4819
+ }
4842
4820
  var isLayerEnabled = useSelector(function (store) {
4843
4821
  return layerSelectors.getLayerEnabled(store, layerId);
4844
4822
  });
@@ -4846,10 +4824,14 @@ var RenderLayersConnect = function RenderLayersConnect(_ref) {
4846
4824
  return layerSelectors.getLayerStyle(store, layerId);
4847
4825
  });
4848
4826
  var service = useSelector(function (store) {
4849
- if (!isStacGeoTIFFLayer) {
4827
+ if (!isStacGeoTIFFLayer && !isEdrLayer) {
4850
4828
  return serviceSelectors.getServiceByUrl(store, serviceUrl);
4851
4829
  }
4852
- return serviceSelectors.getServiceByUrl(store, resolvedServiceUrl) || serviceSelectors.getServiceByUrl(store, layerUtils.getTrailingSlashVariant(resolvedServiceUrl));
4830
+ var rootService = serviceSelectors.getServiceByUrl(store, resolvedServiceUrl) || serviceSelectors.getServiceByUrl(store, layerUtils.getTrailingSlashVariant(resolvedServiceUrl));
4831
+ if (rootService) {
4832
+ return rootService;
4833
+ }
4834
+ return isEdrLayer ? serviceSelectors.getServiceByUrl(store, serviceUrl) : undefined;
4853
4835
  });
4854
4836
  var layerOptions = useSelector(function (store) {
4855
4837
  return layerSelectors.getLayerOptions(store, layerId);
@@ -4973,6 +4955,7 @@ var RenderLayersConnect = function RenderLayersConnect(_ref) {
4973
4955
  "abstract": data.description,
4974
4956
  layers: layers,
4975
4957
  scope: 'system',
4958
+ isUpdating: true,
4976
4959
  type: 'EDR'
4977
4960
  });
4978
4961
  }, [data, serviceUrl, service, serviceSetLayers]);
@@ -5169,7 +5152,7 @@ var hasMatchingSTACLayerServiceUrl = function hasMatchingSTACLayerServiceUrl(lay
5169
5152
  return !isSTACCollectionUrl(layerInfoServiceUrl) && hasSameSTACServiceUrl(layerServiceUrl, layerInfoServiceUrl);
5170
5153
  };
5171
5154
  var LayerInfoDialogConnect = function LayerInfoDialogConnect(_ref) {
5172
- var _layerInfo$serviceUrl, _selectedMapLayer$ser, _currentService$layer;
5155
+ var _layerInfo$serviceUrl, _selectedMapLayer$ser, _currentService$layer, _selectedMapLayer$opt;
5173
5156
  var source = _ref.source,
5174
5157
  mapId = _ref.mapId;
5175
5158
  var dispatch = useDispatch();
@@ -5229,6 +5212,7 @@ var LayerInfoDialogConnect = function LayerInfoDialogConnect(_ref) {
5229
5212
  return null;
5230
5213
  }
5231
5214
  return jsx(LayerInfoDialog, {
5215
+ edrParameterMetadata: (selectedMapLayer == null ? void 0 : selectedMapLayer.layerType) === LayerType.edrFeatureLayer ? (_selectedMapLayer$opt = selectedMapLayer.options) == null ? void 0 : _selectedMapLayer$opt.parameterMetadata : undefined,
5232
5216
  isOpen: isDialogOpen,
5233
5217
  layer: layer,
5234
5218
  onClose: onCloseDialog,
@@ -6620,22 +6604,20 @@ var AnimationLengthPanelConnect = function AnimationLengthPanelConnect(_ref) {
6620
6604
  var timeStep = useSelector(function (store) {
6621
6605
  return mapSelectors.getMapTimeStep(store, mapId);
6622
6606
  });
6623
- var layerRefTimeDimension = useSelector(function (store) {
6624
- return layerSelectors.getLayerDimension(store, autoTimeStepLayerId, 'reference_time');
6607
+ var anchorInputs = useSelector(function (store) {
6608
+ return mapSelectors.getAnimationAnchorInputs(store, mapId);
6625
6609
  });
6626
- var referenceTimeFromLayer = (layerRefTimeDimension == null ? void 0 : layerRefTimeDimension.currentValue) || undefined;
6627
- var anchorTime = dateUtils.utc(referenceTimeFromLayer);
6628
6610
  var commitAnimationLength = React.useCallback(function (length) {
6629
- var isUsableRange = isValidAnimationLength(length) && isWithinAnimationStepLimit(length, timeStep);
6611
+ var isUsableRange = isValidAnimationLength(length, anchorInputs) && isWithinAnimationStepLimit(length, timeStep, anchorInputs);
6630
6612
  var carriesOwnRange = isAnchoredMode(length.mode) || length.mode === AnimationLengthMode.Exact;
6631
- var resolvedRange = carriesOwnRange && isUsableRange ? settingRange(length, anchorTime) : undefined;
6613
+ var resolvedRange = carriesOwnRange && isUsableRange ? settingRange(length, anchorInputs) : undefined;
6632
6614
  dispatch(mapActions.setAnimationLength(Object.assign({
6633
6615
  mapId: mapId,
6634
6616
  animationLength: length
6635
6617
  }, resolvedRange, {
6636
6618
  origin: mapEnums.MapActionOrigin.map
6637
6619
  })));
6638
- }, [anchorTime, dispatch, mapId, timeStep]);
6620
+ }, [anchorInputs, dispatch, mapId, timeStep]);
6639
6621
  React.useEffect(function () {
6640
6622
  if (debouncedLength && isCommittableRef.current) {
6641
6623
  commitAnimationLength(debouncedLength);
@@ -6651,11 +6633,11 @@ var AnimationLengthPanelConnect = function AnimationLengthPanelConnect(_ref) {
6651
6633
  return;
6652
6634
  }
6653
6635
  if (isStep) {
6654
- var isUsableRange = isValidAnimationLength(animationLength) && isWithinAnimationStepLimit(animationLength, timeStep);
6636
+ var isUsableRange = isValidAnimationLength(animationLength, anchorInputs) && isWithinAnimationStepLimit(animationLength, timeStep, anchorInputs);
6655
6637
  if (isUsableRange) {
6656
6638
  dispatch(mapActions.refreshAnimationRange(Object.assign({
6657
6639
  mapId: mapId
6658
- }, settingRange(animationLength, anchorTime))));
6640
+ }, settingRange(animationLength, anchorInputs))));
6659
6641
  }
6660
6642
  }
6661
6643
  };
@@ -6669,7 +6651,7 @@ var AnimationLengthPanelConnect = function AnimationLengthPanelConnect(_ref) {
6669
6651
  isAutoDisabled: !timeStepFromLayer,
6670
6652
  onChange: changeAnimationLength,
6671
6653
  onInputChange: cancelPendingCommit,
6672
- referenceTimeFromLayer: referenceTimeFromLayer,
6654
+ referenceTimeFromLayer: anchorInputs.referenceTime,
6673
6655
  setting: (_ref2 = draftLength != null ? draftLength : storedAnimationLength) != null ? _ref2 : exactAnimationLengthFrom({
6674
6656
  animationStartTime: animationStartTime,
6675
6657
  animationEndTime: animationEndTime
@@ -10302,14 +10284,11 @@ var TimeSliderLegendConnect = function TimeSliderLegendConnect(_ref) {
10302
10284
  var animationLength = useSelector(function (store) {
10303
10285
  return mapSelectors.getAnimationLength(store, mapId);
10304
10286
  });
10305
- var autoTimeStepLayerId = useSelector(function (store) {
10306
- return mapSelectors.getAutoTimeStepLayerId(store, mapId);
10307
- });
10308
- var layerRefTimeDimension = useSelector(function (store) {
10309
- return layerSelectors.getLayerDimension(store, autoTimeStepLayerId, 'reference_time');
10287
+ var anchorInputs = useSelector(function (store) {
10288
+ return mapSelectors.getAnimationAnchorInputs(store, mapId);
10310
10289
  });
10311
10290
  /* ReferenceTime counts its offsets from the layer, so the reducer is told where that is. */
10312
- var referenceTimeFromLayer = (layerRefTimeDimension == null ? void 0 : layerRefTimeDimension.currentValue) || undefined;
10291
+ var referenceTimeFromLayer = anchorInputs.referenceTime;
10313
10292
  /* An anchored mode counts whole units from its anchor, so a handle may only land on those. */
10314
10293
  var snapAnimationTime = React.useMemo(function () {
10315
10294
  if (!animationLength || !isAnchoredMode(animationLength.mode)) {
@@ -10317,9 +10296,9 @@ var TimeSliderLegendConnect = function TimeSliderLegendConnect(_ref) {
10317
10296
  }
10318
10297
  var unit = activeEditUnit(animationLength);
10319
10298
  return function (timeUnix) {
10320
- return dateUtils.unix(snapInstantToOffsetGrid(anchorInstantFor(animationLength, referenceTimeFromLayer), dateUtils.fromUnix(timeUnix), unit));
10299
+ return dateUtils.unix(snapInstantToOffsetGrid(anchorInstantFor(animationLength, anchorInputs), dateUtils.fromUnix(timeUnix), unit));
10321
10300
  };
10322
- }, [animationLength, referenceTimeFromLayer]);
10301
+ }, [animationLength, anchorInputs]);
10323
10302
  var currentTime = dateUtils.unix(Date.now());
10324
10303
  var _useSelector2 = useSelector(function (store) {
10325
10304
  return mapSelectors.getDataLimitsFromLayers(store, mapId);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/core",
3
- "version": "20.0.1",
3
+ "version": "20.1.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.0.1",
23
+ "@opengeoweb/shared": "20.1.0",
24
24
  "react-redux": "^9.2.0",
25
- "@opengeoweb/store": "20.0.1",
26
- "@opengeoweb/time-slider": "20.0.1",
25
+ "@opengeoweb/store": "20.1.0",
26
+ "@opengeoweb/time-slider": "20.1.0",
27
27
  "@reduxjs/toolkit": "^2.6.1",
28
- "@opengeoweb/webmap-react": "20.0.1",
29
- "@opengeoweb/webmap": "20.0.1",
30
- "@opengeoweb/theme": "20.0.1",
31
- "@opengeoweb/layer-select": "20.0.1",
28
+ "@opengeoweb/webmap-react": "20.1.0",
29
+ "@opengeoweb/webmap": "20.1.0",
30
+ "@opengeoweb/theme": "20.1.0",
31
+ "@opengeoweb/layer-select": "20.1.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.0.1",
37
+ "@opengeoweb/snackbar": "20.1.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.0.1",
44
+ "@opengeoweb/api": "20.1.0",
45
45
  "@types/geojson": "^7946.0.14",
46
46
  "@turf/turf": "^7.2.0",
47
47
  "proj4": "^2.15.0",