@opengeoweb/workspace 21.1.0 → 21.2.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/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 = {
@@ -36,7 +38,8 @@ var en = {
36
38
  "workspace-new": "New workspace",
37
39
  "workspace-loading": "Loading",
38
40
  "workspace-options": "Options",
39
- "workspace-results": "results",
41
+ "workspace-results_one": "{{count}} result",
42
+ "workspace-results_other": "{{count}} results",
40
43
  "workspace-delete": "Delete",
41
44
  "workspce-clear": "Clear",
42
45
  "workspace-save": "Save",
@@ -188,40 +191,47 @@ var fi = {
188
191
  "workspace-add-favourite": "Lisää {{title}} suosikkeihin",
189
192
  "workspace-remove-favourite": "Poista {{title}} suosikeista",
190
193
  "workspace-favourites-error": "Suosikkeja ei voitu ladata tai tallentaa. Yritä uudelleen.",
191
- "workspace-menu": "Workspace menu",
192
- "workspace-new": "Uusi workspace",
194
+ "workspace-menu": "Työtilavalikko",
195
+ "workspace-new": "Uusi työtila",
196
+ "workspace-new-soundings": "Uusi luotaustyötila",
197
+ "workspace-template-map": "Uusi map preset",
198
+ "workspace-template-timeseries": "Uusi timeseries preset",
199
+ "workspace-template-soundings": "Uusi luotauspreset",
200
+ "workspace-template-warninglist": "Uusi varoituslistapreset",
201
+ "workspace-template-timeline": "Uusi aikajanapreset",
193
202
  "workspace-loading": "Ladataan",
194
203
  "workspace-options": "Valinnat",
195
- "workspace-results": "tulokset",
204
+ "workspace-results_one": "{{count}} tulos",
205
+ "workspace-results_other": "{{count}} tulosta",
196
206
  "workspace-delete": "Poista",
197
207
  "workspce-clear": "Tyhjennä",
198
208
  "workspace-save": "Tallenna",
199
209
  "workspace-save-as": "Tallenna nimellä",
200
- "workspace-dialog-description": "Short description",
201
- "workspace-char-limit": "Character limitation",
202
- "workspace-edit": "Muokkaa metadata",
210
+ "workspace-dialog-description": "Lyhyt kuvaus",
211
+ "workspace-char-limit": "Merkkirajoitus",
212
+ "workspace-edit": "Muokkaa metatietoja",
203
213
  "workspace-edit-title": "Muokkaa otsikkoa",
204
- "workspace-share": "Missing-translation",
205
- "workspace-stop-share": "Missing-translation",
214
+ "workspace-share": "Jaa",
215
+ "workspace-stop-share": "Lopeta jakaminen",
206
216
  "geoweb-welcome": "Tervetuloa Geoweb-sovellukseen. Valitse jokin preset avataksesi uusia näkymiä",
207
217
  "workspace-modified-new": "muokattu",
208
218
  "workspace-modified-existing": "ei tallennettu",
209
- "workspace-dialog-delete": "Poista workspace",
219
+ "workspace-dialog-delete": "Poista työtila",
210
220
  "workspace-duplicate": "Monista",
211
221
  "workspace-cancel": "Peruuta",
212
222
  "workspace-dialog-name": "Nimi",
213
223
  "workspace-dialog-abstract": "Tiivistelmä",
214
224
  "workspace-dialog-confirm-delete-message": "Oletko varma, että haluat poistaa workspace presetin: \"{{TITLE}}\"?",
215
225
  "workspace-dialog-confirm-reset-message": "ei käännetty",
216
- "workspace-error-fetch": "Workspace listan hakeminen epäonnistui",
217
- "workspace-error-fetch-detail": "Workspacen \"{{WORKSPACE_ID}}\" hakeminen epäonnistui",
226
+ "workspace-error-fetch": "Työtilaluettelon hakeminen epäonnistui",
227
+ "workspace-error-fetch-detail": "Työtilan \"{{WORKSPACE_ID}}\" hakeminen epäonnistui",
218
228
  "workspace-retry": "Yritä uudelleen",
219
229
  "workspace-delete-tooltip": "Poista preset",
220
230
  "workspace-control-split-horizontal": "Jaa ikkuna vaakasuoraan",
221
231
  "workspace-control-split-vertical": "Jaa ikkuna pystysuoraan",
222
232
  "workspace-control-split-shift": "Pidä Shift painettuna kopioidaksesi näkymän sisällön",
223
- "workspace-control-split-horizontal-with-data": "Jaa ikkuna vaakasuunnassa kopioitaessa sisällön päälle",
224
- "workspace-control-split-vertical-with-data": "Jaa ikkuna pystysuunnassa kopioitaessa sisällön päälle",
233
+ "workspace-control-split-horizontal-with-data": "Jaa ikkuna vaakasuoraan ja kopioi näkymän sisältö",
234
+ "workspace-control-split-vertical-with-data": "Jaa ikkuna pystysuoraan ja kopioi näkymän sisältö",
225
235
  "workspace-control-expand": "Laajenna ikkuna",
226
236
  "workspace-control-unexpand": "Supista ikkuna",
227
237
  "workspace-control-show-options": "Näytä asetukset",
@@ -240,15 +250,16 @@ var fi = {
240
250
  "workspace-mappreset-error-fetch": "Map presettien hakeminen epäonnistui",
241
251
  "workspace-list-error": "Workspace presettien hakeminen epäonnistui",
242
252
  "workspace-list-success-save-all": "Workspace \"{{TITLE}}\" ja siihen sisältyvät viewpresetit tallennettu onnistuneesti",
243
- "workspace-list-success-delete": "Workspace \"{{TITLE}}\" poistettu onnistuneesti",
244
- "workspace-list-success-duplicate": "Workspace \"{{TITLE}}\" tallennettu onnistuneesti",
245
- "workspace-list-success-edit": "Workspacea \"{{TITLE}}\" muokattu onnistuneesti",
246
- "workspace-list-success-reset": "ei käännetty",
247
- "workspace-list-success-share": "ei kannetty",
248
- "workspace-list-success-save": "Workspace \"{{TITLE}}\" tallennettu onnistuneesti",
249
- "workspace-save-error": "Workspacen \"{{TITLE}}\" tallentaminen epäonnistui",
253
+ "workspace-list-success-delete": "Työtila \"{{TITLE}}\" on poistettu",
254
+ "workspace-list-success-duplicate": "Työtila \"{{TITLE}}\" on tallennettu",
255
+ "workspace-list-success-edit": "Työtilaa \"{{TITLE}}\" on muokattu",
256
+ "workspace-list-success-reset": "Työtila \"{{TITLE}}\" on palautettu alkuperäiseen tilaan",
257
+ "workspace-list-success-share": "Työtila \"{{TITLE}}\" on jaettu",
258
+ "workspace-list-success-save": "Työtila \"{{TITLE}}\" on tallennettu",
259
+ "workspace-list-success-unshare": "Työtilan \"{{TITLE}}\" jakaminen on lopetettu",
260
+ "workspace-save-error": "Työtilan \"{{TITLE}}\" tallentaminen epäonnistui",
250
261
  "workspace-error-generic": "Jotain meni mönkään. Yritä uudelleen.",
251
- "workspace-error-auth": "ei kaannetty",
262
+ "workspace-error-auth": "Tunnistautumisessa tapahtui virhe",
252
263
  "workspace-viewpreset-success-delete": "Map preset \"{{TITLE}}\" poistettu onnistuneesti",
253
264
  "workspace-viewpreset-success-save-as": "Uusi map preset \"{{TITLE}}\" tallennettu onnistuneesti",
254
265
  "workspace-viewpreset-success-edit": "Map presettiä \"{{TITLE}}\" muokattu onnistuneesti",
@@ -258,75 +269,79 @@ var fi = {
258
269
  "workspace-save-new-viewpreset": "ei käännetty",
259
270
  "workspace-save-new-viewpreset-warning-system": "ei käännetty",
260
271
  "workspace-save-new-viewpreset-warning-user": "ei käännetty",
261
- "workspace-admin-save-workspace": "ei käännetty",
262
- "workspace-admin-save-user-workspace": "ei käännetty",
272
+ "workspace-admin-save-workspace": "Tallenna järjestelmän työtila",
273
+ "workspace-admin-save-user-workspace": "Tallenna työtila",
263
274
  "workspace-admin-select-modified-viewpresets": "ei käännetty",
264
275
  "workspace-admin-save-new-viewpreset": "ei käännetty",
265
276
  "workspace-admin-save-new-viewpreset-warning": "ei käännetty",
266
277
  "workspace-admin-save-new-viewpreset-title": "ei käännetty",
267
278
  "workspace-reset": "Palauta alkuperäinen",
268
- "workspace-reset-title": "ei käännetty",
279
+ "workspace-reset-title": "Palauta alkuperäinen",
280
+ "workspace-dialog-delete-system": "Poista järjestelmän työtila",
269
281
  "workspace-dialog-confirm-delete-system": "ei käännetty",
282
+ "workspace-list-success-delete-system": "\"{{TITLE}}\" on poistettu järjestelmän työtiloista.",
270
283
  "workspace-link-location-header": "Sijainti",
271
284
  "workspace-link": "Link",
272
- "workspace-dialog-confirm-reset-view-message": "ei käännetty",
285
+ "workspace-dialog-confirm-reset-view-message": "Näkymä palautetaan alkuperäiseen tilaan ja kaikki muutokset menetetään. Haluatko varmasti jatkaa?",
273
286
  "workspace-viewpreset-success-reset": "ei käännetty",
274
287
  "workspace-viewpreset-success-share": "ei käännetty",
275
288
  "workspace-viewpreset-success-unshare": "ei käännetty",
276
289
  "workspace-loading-indicator-loading": "Ladataan",
277
290
  "workspace-loading-indicator-idle": "Ladattu",
278
- "workspace-open-tab": "Open in new tab",
279
- "workspace-info-title": "Information",
280
- "workspace-info-short-description": "Short description",
281
- "workspace-info-no-description": "No description available",
282
- "workspace-info-abstract": "Abstract",
283
- "workspace-info-no-abstract": "No abstract available",
291
+ "workspace-open-tab": "Avaa uudessa välilehdessä",
292
+ "workspace-info-title": "Tiedot",
293
+ "workspace-info-preset-title": "Otsikko:",
294
+ "workspace-info-short-description": "Lyhyt kuvaus",
295
+ "workspace-info-no-description": "Kuvausta ei ole saatavilla",
296
+ "workspace-info-abstract": "Tiivistelmä",
297
+ "workspace-info-no-abstract": "Tiivistelmää ei ole saatavilla",
284
298
  "workspace-info-selected-labels": "Selected labels ({{count}})",
285
299
  "workspace-info-no-labels": "No labels selected",
286
- "workspace-info-updated": "Date last changed",
287
- "workspace-info-author": "Author",
288
- "workspace-info-created": "Original made",
289
- "workspace-info-created-by": "Author",
290
- "workspace-info-no-date-provided": "Not provided",
291
- "workspace-info-unknown-author": "Unknown",
300
+ "workspace-info-updated": "Viimeksi muokattu",
301
+ "workspace-info-author": "Tekijä",
302
+ "workspace-info-created": "Luotu",
303
+ "workspace-info-created-by": "Tekijä",
304
+ "workspace-info-no-date-provided": "Ei ilmoitettu",
305
+ "workspace-info-unknown-author": "Tuntematon",
292
306
  "workspace-info-tooltip": "Show preset information",
293
307
  "workspace-currently": "Nykyinen",
294
- "workspace-presets-form-labels-info": "ei käännetty",
295
- "workspace-presets-form-labels-clearAll": "ei käännetty ({{count}})",
296
- "workspace-presets-form-labels-collapseAll": "ei käännetty",
297
- "workspace-presets-form-labels-expandAll": "ei käännetty",
308
+ "workspace-presets-form-labels-info": "Näkymän tyyppiä ei tyhjennetä.",
309
+ "workspace-presets-form-labels-clearAll": "Tyhjennä kaikki suodattimet ({{count}})",
310
+ "workspace-presets-form-labels-collapseAll": "Kutista",
311
+ "workspace-presets-form-labels-expandAll": "Laajenna kaikki",
298
312
  "workspace-presets-form-labels-header": "ei käännetty",
299
- "workspace-labels-purpose": "ei käännetty",
300
- "workspace-labels-parameters": "ei käännetty",
301
- "workspace-labels-phenomena": "ei käännetty",
302
- "workspace-labels-dataType": "ei käännetty",
303
- "workspace-labels-dataSource": "ei käännetty",
304
- "workspace-labels-viewType": "ei käännetty",
313
+ "workspace-labels-purpose": "Käyttötarkoitus",
314
+ "workspace-labels-parameters": "Parametrit",
315
+ "workspace-labels-phenomena": "Sääilmiö",
316
+ "workspace-labels-dataType": "Aineiston tyyppi",
317
+ "workspace-labels-dataSource": "Aineiston lähde",
318
+ "workspace-labels-viewType": "Näkymän tyyppi",
305
319
  "workspace-presets-form-active-labels": "ei käännetty ({{count}})",
306
- "workspace-label-active": "ACTIVE",
320
+ "workspace-label-active": "AKTIIVINEN",
321
+ "fetch-config-error-retry": "Yritä uudelleen",
307
322
  "workspace-versions": "Valitse versio",
308
323
  "workspace-version": "Versio {{version}}",
309
324
  "workspace-version-current": "Versio {{version}} (nykyinen)",
310
325
  "workspace-version-default": "Versio {{version}} (oletus)",
311
- "workspace-copy-to-clipboard": "Copy workspace",
312
- "workspace-paste-from-clipboard": "Paste workspace",
326
+ "workspace-copy-to-clipboard": "Kopioi työtila",
327
+ "workspace-paste-from-clipboard": "Liitä työtila",
313
328
  "workspace-copy-viewpreset-to-clipboard": "Copy view preset",
314
329
  "workspace-paste-viewpreset-from-clipboard": "Paste view preset",
315
- "workspace-paste-dialog-title": "Paste workspace",
330
+ "workspace-paste-dialog-title": "Liitä työtila leikepöydältä",
316
331
  "workspace-paste-viewpreset-dialog-title": "Paste view preset",
317
- "workspace-paste-load-button": "Load workspace",
332
+ "workspace-paste-load-button": "Lataa työtila",
318
333
  "workspace-paste-load-viewpreset-button": "Load view preset",
319
- "workspace-paste-placeholder": "Paste workspace JSON here",
334
+ "workspace-paste-placeholder": "Liitä työtilan JSON-tiedot tähän",
320
335
  "workspace-paste-viewpreset-placeholder": "Paste view preset JSON here",
321
- "workspace-paste-field-label": "Workspace JSON",
336
+ "workspace-paste-field-label": "Työtilan JSON-tiedot",
322
337
  "workspace-paste-viewpreset-field-label": "View preset JSON",
323
- "workspace-copy-success": "Workspace JSON copied to clipboard",
324
- "workspace-paste-success": "Workspace loaded",
338
+ "workspace-copy-success": "Työtila kopioitu",
339
+ "workspace-paste-success": "Työtila ladattu",
325
340
  "workspace-copy-viewpreset-success": "View preset JSON copied to clipboard",
326
341
  "workspace-paste-viewpreset-success": "View preset loaded",
327
- "workspace-paste-validation-invalid-json": "Invalid JSON: {{ERROR}}",
328
- "workspace-paste-validation-not-object": "Input must be a JSON object",
329
- "workspace-paste-validation-missing-field": "Missing required field: \"{{ERROR}}\"",
342
+ "workspace-paste-validation-invalid-json": "Virheellinen JSON: {{ERROR}}",
343
+ "workspace-paste-validation-not-object": "Syötteen on oltava JSON-objekti",
344
+ "workspace-paste-validation-missing-field": "Pakollinen kenttä puuttuu: \"{{ERROR}}\"",
330
345
  "workspace-paste-validation-unexpanded-views": "Workspace contains view preset references. Use the Copy button to get a portable version.",
331
346
  "workspace-paste-validation-wrong-preset-type": "The clipboard contains a view preset, not a workspace preset.",
332
347
  "viewpreset-paste-validation-wrong-preset-type": "The clipboard contains a workspace preset, not a view preset."
@@ -340,7 +355,8 @@ var no = {
340
355
  "workspace-new": "Ny arbeidsflate",
341
356
  "workspace-loading": "Laster",
342
357
  "workspace-options": "Valg",
343
- "workspace-results": "resultater",
358
+ "workspace-results_one": "{{count}} resultat",
359
+ "workspace-results_other": "{{count}} resultater",
344
360
  "workspace-delete": "Slett",
345
361
  "workspce-clear": "Tøm",
346
362
  "workspace-save": "Lagre",
@@ -489,7 +505,8 @@ var nl = {
489
505
  "workspace-new": "Nieuwe workspace",
490
506
  "workspace-loading": "Laden",
491
507
  "workspace-options": "Opties",
492
- "workspace-results": "resultaten",
508
+ "workspace-results_one": "{{count}} resultaat",
509
+ "workspace-results_other": "{{count}} resultaten",
493
510
  "workspace-delete": "Verwijder",
494
511
  "workspce-clear": "Wissen",
495
512
  "workspace-save": "Opslaan",
@@ -666,6 +683,36 @@ function _asyncToGenerator(n) {
666
683
  });
667
684
  };
668
685
  }
686
+ function _construct(t, e, r) {
687
+ if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
688
+ var o = [null];
689
+ o.push.apply(o, e);
690
+ var p = new (t.bind.apply(t, o))();
691
+ return r && _setPrototypeOf(p, r.prototype), p;
692
+ }
693
+ function _getPrototypeOf(t) {
694
+ return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
695
+ return t.__proto__ || Object.getPrototypeOf(t);
696
+ }, _getPrototypeOf(t);
697
+ }
698
+ function _inheritsLoose(t, o) {
699
+ t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);
700
+ }
701
+ function _isNativeFunction(t) {
702
+ try {
703
+ return -1 !== Function.toString.call(t).indexOf("[native code]");
704
+ } catch (n) {
705
+ return "function" == typeof t;
706
+ }
707
+ }
708
+ function _isNativeReflectConstruct() {
709
+ try {
710
+ var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
711
+ } catch (t) {}
712
+ return (_isNativeReflectConstruct = function () {
713
+ return !!t;
714
+ })();
715
+ }
669
716
  function _objectDestructuringEmpty(t) {
670
717
  if (null == t) throw new TypeError("Cannot destructure " + t);
671
718
  }
@@ -786,6 +833,33 @@ function _regeneratorDefine(e, r, n, t) {
786
833
  }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
787
834
  }, _regeneratorDefine(e, r, n, t);
788
835
  }
836
+ function _setPrototypeOf(t, e) {
837
+ return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
838
+ return t.__proto__ = e, t;
839
+ }, _setPrototypeOf(t, e);
840
+ }
841
+ function _wrapNativeSuper(t) {
842
+ var r = "function" == typeof Map ? new Map() : void 0;
843
+ return _wrapNativeSuper = function (t) {
844
+ if (null === t || !_isNativeFunction(t)) return t;
845
+ if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
846
+ if (void 0 !== r) {
847
+ if (r.has(t)) return r.get(t);
848
+ r.set(t, Wrapper);
849
+ }
850
+ function Wrapper() {
851
+ return _construct(t, arguments, _getPrototypeOf(this).constructor);
852
+ }
853
+ return Wrapper.prototype = Object.create(t.prototype, {
854
+ constructor: {
855
+ value: Wrapper,
856
+ enumerable: false,
857
+ writable: true,
858
+ configurable: true
859
+ }
860
+ }), _setPrototypeOf(Wrapper, t);
861
+ }, _wrapNativeSuper(t);
862
+ }
789
863
 
790
864
  /* *
791
865
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1590,7 +1664,7 @@ var SUPPORTED_TIMESERIES_COMPONENT_TYPES = ['TimeSeries'];
1590
1664
  // 3) Warning list components
1591
1665
  var WARNING_LIST_COMPONENT_TYPES = ['WarningList', 'MaritimeWarnings', 'WarningsTimeline'];
1592
1666
  // TODO: expand it and move to a more centralized place
1593
- var ALL_COMPONENT_TYPES = [].concat(SUPPORTED_COMPONENT_TYPES, SUPPORTED_TIMESERIES_COMPONENT_TYPES, WARNING_LIST_COMPONENT_TYPES, AVIATION_COMPONENT_TYPES, CAP_COMPONENT_TYPES, ['TafModule', 'TrajksModule', 'SpaceweatherModule', 'Plugin', 'Soundings']);
1667
+ var ALL_COMPONENT_TYPES = [].concat(SUPPORTED_COMPONENT_TYPES, SUPPORTED_TIMESERIES_COMPONENT_TYPES, WARNING_LIST_COMPONENT_TYPES, AVIATION_COMPONENT_TYPES, CAP_COMPONENT_TYPES, ['TafModule', 'TrajksModule', 'SpaceweatherModule', 'Plugin', 'Soundings', 'CrossSection']);
1594
1668
  var ViewPresetErrorComponent;
1595
1669
  (function (ViewPresetErrorComponent) {
1596
1670
  ViewPresetErrorComponent["PRESET_DETAIL"] = "PRESET_DETAIL";
@@ -1686,6 +1760,12 @@ var initWorkspaceTestI18n = function initWorkspaceTestI18n() {
1686
1760
  }, {
1687
1761
  ns: WARN_NAMESPACE,
1688
1762
  translations: warningsTranslations
1763
+ }, {
1764
+ ns: TIME_SERIES_NAMESPACE,
1765
+ translations: timeseriesTranslations
1766
+ }, {
1767
+ ns: DATA_EXPLORER_NAMESPACE,
1768
+ translations: dataExplorerTranslations
1689
1769
  }]);
1690
1770
  };
1691
1771
  var ns = [WORKSPACE_NAMESPACE, SHARED_NAMESPACE];
@@ -2975,6 +3055,9 @@ var emptyViewPreset = function emptyViewPreset(componentType) {
2975
3055
  },
2976
3056
  Soundings: undefined,
2977
3057
  // TODO: empty soundings preset https://gitlab.com/opengeoweb/opengeoweb/-/issues/6029
3058
+ CrossSection: {
3059
+ syncGroupsIds: []
3060
+ },
2978
3061
  ViewError: undefined,
2979
3062
  ViewLoading: undefined,
2980
3063
  MultiMap: undefined,
@@ -3248,6 +3331,9 @@ var getViewPresetToSendToBackend = createSelector(getViewById, getViewComponentT
3248
3331
  Soundings: Object.assign({}, soundingsPreset, {
3249
3332
  syncGroupsIds: syncGroupsIds
3250
3333
  }),
3334
+ CrossSection: Object.assign({}, workspaceView == null ? void 0 : workspaceView.initialProps, {
3335
+ syncGroupsIds: syncGroupsIds
3336
+ }),
3251
3337
  Plugin: Object.assign({}, workspaceView == null ? void 0 : workspaceView.initialProps, {
3252
3338
  syncGroupsIds: syncGroupsIds
3253
3339
  }, pluginState && {
@@ -8006,13 +8092,15 @@ var WorkspaceSelectList = function WorkspaceSelectList(_ref2) {
8006
8092
  minHeight: MIN_HEIGHT_SCROLLABLE_LIST,
8007
8093
  overflow: 'hidden'
8008
8094
  },
8009
- children: [jsxs(Box, {
8095
+ children: [jsx(Box, {
8010
8096
  sx: {
8011
8097
  marginBottom: '4px',
8012
8098
  fontSize: '12px',
8013
8099
  ml: 0.5
8014
8100
  },
8015
- children: [workspacePresets.length, " ", t('workspace-results')]
8101
+ children: t('workspace-results', {
8102
+ count: workspacePresets.length
8103
+ })
8016
8104
  }), jsx(Box, {
8017
8105
  sx: {
8018
8106
  paddingTop: LIST_PADDING_TOP + "px",
@@ -9784,6 +9872,7 @@ var _WorkspaceViewTitleConnectNoMemo = function WorkspaceViewTitleConnectNoMemo(
9784
9872
  syncGroupsIds: relatedSyncGroupIds
9785
9873
  };
9786
9874
  case 'Plugin':
9875
+ case 'CrossSection':
9787
9876
  return getViewPresetToSendToBackend(store.getState(), panelId).initialProps;
9788
9877
  default:
9789
9878
  return undefined;
@@ -12266,6 +12355,351 @@ var WorkspaceDetail = function WorkspaceDetail(_ref) {
12266
12355
  });
12267
12356
  };
12268
12357
 
12358
+ /** Error whose message is already translated and can be shown to the user as is. */
12359
+ var TranslatedError = /*#__PURE__*/function (_Error) {
12360
+ function TranslatedError() {
12361
+ return _Error.apply(this, arguments) || this;
12362
+ }
12363
+ _inheritsLoose(TranslatedError, _Error);
12364
+ return TranslatedError;
12365
+ }(/*#__PURE__*/_wrapNativeSuper(Error));
12366
+ /**
12367
+ * Coordinates the Data Explorer with the workspace and Timeseries panels.
12368
+ * Data Explorer itself does not depend on workspace or Timeseries.
12369
+ */
12370
+ var DataExplorerTimeseriesConnect = function DataExplorerTimeseriesConnect(_ref) {
12371
+ var productConfigKey = _ref.productConfigKey;
12372
+ var store = useStore();
12373
+ var _useTranslation = useTranslation([DATA_EXPLORER_NAMESPACE, SHARED_NAMESPACE]),
12374
+ t = _useTranslation.t;
12375
+ var _React$useState = React.useState(),
12376
+ choice = _React$useState[0],
12377
+ setChoice = _React$useState[1];
12378
+ var resolveChoice = React.useRef(undefined);
12379
+ var mounted = React.useRef(true);
12380
+ React.useEffect(function () {
12381
+ mounted.current = true;
12382
+ return function () {
12383
+ mounted.current = false;
12384
+ resolveChoice.current == null || resolveChoice.current(undefined);
12385
+ };
12386
+ }, []);
12387
+ var choose = React.useCallback(/*#__PURE__*/function () {
12388
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(nextChoice) {
12389
+ return _regenerator().w(function (_context) {
12390
+ while (1) switch (_context.n) {
12391
+ case 0:
12392
+ setChoice(nextChoice);
12393
+ return _context.a(2, new Promise(function (resolve) {
12394
+ resolveChoice.current = resolve;
12395
+ }));
12396
+ }
12397
+ }, _callee);
12398
+ }));
12399
+ return function (_x) {
12400
+ return _ref2.apply(this, arguments);
12401
+ };
12402
+ }(), []);
12403
+ var finishChoice = function finishChoice(id) {
12404
+ setChoice(undefined);
12405
+ resolveChoice.current == null || resolveChoice.current(id);
12406
+ resolveChoice.current = undefined;
12407
+ };
12408
+ var addTimeseriesToWorkspace = React.useCallback(/*#__PURE__*/function () {
12409
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(_ref3) {
12410
+ var _store$getState$works, _state$workspace, _state$workspace2, _state$workspace3, _state$workspace4, _getViewById3, _timeSeriesSelectors$2;
12411
+ var title, collectionLinks, targetMapId, workspaceId, collectionUrl, target, state, panels, linkedPanels, candidates, panelId, existingService, service, plotId, isNewPanel, plotPreset, mosaicNode, _t;
12412
+ return _regenerator().w(function (_context2) {
12413
+ while (1) switch (_context2.n) {
12414
+ case 0:
12415
+ title = _ref3.title, collectionLinks = _ref3.collectionLinks, targetMapId = _ref3.targetMapId;
12416
+ workspaceId = (_store$getState$works = store.getState().workspace) == null ? void 0 : _store$getState$works.id;
12417
+ if (!(collectionLinks.length === 1)) {
12418
+ _context2.n = 1;
12419
+ break;
12420
+ }
12421
+ _t = collectionLinks[0].href;
12422
+ _context2.n = 3;
12423
+ break;
12424
+ case 1:
12425
+ _context2.n = 2;
12426
+ return choose({
12427
+ title: t('dataexplorer-select-data-link'),
12428
+ options: collectionLinks.map(function (link) {
12429
+ return {
12430
+ id: link.href,
12431
+ title: link.title || link.href
12432
+ };
12433
+ })
12434
+ });
12435
+ case 2:
12436
+ _t = _context2.v;
12437
+ case 3:
12438
+ collectionUrl = _t;
12439
+ if (!(!collectionUrl || !mounted.current)) {
12440
+ _context2.n = 4;
12441
+ break;
12442
+ }
12443
+ return _context2.a(2);
12444
+ case 4:
12445
+ _context2.n = 5;
12446
+ return resolveEdrCollectionTarget(collectionUrl);
12447
+ case 5:
12448
+ target = _context2.v;
12449
+ if (mounted.current) {
12450
+ _context2.n = 6;
12451
+ break;
12452
+ }
12453
+ return _context2.a(2);
12454
+ case 6:
12455
+ state = store.getState();
12456
+ if (!(((_state$workspace = state.workspace) == null ? void 0 : _state$workspace.id) !== workspaceId || (_state$workspace2 = state.workspace) != null && _state$workspace2.isLoading)) {
12457
+ _context2.n = 7;
12458
+ break;
12459
+ }
12460
+ throw new TranslatedError(t('dataexplorer-timeseries-error-workspace-changed'));
12461
+ case 7:
12462
+ panels = getViewIds(state).filter(function (id) {
12463
+ var _getViewById;
12464
+ return ((_getViewById = getViewById(state, id)) == null ? void 0 : _getViewById.componentType) === 'TimeSeries';
12465
+ });
12466
+ linkedPanels = targetMapId ? panels.filter(function (id) {
12467
+ var linkedMaps = genericSelectors.getLinkedTargetIds(state, id);
12468
+ return linkedMaps.length > 0 ? linkedMaps.includes(targetMapId) : timeSeriesSelectors.getMapId(state, id) === targetMapId;
12469
+ }) : [];
12470
+ candidates = linkedPanels.length > 0 ? linkedPanels : panels;
12471
+ panelId = candidates.length === 1 ? candidates[0] : undefined;
12472
+ if (!(candidates.length > 1)) {
12473
+ _context2.n = 9;
12474
+ break;
12475
+ }
12476
+ _context2.n = 8;
12477
+ return choose({
12478
+ title: t('dataexplorer-select-timeseries-panel'),
12479
+ options: candidates.map(function (id, index) {
12480
+ var _getViewById2, _timeSeriesSelectors$;
12481
+ return {
12482
+ id: id,
12483
+ title: ((_getViewById2 = getViewById(state, id)) == null ? void 0 : _getViewById2.title) || t('dataexplorer-timeseries-panel', {
12484
+ number: index + 1
12485
+ }),
12486
+ description: (_timeSeriesSelectors$ = timeSeriesSelectors.getPlotState(state, id)) == null ? void 0 : _timeSeriesSelectors$.plots.map(function (plot) {
12487
+ return plot.title;
12488
+ }).join(', ')
12489
+ };
12490
+ })
12491
+ });
12492
+ case 8:
12493
+ panelId = _context2.v;
12494
+ if (panelId) {
12495
+ _context2.n = 9;
12496
+ break;
12497
+ }
12498
+ return _context2.a(2);
12499
+ case 9:
12500
+ state = store.getState();
12501
+ if (mounted.current) {
12502
+ _context2.n = 10;
12503
+ break;
12504
+ }
12505
+ return _context2.a(2);
12506
+ case 10:
12507
+ 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')) {
12508
+ _context2.n = 11;
12509
+ break;
12510
+ }
12511
+ throw new TranslatedError(t('dataexplorer-timeseries-error-workspace-changed'));
12512
+ case 11:
12513
+ // Saved services may not have loaded yet when creating the first panel.
12514
+ // Hydrate them before service actions persist the current service list.
12515
+ store.dispatch(timeSeriesActions.loadUserAddedTimeSeriesServices(getUserAddedEDRServices()));
12516
+ state = store.getState();
12517
+ existingService = (_timeSeriesSelectors$2 = timeSeriesSelectors.getServices(state)) == null ? void 0 : _timeSeriesSelectors$2.find(function (service) {
12518
+ return service.type === 'EDR' && normalizeEdrServiceUrl(service.url) === normalizeEdrServiceUrl(target.serviceUrl);
12519
+ });
12520
+ service = existingService != null ? existingService : {
12521
+ id: v4(),
12522
+ url: target.serviceUrl,
12523
+ type: 'EDR',
12524
+ name: target.serviceInformation.title || new URL(target.serviceUrl).hostname,
12525
+ description: target.serviceInformation.description || ''
12526
+ };
12527
+ plotId = v4();
12528
+ isNewPanel = !panelId;
12529
+ panelId != null ? panelId : panelId = v4();
12530
+ if (!(!isNewPanel && !timeSeriesSelectors.getPlotState(state, panelId))) {
12531
+ _context2.n = 12;
12532
+ break;
12533
+ }
12534
+ throw new TranslatedError(t('dataexplorer-timeseries-error-panel-loading'));
12535
+ case 12:
12536
+ if (!existingService) {
12537
+ store.dispatch(timeSeriesActions.upsertService(Object.assign({}, service, {
12538
+ panelId: panelId,
12539
+ isUpdate: false
12540
+ })));
12541
+ store.dispatch(snackbarActions.openSnackbar({
12542
+ type: snackbarTypes.SnackbarMessageType.VERBATIM_MESSAGE,
12543
+ message: t('dataexplorer-timeseries-service-added', {
12544
+ service: service.name,
12545
+ host: new URL(service.url).host
12546
+ })
12547
+ }));
12548
+ }
12549
+ if (isNewPanel) {
12550
+ plotPreset = {
12551
+ mapId: targetMapId || '',
12552
+ plots: [{
12553
+ plotId: plotId,
12554
+ title: title
12555
+ }],
12556
+ parameters: []
12557
+ };
12558
+ store.dispatch(workspaceActions.addWorkspaceView({
12559
+ id: panelId,
12560
+ componentType: 'TimeSeries',
12561
+ initialProps: {
12562
+ plotPreset: plotPreset,
12563
+ services: [],
12564
+ syncGroupsIds: []
12565
+ }
12566
+ }));
12567
+ store.dispatch(viewPresetActions.setViewPresetInline({
12568
+ panelId: panelId,
12569
+ isInline: true
12570
+ }));
12571
+ mosaicNode = getMosaicNode(store.getState());
12572
+ store.dispatch(workspaceActions.updateWorkspaceViews({
12573
+ mosaicNode: mosaicNode ? {
12574
+ direction: 'row',
12575
+ first: mosaicNode,
12576
+ second: panelId
12577
+ } : panelId
12578
+ }));
12579
+ // Use the same preset at mount time, so registration preserves this plot.
12580
+ store.dispatch(timeSeriesActions.registerTimeSeriesPreset({
12581
+ panelId: panelId,
12582
+ plotPreset: plotPreset
12583
+ }));
12584
+ if (targetMapId) {
12585
+ store.dispatch(syncGroupsActions.updateLinkedMap({
12586
+ panelId: panelId,
12587
+ mapIds: [targetMapId]
12588
+ }));
12589
+ }
12590
+ } else {
12591
+ store.dispatch(timeSeriesActions.addPlot({
12592
+ panelId: panelId,
12593
+ plotId: plotId,
12594
+ title: title,
12595
+ origin: 'dataExplorer'
12596
+ }));
12597
+ }
12598
+ store.dispatch(viewPresetActions.setViewPresetHasChanges({
12599
+ panelId: panelId,
12600
+ hasChanges: true
12601
+ }));
12602
+ store.dispatch(workspaceActions.markWorkspaceChanged());
12603
+ store.dispatch(timeSeriesActions.openCollectionSelection({
12604
+ panelId: panelId,
12605
+ plotId: plotId,
12606
+ serviceId: service.id,
12607
+ collectionId: target.collection.id
12608
+ }));
12609
+ store.dispatch(uiActions.setActiveWindowId({
12610
+ activeWindowId: panelId
12611
+ }));
12612
+ [uiTypes.DialogTypes.TimeSeriesManager, uiTypes.DialogTypes.TimeSeriesSelect].forEach(function (type) {
12613
+ return store.dispatch(uiActions.setToggleOpenDialog({
12614
+ type: type,
12615
+ setOpen: true,
12616
+ sourcePanelId: panelId
12617
+ }));
12618
+ });
12619
+ case 13:
12620
+ return _context2.a(2);
12621
+ }
12622
+ }, _callee2);
12623
+ }));
12624
+ return function (_x2) {
12625
+ return _ref4.apply(this, arguments);
12626
+ };
12627
+ }(), [choose, store, t]);
12628
+ var addTimeseries = React.useCallback(/*#__PURE__*/function () {
12629
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(request) {
12630
+ var _t2;
12631
+ return _regenerator().w(function (_context3) {
12632
+ while (1) switch (_context3.p = _context3.n) {
12633
+ case 0:
12634
+ _context3.p = 0;
12635
+ _context3.n = 1;
12636
+ return addTimeseriesToWorkspace(request);
12637
+ case 1:
12638
+ _context3.n = 5;
12639
+ break;
12640
+ case 2:
12641
+ _context3.p = 2;
12642
+ _t2 = _context3.v;
12643
+ if (!(_t2 instanceof TranslatedError)) {
12644
+ _context3.n = 3;
12645
+ break;
12646
+ }
12647
+ throw _t2;
12648
+ case 3:
12649
+ if (!(_t2 instanceof EdrCollectionTargetError)) {
12650
+ _context3.n = 4;
12651
+ break;
12652
+ }
12653
+ throw new TranslatedError(t("dataexplorer-timeseries-error-" + _t2.code));
12654
+ case 4:
12655
+ console.error('Unable to add dataset as Timeseries: ', _t2);
12656
+ throw new TranslatedError(t('dataexplorer-timeseries-error-generic'));
12657
+ case 5:
12658
+ return _context3.a(2);
12659
+ }
12660
+ }, _callee3, null, [[0, 2]]);
12661
+ }));
12662
+ return function (_x3) {
12663
+ return _ref5.apply(this, arguments);
12664
+ };
12665
+ }(), [addTimeseriesToWorkspace, t]);
12666
+ return jsxs(Fragment, {
12667
+ children: [jsx(DataExplorerConnect, {
12668
+ onAddTimeseries: addTimeseries,
12669
+ productConfigKey: productConfigKey
12670
+ }), jsxs(Dialog, {
12671
+ onClose: function onClose() {
12672
+ return finishChoice();
12673
+ },
12674
+ open: !!choice,
12675
+ children: [jsx(DialogTitle, {
12676
+ children: choice == null ? void 0 : choice.title
12677
+ }), jsx(List, {
12678
+ children: choice == null ? void 0 : choice.options.map(function (option) {
12679
+ return jsx(ListItemButton, {
12680
+ onClick: function onClick() {
12681
+ return finishChoice(option.id);
12682
+ },
12683
+ children: jsx(ListItemText, {
12684
+ primary: option.title,
12685
+ secondary: option.description
12686
+ })
12687
+ }, option.id);
12688
+ })
12689
+ }), jsx(DialogActions, {
12690
+ children: jsx(Button, {
12691
+ onClick: function onClick() {
12692
+ return finishChoice();
12693
+ },
12694
+ children: t('shared-confirmation-cancel', {
12695
+ ns: SHARED_NAMESPACE
12696
+ })
12697
+ })
12698
+ })]
12699
+ })]
12700
+ });
12701
+ };
12702
+
12269
12703
  /* *
12270
12704
  * Licensed under the Apache License, Version 2.0 (the "License");
12271
12705
  * you may not use this file except in compliance with the License.
@@ -12478,6 +12912,20 @@ var viewPresets = [
12478
12912
  ]
12479
12913
  }
12480
12914
  },
12915
+ {
12916
+ id: "template-crosssection",
12917
+ title: {
12918
+ en: "New cross section preset",
12919
+ fi: "Uusi poikkileikkauspreset",
12920
+ no: "Ny tverrsnittpreset",
12921
+ nl: "Nieuwe cross section preset"
12922
+ },
12923
+ componentType: "CrossSection",
12924
+ initialProps: {
12925
+ syncGroupsIds: [
12926
+ ]
12927
+ }
12928
+ },
12481
12929
  {
12482
12930
  id: "template-warninglist",
12483
12931
  title: {
@@ -13906,4 +14354,4 @@ var workspaceEndpoints = [].concat(createUserPreferencesEndpoints(), [http.get(/
13906
14354
  }, _callee6);
13907
14355
  })))]);
13908
14356
 
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 };
14357
+ 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
+ }>;
@@ -1,5 +1,6 @@
1
1
  import type { EntityState } from '@reduxjs/toolkit';
2
2
  import type { InitialProps, SupportedComponentTypes } from '@opengeoweb/core';
3
+ import type { CrossSectionComponentType } from '@opengeoweb/cross-section';
3
4
  import type { PluginComponentType, PluginMeta } from '@opengeoweb/plugins';
4
5
  import type { SystemScope } from '@opengeoweb/shared';
5
6
  import type { SoundingsComponentType } from '@opengeoweb/soundings';
@@ -17,8 +18,8 @@ export declare const SUPPORTED_TIMESERIES_COMPONENT_TYPES: readonly ["TimeSeries
17
18
  export type SupportedTSComponentTypes = (typeof SUPPORTED_TIMESERIES_COMPONENT_TYPES)[number];
18
19
  export declare const WARNING_LIST_COMPONENT_TYPES: readonly ["WarningList", "MaritimeWarnings", "WarningsTimeline"];
19
20
  export type WarningsComponentType = (typeof WARNING_LIST_COMPONENT_TYPES)[number];
20
- export type WorkspaceSupportedComponentTypes = SupportedComponentTypes | SupportedTimeSeriesComponentTypes | SoundingsComponentType | WarningListComponentType | WorkspaceViewPresetComponentsLookupType | PluginComponentType;
21
- export type LabelSupportedComponentTypes = SupportedComponentTypes | SupportedTimeSeriesComponentTypes | SoundingsComponentType | WarningListComponentType | AviationComponentType | CapComponentType | 'TafModule' | 'TrajksModule' | 'SpaceweatherModule' | 'Plugin' | WorkspaceViewPresetComponentsLookupType;
21
+ export type WorkspaceSupportedComponentTypes = SupportedComponentTypes | SupportedTimeSeriesComponentTypes | SoundingsComponentType | CrossSectionComponentType | WarningListComponentType | WorkspaceViewPresetComponentsLookupType | PluginComponentType;
22
+ export type LabelSupportedComponentTypes = SupportedComponentTypes | SupportedTimeSeriesComponentTypes | SoundingsComponentType | CrossSectionComponentType | WarningListComponentType | AviationComponentType | CapComponentType | 'TafModule' | 'TrajksModule' | 'SpaceweatherModule' | 'Plugin' | WorkspaceViewPresetComponentsLookupType;
22
23
  export declare const ALL_COMPONENT_TYPES: readonly LabelSupportedComponentTypes[];
23
24
  export interface ViewPreset {
24
25
  id?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/workspace",
3
- "version": "21.1.0",
3
+ "version": "21.2.0",
4
4
  "description": "GeoWeb Workspace library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -21,34 +21,37 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "react-redux": "^9.2.0",
24
- "@opengeoweb/shared": "21.1.0",
25
- "@opengeoweb/store": "21.1.0",
26
- "@opengeoweb/api": "21.1.0",
24
+ "@opengeoweb/shared": "21.2.0",
25
+ "@opengeoweb/store": "21.2.0",
26
+ "@opengeoweb/api": "21.2.0",
27
27
  "react-hook-form": "^7.50.1",
28
- "@opengeoweb/theme": "21.1.0",
28
+ "@opengeoweb/theme": "21.2.0",
29
29
  "@reduxjs/toolkit": "^2.6.1",
30
- "@opengeoweb/snackbar": "21.1.0",
30
+ "@opengeoweb/snackbar": "21.2.0",
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.1.0",
36
- "@opengeoweb/time-series": "21.1.0",
37
- "@opengeoweb/authentication": "21.1.0",
38
- "@opengeoweb/plugins": "21.1.0",
39
- "@opengeoweb/core": "21.1.0",
40
- "@opengeoweb/taf": "21.1.0",
41
- "@opengeoweb/sigmet-airmet": "21.1.0",
42
- "@opengeoweb/warnings": "21.1.0",
43
- "@opengeoweb/space-weather": "21.1.0",
35
+ "@opengeoweb/form-fields": "21.2.0",
36
+ "@opengeoweb/time-series": "21.2.0",
37
+ "@opengeoweb/data-explorer": "21.2.0",
38
+ "uuid": "^11.1.1",
39
+ "@opengeoweb/authentication": "21.2.0",
40
+ "@opengeoweb/plugins": "21.2.0",
41
+ "@opengeoweb/core": "21.2.0",
42
+ "@opengeoweb/taf": "21.2.0",
43
+ "@opengeoweb/sigmet-airmet": "21.2.0",
44
+ "@opengeoweb/warnings": "21.2.0",
45
+ "@opengeoweb/space-weather": "21.2.0",
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.1.0",
49
+ "@opengeoweb/webmap-react": "21.2.0",
48
50
  "@tanstack/react-query": "^5.85.5",
49
- "@opengeoweb/soundings": "21.1.0",
50
- "@opengeoweb/knmi-components": "21.1.0",
51
- "@mui/system": "^9.0.1"
51
+ "@opengeoweb/soundings": "21.2.0",
52
+ "@opengeoweb/knmi-components": "21.2.0",
53
+ "@mui/system": "^9.0.1",
54
+ "@opengeoweb/cross-section": "21.2.0"
52
55
  },
53
56
  "peerDependencies": {
54
57
  "react": "19",
@@ -56,7 +59,7 @@
56
59
  "@emotion/styled": "*"
57
60
  },
58
61
  "devDependencies": {
59
- "eslint-plugin-storybook": "10.3.3",
62
+ "eslint-plugin-storybook": "^10.3.3",
60
63
  "msw": "^2.7.3"
61
64
  },
62
65
  "files": [