@opengeoweb/core 9.35.0 → 9.35.1-spike-oltanstack.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/index.esm.js CHANGED
@@ -12,7 +12,7 @@ import { useDispatch, useSelector, connect, useStore, Provider } from 'react-red
12
12
  import { ReactSortable } from 'react-sortablejs';
13
13
  import Sortable from 'sortablejs';
14
14
  import { layerTypes, layerUtils, mapSelectors, layerActions, layerSelectors, serviceSelectors, serviceActions, mapActions, mapEnums, uiSelectors, uiTypes, useSetupDialog, filterLayers, getUserAddedServices, uiActions, genericSelectors, genericActions, drawtoolSelectors, syncConstants, loadingIndicatorActions, syncGroupsSelectors, defaultLayers, mapStoreActions, getSingularDrawtoolDrawLayerId, syncGroupsSelector, syncGroupsActions, coreModuleConfig, routerUtils, routerModuleConfig } from '@opengeoweb/store';
15
- import { webmapUtils, WMGetServiceFromStore, getCapabilities, LayerType, handleDateUtilsISOString, wmServiceListener, EVENT_GETCAPABILITIES_START, EVENT_GETCAPABILITIES_READY, getWMSGetFeatureInfoRequestURL, WMLayer } from '@opengeoweb/webmap';
15
+ import { webmapUtils, queryWMSServiceInfo, queryWMSLayers, queryWMSLayersTree, invalidateWMSGetCapabilities, LayerType, getWMSServiceId, handleDateUtilsISOString, wmServiceListener, EVENT_GETCAPABILITIES_START, EVENT_GETCAPABILITIES_READY, getWMSGetFeatureInfoRequestURL, WMLayer } from '@opengeoweb/webmap';
16
16
  import { Box as Box$1, styled as styled$1 } from '@mui/system';
17
17
  import _, { isEqual, range } from 'lodash';
18
18
  import { LayerSelectButtonConnect, LayerSelectConnect, layerSelectConfig } from '@opengeoweb/layer-select';
@@ -2834,10 +2834,13 @@ var RenderLayersConnect = function RenderLayersConnect(_ref) {
2834
2834
  case 0:
2835
2835
  _context.prev = 0;
2836
2836
  _context.next = 3;
2837
- return getCapabilities.getLayersFlattenedFromService(serviceUrl);
2837
+ return queryWMSLayers(serviceUrl);
2838
2838
  case 3:
2839
2839
  _layers = _context.sent;
2840
- wmService = WMGetServiceFromStore(serviceUrl);
2840
+ _context.next = 6;
2841
+ return queryWMSServiceInfo(serviceUrl);
2842
+ case 6:
2843
+ wmService = _context.sent;
2841
2844
  serviceSetLayers({
2842
2845
  id: wmService.id,
2843
2846
  name: wmService.title,
@@ -2846,17 +2849,17 @@ var RenderLayersConnect = function RenderLayersConnect(_ref) {
2846
2849
  scope: 'user',
2847
2850
  "abstract": wmService["abstract"]
2848
2851
  });
2849
- _context.next = 11;
2852
+ _context.next = 13;
2850
2853
  break;
2851
- case 8:
2852
- _context.prev = 8;
2854
+ case 10:
2855
+ _context.prev = 10;
2853
2856
  _context.t0 = _context["catch"](0);
2854
2857
  console.warn(_context.t0.message);
2855
- case 11:
2858
+ case 13:
2856
2859
  case "end":
2857
2860
  return _context.stop();
2858
2861
  }
2859
- }, _callee, null, [[0, 8]]);
2862
+ }, _callee, null, [[0, 10]]);
2860
2863
  }));
2861
2864
  return function addService(_x) {
2862
2865
  return _ref2.apply(this, arguments);
@@ -3839,17 +3842,40 @@ var WMSLayerTree = function WMSLayerTree(_ref) {
3839
3842
  React.useEffect(function () {
3840
3843
  var isMounted = true;
3841
3844
  setIsLoading(true);
3842
- getCapabilities.getLayersFromService(service.url, forceReload).then(function (layerTreeFromPromise) {
3843
- if (isMounted) {
3844
- setLayerTree(layerTreeFromPromise);
3845
- setIsLoading(false);
3846
- }
3847
- })["catch"](function (error) {
3848
- if (isMounted) {
3849
- setLayerTree(error.toString());
3850
- setIsLoading(false);
3851
- }
3852
- });
3845
+ var makeServiceQuery = /*#__PURE__*/function () {
3846
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
3847
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
3848
+ while (1) switch (_context.prev = _context.next) {
3849
+ case 0:
3850
+ if (!forceReload) {
3851
+ _context.next = 3;
3852
+ break;
3853
+ }
3854
+ _context.next = 3;
3855
+ return invalidateWMSGetCapabilities(service.url);
3856
+ case 3:
3857
+ queryWMSLayersTree(service.url).then(function (layerTreeFromPromise) {
3858
+ if (isMounted) {
3859
+ setLayerTree(layerTreeFromPromise);
3860
+ setIsLoading(false);
3861
+ }
3862
+ })["catch"](function (error) {
3863
+ if (isMounted) {
3864
+ setLayerTree(error.toString());
3865
+ setIsLoading(false);
3866
+ }
3867
+ });
3868
+ case 4:
3869
+ case "end":
3870
+ return _context.stop();
3871
+ }
3872
+ }, _callee);
3873
+ }));
3874
+ return function makeServiceQuery() {
3875
+ return _ref2.apply(this, arguments);
3876
+ };
3877
+ }();
3878
+ void makeServiceQuery();
3853
3879
  return function () {
3854
3880
  isMounted = false;
3855
3881
  setForceReload(false);
@@ -4295,7 +4321,7 @@ var AddLayersPopup = function AddLayersPopup(_ref) {
4295
4321
  // Check if valid URL was passed
4296
4322
  } else if (validateServiceUrl(serviceURL)) {
4297
4323
  // Check if service is WMS server
4298
- getCapabilities.getLayersFromService(serviceURL).then(function (layerTreeFromPromise) {
4324
+ queryWMSLayersTree(serviceURL).then(function (layerTreeFromPromise) {
4299
4325
  // Shorten URL as a naming backup
4300
4326
  var shortenedURL = serviceURL.substring(serviceURL.indexOf('//') + 2, serviceURL.indexOf('?'));
4301
4327
  handleAddToList(layerTreeFromPromise.title || layerTreeFromPromise.name || shortenedURL);
@@ -4895,36 +4921,45 @@ var LayerManager = function LayerManager(_ref) {
4895
4921
  });
4896
4922
  };
4897
4923
 
4898
- /* *
4899
- * Licensed under the Apache License, Version 2.0 (the "License");
4900
- * you may not use this file except in compliance with the License.
4901
- * You may obtain a copy of the License at
4902
- *
4903
- * http://www.apache.org/licenses/LICENSE-2.0
4904
- *
4905
- * Unless required by applicable law or agreed to in writing, software
4906
- * distributed under the License is distributed on an "AS IS" BASIS,
4907
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4908
- * See the License for the specific language governing permissions and
4909
- * limitations under the License.
4910
- *
4911
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4912
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
4913
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
4914
- * */
4915
- var getServicesToLoad = function getServicesToLoad(services) {
4916
- return services.map(function (service) {
4917
- var wmService = WMGetServiceFromStore(service.url);
4918
- var scope = service.scope ? service.scope : 'system';
4919
- return {
4920
- id: wmService.id,
4921
- name: service.name,
4922
- url: service.url,
4923
- scope: scope,
4924
- "abstract": service["abstract"] || wmService["abstract"]
4925
- };
4926
- });
4927
- };
4924
+ var getServicesToLoad = /*#__PURE__*/function () {
4925
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(services) {
4926
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
4927
+ while (1) switch (_context2.prev = _context2.next) {
4928
+ case 0:
4929
+ return _context2.abrupt("return", Promise.all(services.map( /*#__PURE__*/function () {
4930
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(service) {
4931
+ var scope;
4932
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
4933
+ while (1) switch (_context.prev = _context.next) {
4934
+ case 0:
4935
+ scope = service.scope ? service.scope : 'system';
4936
+ return _context.abrupt("return", {
4937
+ id: getWMSServiceId(service.url),
4938
+ name: service.name,
4939
+ url: service.url,
4940
+ scope: scope,
4941
+ "abstract": service["abstract"]
4942
+ });
4943
+ case 2:
4944
+ case "end":
4945
+ return _context.stop();
4946
+ }
4947
+ }, _callee);
4948
+ }));
4949
+ return function (_x2) {
4950
+ return _ref2.apply(this, arguments);
4951
+ };
4952
+ }())));
4953
+ case 1:
4954
+ case "end":
4955
+ return _context2.stop();
4956
+ }
4957
+ }, _callee2);
4958
+ }));
4959
+ return function getServicesToLoad(_x) {
4960
+ return _ref.apply(this, arguments);
4961
+ };
4962
+ }();
4928
4963
  var useFetchServices = function useFetchServices(dialogType, preloadedServices, shouldDisableFetch) {
4929
4964
  if (preloadedServices === void 0) {
4930
4965
  preloadedServices = preloadedDefaultMapServices;
@@ -4947,7 +4982,7 @@ var useFetchServices = function useFetchServices(dialogType, preloadedServices,
4947
4982
  React.useEffect(function () {
4948
4983
  if (!shouldDisableFetch && isOpenInStore && preloadedServices && preloadedServices.length > 0 && !services.length) {
4949
4984
  var allServicesToLoad = mergePresetsAndUserAddedServices(preloadedServices, getUserAddedServices());
4950
- fetchInitialServices(getServicesToLoad(allServicesToLoad));
4985
+ void getServicesToLoad(allServicesToLoad).then(fetchInitialServices);
4951
4986
  }
4952
4987
  // eslint-disable-next-line react-hooks/exhaustive-deps
4953
4988
  }, [isOpenInStore, services]);
@@ -5640,6 +5675,12 @@ var MapViewConnect = function MapViewConnect(_ref) {
5640
5675
  var mapPinLocation = useSelector(function (store) {
5641
5676
  return mapSelectors.getPinLocation(store, mapId);
5642
5677
  });
5678
+ var linkedPanelId = useSelector(function (store) {
5679
+ return genericSelectors.selectLinkedPanelId(store, mapId);
5680
+ });
5681
+ var selectedFeatureCoordinates = useSelector(function (store) {
5682
+ return genericSelectors.getSelectedFeature(store.syncronizationGroupStore, linkedPanelId);
5683
+ });
5643
5684
  var disableMapPin = useSelector(function (store) {
5644
5685
  return mapSelectors.getDisableMapPin(store, mapId);
5645
5686
  });
@@ -5699,6 +5740,12 @@ var MapViewConnect = function MapViewConnect(_ref) {
5699
5740
  var setSelectedFeature = React.useCallback(function (payload) {
5700
5741
  dispatch(layerActions.setSelectedFeature(payload));
5701
5742
  }, [dispatch]);
5743
+ var handleFeatureSelect = function handleFeatureSelect(mapId, featureId) {
5744
+ dispatch(genericActions.setFeatureSelected({
5745
+ mapId: mapId,
5746
+ featureId: featureId
5747
+ }));
5748
+ };
5702
5749
  var updateFeature = React.useCallback(function (_ref2) {
5703
5750
  var geojson = _ref2.geojson,
5704
5751
  reason = _ref2.reason,
@@ -5786,7 +5833,7 @@ var MapViewConnect = function MapViewConnect(_ref) {
5786
5833
  isTimeScrollingEnabled: isTimeScrollingEnabled,
5787
5834
  srs: srs,
5788
5835
  bbox: bbox,
5789
- mapPinLocation: displayMapPin ? mapPinLocation : undefined,
5836
+ mapPinLocation: displayMapPin ? selectedFeatureCoordinates || mapPinLocation : undefined,
5790
5837
  dimensions: mapDimensions,
5791
5838
  activeLayerId: activeLayerId,
5792
5839
  animationDelay: animationDelay,
@@ -5853,7 +5900,25 @@ var MapViewConnect = function MapViewConnect(_ref) {
5853
5900
  }), linkedFeatures == null ? void 0 : linkedFeatures.map(function (feature) {
5854
5901
  return jsx(MapViewLayer, {
5855
5902
  id: "feature-" + (feature == null ? void 0 : feature.id),
5856
- geojson: feature == null ? void 0 : feature.geoJSON
5903
+ geojson: feature.geoJSON,
5904
+ onClickFeature: function onClickFeature(event) {
5905
+ var _event$feature;
5906
+ var isClickOutsideFeature = !event;
5907
+ if (isClickOutsideFeature && !event.isInEditMode) {
5908
+ return;
5909
+ }
5910
+ var clickedFeatureName = (_event$feature = event.feature) == null || (_event$feature = _event$feature.properties) == null ? void 0 : _event$feature.name;
5911
+ var features = linkedFeatures[0].geoJSON.features;
5912
+ var clickedFeatureIndex = features.findIndex(function (feature) {
5913
+ var _feature$properties;
5914
+ return ((_feature$properties = feature.properties) == null ? void 0 : _feature$properties.name) === clickedFeatureName;
5915
+ });
5916
+ if (disableMapPin === false) {
5917
+ var _selectedFeature$id;
5918
+ var selectedFeature = features[clickedFeatureIndex];
5919
+ handleFeatureSelect(linkedPanelId, (_selectedFeature$id = selectedFeature.id) == null ? void 0 : _selectedFeature$id.toString());
5920
+ }
5921
+ }
5857
5922
  }, feature == null ? void 0 : feature.id);
5858
5923
  }), featureLayers.map(function (layer) {
5859
5924
  return jsx(MapViewLayer, Object.assign({
@@ -7901,7 +7966,7 @@ var useGetLatestReferenceTime = function useGetLatestReferenceTime(inputLayer) {
7901
7966
  setLatestReferenceTime = _React$useState[1];
7902
7967
  React.useEffect(function () {
7903
7968
  var wmLayer = new WMLayer(Object.assign({}, inputLayer));
7904
- wmLayer.parseLayerPromise().then(function (layer) {
7969
+ wmLayer.parseLayer().then(function (layer) {
7905
7970
  var refTimeDim = layer.getDimension('reference_time');
7906
7971
  var lastRefTime = refTimeDim.getLastValue();
7907
7972
  setLatestReferenceTime(lastRefTime);
@@ -8008,7 +8073,7 @@ var useGetReferenceTimes = function useGetReferenceTimes(inputLayer) {
8008
8073
  React.useEffect(function () {
8009
8074
  var referenceTimes = [];
8010
8075
  var wmLayer = new WMLayer(Object.assign({}, inputLayer));
8011
- wmLayer.parseLayerPromise().then(function (layer) {
8076
+ wmLayer.parseLayer().then(function (layer) {
8012
8077
  var refTimeDim = layer.getDimension('reference_time');
8013
8078
  /* Loop through all values of the dimension.
8014
8079
  A map cannot be used for iterating, as the dimension values are not in an array (it is an API). */
@@ -8289,6 +8354,20 @@ var SyncGroupViewer = function SyncGroupViewer(_ref) {
8289
8354
  toggleTimeScroll = _ref.toggleTimeScroll;
8290
8355
  var _useCoreTranslation = useCoreTranslation(),
8291
8356
  t = _useCoreTranslation.t;
8357
+ React.useEffect(function () {
8358
+ var handleKeyDown = function handleKeyDown(event) {
8359
+ var target = event.target;
8360
+ if (target.tagName !== 'INPUT' && target.tagName !== 'TEXTAREA' && event.key === 's') {
8361
+ toggleTimeScroll({
8362
+ isTimeScrollingEnabled: !isTimeScrollingEnabled
8363
+ });
8364
+ }
8365
+ };
8366
+ window.addEventListener('keydown', handleKeyDown);
8367
+ return function () {
8368
+ window.removeEventListener('keydown', handleKeyDown);
8369
+ };
8370
+ }, [isTimeScrollingEnabled, toggleTimeScroll]);
8292
8371
  var _handleToggle = function handleToggle(groupCategory, groupId, sourceId) {
8293
8372
  var _syncGroupViewState$g = syncGroupViewState[groupCategory].groups.find(function (groupObject) {
8294
8373
  return groupObject.id === groupId;
@@ -8371,10 +8450,14 @@ var SyncGroupViewer = function SyncGroupViewer(_ref) {
8371
8450
  },
8372
8451
  children: t('workspace-time-scroll-off')
8373
8452
  }), jsx(Switch, {
8453
+ inputProps: {
8454
+ 'aria-label': 'workspace time scroll toggle'
8455
+ },
8374
8456
  checked: isTimeScrollingEnabled,
8375
8457
  onChange: function onChange() {
8376
8458
  return toggleTimeScroll({
8377
- isTimeScrollingEnabled: !isTimeScrollingEnabled
8459
+ isTimeScrollingEnabled: !isTimeScrollingEnabled,
8460
+ origin: 'user'
8378
8461
  });
8379
8462
  }
8380
8463
  }), jsx(Typography, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/core",
3
- "version": "9.35.0",
3
+ "version": "9.35.1-spike-oltanstack.0",
4
4
  "description": "GeoWeb Core library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -25,7 +25,7 @@ export interface InitialTimeSeriesProps {
25
25
  plotPreset: PlotPreset;
26
26
  services: TimeSeriesService[];
27
27
  }
28
- export type InitialProps = InitialMapProps | InitialMultiMapProps | InitialHarmTempAndPrecipProps | ModelRunIntervalProps | mapTypes.MapPresetInitialProps | InitialSliderProps | InitialTimeSeriesProps;
28
+ export type InitialProps = InitialMapProps | InitialMultiMapProps | InitialHarmTempAndPrecipProps | ModelRunIntervalProps | mapTypes.MapPresetInitialProps | InitialSliderProps | InitialTimeSeriesProps | Record<string, unknown>;
29
29
  /**
30
30
  * The lookup table is for registering your own components with the workspace.
31
31
  * @param payload
@@ -1,4 +1,4 @@
1
1
  import { serviceTypes } from '@opengeoweb/store';
2
- export declare const getServicesToLoad: (services: serviceTypes.NoIdService[]) => serviceTypes.InitialService[];
2
+ export declare const getServicesToLoad: (services: serviceTypes.NoIdService[]) => Promise<serviceTypes.InitialService[]>;
3
3
  export declare const useFetchServices: (dialogType: string, preloadedServices?: serviceTypes.InitialService[] | undefined, shouldDisableFetch?: boolean) => void;
4
4
  export declare const mergePresetsAndUserAddedServices: (presets: serviceTypes.InitialService[], userAddedServices: serviceTypes.UserAddedServices) => serviceTypes.NoIdService[];
@@ -1,8 +1,24 @@
1
- import { WMLayer } from '@opengeoweb/webmap';
1
+ import { LayerType, WMLayer } from '@opengeoweb/webmap';
2
2
  import { layerTypes, serviceTypes } from '@opengeoweb/store';
3
- export declare const multiDimensionLayer: import("@opengeoweb/webmap").LayerOptions, WmdefaultReduxLayerRadarKNMI: WMLayer, defaultReduxLayerRadarKNMI: import("@opengeoweb/webmap").LayerFoundation & {
4
- styles: import("@opengeoweb/webmap").Style[];
5
- }, defaultReduxLayerRadarColor: import("@opengeoweb/webmap").LayerOptions, multiDimensionLayer3: import("@opengeoweb/webmap").LayerFoundation;
3
+ export declare const multiDimensionLayer: {
4
+ service: string;
5
+ id: string;
6
+ name: string;
7
+ title: string;
8
+ layerType: LayerType;
9
+ enabled: boolean;
10
+ dimensions: ({
11
+ name: string;
12
+ units: string;
13
+ currentValue: string;
14
+ values: string;
15
+ } | {
16
+ name: string;
17
+ units: string;
18
+ currentValue: string;
19
+ values?: undefined;
20
+ })[];
21
+ }, WmdefaultReduxLayerRadarKNMI: WMLayer, defaultReduxLayerRadarKNMI: import("@opengeoweb/webmap").LayerOptions, defaultReduxLayerRadarColor: import("@opengeoweb/webmap").LayerOptions, multiDimensionLayer3: import("@opengeoweb/webmap").LayerFoundation;
6
22
  export declare const flDimensionLayer: layerTypes.Layer;
7
23
  export declare const layerWithSingleDimensionValue: WMLayer;
8
24
  export declare const WmMultiDimensionLayer: WMLayer;