@opengeoweb/core 19.1.1 → 19.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
|
@@ -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
7
|
import { useDispatch, useSelector, connect, useStore, Provider } from 'react-redux';
|
|
8
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';
|
|
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,
|
|
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 } 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=
|
|
845
|
+
url: "https://geoservices.knmi.nl/adagucserver?dataset=10-minute-in-situ-meteorological-observations",
|
|
842
846
|
id: "KNMIgeoservicesObs"
|
|
843
847
|
},
|
|
844
848
|
{
|
|
@@ -3206,13 +3210,13 @@ var LoadDuration = function LoadDuration(_ref) {
|
|
|
3206
3210
|
title: tooltipText,
|
|
3207
3211
|
children: jsxs(Typography, {
|
|
3208
3212
|
component: "div",
|
|
3209
|
-
variant: "subtitle2",
|
|
3210
3213
|
sx: {
|
|
3211
3214
|
whiteSpace: 'nowrap',
|
|
3212
3215
|
fontSize: 12,
|
|
3213
3216
|
width: '100%',
|
|
3214
3217
|
textAlign: 'center'
|
|
3215
3218
|
},
|
|
3219
|
+
variant: "subtitle2",
|
|
3216
3220
|
children: [percentage < 100 && jsx(LoadingIndicatorProgressBar, {
|
|
3217
3221
|
height: 4,
|
|
3218
3222
|
progressPercentage: percentage,
|
|
@@ -3348,6 +3352,9 @@ var LayerManagerMenuButton = function LayerManagerMenuButton(_ref) {
|
|
|
3348
3352
|
onLayerDuplicate = _ref.onLayerDuplicate,
|
|
3349
3353
|
onLayerCopyToOtherMaps = _ref.onLayerCopyToOtherMaps,
|
|
3350
3354
|
onLayerRemoveFromOtherMaps = _ref.onLayerRemoveFromOtherMaps,
|
|
3355
|
+
onLayerZoomToExtent = _ref.onLayerZoomToExtent,
|
|
3356
|
+
_ref$canZoomToLayerEx = _ref.canZoomToLayerExtent,
|
|
3357
|
+
canZoomToLayerExtent = _ref$canZoomToLayerEx === void 0 ? true : _ref$canZoomToLayerEx,
|
|
3351
3358
|
tooltipTitle = _ref.tooltipTitle,
|
|
3352
3359
|
icon = _ref.icon;
|
|
3353
3360
|
var _useCoreTranslation = useCoreTranslation(),
|
|
@@ -3365,6 +3372,9 @@ var LayerManagerMenuButton = function LayerManagerMenuButton(_ref) {
|
|
|
3365
3372
|
var onClickRemoveFromOtherMaps = function onClickRemoveFromOtherMaps() {
|
|
3366
3373
|
onLayerRemoveFromOtherMaps == null || onLayerRemoveFromOtherMaps();
|
|
3367
3374
|
};
|
|
3375
|
+
var onClickZoomToExtent = function onClickZoomToExtent() {
|
|
3376
|
+
onLayerZoomToExtent == null || onLayerZoomToExtent();
|
|
3377
|
+
};
|
|
3368
3378
|
return jsx(ToggleMenu, {
|
|
3369
3379
|
buttonIcon: icon,
|
|
3370
3380
|
buttonSx: {
|
|
@@ -3387,6 +3397,11 @@ var LayerManagerMenuButton = function LayerManagerMenuButton(_ref) {
|
|
|
3387
3397
|
text: t('layermanager-layer-remove-from-other-maps'),
|
|
3388
3398
|
action: onClickRemoveFromOtherMaps,
|
|
3389
3399
|
icon: jsx(Delete, {})
|
|
3400
|
+
}, {
|
|
3401
|
+
text: t('layermanager-layer-zoom-to-extent'),
|
|
3402
|
+
action: onClickZoomToExtent,
|
|
3403
|
+
icon: jsx(ZoomToLayer, {}),
|
|
3404
|
+
isDisabled: !canZoomToLayerExtent
|
|
3390
3405
|
}],
|
|
3391
3406
|
menuPosition: "bottom",
|
|
3392
3407
|
tooltipTitle: nonEmptyTooltipTitle,
|
|
@@ -4283,16 +4298,35 @@ var Accordion = function Accordion(_ref0) {
|
|
|
4283
4298
|
});
|
|
4284
4299
|
};
|
|
4285
4300
|
|
|
4301
|
+
var wmLayerHasZoomExtent = function wmLayerHasZoomExtent(wmLayer, mapSrs) {
|
|
4302
|
+
if (!wmLayer) {
|
|
4303
|
+
return false;
|
|
4304
|
+
}
|
|
4305
|
+
var crs = wmLayer.getCRSByName(mapSrs);
|
|
4306
|
+
if (crs != null && crs.bbox) {
|
|
4307
|
+
return true;
|
|
4308
|
+
}
|
|
4309
|
+
return !!wmLayer.geographicBoundingBox;
|
|
4310
|
+
};
|
|
4286
4311
|
var LayerManagerMenuButtonConnect = function LayerManagerMenuButtonConnect(_ref) {
|
|
4287
4312
|
var layerId = _ref.layerId,
|
|
4288
4313
|
mapId = _ref.mapId,
|
|
4289
4314
|
tooltipTitle = _ref.tooltipTitle,
|
|
4290
4315
|
icon = _ref.icon;
|
|
4291
4316
|
var dispatch = useDispatch();
|
|
4317
|
+
var layer = useSelector(function (store) {
|
|
4318
|
+
return layerSelectors.getLayerById(store, layerId);
|
|
4319
|
+
});
|
|
4292
4320
|
var layerType = useSelector(function (store) {
|
|
4293
4321
|
return layerSelectors.getLayerType(store, layerId);
|
|
4294
4322
|
});
|
|
4295
4323
|
var isFeatureLayer = layerType === LayerType.featureLayer;
|
|
4324
|
+
var mapSrs = useSelector(function (store) {
|
|
4325
|
+
return mapSelectors.getSrs(store, mapId);
|
|
4326
|
+
});
|
|
4327
|
+
var _useGetWMLayerInstanc = useGetWMLayerInstance(layer),
|
|
4328
|
+
wmLayer = _useGetWMLayerInstanc.wmLayer;
|
|
4329
|
+
var canZoomToLayerExtent = !!(layerId && mapSrs && wmLayerHasZoomExtent(wmLayer, mapSrs));
|
|
4296
4330
|
// get all map ids
|
|
4297
4331
|
var allMapIds = useSelector(mapSelectors.getAllMapIds);
|
|
4298
4332
|
var allOtherMapIdsExceptCurrentOne = allMapIds.filter(function (id) {
|
|
@@ -4336,6 +4370,50 @@ var LayerManagerMenuButtonConnect = function LayerManagerMenuButtonConnect(_ref)
|
|
|
4336
4370
|
}));
|
|
4337
4371
|
});
|
|
4338
4372
|
}, [dispatch, allLayers, mapId, layerId]);
|
|
4373
|
+
var zoomToLayerExtent = React.useCallback(function () {
|
|
4374
|
+
if (!layerId || !mapSrs || !wmLayer) {
|
|
4375
|
+
return;
|
|
4376
|
+
}
|
|
4377
|
+
var crs = wmLayer.getCRSByName(mapSrs);
|
|
4378
|
+
if (crs != null && crs.bbox) {
|
|
4379
|
+
var _crs$bbox$getExtent = crs.bbox.getExtent(),
|
|
4380
|
+
left = _crs$bbox$getExtent[0],
|
|
4381
|
+
bottom = _crs$bbox$getExtent[1],
|
|
4382
|
+
right = _crs$bbox$getExtent[2],
|
|
4383
|
+
top = _crs$bbox$getExtent[3];
|
|
4384
|
+
dispatch(mapActions.setBbox({
|
|
4385
|
+
mapId: mapId,
|
|
4386
|
+
srs: mapSrs,
|
|
4387
|
+
bbox: {
|
|
4388
|
+
left: left,
|
|
4389
|
+
bottom: bottom,
|
|
4390
|
+
right: right,
|
|
4391
|
+
top: top
|
|
4392
|
+
},
|
|
4393
|
+
origin: layerTypes.LayerActionOrigin.layerManager
|
|
4394
|
+
}));
|
|
4395
|
+
return;
|
|
4396
|
+
}
|
|
4397
|
+
var geo = wmLayer.geographicBoundingBox;
|
|
4398
|
+
if (geo) {
|
|
4399
|
+
var _transformExtent = transformExtent([parseFloat(geo.west), parseFloat(geo.south), parseFloat(geo.east), parseFloat(geo.north)], WMJSMAP_LONLAT_EPSGCODE, mapSrs),
|
|
4400
|
+
_left = _transformExtent[0],
|
|
4401
|
+
_bottom = _transformExtent[1],
|
|
4402
|
+
_right = _transformExtent[2],
|
|
4403
|
+
_top = _transformExtent[3];
|
|
4404
|
+
dispatch(mapActions.setBbox({
|
|
4405
|
+
mapId: mapId,
|
|
4406
|
+
srs: mapSrs,
|
|
4407
|
+
bbox: {
|
|
4408
|
+
left: _left,
|
|
4409
|
+
bottom: _bottom,
|
|
4410
|
+
right: _right,
|
|
4411
|
+
top: _top
|
|
4412
|
+
},
|
|
4413
|
+
origin: layerTypes.LayerActionOrigin.layerManager
|
|
4414
|
+
}));
|
|
4415
|
+
}
|
|
4416
|
+
}, [dispatch, layerId, mapId, mapSrs, wmLayer]);
|
|
4339
4417
|
var duplicateLayer = React.useCallback(function (_ref3) {
|
|
4340
4418
|
var newLayerId = _ref3.newLayerId,
|
|
4341
4419
|
mapId = _ref3.mapId;
|
|
@@ -4347,6 +4425,7 @@ var LayerManagerMenuButtonConnect = function LayerManagerMenuButtonConnect(_ref)
|
|
|
4347
4425
|
}));
|
|
4348
4426
|
}, [dispatch, layerId]);
|
|
4349
4427
|
return jsx(LayerManagerMenuButton, {
|
|
4428
|
+
canZoomToLayerExtent: canZoomToLayerExtent,
|
|
4350
4429
|
icon: icon,
|
|
4351
4430
|
isFeatureLayer: isFeatureLayer,
|
|
4352
4431
|
layerId: layerId,
|
|
@@ -4359,6 +4438,7 @@ var LayerManagerMenuButtonConnect = function LayerManagerMenuButtonConnect(_ref)
|
|
|
4359
4438
|
});
|
|
4360
4439
|
},
|
|
4361
4440
|
onLayerRemoveFromOtherMaps: removeLayerFromAllMaps,
|
|
4441
|
+
onLayerZoomToExtent: zoomToLayerExtent,
|
|
4362
4442
|
tooltipTitle: tooltipTitle
|
|
4363
4443
|
});
|
|
4364
4444
|
};
|
|
@@ -8859,11 +8939,16 @@ var MapOptionsButtonConnect = function MapOptionsButtonConnect(_ref) {
|
|
|
8859
8939
|
var isFeatureInfoActive = useSelector(function (store) {
|
|
8860
8940
|
return uiSelectors.getisDialogOpen(store, gfiType);
|
|
8861
8941
|
});
|
|
8942
|
+
var previousIsMeasureToolActive = usePrevious(isMeasureToolActive);
|
|
8943
|
+
var previousIsFeatureInfoActive = usePrevious(isFeatureInfoActive);
|
|
8862
8944
|
React.useEffect(function () {
|
|
8863
8945
|
if (!isMapOptionsOpen && (isMeasureToolActive || isFeatureInfoActive)) {
|
|
8864
8946
|
setIsMapOptionsOpen(true);
|
|
8865
8947
|
}
|
|
8866
|
-
|
|
8948
|
+
if (isMapOptionsOpen && !isMeasureToolActive && !isFeatureInfoActive && (previousIsMeasureToolActive || previousIsFeatureInfoActive)) {
|
|
8949
|
+
setIsMapOptionsOpen(false);
|
|
8950
|
+
}
|
|
8951
|
+
}, [isFeatureInfoActive, isMapOptionsOpen, isMeasureToolActive, previousIsFeatureInfoActive, previousIsMeasureToolActive]);
|
|
8867
8952
|
return getFeatureInfo && measureTool ? jsxs(Stack, {
|
|
8868
8953
|
direction: "row",
|
|
8869
8954
|
spacing: 1,
|
package/dist/src/lib/components/LayerManager/LayerContainerRow/LayerRow/Menubutton/MenuButton.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ interface LayerManagerButtonProps {
|
|
|
9
9
|
}) => void;
|
|
10
10
|
onLayerCopyToOtherMaps?: () => void;
|
|
11
11
|
onLayerRemoveFromOtherMaps?: () => void;
|
|
12
|
+
onLayerZoomToExtent?: () => void;
|
|
13
|
+
canZoomToLayerExtent?: boolean;
|
|
12
14
|
tooltipTitle?: string;
|
|
13
15
|
icon?: React.ReactNode;
|
|
14
16
|
}
|