@opengeoweb/workspace 12.2.0 → 12.3.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
1
  import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, combineReducers, configureStore } from '@reduxjs/toolkit';
2
2
  import { syncGroupsTypes, syncGroupsActions, layerActions, mapActions, uiActions, genericActions, layerTypes, mapEnums, selectorMemoizationOptions, genericSelectors, mapSelectors, syncGroupsSelectors, routerActions, createViewObjectForNewMap, mapListener, serviceListener, layersListener, syncGroupsListener, openlayersListener, uiReducer, loadingIndicatorReducer, syncGroupsReducer, layerReducer, serviceReducer, mapReducer, loadingIndicatorSelectors, uiTypes, linkComponentTypesConstants, uiSelectors } from '@opengeoweb/store';
3
- import { createApiInstance, createNonAuthApiInstance, getApi, createFakeApiInstance, ApiProvider, getConfig, getHeaders, handleResponse, useApiContext, useAuthenticationContext as useAuthenticationContext$1, GEOWEB_ROLE_PRESETS_ADMIN as GEOWEB_ROLE_PRESETS_ADMIN$1 } from '@opengeoweb/api';
3
+ import { createApiInstance, createNonAuthApiInstance, getApi, createFakeApiInstance, ApiProvider, getHeaders, handleResponse, useApiContext, useAuthenticationContext as useAuthenticationContext$1, GEOWEB_ROLE_PRESETS_ADMIN as GEOWEB_ROLE_PRESETS_ADMIN$1 } from '@opengeoweb/api';
4
4
  import { chunk, cloneDeep, union, pick, isEmpty, isEqual, isString } from 'lodash';
5
5
  import { getLeaves, createBalancedTreeFromLeaves, MosaicContext, getAndAssertNodeAtPathExists, MosaicWindow, Mosaic } from 'react-mosaic-component';
6
6
  import { timeSeriesActions, TimeSeriesTypes, timeSeriesSelectors, timeSeriesReducer } from '@opengeoweb/timeseries';
7
7
  import { publicWarningActions, warningsTranslations, WARN_NAMESPACE, publicWarningsSelectors } from '@opengeoweb/warnings';
8
- import { PROJECTION, getAxiosErrorMessage, isAxiosAuthError, isAxiosError as isAxiosError$1, safelyInitI18nForTestsAndStories, sharedTranslations, SHARED_NAMESPACE, ConfirmationServiceProvider, usePrevious, AlertBanner, SystemScope, CustomTooltip, SearchHighlight, ToggleMenu, CustomIconButton, Filter, LastUpdateTime, renderCounter, CustomDialog, ToolContainer, CustomToggleButton, useConfirmationDialog, ConfirmationButtons } from '@opengeoweb/shared';
8
+ import { PROJECTION, getAxiosErrorMessage, isAxiosAuthError, isAxiosError as isAxiosError$1, safelyInitI18nForTestsAndStories, sharedTranslations, SHARED_NAMESPACE, ConfirmationServiceProvider, usePrevious, AlertBanner, sessionStorageProvider, SystemScope, CustomTooltip, SearchHighlight, ToggleMenu, CustomIconButton, Filter, LastUpdateTime, renderCounter, CustomDialog, ToolContainer, CustomToggleButton, useConfirmationDialog, ConfirmationButtons } from '@opengeoweb/shared';
9
9
  import { snackbarTypes, snackbarActions, snackbarListener, snackbarReducer, SnackbarWrapperConnect } from '@opengeoweb/snackbar';
10
10
  import { isAxiosError } from 'axios';
11
11
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -20,7 +20,7 @@ import { coreTranslations, CORE_NAMESPACE } from '@opengeoweb/core';
20
20
  import { formFieldsTranslations, FORM_FIELDS_NAMESPACE, ReactHookFormTextField, ReactHookFormHiddenInput, ReactHookFormProvider, defaultFormOptions } from '@opengeoweb/form-fields';
21
21
  import * as React from 'react';
22
22
  import React__default, { useCallback, useEffect } from 'react';
23
- import { LinearProgress, Typography, styled, ListItemIcon, ListItem, ListItemButton, ListItemText, Grid2, Box, Menu, ListSubheader, MenuItem, useTheme, List, Checkbox, FormGroup, FormControlLabel, Tabs } from '@mui/material';
23
+ import { LinearProgress, Typography, styled, ListItemIcon, ListItem, ListItemButton, ListItemText, Grid, Box, Menu, ListSubheader, MenuItem, useTheme, List, Checkbox, FormGroup, FormControlLabel, Tabs } from '@mui/material';
24
24
  import 'react-mosaic-component/react-mosaic-component.css';
25
25
  import AutoSizer from 'react-virtualized-auto-sizer';
26
26
  import { FixedSizeList } from 'react-window';
@@ -5142,6 +5142,7 @@ workspaceListener.startListening({
5142
5142
  actionCreator: workspaceActions.updateWorkspaceViews,
5143
5143
  effect: function () {
5144
5144
  var _effect9 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee12(_, listenerApi) {
5145
+ var viewIds;
5145
5146
  return _regeneratorRuntime().wrap(function _callee12$(_context12) {
5146
5147
  while (1) switch (_context12.prev = _context12.next) {
5147
5148
  case 0:
@@ -5154,7 +5155,24 @@ workspaceListener.startListening({
5154
5155
  /* This will trigger all maps and other components
5155
5156
  to get the correct size after views are updated */
5156
5157
  window.dispatchEvent(new Event('resize'));
5157
- case 4:
5158
+ // Adjust the bbox of the original view after the new map is added. This is a temporal solution until the OpenLayers ticket
5159
+ // https://github.com/openlayers/openlayers/issues/16572 is solved.
5160
+ _context12.next = 6;
5161
+ return listenerApi.delay(10);
5162
+ case 6:
5163
+ viewIds = getViewIds(listenerApi.getState());
5164
+ viewIds.forEach(function (viewId) {
5165
+ var bbox = mapSelectors.getBbox(listenerApi.getState(), viewId);
5166
+ var srs = mapSelectors.getSrs(listenerApi.getState(), viewId);
5167
+ if (bbox && bbox.left !== undefined && srs) {
5168
+ listenerApi.dispatch(mapActions.setBbox({
5169
+ mapId: viewId,
5170
+ bbox: bbox,
5171
+ srs: srs
5172
+ }));
5173
+ }
5174
+ });
5175
+ case 8:
5158
5176
  case "end":
5159
5177
  return _context12.stop();
5160
5178
  }
@@ -6304,7 +6322,7 @@ var defaultComponentsLookUp = function defaultComponentsLookUp(_ref3) {
6304
6322
  * Copyright 2025 - Finnish Meteorological Institute (FMI)
6305
6323
  * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
6306
6324
  * */
6307
- var config$1 = getConfig();
6325
+ var config$1 = sessionStorageProvider.getConfig();
6308
6326
  var presetBaseUrl$1 = (config$1 == null ? void 0 : config$1.GW_PRESET_BACKEND_URL) || '';
6309
6327
  var getViewPreset = function getViewPreset(viewpresetId, auth) {
6310
6328
  return fetch(presetBaseUrl$1 + "/viewpreset/" + viewpresetId, {
@@ -6452,12 +6470,12 @@ var WorkspaceSelectListRow = function WorkspaceSelectListRow(_ref) {
6452
6470
  margin: 0
6453
6471
  }
6454
6472
  })
6455
- }), isEditable && jsx(Grid2, {
6473
+ }), isEditable && jsx(Grid, {
6456
6474
  sx: {
6457
6475
  minWidth: 56,
6458
6476
  marginLeft: 2
6459
6477
  },
6460
- children: jsxs(Grid2, {
6478
+ children: jsxs(Grid, {
6461
6479
  children: [jsx(ToggleMenu, {
6462
6480
  buttonTestId: testIdPrefix + "-listOptionsButton",
6463
6481
  menuPosition: "right",
@@ -7875,7 +7893,7 @@ var WorkspaceViewConnect = function WorkspaceViewConnect(_ref) {
7875
7893
  * Copyright 2025 - Finnish Meteorological Institute (FMI)
7876
7894
  * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
7877
7895
  * */
7878
- var config = getConfig();
7896
+ var config = sessionStorageProvider.getConfig();
7879
7897
  var presetBaseUrl = (config == null ? void 0 : config.GW_PRESET_BACKEND_URL) || '';
7880
7898
  var getWorkspace = function getWorkspace(workspaceId, auth) {
7881
7899
  return fetch(presetBaseUrl + "/workspacepreset/" + workspaceId, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/workspace",
3
- "version": "12.2.0",
3
+ "version": "12.3.0",
4
4
  "description": "GeoWeb Workspace library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -8,31 +8,31 @@
8
8
  "url": "git@gitlab.com:opengeoweb/opengeoweb.git"
9
9
  },
10
10
  "dependencies": {
11
- "react-redux": "^8.1.3",
12
- "@opengeoweb/shared": "12.2.0",
13
- "@opengeoweb/store": "12.2.0",
14
- "@opengeoweb/api": "12.2.0",
11
+ "react-redux": "^9.2.0",
12
+ "@opengeoweb/shared": "12.3.0",
13
+ "@opengeoweb/store": "12.3.0",
14
+ "@opengeoweb/api": "12.3.0",
15
15
  "react-hook-form": "^7.50.1",
16
- "@opengeoweb/theme": "12.2.0",
17
- "@reduxjs/toolkit": "^1.9.7",
18
- "@opengeoweb/snackbar": "12.2.0",
16
+ "@opengeoweb/theme": "12.3.0",
17
+ "@reduxjs/toolkit": "^2.6.1",
18
+ "@opengeoweb/snackbar": "12.3.0",
19
19
  "react-window": "^1.8.10",
20
20
  "lodash": "^4.17.21",
21
21
  "axios": "^1.7.7",
22
22
  "react-virtualized-auto-sizer": "^1.0.21",
23
23
  "react-mosaic-component": "^6.1.0",
24
- "@opengeoweb/form-fields": "12.2.0",
25
- "@opengeoweb/timeseries": "12.2.0",
26
- "@opengeoweb/authentication": "12.2.0",
27
- "@opengeoweb/core": "12.2.0",
28
- "@opengeoweb/taf": "12.2.0",
29
- "@opengeoweb/sigmet-airmet": "12.2.0",
30
- "@opengeoweb/warnings": "12.2.0",
31
- "@opengeoweb/spaceweather": "12.2.0",
24
+ "@opengeoweb/form-fields": "12.3.0",
25
+ "@opengeoweb/timeseries": "12.3.0",
26
+ "@opengeoweb/authentication": "12.3.0",
27
+ "@opengeoweb/core": "12.3.0",
28
+ "@opengeoweb/taf": "12.3.0",
29
+ "@opengeoweb/sigmet-airmet": "12.3.0",
30
+ "@opengeoweb/warnings": "12.3.0",
31
+ "@opengeoweb/spaceweather": "12.3.0",
32
32
  "i18next": "^23.11.5",
33
33
  "react-i18next": "^15.1.1",
34
- "@mui/material": "^6.1.1",
35
- "@opengeoweb/webmap-react": "12.2.0",
34
+ "@mui/material": "^7.0.1",
35
+ "@opengeoweb/webmap-react": "12.3.0",
36
36
  "@tanstack/react-query": "^5.69.2"
37
37
  },
38
38
  "peerDependencies": {
@@ -1,5 +1,5 @@
1
- import { AnyAction } from '@reduxjs/toolkit';
1
+ import { UnknownAction } from '@reduxjs/toolkit';
2
2
  import { MosaicNode } from 'react-mosaic-component';
3
3
  export declare const getUniqueId: (existingIds: string[], count?: number) => string;
4
4
  export declare const createBalancedMosaicNode: (currentNode: MosaicNode<string>) => MosaicNode<string>;
5
- export declare const closeTimeSeriesDialogsWhenChangingPreset: (componentTypes: string[] | undefined, dispatch: (action: AnyAction) => void) => void;
5
+ export declare const closeTimeSeriesDialogsWhenChangingPreset: (componentTypes: string[] | undefined, dispatch: (action: UnknownAction) => void) => void;
@@ -1,20 +1,20 @@
1
1
  import { SnackbarModuleStore } from '@opengeoweb/snackbar';
2
2
  import { WebMapStateModuleState, SynchronizationGroupModuleState, UIModuleState } from '@opengeoweb/store';
3
- import { ToolkitStore } from '@reduxjs/toolkit/dist/configureStore';
3
+ import { Store } from '@reduxjs/toolkit';
4
4
  import { WorkspaceModuleStore } from './types';
5
5
  export declare const workspaceReducersMap: {
6
- webmap: import("redux").Reducer<import("dist/libs/store/src/store/map/types").WebMapState, import("redux").AnyAction>;
7
- services: import("redux").Reducer<import("dist/libs/store/src/store/map/types").ServiceState, import("redux").AnyAction>;
8
- layers: import("redux").Reducer<import("dist/libs/store/src/store/map/types").LayerState, import("redux").AnyAction>;
9
- syncGroups: import("redux").Reducer<import("dist/libs/store/src/store/generic/syncGroups/types").SynchronizationGroupState, import("redux").AnyAction>;
10
- loadingIndicator: import("redux").Reducer<import("@reduxjs/toolkit").EntityState<import("dist/libs/store/src/store/generic/loadingIndicator/types").LoadingIndicatorType>, import("redux").AnyAction>;
11
- ui: import("redux").Reducer<import("dist/libs/store/src/store/ui/types").UIStoreType, import("redux").AnyAction>;
6
+ webmap: import("redux").Reducer<import("dist/libs/store/src/store/map/types").WebMapState, import("redux").UnknownAction, import("dist/libs/store/src/store/map/types").WebMapState>;
7
+ services: import("redux").Reducer<import("dist/libs/store/src/store/map/types").ServiceState, import("redux").UnknownAction, import("dist/libs/store/src/store/map/types").ServiceState>;
8
+ layers: import("redux").Reducer<import("dist/libs/store/src/store/map/types").LayerState, import("redux").UnknownAction, import("dist/libs/store/src/store/map/types").LayerState>;
9
+ syncGroups: import("redux").Reducer<import("dist/libs/store/src/store/generic/syncGroups/types").SynchronizationGroupState, import("redux").UnknownAction, import("dist/libs/store/src/store/generic/syncGroups/types").SynchronizationGroupState>;
10
+ loadingIndicator: import("redux").Reducer<import("@reduxjs/toolkit").EntityState<import("dist/libs/store/src/store/generic/loadingIndicator/types").LoadingIndicatorType, string>, import("redux").UnknownAction, import("@reduxjs/toolkit").EntityState<import("dist/libs/store/src/store/generic/loadingIndicator/types").LoadingIndicatorType, string>>;
11
+ ui: import("redux").Reducer<import("dist/libs/store/src/store/ui/types").UIStoreType, import("redux").UnknownAction, import("dist/libs/store/src/store/ui/types").UIStoreType>;
12
12
  workspace: import("redux").Reducer<import("./workspace/types").WorkspaceState>;
13
13
  workspaceList: import("redux").Reducer<import("./workspaceList/types").WorkspaceListState>;
14
14
  viewPresetsList: import("redux").Reducer<import("./viewPresetsList/types").ViewPresetListState>;
15
15
  viewPresets: import("redux").Reducer<import("./viewPresets/types").ViewPresetState>;
16
- timeSeries: import("redux").Reducer<import("dist/libs/timeseries/src/lib/store/types").TimeSeriesStoreType, import("redux").AnyAction>;
17
- snackbar: import("redux").Reducer<import("dist/libs/snackbar/src/lib/store/types").SnackbarState, import("redux").AnyAction>;
16
+ timeSeries: import("redux").Reducer<import("dist/libs/timeseries/src/lib/store/types").TimeSeriesStoreType, import("redux").UnknownAction, import("dist/libs/timeseries/src/lib/store/types").TimeSeriesStoreType>;
17
+ snackbar: import("redux").Reducer<import("dist/libs/snackbar/src/lib/store/types").SnackbarState, import("redux").UnknownAction, import("dist/libs/snackbar/src/lib/store/types").SnackbarState>;
18
18
  };
19
- export declare const workspaceMiddlewares: (import("@reduxjs/toolkit").ListenerMiddleware<import("./types").AppStore, import("@reduxjs/toolkit").ThunkDispatch<import("./types").AppStore, unknown, import("redux").AnyAction>, unknown> | import("@reduxjs/toolkit").ListenerMiddleware<SnackbarModuleStore, import("@reduxjs/toolkit").ThunkDispatch<SnackbarModuleStore, unknown, import("redux").AnyAction>, unknown>)[];
20
- export declare const createMockStore: (mockState?: WebMapStateModuleState | WorkspaceModuleStore | UIModuleState | SynchronizationGroupModuleState | SnackbarModuleStore) => ToolkitStore;
19
+ export declare const workspaceMiddlewares: (import("@reduxjs/toolkit").ListenerMiddleware<import("./types").AppStore, import("redux-thunk").ThunkDispatch<import("./types").AppStore, unknown, import("redux").UnknownAction>, unknown> | import("@reduxjs/toolkit").ListenerMiddleware<SnackbarModuleStore, import("redux-thunk").ThunkDispatch<SnackbarModuleStore, unknown, import("redux").UnknownAction>, unknown>)[];
20
+ export declare const createMockStore: (mockState?: WebMapStateModuleState | WorkspaceModuleStore | UIModuleState | SynchronizationGroupModuleState | SnackbarModuleStore) => Store;
@@ -1,6 +1,6 @@
1
- import { AnyAction, ListenerEffectAPI, PayloadAction, ThunkDispatch } from '@reduxjs/toolkit';
1
+ import { UnknownAction, ListenerEffectAPI, PayloadAction, ThunkDispatch } from '@reduxjs/toolkit';
2
2
  import { WorkspaceModuleStore } from '../types';
3
3
  import { SaveViewPresetPayload, ViewPreset } from './types';
4
- export declare const viewPresetsListener: import("@reduxjs/toolkit").ListenerMiddlewareInstance<WorkspaceModuleStore, ThunkDispatch<WorkspaceModuleStore, unknown, AnyAction>, unknown>;
5
- export declare const saveViewPresetAsEffect: ({ payload }: PayloadAction<SaveViewPresetPayload>, listenerApi: ListenerEffectAPI<WorkspaceModuleStore, ThunkDispatch<WorkspaceModuleStore, unknown, AnyAction>>) => Promise<ViewPreset | Error | void>;
6
- export declare const saveViewPresetEffect: ({ payload }: PayloadAction<SaveViewPresetPayload>, listenerApi: ListenerEffectAPI<WorkspaceModuleStore, ThunkDispatch<WorkspaceModuleStore, unknown, AnyAction>>) => Promise<ViewPreset | Error | void>;
4
+ export declare const viewPresetsListener: import("@reduxjs/toolkit").ListenerMiddlewareInstance<WorkspaceModuleStore, ThunkDispatch<WorkspaceModuleStore, unknown, UnknownAction>, unknown>;
5
+ export declare const saveViewPresetAsEffect: ({ payload }: PayloadAction<SaveViewPresetPayload>, listenerApi: ListenerEffectAPI<WorkspaceModuleStore, ThunkDispatch<WorkspaceModuleStore, unknown, UnknownAction>>) => Promise<ViewPreset | Error | void>;
6
+ export declare const saveViewPresetEffect: ({ payload }: PayloadAction<SaveViewPresetPayload>, listenerApi: ListenerEffectAPI<WorkspaceModuleStore, ThunkDispatch<WorkspaceModuleStore, unknown, UnknownAction>>) => Promise<ViewPreset | Error | void>;
@@ -2,7 +2,7 @@ import { layerTypes, mapEnums } from '@opengeoweb/store';
2
2
  import { TimeSeriesTypes } from '@opengeoweb/timeseries';
3
3
  import { Draft, PayloadAction } from '@reduxjs/toolkit';
4
4
  import { ErrorViewPresetPayload, FetchedViewPresetPayload, FetchedViewPresetsPayload, FetchViewPresetsPayload, OnSuccesViewPresetActionPayload, OpenViewPresetDialogPayload, RegisterViewPresetPayload, SavedViewPresetPayload, SaveViewPresetPayload, SearchWorkspaceFilter, SelectViewPresetPayload, SetActiveViewPresetIdPayload, SetFilterChipsPayload, SetSelectAllFilterChip, SetViewPresetHasChangePayload, ToggleSelectFilterChip, ToggleViewPresetListDialogPayload, UnregisterViewPresetPayload, ViewPresetEntity, ViewPresetState } from './types';
5
- export declare const viewPresetsAdapter: import("@reduxjs/toolkit").EntityAdapter<ViewPresetEntity>;
5
+ export declare const viewPresetsAdapter: import("@reduxjs/toolkit").EntityAdapter<ViewPresetEntity, string>;
6
6
  export declare const initialState: ViewPresetState;
7
7
  export type SupportedMapActionOrigins = layerTypes.LayerActionOrigin | mapEnums.MapActionOrigin;
8
8
  export declare const supportedMapActionOrigins: SupportedMapActionOrigins[];