@opengeoweb/workspace 21.0.0 → 21.1.0-nightly-20261106

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 { createSlice, createEntityAdapter, createSelector, createListenerMiddlew
2
2
  import { handleResponse, getHeaders, getQueryClient, QueryClientProviderWrapper, useAuthenticationContext as useAuthenticationContext$1, GEOWEB_ROLE_PRESETS_ADMIN as GEOWEB_ROLE_PRESETS_ADMIN$1 } from '@opengeoweb/api';
3
3
  import { soundingsActions, SoundingsTypes, soundingsSelectors, soundingsReducer } from '@opengeoweb/soundings';
4
4
  import { syncGroupsTypes, FEATURE_GROUP_PREFIX, syncGroupsActions, layerActions, mapActions, uiActions, genericActions, layerTypes, mapEnums, selectorMemoizationOptions, genericSelectors, mapSelectors, syncGroupsSelectors, routerActions, createViewObjectForNewMap, syncConstants, mapListener, serviceListener, layersListener, syncGroupsListener, openlayersListener, uiReducer, loadingIndicatorReducer, syncGroupsReducer, layerReducer, serviceReducer, mapReducer, uiTypes, isWarningsTimelineLinkSourceAllowed, getTakenWarningTimelineIds, linkComponentTypesConstants, constructSyncSourceDisplayName, uiSelectors, loadingIndicatorSelectors, pickList, pickRecord, pickEntities } from '@opengeoweb/store';
5
- import { timeSeriesActions, TimeSeriesTypes, timeSeriesSelectors, timeSeriesReducer } from '@opengeoweb/time-series';
5
+ import { timeseriesTranslations, TIME_SERIES_NAMESPACE, timeSeriesActions, TimeSeriesTypes, timeSeriesSelectors, timeSeriesReducer, getUserAddedEDRServices, normalizeEdrServiceUrl, resolveEdrCollectionTarget, EdrCollectionTargetError } from '@opengeoweb/time-series';
6
6
  import { chunk, cloneDeep, isEqual, isString } from 'lodash';
7
7
  import { getLeaves, createBalancedTreeFromLeaves, MosaicContext, getAndAssertNodeAtPathExists, MosaicWindow, Mosaic } from 'react-mosaic-component';
8
8
  import { queryOptions, useQueryClient, useQuery, useMutation, useIsMutating } from '@tanstack/react-query';
@@ -13,6 +13,7 @@ import { snackbarTypes, snackbarActions, snackbarListener, snackbarReducer, Snac
13
13
  import i18n from 'i18next';
14
14
  import { useTranslation, I18nextProvider } from 'react-i18next';
15
15
  import { coreTranslations, CORE_NAMESPACE, LoadingIndicatorProgressBar } from '@opengeoweb/core';
16
+ import { dataExplorerTranslations, DATA_EXPLORER_NAMESPACE, DataExplorerConnect } from '@opengeoweb/data-explorer';
16
17
  import { formFieldsTranslations, FORM_FIELDS_NAMESPACE, ReactHookFormHiddenInput, ReactHookFormTextField, ReactHookFormProvider, defaultFormOptions } from '@opengeoweb/form-fields';
17
18
  import { webmapReactTranslations, WEBMAP_REACT_NAMESPACE } from '@opengeoweb/webmap-react';
18
19
  import { isAxiosError as isAxiosError$1 } from 'axios';
@@ -21,10 +22,11 @@ import { Provider, useDispatch, useSelector, useStore, shallowEqual } from 'reac
21
22
  import { AuthenticationProvider, useAuthenticationContext, GEOWEB_ROLE_PRESETS_ADMIN } from '@opengeoweb/authentication';
22
23
  import { ThemeWrapper, lightTheme, Link, LinkOff, SplitHorizontal, SplitVertical, SplitHorizontalWithContent, SplitVerticalWithContent, Expand, UnExpand, ChevronDown, Close, ChevronUp, LockLocked, Star, StarOutline, Info, WorkspacePresetsSystemIcon, WorkspacePresetsPluginIcon, SharedPresetsMyUser, SharedPresetsOtherUsers, WorkspacePresetsMyIcon, BackdropStyle, Options, CloudLoading, CloudIdle, WebAssetOff, Exclamation } from '@opengeoweb/theme';
23
24
  import React, { useEffect, useCallback } from 'react';
24
- import { Menu, Typography, List, ListItem, ListItemButton, ListItemIcon, Checkbox, ListItemText, MenuItem, useTheme, Box, LinearProgress, Button, Stack, FormControlLabel, Chip, Popper, ClickAwayListener, Paper, IconButton, Collapse, Divider, Grid, TextField, ListSubheader, Tabs } from '@mui/material';
25
+ import { Menu, Typography, List, ListItem, ListItemButton, ListItemIcon, Checkbox, ListItemText, MenuItem, useTheme, Box, LinearProgress, Button, Stack, FormControlLabel, Chip, Popper, ClickAwayListener, Paper, IconButton, Collapse, Divider, Grid, TextField, ListSubheader, Tabs, Dialog, DialogTitle, DialogActions } from '@mui/material';
25
26
  import 'react-mosaic-component/react-mosaic-component.css';
26
27
  import { useFormContext, useWatch, useForm, FormProvider } from 'react-hook-form';
27
28
  import { List as List$1 } from 'react-window';
29
+ import { v4 } from 'uuid';
28
30
  import { http, HttpResponse, delay } from 'msw';
29
31
 
30
32
  var en = {
@@ -666,6 +668,36 @@ function _asyncToGenerator(n) {
666
668
  });
667
669
  };
668
670
  }
671
+ function _construct(t, e, r) {
672
+ if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
673
+ var o = [null];
674
+ o.push.apply(o, e);
675
+ var p = new (t.bind.apply(t, o))();
676
+ return r && _setPrototypeOf(p, r.prototype), p;
677
+ }
678
+ function _getPrototypeOf(t) {
679
+ return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
680
+ return t.__proto__ || Object.getPrototypeOf(t);
681
+ }, _getPrototypeOf(t);
682
+ }
683
+ function _inheritsLoose(t, o) {
684
+ t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);
685
+ }
686
+ function _isNativeFunction(t) {
687
+ try {
688
+ return -1 !== Function.toString.call(t).indexOf("[native code]");
689
+ } catch (n) {
690
+ return "function" == typeof t;
691
+ }
692
+ }
693
+ function _isNativeReflectConstruct() {
694
+ try {
695
+ var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
696
+ } catch (t) {}
697
+ return (_isNativeReflectConstruct = function () {
698
+ return !!t;
699
+ })();
700
+ }
669
701
  function _objectDestructuringEmpty(t) {
670
702
  if (null == t) throw new TypeError("Cannot destructure " + t);
671
703
  }
@@ -786,6 +818,33 @@ function _regeneratorDefine(e, r, n, t) {
786
818
  }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
787
819
  }, _regeneratorDefine(e, r, n, t);
788
820
  }
821
+ function _setPrototypeOf(t, e) {
822
+ return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
823
+ return t.__proto__ = e, t;
824
+ }, _setPrototypeOf(t, e);
825
+ }
826
+ function _wrapNativeSuper(t) {
827
+ var r = "function" == typeof Map ? new Map() : void 0;
828
+ return _wrapNativeSuper = function (t) {
829
+ if (null === t || !_isNativeFunction(t)) return t;
830
+ if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
831
+ if (void 0 !== r) {
832
+ if (r.has(t)) return r.get(t);
833
+ r.set(t, Wrapper);
834
+ }
835
+ function Wrapper() {
836
+ return _construct(t, arguments, _getPrototypeOf(this).constructor);
837
+ }
838
+ return Wrapper.prototype = Object.create(t.prototype, {
839
+ constructor: {
840
+ value: Wrapper,
841
+ enumerable: false,
842
+ writable: true,
843
+ configurable: true
844
+ }
845
+ }), _setPrototypeOf(Wrapper, t);
846
+ }, _wrapNativeSuper(t);
847
+ }
789
848
 
790
849
  /* *
791
850
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1686,6 +1745,12 @@ var initWorkspaceTestI18n = function initWorkspaceTestI18n() {
1686
1745
  }, {
1687
1746
  ns: WARN_NAMESPACE,
1688
1747
  translations: warningsTranslations
1748
+ }, {
1749
+ ns: TIME_SERIES_NAMESPACE,
1750
+ translations: timeseriesTranslations
1751
+ }, {
1752
+ ns: DATA_EXPLORER_NAMESPACE,
1753
+ translations: dataExplorerTranslations
1689
1754
  }]);
1690
1755
  };
1691
1756
  var ns = [WORKSPACE_NAMESPACE, SHARED_NAMESPACE];
@@ -12266,6 +12331,351 @@ var WorkspaceDetail = function WorkspaceDetail(_ref) {
12266
12331
  });
12267
12332
  };
12268
12333
 
12334
+ /** Error whose message is already translated and can be shown to the user as is. */
12335
+ var TranslatedError = /*#__PURE__*/function (_Error) {
12336
+ function TranslatedError() {
12337
+ return _Error.apply(this, arguments) || this;
12338
+ }
12339
+ _inheritsLoose(TranslatedError, _Error);
12340
+ return TranslatedError;
12341
+ }(/*#__PURE__*/_wrapNativeSuper(Error));
12342
+ /**
12343
+ * Coordinates the Data Explorer with the workspace and Timeseries panels.
12344
+ * Data Explorer itself does not depend on workspace or Timeseries.
12345
+ */
12346
+ var DataExplorerTimeseriesConnect = function DataExplorerTimeseriesConnect(_ref) {
12347
+ var productConfigKey = _ref.productConfigKey;
12348
+ var store = useStore();
12349
+ var _useTranslation = useTranslation([DATA_EXPLORER_NAMESPACE, SHARED_NAMESPACE]),
12350
+ t = _useTranslation.t;
12351
+ var _React$useState = React.useState(),
12352
+ choice = _React$useState[0],
12353
+ setChoice = _React$useState[1];
12354
+ var resolveChoice = React.useRef(undefined);
12355
+ var mounted = React.useRef(true);
12356
+ React.useEffect(function () {
12357
+ mounted.current = true;
12358
+ return function () {
12359
+ mounted.current = false;
12360
+ resolveChoice.current == null || resolveChoice.current(undefined);
12361
+ };
12362
+ }, []);
12363
+ var choose = React.useCallback(/*#__PURE__*/function () {
12364
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(nextChoice) {
12365
+ return _regenerator().w(function (_context) {
12366
+ while (1) switch (_context.n) {
12367
+ case 0:
12368
+ setChoice(nextChoice);
12369
+ return _context.a(2, new Promise(function (resolve) {
12370
+ resolveChoice.current = resolve;
12371
+ }));
12372
+ }
12373
+ }, _callee);
12374
+ }));
12375
+ return function (_x) {
12376
+ return _ref2.apply(this, arguments);
12377
+ };
12378
+ }(), []);
12379
+ var finishChoice = function finishChoice(id) {
12380
+ setChoice(undefined);
12381
+ resolveChoice.current == null || resolveChoice.current(id);
12382
+ resolveChoice.current = undefined;
12383
+ };
12384
+ var addTimeseriesToWorkspace = React.useCallback(/*#__PURE__*/function () {
12385
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(_ref3) {
12386
+ var _store$getState$works, _state$workspace, _state$workspace2, _state$workspace3, _state$workspace4, _getViewById3, _timeSeriesSelectors$2;
12387
+ var title, collectionLinks, targetMapId, workspaceId, collectionUrl, target, state, panels, linkedPanels, candidates, panelId, existingService, service, plotId, isNewPanel, plotPreset, mosaicNode, _t;
12388
+ return _regenerator().w(function (_context2) {
12389
+ while (1) switch (_context2.n) {
12390
+ case 0:
12391
+ title = _ref3.title, collectionLinks = _ref3.collectionLinks, targetMapId = _ref3.targetMapId;
12392
+ workspaceId = (_store$getState$works = store.getState().workspace) == null ? void 0 : _store$getState$works.id;
12393
+ if (!(collectionLinks.length === 1)) {
12394
+ _context2.n = 1;
12395
+ break;
12396
+ }
12397
+ _t = collectionLinks[0].href;
12398
+ _context2.n = 3;
12399
+ break;
12400
+ case 1:
12401
+ _context2.n = 2;
12402
+ return choose({
12403
+ title: t('dataexplorer-select-data-link'),
12404
+ options: collectionLinks.map(function (link) {
12405
+ return {
12406
+ id: link.href,
12407
+ title: link.title || link.href
12408
+ };
12409
+ })
12410
+ });
12411
+ case 2:
12412
+ _t = _context2.v;
12413
+ case 3:
12414
+ collectionUrl = _t;
12415
+ if (!(!collectionUrl || !mounted.current)) {
12416
+ _context2.n = 4;
12417
+ break;
12418
+ }
12419
+ return _context2.a(2);
12420
+ case 4:
12421
+ _context2.n = 5;
12422
+ return resolveEdrCollectionTarget(collectionUrl);
12423
+ case 5:
12424
+ target = _context2.v;
12425
+ if (mounted.current) {
12426
+ _context2.n = 6;
12427
+ break;
12428
+ }
12429
+ return _context2.a(2);
12430
+ case 6:
12431
+ state = store.getState();
12432
+ if (!(((_state$workspace = state.workspace) == null ? void 0 : _state$workspace.id) !== workspaceId || (_state$workspace2 = state.workspace) != null && _state$workspace2.isLoading)) {
12433
+ _context2.n = 7;
12434
+ break;
12435
+ }
12436
+ throw new TranslatedError(t('dataexplorer-timeseries-error-workspace-changed'));
12437
+ case 7:
12438
+ panels = getViewIds(state).filter(function (id) {
12439
+ var _getViewById;
12440
+ return ((_getViewById = getViewById(state, id)) == null ? void 0 : _getViewById.componentType) === 'TimeSeries';
12441
+ });
12442
+ linkedPanels = targetMapId ? panels.filter(function (id) {
12443
+ var linkedMaps = genericSelectors.getLinkedTargetIds(state, id);
12444
+ return linkedMaps.length > 0 ? linkedMaps.includes(targetMapId) : timeSeriesSelectors.getMapId(state, id) === targetMapId;
12445
+ }) : [];
12446
+ candidates = linkedPanels.length > 0 ? linkedPanels : panels;
12447
+ panelId = candidates.length === 1 ? candidates[0] : undefined;
12448
+ if (!(candidates.length > 1)) {
12449
+ _context2.n = 9;
12450
+ break;
12451
+ }
12452
+ _context2.n = 8;
12453
+ return choose({
12454
+ title: t('dataexplorer-select-timeseries-panel'),
12455
+ options: candidates.map(function (id, index) {
12456
+ var _getViewById2, _timeSeriesSelectors$;
12457
+ return {
12458
+ id: id,
12459
+ title: ((_getViewById2 = getViewById(state, id)) == null ? void 0 : _getViewById2.title) || t('dataexplorer-timeseries-panel', {
12460
+ number: index + 1
12461
+ }),
12462
+ description: (_timeSeriesSelectors$ = timeSeriesSelectors.getPlotState(state, id)) == null ? void 0 : _timeSeriesSelectors$.plots.map(function (plot) {
12463
+ return plot.title;
12464
+ }).join(', ')
12465
+ };
12466
+ })
12467
+ });
12468
+ case 8:
12469
+ panelId = _context2.v;
12470
+ if (panelId) {
12471
+ _context2.n = 9;
12472
+ break;
12473
+ }
12474
+ return _context2.a(2);
12475
+ case 9:
12476
+ state = store.getState();
12477
+ if (mounted.current) {
12478
+ _context2.n = 10;
12479
+ break;
12480
+ }
12481
+ return _context2.a(2);
12482
+ case 10:
12483
+ if (!(((_state$workspace3 = state.workspace) == null ? void 0 : _state$workspace3.id) !== workspaceId || (_state$workspace4 = state.workspace) != null && _state$workspace4.isLoading || panelId && ((_getViewById3 = getViewById(state, panelId)) == null ? void 0 : _getViewById3.componentType) !== 'TimeSeries')) {
12484
+ _context2.n = 11;
12485
+ break;
12486
+ }
12487
+ throw new TranslatedError(t('dataexplorer-timeseries-error-workspace-changed'));
12488
+ case 11:
12489
+ // Saved services may not have loaded yet when creating the first panel.
12490
+ // Hydrate them before service actions persist the current service list.
12491
+ store.dispatch(timeSeriesActions.loadUserAddedTimeSeriesServices(getUserAddedEDRServices()));
12492
+ state = store.getState();
12493
+ existingService = (_timeSeriesSelectors$2 = timeSeriesSelectors.getServices(state)) == null ? void 0 : _timeSeriesSelectors$2.find(function (service) {
12494
+ return service.type === 'EDR' && normalizeEdrServiceUrl(service.url) === normalizeEdrServiceUrl(target.serviceUrl);
12495
+ });
12496
+ service = existingService != null ? existingService : {
12497
+ id: v4(),
12498
+ url: target.serviceUrl,
12499
+ type: 'EDR',
12500
+ name: target.serviceInformation.title || new URL(target.serviceUrl).hostname,
12501
+ description: target.serviceInformation.description || ''
12502
+ };
12503
+ plotId = v4();
12504
+ isNewPanel = !panelId;
12505
+ panelId != null ? panelId : panelId = v4();
12506
+ if (!(!isNewPanel && !timeSeriesSelectors.getPlotState(state, panelId))) {
12507
+ _context2.n = 12;
12508
+ break;
12509
+ }
12510
+ throw new TranslatedError(t('dataexplorer-timeseries-error-panel-loading'));
12511
+ case 12:
12512
+ if (!existingService) {
12513
+ store.dispatch(timeSeriesActions.upsertService(Object.assign({}, service, {
12514
+ panelId: panelId,
12515
+ isUpdate: false
12516
+ })));
12517
+ store.dispatch(snackbarActions.openSnackbar({
12518
+ type: snackbarTypes.SnackbarMessageType.VERBATIM_MESSAGE,
12519
+ message: t('dataexplorer-timeseries-service-added', {
12520
+ service: service.name,
12521
+ host: new URL(service.url).host
12522
+ })
12523
+ }));
12524
+ }
12525
+ if (isNewPanel) {
12526
+ plotPreset = {
12527
+ mapId: targetMapId || '',
12528
+ plots: [{
12529
+ plotId: plotId,
12530
+ title: title
12531
+ }],
12532
+ parameters: []
12533
+ };
12534
+ store.dispatch(workspaceActions.addWorkspaceView({
12535
+ id: panelId,
12536
+ componentType: 'TimeSeries',
12537
+ initialProps: {
12538
+ plotPreset: plotPreset,
12539
+ services: [],
12540
+ syncGroupsIds: []
12541
+ }
12542
+ }));
12543
+ store.dispatch(viewPresetActions.setViewPresetInline({
12544
+ panelId: panelId,
12545
+ isInline: true
12546
+ }));
12547
+ mosaicNode = getMosaicNode(store.getState());
12548
+ store.dispatch(workspaceActions.updateWorkspaceViews({
12549
+ mosaicNode: mosaicNode ? {
12550
+ direction: 'row',
12551
+ first: mosaicNode,
12552
+ second: panelId
12553
+ } : panelId
12554
+ }));
12555
+ // Use the same preset at mount time, so registration preserves this plot.
12556
+ store.dispatch(timeSeriesActions.registerTimeSeriesPreset({
12557
+ panelId: panelId,
12558
+ plotPreset: plotPreset
12559
+ }));
12560
+ if (targetMapId) {
12561
+ store.dispatch(syncGroupsActions.updateLinkedMap({
12562
+ panelId: panelId,
12563
+ mapIds: [targetMapId]
12564
+ }));
12565
+ }
12566
+ } else {
12567
+ store.dispatch(timeSeriesActions.addPlot({
12568
+ panelId: panelId,
12569
+ plotId: plotId,
12570
+ title: title,
12571
+ origin: 'dataExplorer'
12572
+ }));
12573
+ }
12574
+ store.dispatch(viewPresetActions.setViewPresetHasChanges({
12575
+ panelId: panelId,
12576
+ hasChanges: true
12577
+ }));
12578
+ store.dispatch(workspaceActions.markWorkspaceChanged());
12579
+ store.dispatch(timeSeriesActions.openCollectionSelection({
12580
+ panelId: panelId,
12581
+ plotId: plotId,
12582
+ serviceId: service.id,
12583
+ collectionId: target.collection.id
12584
+ }));
12585
+ store.dispatch(uiActions.setActiveWindowId({
12586
+ activeWindowId: panelId
12587
+ }));
12588
+ [uiTypes.DialogTypes.TimeSeriesManager, uiTypes.DialogTypes.TimeSeriesSelect].forEach(function (type) {
12589
+ return store.dispatch(uiActions.setToggleOpenDialog({
12590
+ type: type,
12591
+ setOpen: true,
12592
+ sourcePanelId: panelId
12593
+ }));
12594
+ });
12595
+ case 13:
12596
+ return _context2.a(2);
12597
+ }
12598
+ }, _callee2);
12599
+ }));
12600
+ return function (_x2) {
12601
+ return _ref4.apply(this, arguments);
12602
+ };
12603
+ }(), [choose, store, t]);
12604
+ var addTimeseries = React.useCallback(/*#__PURE__*/function () {
12605
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(request) {
12606
+ var _t2;
12607
+ return _regenerator().w(function (_context3) {
12608
+ while (1) switch (_context3.p = _context3.n) {
12609
+ case 0:
12610
+ _context3.p = 0;
12611
+ _context3.n = 1;
12612
+ return addTimeseriesToWorkspace(request);
12613
+ case 1:
12614
+ _context3.n = 5;
12615
+ break;
12616
+ case 2:
12617
+ _context3.p = 2;
12618
+ _t2 = _context3.v;
12619
+ if (!(_t2 instanceof TranslatedError)) {
12620
+ _context3.n = 3;
12621
+ break;
12622
+ }
12623
+ throw _t2;
12624
+ case 3:
12625
+ if (!(_t2 instanceof EdrCollectionTargetError)) {
12626
+ _context3.n = 4;
12627
+ break;
12628
+ }
12629
+ throw new TranslatedError(t("dataexplorer-timeseries-error-" + _t2.code));
12630
+ case 4:
12631
+ console.error('Unable to add dataset as Timeseries: ', _t2);
12632
+ throw new TranslatedError(t('dataexplorer-timeseries-error-generic'));
12633
+ case 5:
12634
+ return _context3.a(2);
12635
+ }
12636
+ }, _callee3, null, [[0, 2]]);
12637
+ }));
12638
+ return function (_x3) {
12639
+ return _ref5.apply(this, arguments);
12640
+ };
12641
+ }(), [addTimeseriesToWorkspace, t]);
12642
+ return jsxs(Fragment, {
12643
+ children: [jsx(DataExplorerConnect, {
12644
+ onAddTimeseries: addTimeseries,
12645
+ productConfigKey: productConfigKey
12646
+ }), jsxs(Dialog, {
12647
+ onClose: function onClose() {
12648
+ return finishChoice();
12649
+ },
12650
+ open: !!choice,
12651
+ children: [jsx(DialogTitle, {
12652
+ children: choice == null ? void 0 : choice.title
12653
+ }), jsx(List, {
12654
+ children: choice == null ? void 0 : choice.options.map(function (option) {
12655
+ return jsx(ListItemButton, {
12656
+ onClick: function onClick() {
12657
+ return finishChoice(option.id);
12658
+ },
12659
+ children: jsx(ListItemText, {
12660
+ primary: option.title,
12661
+ secondary: option.description
12662
+ })
12663
+ }, option.id);
12664
+ })
12665
+ }), jsx(DialogActions, {
12666
+ children: jsx(Button, {
12667
+ onClick: function onClick() {
12668
+ return finishChoice();
12669
+ },
12670
+ children: t('shared-confirmation-cancel', {
12671
+ ns: SHARED_NAMESPACE
12672
+ })
12673
+ })
12674
+ })]
12675
+ })]
12676
+ });
12677
+ };
12678
+
12269
12679
  /* *
12270
12680
  * Licensed under the Apache License, Version 2.0 (the "License");
12271
12681
  * you may not use this file except in compliance with the License.
@@ -13906,4 +14316,4 @@ var workspaceEndpoints = [].concat(createUserPreferencesEndpoints(), [http.get(/
13906
14316
  }, _callee6);
13907
14317
  })))]);
13908
14318
 
13909
- export { ALL_COMPONENT_TYPES, AVIATION_COMPONENT_TYPES, CAP_COMPONENT_TYPES, ComponentsLookUpWrapper, DemoWrapper, PresetAction, SUPPORTED_COMPONENT_TYPES, SUPPORTED_TIMESERIES_COMPONENT_TYPES, ViewPresetErrorComponent, ViewPresetErrorType, WARNING_LIST_COMPONENT_TYPES, WORKSPACE_NAMESPACE, WorkspaceDetail, WorkspaceErrorType, WorkspaceI18nProvider, WorkspacePresetAction, WorkspaceStoreWrapper, WorkspaceThemeProvider, WorkspaceTopBar, WorkspaceViewConnect, WorkspaceWrapperProviderWithStore, createBalancedMosaicNode, createCustomEmptyMapWorkspace, defaultAuthConfig, defaultViewPresetsFilters, getEmptyMapWorkspace, getWorkspaceRouteUrl, selectors$1 as selectors, templatePresetsFixture, viewPresetActions, viewPresetsListener, viewPresetsReducer, workspaceActions, workspaceEndpoints, workspaceListActions, workspaceListListener, workspaceListReducer, workspaceListener, workspaceMiddlewares, workspaceReducer, workspaceReducersMap, routes as workspaceRoutes, workspaceSentryStateMap, workspaceTranslations };
14319
+ export { ALL_COMPONENT_TYPES, AVIATION_COMPONENT_TYPES, CAP_COMPONENT_TYPES, ComponentsLookUpWrapper, DataExplorerTimeseriesConnect, DemoWrapper, PresetAction, SUPPORTED_COMPONENT_TYPES, SUPPORTED_TIMESERIES_COMPONENT_TYPES, ViewPresetErrorComponent, ViewPresetErrorType, WARNING_LIST_COMPONENT_TYPES, WORKSPACE_NAMESPACE, WorkspaceDetail, WorkspaceErrorType, WorkspaceI18nProvider, WorkspacePresetAction, WorkspaceStoreWrapper, WorkspaceThemeProvider, WorkspaceTopBar, WorkspaceViewConnect, WorkspaceWrapperProviderWithStore, createBalancedMosaicNode, createCustomEmptyMapWorkspace, defaultAuthConfig, defaultViewPresetsFilters, getEmptyMapWorkspace, getWorkspaceRouteUrl, selectors$1 as selectors, templatePresetsFixture, viewPresetActions, viewPresetsListener, viewPresetsReducer, workspaceActions, workspaceEndpoints, workspaceListActions, workspaceListListener, workspaceListReducer, workspaceListener, workspaceMiddlewares, workspaceReducer, workspaceReducersMap, routes as workspaceRoutes, workspaceSentryStateMap, workspaceTranslations };
@@ -14,6 +14,7 @@ export * from './lib/components/ComponentsLookUpWrapper';
14
14
  export * from './lib/components/WorkspaceView';
15
15
  export * from './lib/components/WorkspaceTopBar';
16
16
  export * from './lib/components/WorkspaceDetail';
17
+ export { DataExplorerTimeseriesConnect } from './lib/components/DataExplorerTimeseriesConnect/DataExplorerTimeseriesConnect';
17
18
  export { WORKSPACE_NAMESPACE } from './lib/utils/i18n';
18
19
  export { workspaceTranslations };
19
20
  export { routes as workspaceRoutes, getWorkspaceRouteUrl, } from './lib/utils/routes';
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ /**
3
+ * Coordinates the Data Explorer with the workspace and Timeseries panels.
4
+ * Data Explorer itself does not depend on workspace or Timeseries.
5
+ */
6
+ export declare const DataExplorerTimeseriesConnect: React.FC<{
7
+ productConfigKey: string;
8
+ }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/workspace",
3
- "version": "21.0.0",
3
+ "version": "21.1.0-nightly-20261106",
4
4
  "description": "GeoWeb Workspace library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -21,33 +21,35 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "react-redux": "^9.2.0",
24
- "@opengeoweb/shared": "21.0.0",
25
- "@opengeoweb/store": "21.0.0",
26
- "@opengeoweb/api": "21.0.0",
24
+ "@opengeoweb/shared": "21.1.0-nightly-20261106",
25
+ "@opengeoweb/store": "21.1.0-nightly-20261106",
26
+ "@opengeoweb/api": "21.1.0-nightly-20261106",
27
27
  "react-hook-form": "^7.50.1",
28
- "@opengeoweb/theme": "21.0.0",
28
+ "@opengeoweb/theme": "21.1.0-nightly-20261106",
29
29
  "@reduxjs/toolkit": "^2.6.1",
30
- "@opengeoweb/snackbar": "21.0.0",
30
+ "@opengeoweb/snackbar": "21.1.0-nightly-20261106",
31
31
  "react-window": "^2.2.6",
32
32
  "lodash": "^4.18.1",
33
33
  "axios": "^1.20.0",
34
34
  "react-mosaic-component": "npm:react-mosaic-component-opengeoweb@^6.1.1-opengeoweb.1",
35
- "@opengeoweb/form-fields": "21.0.0",
36
- "@opengeoweb/time-series": "21.0.0",
37
- "@opengeoweb/authentication": "21.0.0",
38
- "@opengeoweb/plugins": "21.0.0",
39
- "@opengeoweb/core": "21.0.0",
40
- "@opengeoweb/taf": "21.0.0",
41
- "@opengeoweb/sigmet-airmet": "21.0.0",
42
- "@opengeoweb/warnings": "21.0.0",
43
- "@opengeoweb/space-weather": "21.0.0",
35
+ "@opengeoweb/form-fields": "21.1.0-nightly-20261106",
36
+ "@opengeoweb/time-series": "21.1.0-nightly-20261106",
37
+ "@opengeoweb/data-explorer": "21.1.0-nightly-20261106",
38
+ "uuid": "^11.1.1",
39
+ "@opengeoweb/authentication": "21.1.0-nightly-20261106",
40
+ "@opengeoweb/plugins": "21.1.0-nightly-20261106",
41
+ "@opengeoweb/core": "21.1.0-nightly-20261106",
42
+ "@opengeoweb/taf": "21.1.0-nightly-20261106",
43
+ "@opengeoweb/sigmet-airmet": "21.1.0-nightly-20261106",
44
+ "@opengeoweb/warnings": "21.1.0-nightly-20261106",
45
+ "@opengeoweb/space-weather": "21.1.0-nightly-20261106",
44
46
  "i18next": "^25.0.1",
45
47
  "react-i18next": "^15.1.1",
46
48
  "@mui/material": "^9.0.1",
47
- "@opengeoweb/webmap-react": "21.0.0",
49
+ "@opengeoweb/webmap-react": "21.1.0-nightly-20261106",
48
50
  "@tanstack/react-query": "^5.85.5",
49
- "@opengeoweb/soundings": "21.0.0",
50
- "@opengeoweb/knmi-components": "21.0.0",
51
+ "@opengeoweb/soundings": "21.1.0-nightly-20261106",
52
+ "@opengeoweb/knmi-components": "21.1.0-nightly-20261106",
51
53
  "@mui/system": "^9.0.1"
52
54
  },
53
55
  "peerDependencies": {
@@ -56,7 +58,7 @@
56
58
  "@emotion/styled": "*"
57
59
  },
58
60
  "devDependencies": {
59
- "eslint-plugin-storybook": "10.3.3",
61
+ "eslint-plugin-storybook": "^10.3.3",
60
62
  "msw": "^2.7.3"
61
63
  },
62
64
  "files": [