@opengeoweb/core 20.2.0 → 21.0.0-nightly-20261030

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,7 +2,7 @@ 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, useScrollingInIsolation, sliderHeaderStyle, CustomSlider, SearchField, SearchHighlight, tooltipContainerStyles, renderCounter, AlertBanner, CustomAccordion, PROJECTION, calculateStartSize, useWheelStopPropagation, ToolContainerDraggable, useDebounce, dateUtils, sessionStorageProvider, usePrevious } from '@opengeoweb/shared';
5
- import { webmapUtils, queryWMSLayersTree, invalidateWMSGetCapabilities, LayerType, WMJSDimension, WMDefaultStyleName, queryWMSServiceInfo, queryWMSLayers, getWMSServiceId, handleDateUtilsISOString, generateLayerId, getWMLayerById, getMapDimURL, WMLayer } from '@opengeoweb/webmap';
5
+ import { webmapUtils, queryWMSLayers, invalidateWMSGetCapabilities, LayerType, queryWMSServiceInfo, WMJSDimension, WMDefaultStyleName, 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';
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, PUBLIC_WARNING_DRAW_TOOL_ID, defaultLayers, getSingularDrawtoolDrawLayerId, syncGroupsSelector, syncGroupsActions, routerUtils, mapUtils } from '@opengeoweb/store';
@@ -39,7 +39,6 @@ var en = {
39
39
  feature_info_title: "Click on the map for info.",
40
40
  feature_info_no_layers: "No layers added to the map.",
41
41
  feature_info_no_getfeatureinfo: "GetFeatureInfo is not supported.",
42
- "add-layer-popup-title": "Load WMS layer(s)",
43
42
  "add-layer-popup-service-url": "Service URL",
44
43
  "add-layer-popup-available-services": "Available services",
45
44
  "add-layer-popup-available-layers": "Available layers for {{serviceName}}",
@@ -137,7 +136,6 @@ var fi = {
137
136
  feature_info_title: "Napsauta karttaa nähdäksesi lisätietoja.",
138
137
  feature_info_no_layers: "Karttatasoja ei lisättynä kartalle",
139
138
  feature_info_no_getfeatureinfo: "GetFeatureInfoa ei tueta",
140
- "add-layer-popup-title": "Lataa WMS karttataso(t)",
141
139
  "add-layer-popup-service-url": "Palvelun URL",
142
140
  "add-layer-popup-available-services": "Käytettävissä olevat palvelut",
143
141
  "add-layer-popup-available-layers": "Palvelusta {{serviceName}} saatavilla olevat karttatasot",
@@ -228,7 +226,6 @@ var no = {
228
226
  feature_info_title: "Klikk på kartet for å få mer informasjon.",
229
227
  feature_info_no_layers: "Ingen lag lagt til i kartet.",
230
228
  feature_info_no_getfeatureinfo: "GetFeatureInfo støttes ikke",
231
- "add-layer-popup-title": "Last inn WMS-lag",
232
229
  "add-layer-popup-service-url": "Tjeneste-URL",
233
230
  "add-layer-popup-available-services": "Tilgjengelige tjenester",
234
231
  "add-layer-popup-available-layers": "Tilgjengelige tjenester for {{serviceName}}",
@@ -319,7 +316,6 @@ var nl = {
319
316
  feature_info_title: "Klik op de kaart voor informatie.",
320
317
  feature_info_no_layers: "Geen lagen toegevoegd op de kaart.",
321
318
  feature_info_no_getfeatureinfo: "GetFeatureInfo wordt niet ondersteund",
322
- "add-layer-popup-title": "Laad WMS lagen",
323
319
  "add-layer-popup-service-url": "Service-URL",
324
320
  "add-layer-popup-available-services": "Beschikbare services",
325
321
  "add-layer-popup-available-layers": "Beschikbare lagen voor {{serviceName}}",
@@ -1030,29 +1026,21 @@ var WMSLayerTreeHeader = function WMSLayerTreeHeader(_ref) {
1030
1026
  };
1031
1027
 
1032
1028
  var WMSLayerTree = function WMSLayerTree(_ref) {
1033
- var _layerTree$children;
1034
1029
  var service = _ref.service,
1035
1030
  onClickLayer = _ref.onClickLayer,
1036
1031
  highlightedLayers = _ref.highlightedLayers;
1037
1032
  var _useCoreTranslation = useCoreTranslation(),
1038
1033
  t = _useCoreTranslation.t;
1039
- var initialTree = {
1040
- name: 'loading wms getcapabilities',
1041
- leaf: true,
1042
- path: [],
1043
- title: '',
1044
- children: []
1045
- };
1046
1034
  var _React$useState = React.useState([]),
1047
1035
  processedOK = _React$useState[0],
1048
1036
  setProcessedOK = _React$useState[1];
1049
- var handleInternalSelect = function handleInternalSelect(layerName) {
1050
- onClickLayer(service.url, layerName);
1037
+ var handleInternalSelect = function handleInternalSelect(layerName, ogctype) {
1038
+ onClickLayer(service.url, layerName, ogctype);
1051
1039
  setProcessedOK([].concat(processedOK, [layerName]));
1052
1040
  };
1053
- var _React$useState2 = React.useState(initialTree),
1054
- layerTree = _React$useState2[0],
1055
- setLayerTree = _React$useState2[1];
1041
+ var _React$useState2 = React.useState([]),
1042
+ layers = _React$useState2[0],
1043
+ setLayers = _React$useState2[1];
1056
1044
  var _React$useState3 = React.useState(false),
1057
1045
  isLoading = _React$useState3[0],
1058
1046
  setIsLoading = _React$useState3[1];
@@ -1074,14 +1062,14 @@ var WMSLayerTree = function WMSLayerTree(_ref) {
1074
1062
  _context.n = 1;
1075
1063
  return invalidateWMSGetCapabilities(service.url);
1076
1064
  case 1:
1077
- queryWMSLayersTree(service.url).then(function (layerTreeFromPromise) {
1065
+ queryWMSLayers(service.url).then(function (layersResult) {
1078
1066
  if (isMounted) {
1079
- setLayerTree(layerTreeFromPromise);
1067
+ setLayers(layersResult);
1080
1068
  setIsLoading(false);
1081
1069
  }
1082
- })["catch"](function (error) {
1070
+ })["catch"](function () {
1083
1071
  if (isMounted) {
1084
- setLayerTree(error.toString());
1072
+ setLayers([]);
1085
1073
  setIsLoading(false);
1086
1074
  }
1087
1075
  });
@@ -1104,7 +1092,7 @@ var WMSLayerTree = function WMSLayerTree(_ref) {
1104
1092
  height: 200,
1105
1093
  overflow: 'auto'
1106
1094
  };
1107
- if (!((_layerTree$children = layerTree.children) != null && _layerTree$children.length) && !isLoading) {
1095
+ if (!(layers != null && layers.length) && !isLoading) {
1108
1096
  return jsxs(Fragment, {
1109
1097
  children: [jsx(WMSLayerTreeHeader, {
1110
1098
  serviceName: service.name
@@ -1124,22 +1112,9 @@ var WMSLayerTree = function WMSLayerTree(_ref) {
1124
1112
  })]
1125
1113
  });
1126
1114
  }
1127
- // Base case where there exists at least one layer
1128
- // TODO: find a better way of doing this, without using prototype
1129
- var _flatten = function flatten(children, parent) {
1130
- return (
1131
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
1132
- Array.prototype.concat.apply((children || []).map(function (treeElem) {
1133
- return Object.assign({}, treeElem, {
1134
- parent: parent || null
1135
- });
1136
- }), (children || []).map(function (treeElem) {
1137
- return _flatten(treeElem.children || [], treeElem.title);
1138
- }))
1139
- );
1140
- };
1141
- var flattenedLayerTree = _flatten(layerTree.children, []);
1142
- var layerMap = _.groupBy(flattenedLayerTree, 'parent');
1115
+ var layerMap = _.groupBy(layers, function (layer) {
1116
+ return layer.path.length > 1 ? layer.path[layer.path.length - 1] : '';
1117
+ });
1143
1118
  // Check if a layer of the same name and service is in an array
1144
1119
  var layerExists = function layerExists(targetLayer, layers) {
1145
1120
  return layers.filter(function (layerInMap) {
@@ -1186,7 +1161,7 @@ var WMSLayerTree = function WMSLayerTree(_ref) {
1186
1161
  return layer.leaf ? jsx(ListItemButton, {
1187
1162
  "data-testid": "selectableLayer",
1188
1163
  onClick: function onClick() {
1189
- return handleInternalSelect(layer.name);
1164
+ return handleInternalSelect(layer.name, layer.ogctype);
1190
1165
  },
1191
1166
  selected: processedOK.includes(layer.name) || layerExists(layer, highlightedLayers),
1192
1167
  children: jsx(ListItemText, {
@@ -1204,7 +1179,7 @@ var WMSLayerTree = function WMSLayerTree(_ref) {
1204
1179
 
1205
1180
  var connectRedux$2 = connect(function (store, props) {
1206
1181
  return {
1207
- loadedLayers: mapSelectors.getMapLayers(store, props.mapId)
1182
+ loadedLayers: props.layerType === LayerType.baseLayer ? layerSelectors.getAvailableBaseLayersForMap(store, props.mapId) : mapSelectors.getMapLayers(store, props.mapId)
1208
1183
  };
1209
1184
  }, {
1210
1185
  addLayer: layerActions.addLayer,
@@ -1234,17 +1209,25 @@ var ConnectedTree = function ConnectedTree(_ref) {
1234
1209
  origin: layerTypes.LayerActionOrigin.wmsLoader
1235
1210
  });
1236
1211
  };
1237
- var addBaseLayer = function addBaseLayer(serviceURL, layerName) {
1238
- var newBaseLayer = {
1212
+ var addBaseLayer = function addBaseLayer(serviceURL, layerName, type) {
1213
+ var existingBaseLayer = loadedLayers == null ? void 0 : loadedLayers.find(function (layer) {
1214
+ return layer.service === serviceURL && layer.name === layerName;
1215
+ });
1216
+ var newBaseLayer = existingBaseLayer != null ? existingBaseLayer : Object.assign({
1239
1217
  service: serviceURL,
1240
- name: layerName,
1218
+ name: layerName
1219
+ }, type === 'WMTS' ? {
1220
+ type: 'wmts'
1221
+ } : {}, {
1241
1222
  id: webmapUtils.generateLayerId(),
1242
1223
  layerType: LayerType.baseLayer,
1243
1224
  mapId: mapId
1244
- };
1245
- addAvailableBaseLayer({
1246
- layer: newBaseLayer
1247
1225
  });
1226
+ if (!existingBaseLayer) {
1227
+ addAvailableBaseLayer({
1228
+ layer: newBaseLayer
1229
+ });
1230
+ }
1248
1231
  setBaseLayers({
1249
1232
  mapId: mapId,
1250
1233
  layers: [newBaseLayer],
@@ -1253,9 +1236,9 @@ var ConnectedTree = function ConnectedTree(_ref) {
1253
1236
  };
1254
1237
  return jsx(WMSLayerTree, {
1255
1238
  highlightedLayers: loadedLayers,
1256
- onClickLayer: function onClickLayer(serviceURL, layerName) {
1239
+ onClickLayer: function onClickLayer(serviceURL, layerName, type) {
1257
1240
  if (layerType === LayerType.baseLayer) {
1258
- addBaseLayer(serviceURL, layerName);
1241
+ addBaseLayer(serviceURL, layerName, type);
1259
1242
  } else {
1260
1243
  addMapLayer(serviceURL, layerName);
1261
1244
  }
@@ -1376,11 +1359,15 @@ var AddLayersPopup = function AddLayersPopup(_ref) {
1376
1359
  setLoading(false);
1377
1360
  // Check if valid URL was passed
1378
1361
  } else if (validateServiceUrl(serviceURL)) {
1379
- // Check if service is WMS server
1380
- queryWMSLayersTree(serviceURL).then(function (layerTreeFromPromise) {
1362
+ // Check if service is WMS or WMTS server
1363
+ queryWMSServiceInfo(serviceURL).then(function (service) {
1364
+ var _capabilities$Capabil, _rootLayer$Title, _rootLayer$Name;
1381
1365
  // Shorten URL as a naming backup
1382
1366
  var shortenedURL = serviceURL.substring(serviceURL.indexOf('//') + 2, serviceURL.indexOf('?'));
1383
- handleAddToList(layerTreeFromPromise.title || layerTreeFromPromise.name || shortenedURL);
1367
+ var capabilities = service.getCapabilitiesJson;
1368
+ var rootLayer = (_capabilities$Capabil = capabilities.Capability) == null ? void 0 : _capabilities$Capabil.Layer;
1369
+ var serviceName = rootLayer ? ((_rootLayer$Title = rootLayer.Title) == null ? void 0 : _rootLayer$Title.value) || ((_rootLayer$Name = rootLayer.Name) == null ? void 0 : _rootLayer$Name.value) || shortenedURL : service.title || shortenedURL;
1370
+ handleAddToList(serviceName);
1384
1371
  setUrlError('');
1385
1372
  setLoading(false);
1386
1373
  })["catch"](function () {
@@ -1419,7 +1406,7 @@ var AddLayersPopup = function AddLayersPopup(_ref) {
1419
1406
  return handleClose == null ? void 0 : handleClose();
1420
1407
  },
1421
1408
  open: open,
1422
- title: t('add-layer-popup-title'),
1409
+ title: t('layermanager-baselayers-tooltip'),
1423
1410
  children: jsxs(Fragment, {
1424
1411
  children: [jsx(DialogContentText, {
1425
1412
  children: t('wms-loader-description')
@@ -1,8 +1,9 @@
1
1
  import React from 'react';
2
2
  import type { layerTypes, serviceTypes } from '@opengeoweb/store';
3
+ import type { OGCTYPE } from '@opengeoweb/webmap';
3
4
  interface WMSLayerTreeProps {
4
5
  service: serviceTypes.InitialService;
5
- onClickLayer: (serviceURL: string, layerName: string) => void;
6
+ onClickLayer: (serviceURL: string, layerName: string, ogctype?: OGCTYPE) => void;
6
7
  highlightedLayers: layerTypes.Layer[];
7
8
  }
8
9
  declare const WMSLayerTree: React.FC<WMSLayerTreeProps>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/core",
3
- "version": "20.2.0",
3
+ "version": "21.0.0-nightly-20261030",
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.2.0",
23
+ "@opengeoweb/shared": "21.0.0-nightly-20261030",
24
24
  "react-redux": "^9.2.0",
25
- "@opengeoweb/store": "20.2.0",
26
- "@opengeoweb/time-slider": "20.2.0",
25
+ "@opengeoweb/store": "21.0.0-nightly-20261030",
26
+ "@opengeoweb/time-slider": "21.0.0-nightly-20261030",
27
27
  "@reduxjs/toolkit": "^2.6.1",
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",
28
+ "@opengeoweb/webmap-react": "21.0.0-nightly-20261030",
29
+ "@opengeoweb/webmap": "21.0.0-nightly-20261030",
30
+ "@opengeoweb/theme": "21.0.0-nightly-20261030",
31
+ "@opengeoweb/layer-select": "21.0.0-nightly-20261030",
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.2.0",
37
+ "@opengeoweb/snackbar": "21.0.0-nightly-20261030",
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.2.0",
44
+ "@opengeoweb/api": "21.0.0-nightly-20261030",
45
45
  "@types/geojson": "^7946.0.14",
46
46
  "@turf/turf": "^7.2.0",
47
47
  "proj4": "^2.15.0",