@opengeoweb/store 20.2.0 → 21.0.0-nightly-20261031

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
@@ -5513,7 +5513,11 @@ var getLayerServiceName = createSelector(function (store) {
5513
5513
  return store;
5514
5514
  }, getLayerById, getLayerService, function (store, layer, service) {
5515
5515
  var serviceRootUrl = getCollectionServiceRootUrl(layer === null || layer === void 0 ? void 0 : layer.layerType, service);
5516
- var layerService = getServiceByUrl(store, service) || (serviceRootUrl ? getServiceByUrl(store, serviceRootUrl) || getServiceByUrl(store, getTrailingSlashVariant(serviceRootUrl)) : undefined);
5516
+ var rootService = serviceRootUrl ? getServiceByUrl(store, serviceRootUrl) || getServiceByUrl(store, getTrailingSlashVariant(serviceRootUrl)) : undefined;
5517
+ var collectionService = getServiceByUrl(store, service);
5518
+ // STAC collections register an internal service for their render styles.
5519
+ // The Source column should use the registered catalog's name first.
5520
+ var layerService = (layer === null || layer === void 0 ? void 0 : layer.layerType) === LayerType.stacGeoTIFFLayer ? rootService || collectionService : collectionService || rootService;
5517
5521
  return layerService !== null && layerService !== void 0 && layerService.name ? layerService === null || layerService === void 0 ? void 0 : layerService.name : '';
5518
5522
  }, selectorMemoizationOptions);
5519
5523
  /**
@@ -11434,4 +11438,229 @@ var configureOpenGeoWebStore = function configureOpenGeoWebStore() {
11434
11438
  });
11435
11439
  };
11436
11440
 
11437
- export { FEATURE_GROUP_PREFIX, IS_LEGEND_OPEN_BY_DEFAULT, PUBLIC_WARNING_DRAW_TOOL_ID, SECONDS_IN_DAY, SECONDS_IN_HOUR, commonActions, commonListener, commonReducers, commonSelectors, configureOpenGeoWebStore, constructSyncSourceDisplayName, createMockStore, createViewObjectForNewMap, drawingToolActions, drawingToolListener, drawingToolReducer, selectors as drawingToolSelectors, filterLayers$1 as filterLayers, genericActions, genericListener, selectors$5 as genericSelectors, getFeatureGroupId, getFeatureLinksForAllPanelsFromState, getFeatureSyncLayerMetadata$1 as getFeatureSyncLayerMetadata, getFeatureSyncLayersForPanel, getLinkedFeatureSourcePanelIdsForMapId, getLinkedTargetIdsForFeatureSourcePanel, getSingularDrawtoolDrawLayerId, getTakenWarningTimelineIds, getUserAddedServices, getViewObjectForMapId, getViewObjectForSyncGroup, initialState$4 as initialState, isWarningsTimelineLinkSourceAllowed, layerActions, layerReducer, selectors$4 as layerSelectors, types$2 as layerTypes, utils$1 as layerUtils, layersListener, constants$1 as linkComponentTypesConstants, loadingIndicatorActions, constants as loadingIndicatorConstants, loadingIndicatorReducer, selectors$3 as loadingIndicatorSelectors, makeFeatureSyncLayerId, mapActions, enums as mapEnums, mapListener, mapReducer, selectors$1 as mapSelectors, types$3 as mapTypes, mapUtils, metronomeListener, openlayersListener, routerActions, routerListener, routerReducer, utils as routerUtils, selectorMemoizationOptions, serviceActions, serviceListener, serviceReducer, selectors$7 as serviceSelectors, setUserAddedServices, storeMiddlewares, storeReducerMap, storeTestSettings, storeTestUtils, utils$3 as storeUtils, constants$2 as syncConstants, syncGroupsActions, syncGroupsListener, syncGroupsReducer, selector as syncGroupsSelector, selectors$6 as syncGroupsSelectors, types$1 as syncGroupsTypes, types$1 as types, uiActions, uiReducer, selectors$2 as uiSelectors, types as uiTypes, unifyReducerMaps, upsertFeatureSyncLayer, useRegisterFeatureSyncSource, useSetupDialog, useSyncgroupTimeState, useUpdateFeatureSyncLayers };
11441
+ /* *
11442
+ * Licensed under the Apache License, Version 2.0 (the "License");
11443
+ * you may not use this file except in compliance with the License.
11444
+ * You may obtain a copy of the License at
11445
+ *
11446
+ * http://www.apache.org/licenses/LICENSE-2.0
11447
+ *
11448
+ * Unless required by applicable law or agreed to in writing, software
11449
+ * distributed under the License is distributed on an "AS IS" BASIS,
11450
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11451
+ * See the License for the specific language governing permissions and
11452
+ * limitations under the License.
11453
+ *
11454
+ * Copyright 2026 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11455
+ * Copyright 2026 - Finnish Meteorological Institute (FMI)
11456
+ * Copyright 2026 - The Norwegian Meteorological Institute (MET Norway)
11457
+ * */
11458
+ var getUrlHost = function getUrlHost(url) {
11459
+ if (!url) {
11460
+ return undefined;
11461
+ }
11462
+ try {
11463
+ return new URL(url, window.location.href).host || undefined;
11464
+ } catch (_unused) {
11465
+ return undefined;
11466
+ }
11467
+ };
11468
+ var pickList = function pickList(list, pickItem) {
11469
+ return list === null || list === void 0 ? void 0 : list.map(pickItem);
11470
+ };
11471
+ var pickRecord = function pickRecord(record, pickValue) {
11472
+ return record && Object.fromEntries(Object.entries(record).filter(function (entry) {
11473
+ return entry[1] !== undefined;
11474
+ }).map(function (_ref) {
11475
+ var _ref2 = _slicedToArray(_ref, 2),
11476
+ key = _ref2[0],
11477
+ value = _ref2[1];
11478
+ return [key, pickValue(value, key)];
11479
+ }));
11480
+ };
11481
+ var pickEntities = function pickEntities(entities, pickEntity) {
11482
+ return entities && {
11483
+ allIds: entities.allIds,
11484
+ byId: Object.fromEntries(entities.allIds.filter(function (id) {
11485
+ return entities.byId[id] !== undefined;
11486
+ }).map(function (id) {
11487
+ return [id, pickEntity(entities.byId[id], id)];
11488
+ }))
11489
+ };
11490
+ };
11491
+ var pickDimension = function pickDimension(dimension) {
11492
+ return {
11493
+ name: dimension.name,
11494
+ units: dimension.units,
11495
+ currentValue: dimension.currentValue,
11496
+ synced: dimension.synced
11497
+ };
11498
+ };
11499
+ var isObject = function isObject(value) {
11500
+ return value !== null && _typeof(value) === 'object';
11501
+ };
11502
+ var unifySentryStateMaps = function unifySentryStateMaps(sentryStateMaps) {
11503
+ var unified = {};
11504
+ var _iterator = _createForOfIteratorHelper(sentryStateMaps),
11505
+ _step;
11506
+ try {
11507
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
11508
+ var sentryStateMap = _step.value;
11509
+ for (var _i = 0, _Object$entries = Object.entries(sentryStateMap); _i < _Object$entries.length; _i++) {
11510
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
11511
+ key = _Object$entries$_i[0],
11512
+ picker = _Object$entries$_i[1];
11513
+ if (key in unified && unified[key] !== picker) {
11514
+ throw new Error("Sentry state picker ".concat(key, " is already defined with a different picker"));
11515
+ }
11516
+ unified[key] = picker;
11517
+ }
11518
+ }
11519
+ } catch (err) {
11520
+ _iterator.e(err);
11521
+ } finally {
11522
+ _iterator.f();
11523
+ }
11524
+ return unified;
11525
+ };
11526
+ var createSentryStatePicker = function createSentryStatePicker(sentryStateMap) {
11527
+ return function (state) {
11528
+ if (!isObject(state)) {
11529
+ return undefined;
11530
+ }
11531
+ return Object.fromEntries(Object.entries(sentryStateMap).flatMap(function (_ref3) {
11532
+ var _ref4 = _slicedToArray(_ref3, 2),
11533
+ key = _ref4[0],
11534
+ picker = _ref4[1];
11535
+ var slice = state[key];
11536
+ if (!picker || slice === undefined) {
11537
+ return [];
11538
+ }
11539
+ try {
11540
+ return [[key, picker(slice)]];
11541
+ } catch (_unused2) {
11542
+ return [];
11543
+ }
11544
+ }));
11545
+ };
11546
+ };
11547
+
11548
+ /* *
11549
+ * Licensed under the Apache License, Version 2.0 (the "License");
11550
+ * you may not use this file except in compliance with the License.
11551
+ * You may obtain a copy of the License at
11552
+ *
11553
+ * http://www.apache.org/licenses/LICENSE-2.0
11554
+ *
11555
+ * Unless required by applicable law or agreed to in writing, software
11556
+ * distributed under the License is distributed on an "AS IS" BASIS,
11557
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11558
+ * See the License for the specific language governing permissions and
11559
+ * limitations under the License.
11560
+ *
11561
+ * Copyright 2026 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11562
+ * Copyright 2026 - Finnish Meteorological Institute (FMI)
11563
+ * Copyright 2026 - The Norwegian Meteorological Institute (MET Norway)
11564
+ * */
11565
+ var storeSentryStateMap = {
11566
+ common: function common(_common) {
11567
+ var _common$auth;
11568
+ return {
11569
+ auth: {
11570
+ isLoggedIn: (_common$auth = _common.auth) === null || _common$auth === void 0 ? void 0 : _common$auth.isLoggedIn
11571
+ }
11572
+ };
11573
+ },
11574
+ webmap: function webmap(_webmap) {
11575
+ return pickEntities(_webmap, function (map) {
11576
+ return {
11577
+ id: map.id,
11578
+ srs: map.srs,
11579
+ isAnimating: map.isAnimating,
11580
+ isAutoUpdating: map.isAutoUpdating,
11581
+ animationStartTime: map.animationStartTime,
11582
+ animationEndTime: map.animationEndTime,
11583
+ animationDelay: map.animationDelay,
11584
+ timeStep: map.timeStep,
11585
+ isTimestepAuto: map.isTimestepAuto,
11586
+ mapLayers: map.mapLayers,
11587
+ baseLayers: map.baseLayers,
11588
+ overLayers: map.overLayers,
11589
+ featureLayers: map.featureLayers,
11590
+ autoUpdateLayerId: map.autoUpdateLayerId,
11591
+ autoTimeStepLayerId: map.autoTimeStepLayerId,
11592
+ dimensions: pickList(map.dimensions, pickDimension)
11593
+ };
11594
+ });
11595
+ },
11596
+ layers: function layers(_layers) {
11597
+ return pickEntities(_layers, function (layer) {
11598
+ return {
11599
+ id: layer.id,
11600
+ mapId: layer.mapId,
11601
+ name: layer.name,
11602
+ layerType: layer.layerType,
11603
+ service: getUrlHost(layer.service),
11604
+ enabled: layer.enabled,
11605
+ opacity: layer.opacity,
11606
+ style: layer.style,
11607
+ format: layer.format,
11608
+ status: layer.status,
11609
+ useLatestReferenceTime: layer.useLatestReferenceTime,
11610
+ dimensions: pickList(layer.dimensions, pickDimension)
11611
+ };
11612
+ });
11613
+ },
11614
+ services: function services(_services) {
11615
+ return pickEntities(_services, function (service) {
11616
+ return {
11617
+ id: service.id,
11618
+ serviceUrl: getUrlHost(service.serviceUrl),
11619
+ active: service.active,
11620
+ scope: service.scope,
11621
+ type: service.type
11622
+ };
11623
+ });
11624
+ },
11625
+ syncGroups: function syncGroups(_syncGroups) {
11626
+ return {
11627
+ isTimeScrollingEnabled: _syncGroups.isTimeScrollingEnabled,
11628
+ groups: pickEntities(_syncGroups.groups, function (group) {
11629
+ return {
11630
+ type: group.type,
11631
+ sourcePanelId: group.sourcePanelId,
11632
+ targets: pickEntities(group.targets, function (target) {
11633
+ return target;
11634
+ })
11635
+ };
11636
+ }),
11637
+ sources: pickEntities(_syncGroups.sources, function (source) {
11638
+ return {
11639
+ types: source.types,
11640
+ targets: pickEntities(source.targets, function (target) {
11641
+ return target;
11642
+ })
11643
+ };
11644
+ })
11645
+ };
11646
+ },
11647
+ ui: function ui(_ui) {
11648
+ return {
11649
+ order: _ui.order,
11650
+ activeWindowId: _ui.activeWindowId,
11651
+ dialogs: pickRecord(_ui.dialogs, function (dialog) {
11652
+ return {
11653
+ type: dialog.type,
11654
+ activeMapId: dialog.activeMapId,
11655
+ isOpen: dialog.isOpen,
11656
+ isLoading: dialog.isLoading,
11657
+ error: dialog.error,
11658
+ source: dialog.source,
11659
+ sourcePanelId: dialog.sourcePanelId
11660
+ };
11661
+ })
11662
+ };
11663
+ }
11664
+ };
11665
+
11666
+ export { FEATURE_GROUP_PREFIX, IS_LEGEND_OPEN_BY_DEFAULT, PUBLIC_WARNING_DRAW_TOOL_ID, SECONDS_IN_DAY, SECONDS_IN_HOUR, commonActions, commonListener, commonReducers, commonSelectors, configureOpenGeoWebStore, constructSyncSourceDisplayName, createMockStore, createSentryStatePicker, createViewObjectForNewMap, drawingToolActions, drawingToolListener, drawingToolReducer, selectors as drawingToolSelectors, filterLayers$1 as filterLayers, genericActions, genericListener, selectors$5 as genericSelectors, getFeatureGroupId, getFeatureLinksForAllPanelsFromState, getFeatureSyncLayerMetadata$1 as getFeatureSyncLayerMetadata, getFeatureSyncLayersForPanel, getLinkedFeatureSourcePanelIdsForMapId, getLinkedTargetIdsForFeatureSourcePanel, getSingularDrawtoolDrawLayerId, getTakenWarningTimelineIds, getUrlHost, getUserAddedServices, getViewObjectForMapId, getViewObjectForSyncGroup, initialState$4 as initialState, isWarningsTimelineLinkSourceAllowed, layerActions, layerReducer, selectors$4 as layerSelectors, types$2 as layerTypes, utils$1 as layerUtils, layersListener, constants$1 as linkComponentTypesConstants, loadingIndicatorActions, constants as loadingIndicatorConstants, loadingIndicatorReducer, selectors$3 as loadingIndicatorSelectors, makeFeatureSyncLayerId, mapActions, enums as mapEnums, mapListener, mapReducer, selectors$1 as mapSelectors, types$3 as mapTypes, mapUtils, metronomeListener, openlayersListener, pickDimension, pickEntities, pickList, pickRecord, routerActions, routerListener, routerReducer, utils as routerUtils, selectorMemoizationOptions, serviceActions, serviceListener, serviceReducer, selectors$7 as serviceSelectors, setUserAddedServices, storeMiddlewares, storeReducerMap, storeSentryStateMap, storeTestSettings, storeTestUtils, utils$3 as storeUtils, constants$2 as syncConstants, syncGroupsActions, syncGroupsListener, syncGroupsReducer, selector as syncGroupsSelector, selectors$6 as syncGroupsSelectors, types$1 as syncGroupsTypes, types$1 as types, uiActions, uiReducer, selectors$2 as uiSelectors, types as uiTypes, unifyReducerMaps, unifySentryStateMaps, upsertFeatureSyncLayer, useRegisterFeatureSyncSource, useSetupDialog, useSyncgroupTimeState, useUpdateFeatureSyncLayers };
@@ -20,3 +20,4 @@ export * as storeUtils from './utils';
20
20
  export * from './utils';
21
21
  export * from './store';
22
22
  export * from './common';
23
+ export * from './sentry';
@@ -0,0 +1,3 @@
1
+ export type * from './types';
2
+ export * from './utils';
3
+ export * from './sentryStateMap';
@@ -0,0 +1,8 @@
1
+ import type { SentryStateMap } from './types';
2
+ import type { CommonModuleState } from '../common/types';
3
+ import type { SynchronizationGroupModuleState } from '../generic/syncGroups/types';
4
+ import type { WebMapStateModuleState } from '../map/types';
5
+ import type { UIModuleState } from '../ui/types';
6
+ type StoreSentryModuleState = CommonModuleState & WebMapStateModuleState & SynchronizationGroupModuleState & UIModuleState;
7
+ export declare const storeSentryStateMap: SentryStateMap<StoreSentryModuleState>;
8
+ export {};
@@ -0,0 +1,12 @@
1
+ export type SentryState<T> = T extends (infer Item)[] ? SentryState<Item>[] : T extends object ? {
2
+ [K in keyof T]?: SentryState<T[K]>;
3
+ } : T;
4
+ export type SentryStatePicker<S> = (slice: S) => SentryState<S> | undefined;
5
+ export type SentryStateMap<ModuleState> = {
6
+ [K in keyof ModuleState]?: SentryStatePicker<NonNullable<ModuleState[K]>>;
7
+ };
8
+ export type AnySentryStateMap = Record<string, ((slice: never) => object | undefined) | undefined>;
9
+ export interface SentryEntities<T> {
10
+ byId: Record<string, T>;
11
+ allIds: string[];
12
+ }
@@ -0,0 +1,9 @@
1
+ import type { Dimension } from '@opengeoweb/webmap';
2
+ import type { AnySentryStateMap, SentryEntities, SentryState } from './types';
3
+ export declare const getUrlHost: (url?: string) => string | undefined;
4
+ export declare const pickList: <T, R>(list: T[] | undefined, pickItem: (item: T) => R) => R[] | undefined;
5
+ export declare const pickRecord: <T, R>(record: Partial<Record<string, T>> | undefined, pickValue: (value: T, key: string) => R) => Record<string, R> | undefined;
6
+ export declare const pickEntities: <T>(entities: SentryEntities<T> | undefined, pickEntity: (entity: T, id: string) => SentryState<T>) => SentryState<SentryEntities<T>> | undefined;
7
+ export declare const pickDimension: (dimension: Dimension) => SentryState<Dimension>;
8
+ export declare const unifySentryStateMaps: (sentryStateMaps: AnySentryStateMap[]) => AnySentryStateMap;
9
+ export declare const createSentryStatePicker: (sentryStateMap: AnySentryStateMap) => (state: unknown) => object | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/store",
3
- "version": "20.2.0",
3
+ "version": "21.0.0-nightly-20261031",
4
4
  "description": "GeoWeb Store library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -20,15 +20,15 @@
20
20
  }
21
21
  },
22
22
  "dependencies": {
23
- "@opengeoweb/shared": "20.2.0",
23
+ "@opengeoweb/shared": "21.0.0-nightly-20261031",
24
24
  "react-redux": "^9.2.0",
25
25
  "@reduxjs/toolkit": "^2.6.1",
26
- "@opengeoweb/webmap-react": "20.2.0",
27
- "@opengeoweb/webmap": "20.2.0",
26
+ "@opengeoweb/webmap-react": "21.0.0-nightly-20261031",
27
+ "@opengeoweb/webmap": "21.0.0-nightly-20261031",
28
28
  "immer": "^10.0.3",
29
29
  "lodash": "^4.18.1",
30
- "@opengeoweb/metronome": "20.2.0",
31
- "@opengeoweb/time-slider": "20.2.0",
30
+ "@opengeoweb/metronome": "21.0.0-nightly-20261031",
31
+ "@opengeoweb/time-slider": "21.0.0-nightly-20261031",
32
32
  "ol": "^10.4.0",
33
33
  "@turf/turf": "^7.2.0",
34
34
  "@types/geojson": "^7946.0.14",