@opengeoweb/store 9.34.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
@@ -1,11 +1,11 @@
1
- import { webmapUtils, parseISO8601IntervalToDateInterval, LayerType, getWMJSMapById, webmapTestSettings, WMLayer, getWMSRequests, handleDateUtilsISOString, isProjectionSupported, getCapabilities } from '@opengeoweb/webmap';
1
+ import { webmapUtils, parseISO8601IntervalToDateInterval, LayerType, getWMJSMapById, webmapTestSettings, WMLayer, getWMSRequests, handleDateUtilsISOString, isProjectionSupported, queryWMSLayers } from '@opengeoweb/webmap';
2
2
  import { createAction, createSlice, createSelector, createListenerMiddleware, isAnyOf, createEntityAdapter } from '@reduxjs/toolkit';
3
3
  import { getGeoJson, moveFeature, createInterSections, getLastEmptyFeatureIndex, defaultLayers, addSelectionTypeToGeoJSON, getFeatureCollection, emptyGeoJSON, defaultIntersectionStyleProperties } from '@opengeoweb/webmap-react';
4
4
  export { defaultLayers } from '@opengeoweb/webmap-react';
5
5
  import { dateUtils, PROJECTION, defaultDelay, withEggs } from '@opengeoweb/shared';
6
6
  import { defaultTimeStep, defaultTimeSpan, defaultAnimationDelayAtStart, defaultSecondsPerPx, roundWithTimeStep, getSpeedDelay } from '@opengeoweb/timeslider';
7
7
  import { produce } from 'immer';
8
- import { isEqual, isEmpty, compact } from 'lodash';
8
+ import { isEqual, isEmpty, pick, compact } from 'lodash';
9
9
  import { useSelector, useDispatch, Provider } from 'react-redux';
10
10
  import { useCallback, useEffect } from 'react';
11
11
  import { metronome } from '@opengeoweb/metronome';
@@ -3463,23 +3463,60 @@ var initialState$3 = {
3463
3463
  sourcesById: []
3464
3464
  }
3465
3465
  },
3466
- linkedState: {}
3466
+ linkedState: {
3467
+ links: {},
3468
+ sharedData: {}
3469
+ },
3470
+ isTimeScrollingEnabled: false
3467
3471
  };
3468
3472
  var slice$4 = createSlice({
3469
3473
  initialState: initialState$3,
3470
3474
  name: 'synchronizationGroupsReducer',
3471
3475
  reducers: {
3472
- changeLinkedMap: function changeLinkedMap(draft, action) {
3476
+ /** Sets the links map.
3477
+ * This is used to override the links when changing workspaces.
3478
+ * @param draft sync state
3479
+ * @param {Record<string, string[]>} action.newLinks the new links object
3480
+ */
3481
+ setLinkedMap: function setLinkedMap(draft, action) {
3482
+ var newLinks = action.payload.newLinks;
3483
+ draft.linkedState.links = newLinks;
3484
+ },
3485
+ /** Updates the links map.
3486
+ * This is used to update the links when operating the link menu.
3487
+ * @param draft sync state
3488
+ * @param {string} action.panelId id of the panel updating it's links
3489
+ * @param {string[]} action.mapIds the new linked maps
3490
+ */
3491
+ updateLinkedMap: function updateLinkedMap(draft, action) {
3473
3492
  var _action$payload = action.payload,
3474
3493
  panelId = _action$payload.panelId,
3475
3494
  mapIds = _action$payload.mapIds;
3476
- draft.linkedState[panelId] = mapIds;
3495
+ draft.linkedState.links[panelId] = mapIds;
3477
3496
  },
3478
- syncGroupAddSource: function syncGroupAddSource(draft, action) {
3497
+ addSharedData: function addSharedData(draft, action) {
3479
3498
  var _action$payload2 = action.payload,
3480
- id = _action$payload2.id,
3481
- payloadType = _action$payload2.type,
3482
- defaultPayload = _action$payload2.defaultPayload;
3499
+ panelId = _action$payload2.panelId,
3500
+ data = _action$payload2.data;
3501
+ draft.linkedState.sharedData[panelId] = Object.assign({}, draft.linkedState.sharedData[panelId], data);
3502
+ },
3503
+ deleteSharedData: function deleteSharedData(draft, action) {
3504
+ var panelId = action.payload.panelId;
3505
+ delete draft.linkedState.links[panelId];
3506
+ delete draft.linkedState.sharedData[panelId];
3507
+ },
3508
+ setFeatureSelected: function setFeatureSelected(draft, action) {
3509
+ var _action$payload3 = action.payload,
3510
+ mapId = _action$payload3.mapId,
3511
+ featureId = _action$payload3.featureId;
3512
+ var sharedData = draft.linkedState.sharedData[mapId];
3513
+ sharedData.selectedFeatureId = featureId;
3514
+ },
3515
+ syncGroupAddSource: function syncGroupAddSource(draft, action) {
3516
+ var _action$payload4 = action.payload,
3517
+ id = _action$payload4.id,
3518
+ payloadType = _action$payload4.type,
3519
+ defaultPayload = _action$payload4.defaultPayload;
3483
3520
  if (!draft.sources.byId[id]) {
3484
3521
  draft.sources.byId[id] = {
3485
3522
  types: payloadType,
@@ -3514,10 +3551,10 @@ var slice$4 = createSlice({
3514
3551
  },
3515
3552
  syncGroupAddTarget: function syncGroupAddTarget(draft, action) {
3516
3553
  var _synchronizationGroup;
3517
- var _action$payload3 = action.payload,
3518
- groupId = _action$payload3.groupId,
3519
- targetId = _action$payload3.targetId,
3520
- linked = _action$payload3.linked;
3554
+ var _action$payload5 = action.payload,
3555
+ groupId = _action$payload5.groupId,
3556
+ targetId = _action$payload5.targetId,
3557
+ linked = _action$payload5.linked;
3521
3558
  var synchronizationGroup = draft.groups.byId[groupId];
3522
3559
  if (!synchronizationGroup) {
3523
3560
  console.warn("SYNCGROUPS_ADD_TARGET: Group " + groupId + " does not exist.");
@@ -3541,9 +3578,9 @@ var slice$4 = createSlice({
3541
3578
  }
3542
3579
  },
3543
3580
  syncGroupRemoveTarget: function syncGroupRemoveTarget(draft, action) {
3544
- var _action$payload4 = action.payload,
3545
- groupId = _action$payload4.groupId,
3546
- targetId = _action$payload4.targetId;
3581
+ var _action$payload6 = action.payload,
3582
+ groupId = _action$payload6.groupId,
3583
+ targetId = _action$payload6.targetId;
3547
3584
  if (!draft.groups.byId[groupId]) {
3548
3585
  return;
3549
3586
  }
@@ -3556,20 +3593,20 @@ var slice$4 = createSlice({
3556
3593
  });
3557
3594
  },
3558
3595
  syncGroupLinkTarget: function syncGroupLinkTarget(draft, action) {
3559
- var _action$payload5 = action.payload,
3560
- groupId = _action$payload5.groupId,
3561
- targetId = _action$payload5.targetId,
3562
- linked = _action$payload5.linked;
3596
+ var _action$payload7 = action.payload,
3597
+ groupId = _action$payload7.groupId,
3598
+ targetId = _action$payload7.targetId,
3599
+ linked = _action$payload7.linked;
3563
3600
  if (!draft.groups.byId[groupId] || !draft.groups.byId[groupId].targets.byId[targetId]) {
3564
3601
  return;
3565
3602
  }
3566
3603
  draft.groups.byId[groupId].targets.byId[targetId].linked = linked;
3567
3604
  },
3568
3605
  syncGroupAddGroup: function syncGroupAddGroup(draft, action) {
3569
- var _action$payload6 = action.payload,
3570
- groupId = _action$payload6.groupId,
3571
- type = _action$payload6.type,
3572
- title = _action$payload6.title;
3606
+ var _action$payload8 = action.payload,
3607
+ groupId = _action$payload8.groupId,
3608
+ type = _action$payload8.type,
3609
+ title = _action$payload8.title;
3573
3610
  if (draft.groups.byId[groupId]) {
3574
3611
  return;
3575
3612
  }
@@ -3603,6 +3640,9 @@ var slice$4 = createSlice({
3603
3640
  syncGroupSetViewState: function syncGroupSetViewState(draft, action) {
3604
3641
  var viewState = action.payload.viewState;
3605
3642
  draft.viewState = viewState;
3643
+ },
3644
+ syncGroupToggleIsTimeScrollingEnabled: function syncGroupToggleIsTimeScrollingEnabled(draft, action) {
3645
+ draft.isTimeScrollingEnabled = action.payload.isTimeScrollingEnabled;
3606
3646
  }
3607
3647
  },
3608
3648
  extraReducers: function extraReducers(builder) {
@@ -3614,10 +3654,10 @@ var slice$4 = createSlice({
3614
3654
  }
3615
3655
  });
3616
3656
  var setBboxOrTimeSync = function setBboxOrTimeSync(draft, action) {
3617
- var _action$payload7 = action.payload,
3618
- targets = _action$payload7.targets,
3619
- source = _action$payload7.source,
3620
- groups = _action$payload7.groups;
3657
+ var _action$payload9 = action.payload,
3658
+ targets = _action$payload9.targets,
3659
+ source = _action$payload9.source,
3660
+ groups = _action$payload9.groups;
3621
3661
  var getPayLoadKey = function getPayLoadKey(type) {
3622
3662
  switch (type) {
3623
3663
  case setTimeSync.type:
@@ -3799,6 +3839,9 @@ var getAllTargetGroupsForSource = createSelector([syncGroupStore, getSourceId],
3799
3839
  var syncGroupGetViewState = createSelector(syncGroupStore, function (store) {
3800
3840
  return store && store.viewState;
3801
3841
  }, selectorMemoizationOptions);
3842
+ var isTimeScrollingEnabled = createSelector(syncGroupStore, function (store) {
3843
+ return store && store.isTimeScrollingEnabled;
3844
+ }, selectorMemoizationOptions);
3802
3845
  var getSyncedMapIdsForTimeslider = createSelector(syncGroupStore, function (store) {
3803
3846
  var _store$viewState$time, _store$viewState$time2;
3804
3847
  return (_store$viewState$time = (_store$viewState$time2 = store.viewState.timeslider.groups[0]) == null ? void 0 : _store$viewState$time2.selected) != null ? _store$viewState$time : [];
@@ -3830,6 +3873,7 @@ var selectors$5 = /*#__PURE__*/Object.freeze({
3830
3873
  getSynchronizationGroupState: getSynchronizationGroupState,
3831
3874
  getTargetGroups: getTargetGroups,
3832
3875
  getTargets: getTargets,
3876
+ isTimeScrollingEnabled: isTimeScrollingEnabled,
3833
3877
  syncGroupGetViewState: syncGroupGetViewState,
3834
3878
  syncGroupStore: syncGroupStore
3835
3879
  });
@@ -4076,7 +4120,7 @@ var getSynchronizationGroupStore = createSelector(synchronizationGroupStore, fun
4076
4120
  }, selectorMemoizationOptions);
4077
4121
  /**
4078
4122
  * Returns the synchronization source by id
4079
- * @param store The app store
4123
+ * @param store The app store
4080
4124
  * @param id The source id to find
4081
4125
  */
4082
4126
  var getSyncSourceBySourceId = function getSyncSourceBySourceId(state, id) {
@@ -4091,21 +4135,149 @@ var getSyncSourceBySourceId = function getSyncSourceBySourceId(state, id) {
4091
4135
  var getTime = createSelector(getSyncSourceBySourceId, function (store) {
4092
4136
  return store && store.payloadByType && store.payloadByType[SYNCGROUPS_TYPE_SETTIME] ? store.payloadByType[SYNCGROUPS_TYPE_SETTIME].value : null;
4093
4137
  }, selectorMemoizationOptions);
4094
- var getSelectedMaps = createSelector([function (store) {
4095
- return store.linkedState;
4096
- }, function (store, panelId) {
4138
+ var selectLinkedState = createSelector(synchronizationGroupStore, function (syncState) {
4139
+ return syncState.linkedState;
4140
+ });
4141
+ var getLinkedMaps = createSelector([selectLinkedState, function (store, panelId) {
4142
+ return panelId;
4143
+ }], function (linkedState, panelId) {
4144
+ return linkedState.links[panelId] || [];
4145
+ }, selectorMemoizationOptions);
4146
+ var getLinkedFeatureProviders = function getLinkedFeatureProviders(linkedState, mapId) {
4147
+ return Object.keys(linkedState.links).filter(function (panelId) {
4148
+ return linkedState.links[panelId].find(function (id) {
4149
+ return id === mapId;
4150
+ });
4151
+ });
4152
+ };
4153
+ var selectSharedData = createSelector([selectLinkedState, function (store, panelId) {
4097
4154
  return panelId;
4098
4155
  }], function (linkedState, panelId) {
4099
- return linkedState[panelId] || [];
4156
+ return pick(linkedState == null ? void 0 : linkedState.sharedData, [panelId]);
4157
+ });
4158
+ var selectLinkedPanelId = createSelector([selectLinkedState, function (_, mapViewId) {
4159
+ return mapViewId;
4160
+ }], function (linkedState, mapViewId) {
4161
+ if (!linkedState || !linkedState.links) {
4162
+ return undefined;
4163
+ }
4164
+ // Find the panelId where mapView(s) is linked
4165
+ var panelId = Object.keys(linkedState.links).find(function (panelId) {
4166
+ var _linkedState$links$pa;
4167
+ return (_linkedState$links$pa = linkedState.links[panelId]) == null ? void 0 : _linkedState$links$pa.includes(mapViewId);
4168
+ });
4169
+ return panelId;
4170
+ });
4171
+ var selectMapViewsForPanelId = createSelector([function (linkedState, panelId) {
4172
+ return linkedState.links[panelId];
4173
+ }], function (mapViews) {
4174
+ if (!mapViews) {
4175
+ return undefined;
4176
+ }
4177
+ return mapViews;
4178
+ });
4179
+ var selectLinkedFeatures = createSelector([function (linkedState) {
4180
+ return linkedState;
4181
+ }, getLinkedFeatureProviders], function (linkedState, featureProviders) {
4182
+ var features = featureProviders.flatMap(function (providerId) {
4183
+ var _linkedState$sharedDa;
4184
+ return ((_linkedState$sharedDa = linkedState.sharedData[providerId]) == null ? void 0 : _linkedState$sharedDa.features) || [];
4185
+ }).filter(function (f) {
4186
+ return f !== undefined;
4187
+ });
4188
+ return features;
4189
+ });
4190
+ var getSelectedFeature = createSelector([
4191
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
4192
+ function (state, mapId) {
4193
+ var _state$linkedState;
4194
+ var sharedData = (_state$linkedState = state.linkedState) == null ? void 0 : _state$linkedState.sharedData[mapId];
4195
+ var _ref = sharedData || {},
4196
+ _ref$features = _ref.features,
4197
+ features = _ref$features === void 0 ? [] : _ref$features,
4198
+ selectedFeatureId = _ref.selectedFeatureId;
4199
+ return {
4200
+ features: features,
4201
+ selectedFeatureId: selectedFeatureId
4202
+ };
4203
+ }], function (_ref2) {
4204
+ var features = _ref2.features,
4205
+ selectedFeatureId = _ref2.selectedFeatureId;
4206
+ if (!selectedFeatureId) {
4207
+ return null;
4208
+ }
4209
+ // Find the feature by the selectedFeatureId
4210
+ var selectedFeature = features[0].geoJSON.features.find(function (feature) {
4211
+ return feature.id === selectedFeatureId;
4212
+ });
4213
+ if (selectedFeature && selectedFeature.geometry.type === 'Point') {
4214
+ var _selectedFeature$prop, _selectedFeature$prop2;
4215
+ var coordinates = selectedFeature.geometry.coordinates;
4216
+ return {
4217
+ lat: coordinates[1],
4218
+ lon: coordinates[0],
4219
+ id: selectedFeature.id,
4220
+ serviceId: (_selectedFeature$prop = selectedFeature.properties) == null ? void 0 : _selectedFeature$prop.serviceId,
4221
+ collectionId: (_selectedFeature$prop2 = selectedFeature.properties) == null ? void 0 : _selectedFeature$prop2.collectionId
4222
+ };
4223
+ }
4224
+ return null;
4100
4225
  });
4101
4226
 
4102
4227
  var selectors$4 = /*#__PURE__*/Object.freeze({
4103
4228
  __proto__: null,
4104
- getSelectedMaps: getSelectedMaps,
4229
+ getLinkedFeatureProviders: getLinkedFeatureProviders,
4230
+ getLinkedMaps: getLinkedMaps,
4231
+ getSelectedFeature: getSelectedFeature,
4105
4232
  getSynchronizationGroupStore: getSynchronizationGroupStore,
4106
- getTime: getTime
4233
+ getTime: getTime,
4234
+ selectLinkedFeatures: selectLinkedFeatures,
4235
+ selectLinkedPanelId: selectLinkedPanelId,
4236
+ selectMapViewsForPanelId: selectMapViewsForPanelId,
4237
+ selectSharedData: selectSharedData
4107
4238
  });
4108
4239
 
4240
+ /* *
4241
+ * Licensed under the Apache License, Version 2.0 (the "License");
4242
+ * you may not use this file except in compliance with the License.
4243
+ * You may obtain a copy of the License at
4244
+ *
4245
+ * http://www.apache.org/licenses/LICENSE-2.0
4246
+ *
4247
+ * Unless required by applicable law or agreed to in writing, software
4248
+ * distributed under the License is distributed on an "AS IS" BASIS,
4249
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4250
+ * See the License for the specific language governing permissions and
4251
+ * limitations under the License.
4252
+ *
4253
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4254
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
4255
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
4256
+ * */
4257
+ var useUpdateSharedData = function useUpdateSharedData(data, panelId) {
4258
+ var linkedMaps = useSelector(function (store) {
4259
+ return getLinkedMaps(store, panelId);
4260
+ });
4261
+ var dispatch = useDispatch();
4262
+ useEffect(function () {
4263
+ return function () {
4264
+ if (panelId) {
4265
+ dispatch(actions.deleteSharedData({
4266
+ panelId: panelId
4267
+ }));
4268
+ }
4269
+ };
4270
+ }, [dispatch, panelId]);
4271
+ useEffect(function () {
4272
+ if (panelId && (linkedMaps == null ? void 0 : linkedMaps.length) > 0) {
4273
+ dispatch(actions.addSharedData({
4274
+ panelId: panelId,
4275
+ data: data
4276
+ }));
4277
+ }
4278
+ }, [panelId, linkedMaps, data, dispatch]);
4279
+ };
4280
+
4109
4281
  /* *
4110
4282
  * Licensed under the Apache License, Version 2.0 (the "License");
4111
4283
  * you may not use this file except in compliance with the License.
@@ -4287,6 +4459,7 @@ var selectors$3 = /*#__PURE__*/Object.freeze({
4287
4459
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
4288
4460
  * */
4289
4461
  var genericActions = Object.assign({}, actions, {
4462
+ initialSyncState: initialState$3,
4290
4463
  setTime: setTime,
4291
4464
  setBbox: setBbox
4292
4465
  });
@@ -4925,8 +5098,8 @@ var getPinLocation = createSelector(getMapById, function (store) {
4925
5098
  * @param {string} mapId mapId: string - Id of the map
4926
5099
  * @returns {boolean} returnType: boolean
4927
5100
  */
4928
- var getDisableMapPin = createSelector(getMapById, function (store) {
4929
- return store ? store.disableMapPin : false;
5101
+ var getDisableMapPin = createSelector([getMapById], function (map) {
5102
+ return map == null ? void 0 : map.disableMapPin;
4930
5103
  }, selectorMemoizationOptions);
4931
5104
  /**
4932
5105
  * Returns the display map pin boolean for the current map
@@ -6647,7 +6820,7 @@ var fetchService = /*#__PURE__*/function () {
6647
6820
  case 0:
6648
6821
  _context.prev = 0;
6649
6822
  _context.next = 3;
6650
- return getCapabilities.getLayersFlattenedFromService(service.serviceUrl);
6823
+ return queryWMSLayers(service.serviceUrl);
6651
6824
  case 3:
6652
6825
  layers = _context.sent;
6653
6826
  listenerApi.dispatch(serviceActions.serviceSetLayers(Object.assign({}, service, {
@@ -8002,15 +8175,7 @@ var mockStateMapWithLayer = function mockStateMapWithLayer(layer, mapId) {
8002
8175
  service: layer.service,
8003
8176
  dimensions: layer.dimensions
8004
8177
  }),
8005
- syncronizationGroupStore: {
8006
- groups: {
8007
- byId: {},
8008
- allIds: []
8009
- },
8010
- sources: {
8011
- byId: {},
8012
- allIds: []
8013
- },
8178
+ syncronizationGroupStore: Object.assign({}, initialState$3, {
8014
8179
  viewState: {
8015
8180
  timeslider: {
8016
8181
  groups: [{
@@ -8027,9 +8192,8 @@ var mockStateMapWithLayer = function mockStateMapWithLayer(layer, mapId) {
8027
8192
  groups: [],
8028
8193
  sourcesById: []
8029
8194
  }
8030
- },
8031
- linkedState: {}
8032
- }
8195
+ }
8196
+ })
8033
8197
  };
8034
8198
  };
8035
8199
  var webmapStateWithMultipleLayers = function webmapStateWithMultipleLayers(layers, mapId) {
@@ -8066,15 +8230,7 @@ var mockStateMapWithMultipleLayers = function mockStateMapWithMultipleLayers(lay
8066
8230
  allIds: ['serviceid_1']
8067
8231
  },
8068
8232
  layers: createMultipleLayersState(layers, mapId),
8069
- syncronizationGroupStore: {
8070
- groups: {
8071
- byId: {},
8072
- allIds: []
8073
- },
8074
- sources: {
8075
- byId: {},
8076
- allIds: []
8077
- },
8233
+ syncronizationGroupStore: Object.assign({}, initialState$3, {
8078
8234
  viewState: {
8079
8235
  timeslider: {
8080
8236
  groups: [{
@@ -8091,9 +8247,8 @@ var mockStateMapWithMultipleLayers = function mockStateMapWithMultipleLayers(lay
8091
8247
  groups: [],
8092
8248
  sourcesById: []
8093
8249
  }
8094
- },
8095
- linkedState: {}
8096
- }
8250
+ }
8251
+ })
8097
8252
  };
8098
8253
  };
8099
8254
  var testGeoJSON = {
@@ -8286,4 +8441,4 @@ var StoreProvider = function StoreProvider(_ref2) {
8286
8441
  });
8287
8442
  };
8288
8443
 
8289
- export { IS_LEGEND_OPEN_BY_DEFAULT, StoreProvider, coreModuleConfig, createCustomStore, drawtoolActions, drawtoolModuleConfig, reducer as drawtoolReducer, selectors as drawtoolSelectors, filterLayers$1 as filterLayers, genericActions, genericListener, selectors$4 as genericSelectors, types$1 as genericTypes, getSingularDrawtoolDrawLayerId, getUserAddedServices, initialState$3 as initialState, layerActions, reducer$6 as layerReducer, selectors$7 as layerSelectors, types$5 as layerTypes, utils$2 as layerUtils, constants as linkComponentTypesConstants, loadingIndicatorActions, constants$1 as loadingIndicatorConstants, loadingIndicatorReducer, selectors$3 as loadingIndicatorSelectors, mapActions, enums as mapEnums, mapListener, selectors$2 as mapSelectors, mapStoreActions, mapStoreModuleConfig, mapStoreReducers, types$4 as mapTypes, mapUtils, routerActions, routerModuleConfig, utils as routerUtils, selectorMemoizationOptions, serviceActions, selectors$1 as serviceSelectors, types as serviceTypes, setUserAddedServices, storeTestSettings, storeTestUtils, utils$1 as storeUtils, constants$2 as syncConstants, actions as syncGroupsActions, syncGroupsListener, reducer$3 as syncGroupsReducer, selector as syncGroupsSelector, selectors$5 as syncGroupsSelectors, types$2 as syncGroupsTypes, types$2 as types, uiActions, uiModuleConfig, reducer$5 as uiReducer, selectors$6 as uiSelectors, types$3 as uiTypes, useSetupDialog, reducer$4 as webmapReducer };
8444
+ export { IS_LEGEND_OPEN_BY_DEFAULT, StoreProvider, coreModuleConfig, createCustomStore, drawtoolActions, drawtoolModuleConfig, reducer as drawtoolReducer, selectors as drawtoolSelectors, filterLayers$1 as filterLayers, genericActions, genericListener, selectors$4 as genericSelectors, types$1 as genericTypes, getSingularDrawtoolDrawLayerId, getUserAddedServices, initialState$3 as initialState, layerActions, reducer$6 as layerReducer, selectors$7 as layerSelectors, types$5 as layerTypes, utils$2 as layerUtils, constants as linkComponentTypesConstants, loadingIndicatorActions, constants$1 as loadingIndicatorConstants, loadingIndicatorReducer, selectors$3 as loadingIndicatorSelectors, mapActions, enums as mapEnums, mapListener, selectors$2 as mapSelectors, mapStoreActions, mapStoreModuleConfig, mapStoreReducers, types$4 as mapTypes, mapUtils, routerActions, routerModuleConfig, utils as routerUtils, selectorMemoizationOptions, serviceActions, selectors$1 as serviceSelectors, types as serviceTypes, setUserAddedServices, storeTestSettings, storeTestUtils, utils$1 as storeUtils, constants$2 as syncConstants, actions as syncGroupsActions, syncGroupsListener, reducer$3 as syncGroupsReducer, selector as syncGroupsSelector, selectors$5 as syncGroupsSelectors, types$2 as syncGroupsTypes, types$2 as types, uiActions, uiModuleConfig, reducer$5 as uiReducer, selectors$6 as uiSelectors, types$3 as uiTypes, useSetupDialog, useUpdateSharedData, reducer$4 as webmapReducer };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/store",
3
- "version": "9.34.0",
3
+ "version": "9.35.1-spike-oltanstack.0",
4
4
  "description": "GeoWeb Store library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -0,0 +1,2 @@
1
+ import { PotentialData } from './synchronizationGroups/types';
2
+ export declare const useUpdateSharedData: (data: PotentialData, panelId?: string) => void;
@@ -1,7 +1,15 @@
1
1
  export declare const genericActions: {
2
+ initialSyncState: import("./synchronizationGroups/types").SynchronizationGroupState;
2
3
  setTime: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./types").SetTimePayload, string>;
3
4
  setBbox: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./types").SetBboxPayload, string>;
4
- changeLinkedMap: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").ChangeLinkedMap, "synchronizationGroupsReducer/changeLinkedMap">;
5
+ setLinkedMap: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").SetLinkedMap, "synchronizationGroupsReducer/setLinkedMap">;
6
+ updateLinkedMap: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").UpdateLinkedMap, "synchronizationGroupsReducer/updateLinkedMap">;
7
+ addSharedData: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").AddSharedData, "synchronizationGroupsReducer/addSharedData">;
8
+ deleteSharedData: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").DeleteSharedData, "synchronizationGroupsReducer/deleteSharedData">;
9
+ setFeatureSelected: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
10
+ mapId: string;
11
+ featureId: string;
12
+ }, "synchronizationGroupsReducer/setFeatureSelected">;
5
13
  syncGroupAddSource: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").SyncGroupsAddSourcePayload, "synchronizationGroupsReducer/syncGroupAddSource">;
6
14
  syncGroupRemoveSource: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").SyncGroupRemoveSourcePayload, "synchronizationGroupsReducer/syncGroupRemoveSource">;
7
15
  syncGroupAddTarget: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").SyncGroupAddTargetPayload, "synchronizationGroupsReducer/syncGroupAddTarget">;
@@ -11,8 +19,10 @@ export declare const genericActions: {
11
19
  syncGroupRemoveGroup: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").SyncGroupRemoveGroupPayload, "synchronizationGroupsReducer/syncGroupRemoveGroup">;
12
20
  syncGroupClear: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"synchronizationGroupsReducer/syncGroupClear">;
13
21
  syncGroupSetViewState: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").SyncGroupSetViewStatePayload, "synchronizationGroupsReducer/syncGroupSetViewState">;
22
+ syncGroupToggleIsTimeScrollingEnabled: import("@reduxjs/toolkit").ActionCreatorWithPayload<import("./synchronizationGroups/types").SyncGroupToggleIsTimeScrollingEnabled, "synchronizationGroupsReducer/syncGroupToggleIsTimeScrollingEnabled">;
14
23
  };
15
24
  export * as genericSelectors from './selectors';
25
+ export * from './hooks';
16
26
  export * from './synchronizationGroups';
17
27
  export * as genericTypes from './types';
18
28
  export * from './loadingIndicator';
@@ -1,5 +1,5 @@
1
1
  import type { CoreAppStore } from '../types';
2
- import type { SynchronizationGroupState, SynchronizationSource } from './synchronizationGroups/types';
2
+ import type { LinkedState, SynchronizationGroupState, SynchronizationSource } from './synchronizationGroups/types';
3
3
  export declare const getSynchronizationGroupStore: ((state: CoreAppStore) => SynchronizationGroupState) & import("reselect").OutputSelectorFields<(args_0: SynchronizationGroupState) => SynchronizationGroupState, {
4
4
  clearCache: () => void;
5
5
  }> & {
@@ -10,7 +10,57 @@ export declare const getTime: ((state: SynchronizationGroupState, id: string) =>
10
10
  }> & {
11
11
  clearCache: () => void;
12
12
  };
13
- export declare const getSelectedMaps: ((state: SynchronizationGroupState, panelId: string) => string[]) & import("reselect").OutputSelectorFields<(args_0: Record<string, string[]>, args_1: string) => string[], {
13
+ export declare const getLinkedMaps: ((state: any, panelId: string) => string[]) & import("reselect").OutputSelectorFields<(args_0: LinkedState, args_1: string) => string[], {
14
+ clearCache: () => void;
15
+ }> & {
16
+ clearCache: () => void;
17
+ };
18
+ export declare const getLinkedFeatureProviders: (linkedState: LinkedState, mapId: string) => string[];
19
+ export declare const selectSharedData: ((state: any, panelId: string) => Pick<Record<string, import("./synchronizationGroups/types").PotentialData>, string>) & import("reselect").OutputSelectorFields<(args_0: LinkedState, args_1: string) => Pick<Record<string, import("./synchronizationGroups/types").PotentialData>, string>, {
20
+ clearCache: () => void;
21
+ }> & {
22
+ clearCache: () => void;
23
+ };
24
+ export declare const selectLinkedPanelId: ((state: any, mapViewId: string) => string | undefined) & import("reselect").OutputSelectorFields<(args_0: LinkedState, args_1: string) => string | undefined, {
25
+ clearCache: () => void;
26
+ }> & {
27
+ clearCache: () => void;
28
+ };
29
+ export declare const selectMapViewsForPanelId: ((state: LinkedState, panelId: string) => string[] | undefined) & import("reselect").OutputSelectorFields<(args_0: string[]) => string[] | undefined, {
30
+ clearCache: () => void;
31
+ }> & {
32
+ clearCache: () => void;
33
+ };
34
+ export declare const selectLinkedFeatures: ((state: any, mapId: string) => {
35
+ id: string;
36
+ geoJSON: import("geojson").FeatureCollection<import("geojson").Geometry, import("geojson").GeoJsonProperties>;
37
+ }[]) & import("reselect").OutputSelectorFields<(args_0: LinkedState, args_1: string[]) => {
38
+ id: string;
39
+ geoJSON: import("geojson").FeatureCollection<import("geojson").Geometry, import("geojson").GeoJsonProperties>;
40
+ }[], {
41
+ clearCache: () => void;
42
+ }> & {
43
+ clearCache: () => void;
44
+ };
45
+ export declare const getSelectedFeature: ((state: SynchronizationGroupState, mapId: string) => {
46
+ lat: number;
47
+ lon: number;
48
+ id: string;
49
+ serviceId: string;
50
+ collectionId: string;
51
+ } | null) & import("reselect").OutputSelectorFields<(args_0: {
52
+ features: {
53
+ id: string;
54
+ geoJSON: import("geojson").FeatureCollection<import("geojson").Geometry, import("geojson").GeoJsonProperties>;
55
+ }[];
56
+ selectedFeatureId: string | undefined;
57
+ }) => {
58
+ lat: number;
59
+ lon: number;
60
+ id: string;
61
+ serviceId: string;
62
+ collectionId: string;
63
+ } | null, {
14
64
  clearCache: () => void;
15
65
  }> & {
16
66
  clearCache: () => void;
@@ -1,8 +1,26 @@
1
1
  import { PayloadAction, Draft } from '@reduxjs/toolkit';
2
- import { SynchronizationGroupState, SyncGroupAddTargetPayload, SyncGroupAddGroupPayload, SyncGroupRemoveTargetPayload, SyncGroupRemoveGroupPayload, SyncGroupSetViewStatePayload, SyncGroupLinkTargetPayload, SyncGroupRemoveSourcePayload, SyncGroupsAddSourcePayload, ChangeLinkedMap } from './types';
2
+ import { SynchronizationGroupState, SyncGroupAddTargetPayload, SyncGroupAddGroupPayload, SyncGroupRemoveTargetPayload, SyncGroupRemoveGroupPayload, SyncGroupSetViewStatePayload, SyncGroupLinkTargetPayload, SyncGroupRemoveSourcePayload, SyncGroupsAddSourcePayload, SyncGroupToggleIsTimeScrollingEnabled, UpdateLinkedMap, AddSharedData, DeleteSharedData, SetLinkedMap } from './types';
3
3
  export declare const initialState: SynchronizationGroupState;
4
4
  export declare const slice: import("@reduxjs/toolkit").Slice<SynchronizationGroupState, {
5
- changeLinkedMap: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<ChangeLinkedMap>) => void;
5
+ /** Sets the links map.
6
+ * This is used to override the links when changing workspaces.
7
+ * @param draft sync state
8
+ * @param {Record<string, string[]>} action.newLinks the new links object
9
+ */
10
+ setLinkedMap: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SetLinkedMap>) => void;
11
+ /** Updates the links map.
12
+ * This is used to update the links when operating the link menu.
13
+ * @param draft sync state
14
+ * @param {string} action.panelId id of the panel updating it's links
15
+ * @param {string[]} action.mapIds the new linked maps
16
+ */
17
+ updateLinkedMap: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<UpdateLinkedMap>) => void;
18
+ addSharedData: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<AddSharedData>) => void;
19
+ deleteSharedData: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<DeleteSharedData>) => void;
20
+ setFeatureSelected: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<{
21
+ mapId: string;
22
+ featureId: string;
23
+ }>) => void;
6
24
  syncGroupAddSource: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupsAddSourcePayload>) => void;
7
25
  syncGroupRemoveSource: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupRemoveSourcePayload>) => void;
8
26
  syncGroupAddTarget: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupAddTargetPayload>) => void;
@@ -12,10 +30,29 @@ export declare const slice: import("@reduxjs/toolkit").Slice<SynchronizationGrou
12
30
  syncGroupRemoveGroup: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupRemoveGroupPayload>) => void;
13
31
  syncGroupClear: () => SynchronizationGroupState;
14
32
  syncGroupSetViewState: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupSetViewStatePayload>) => void;
33
+ syncGroupToggleIsTimeScrollingEnabled: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupToggleIsTimeScrollingEnabled>) => void;
15
34
  }, "synchronizationGroupsReducer">;
16
35
  export declare const syncGroupAddGroup: import("@reduxjs/toolkit").ActionCreatorWithPayload<SyncGroupAddGroupPayload, "synchronizationGroupsReducer/syncGroupAddGroup">, syncGroupAddSource: import("@reduxjs/toolkit").ActionCreatorWithPayload<SyncGroupsAddSourcePayload, "synchronizationGroupsReducer/syncGroupAddSource">, syncGroupAddTarget: import("@reduxjs/toolkit").ActionCreatorWithPayload<SyncGroupAddTargetPayload, "synchronizationGroupsReducer/syncGroupAddTarget">, syncGroupClear: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"synchronizationGroupsReducer/syncGroupClear">, syncGroupLinkTarget: import("@reduxjs/toolkit").ActionCreatorWithPayload<SyncGroupLinkTargetPayload, "synchronizationGroupsReducer/syncGroupLinkTarget">, syncGroupRemoveGroup: import("@reduxjs/toolkit").ActionCreatorWithPayload<SyncGroupRemoveGroupPayload, "synchronizationGroupsReducer/syncGroupRemoveGroup">, syncGroupRemoveSource: import("@reduxjs/toolkit").ActionCreatorWithPayload<SyncGroupRemoveSourcePayload, "synchronizationGroupsReducer/syncGroupRemoveSource">, syncGroupRemoveTarget: import("@reduxjs/toolkit").ActionCreatorWithPayload<SyncGroupRemoveTargetPayload, "synchronizationGroupsReducer/syncGroupRemoveTarget">, syncGroupSetViewState: import("@reduxjs/toolkit").ActionCreatorWithPayload<SyncGroupSetViewStatePayload, "synchronizationGroupsReducer/syncGroupSetViewState">;
17
36
  export declare const actions: import("@reduxjs/toolkit").CaseReducerActions<{
18
- changeLinkedMap: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<ChangeLinkedMap>) => void;
37
+ /** Sets the links map.
38
+ * This is used to override the links when changing workspaces.
39
+ * @param draft sync state
40
+ * @param {Record<string, string[]>} action.newLinks the new links object
41
+ */
42
+ setLinkedMap: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SetLinkedMap>) => void;
43
+ /** Updates the links map.
44
+ * This is used to update the links when operating the link menu.
45
+ * @param draft sync state
46
+ * @param {string} action.panelId id of the panel updating it's links
47
+ * @param {string[]} action.mapIds the new linked maps
48
+ */
49
+ updateLinkedMap: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<UpdateLinkedMap>) => void;
50
+ addSharedData: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<AddSharedData>) => void;
51
+ deleteSharedData: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<DeleteSharedData>) => void;
52
+ setFeatureSelected: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<{
53
+ mapId: string;
54
+ featureId: string;
55
+ }>) => void;
19
56
  syncGroupAddSource: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupsAddSourcePayload>) => void;
20
57
  syncGroupRemoveSource: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupRemoveSourcePayload>) => void;
21
58
  syncGroupAddTarget: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupAddTargetPayload>) => void;
@@ -25,4 +62,5 @@ export declare const actions: import("@reduxjs/toolkit").CaseReducerActions<{
25
62
  syncGroupRemoveGroup: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupRemoveGroupPayload>) => void;
26
63
  syncGroupClear: () => SynchronizationGroupState;
27
64
  syncGroupSetViewState: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupSetViewStatePayload>) => void;
65
+ syncGroupToggleIsTimeScrollingEnabled: (draft: Draft<SynchronizationGroupState>, action: PayloadAction<SyncGroupToggleIsTimeScrollingEnabled>) => void;
28
66
  }, "synchronizationGroupsReducer">, reducer: import("redux").Reducer<SynchronizationGroupState>;
@@ -52,6 +52,11 @@ export declare const syncGroupGetViewState: ((state: CoreAppStore) => import("./
52
52
  }> & {
53
53
  clearCache: () => void;
54
54
  };
55
+ export declare const isTimeScrollingEnabled: ((state: CoreAppStore) => boolean) & import("reselect").OutputSelectorFields<(args_0: SynchronizationGroupState) => boolean, {
56
+ clearCache: () => void;
57
+ }> & {
58
+ clearCache: () => void;
59
+ };
55
60
  export declare const getSyncedMapIdsForTimeslider: ((state: CoreAppStore) => string[]) & import("reselect").OutputSelectorFields<(args_0: SynchronizationGroupState) => string[], {
56
61
  clearCache: () => void;
57
62
  }> & {
@@ -29,6 +29,17 @@ export interface SynchronizationGroup {
29
29
  allIds: string[];
30
30
  };
31
31
  }
32
+ export interface PotentialData {
33
+ features?: {
34
+ id: string;
35
+ geoJSON: GeoJSON.FeatureCollection;
36
+ }[];
37
+ selectedFeatureId?: string;
38
+ }
39
+ export interface LinkedState {
40
+ links: Record<string, string[]>;
41
+ sharedData: Record<string, PotentialData>;
42
+ }
32
43
  type Origin = 'user' | 'system';
33
44
  export type SynchronizationSourcePayLoadByType = Record<string, GenericActionPayload>;
34
45
  export interface SynchronizationSource {
@@ -47,7 +58,8 @@ export interface SynchronizationGroupState {
47
58
  sources: SynchronizationSources;
48
59
  groups: SynchronizationGroups;
49
60
  viewState: SyncGroupViewState;
50
- linkedState: Record<string, string[]>;
61
+ linkedState: LinkedState;
62
+ isTimeScrollingEnabled: boolean;
51
63
  }
52
64
  export interface SynchronizationGroupModuleState {
53
65
  syncronizationGroupStore?: SynchronizationGroupState;
@@ -90,6 +102,10 @@ export interface SyncGroupRemoveGroupPayload {
90
102
  export interface SyncGroupSetViewStatePayload {
91
103
  viewState: SyncGroupViewState;
92
104
  }
105
+ export interface SyncGroupToggleIsTimeScrollingEnabled {
106
+ isTimeScrollingEnabled: boolean;
107
+ origin?: Origin;
108
+ }
93
109
  export declare const SyncGroupTypeList: string[];
94
110
  export declare enum SyncGroupActionOrigin {
95
111
  delete = "ORIGIN_GENERIC_SYNCHRONIZATIONGROUP_UTILS_DELETEACTION",
@@ -98,8 +114,18 @@ export declare enum SyncGroupActionOrigin {
98
114
  add = "ORIGIN_GENERIC_SYNCHRONIZATIONGROUP_UTILS_ADDACTION",
99
115
  autoLayerId = "ORIGIN_GENERIC_SYNCHRONIZATIONGROUP_UTILS_AUTOLAYERIDACTION"
100
116
  }
101
- export interface ChangeLinkedMap {
117
+ export interface SetLinkedMap {
118
+ newLinks: Record<string, string[]>;
119
+ }
120
+ export interface UpdateLinkedMap {
102
121
  panelId: string;
103
122
  mapIds: string[];
104
123
  }
124
+ export interface AddSharedData {
125
+ panelId: string;
126
+ data: PotentialData;
127
+ }
128
+ export interface DeleteSharedData {
129
+ panelId: string;
130
+ }
105
131
  export {};
@@ -52,6 +52,7 @@ export interface WebMap {
52
52
  displayMapPin?: boolean;
53
53
  legendId?: string;
54
54
  dockedLayerManagerSize?: DockedLayerManagerSize;
55
+ isTimeScrollingEnabled?: boolean;
55
56
  selectedMapIds?: string[];
56
57
  }
57
58
  export type DockedLayerManagerSize = 'sizeSmall' | 'sizeMedium' | 'sizeLarge' | '';