@opengeoweb/workspace 15.0.0 → 15.1.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
@@ -3,8 +3,9 @@ import { createApiInstance, createNonAuthApiInstance, getApi, getHeaders, handle
3
3
  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, uiTypes, linkComponentTypesConstants, loadingIndicatorSelectors, uiSelectors } from '@opengeoweb/store';
4
4
  import { chunk, union, cloneDeep, pick, isEmpty, isEqual, isString } from 'lodash';
5
5
  import { getLeaves, createBalancedTreeFromLeaves, MosaicContext, getAndAssertNodeAtPathExists, MosaicWindow, Mosaic } from 'react-mosaic-component';
6
- import { queryOptions, useMutation, useQuery } from '@tanstack/react-query';
7
6
  import { sessionStorageProvider, getAxiosErrorMessage, isAxiosError, isAxiosAuthError, safelyInitI18nForTestsAndStories, sharedTranslations, SHARED_NAMESPACE, ConfirmationServiceProvider, CustomIconButton, useConfirmationDialog, usePrevious, AlertBanner, CustomAccordion, CustomTooltip, dateUtils, SystemScope, SearchHighlight, ToggleMenu, SearchField, Filter, LastUpdateTime, renderCounter, CustomDialog, ToolContainer, CustomToggleButton, ConfirmationButtons } from '@opengeoweb/shared';
7
+ import { queryOptions, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
8
+ import { soundingsActions, SoundingsTypes, soundingsSelectors, soundingsReducer } from '@opengeoweb/soundings';
8
9
  import { timeSeriesActions, TimeSeriesTypes, timeSeriesSelectors, timeSeriesReducer } from '@opengeoweb/time-series';
9
10
  import { publicWarningActions, publicWarningsSelectors, warningsTranslations, WARN_NAMESPACE } from '@opengeoweb/warnings';
10
11
  import { snackbarTypes, snackbarActions, snackbarListener, snackbarReducer, SnackbarWrapperConnect } from '@opengeoweb/snackbar';
@@ -24,6 +25,7 @@ import 'react-mosaic-component/react-mosaic-component.css';
24
25
  import { useFormContext, useWatch, useForm, FormProvider } from 'react-hook-form';
25
26
  import AutoSizer from 'react-virtualized-auto-sizer';
26
27
  import { FixedSizeList } from 'react-window';
28
+ import { http, HttpResponse, delay } from 'msw';
27
29
 
28
30
  var en = {
29
31
  "workspace-menu": "Workspace menu",
@@ -791,10 +793,38 @@ function _regeneratorRuntime() {
791
793
  })();
792
794
  }
793
795
 
794
- var API_NAME = 'workspacepresets';
796
+ /* *
797
+ * Licensed under the Apache License, Version 2.0 (the "License");
798
+ * you may not use this file except in compliance with the License.
799
+ * You may obtain a copy of the License at
800
+ *
801
+ * http://www.apache.org/licenses/LICENSE-2.0
802
+ *
803
+ * Unless required by applicable law or agreed to in writing, software
804
+ * distributed under the License is distributed on an "AS IS" BASIS,
805
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
806
+ * See the License for the specific language governing permissions and
807
+ * limitations under the License.
808
+ *
809
+ * Copyright 2026 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
810
+ * Copyright 2026 - Finnish Meteorological Institute (FMI)
811
+ * Copyright 2026 - The Norwegian Meteorological Institute (MET Norway)
812
+ * */
813
+ /*
814
+ configureLibraryDefaults([LIB_KEY], {
815
+ staleTime: 5 * 60 * 1000,
816
+ });
817
+ */
818
+ var LIB_KEY = 'workspace-lib';
819
+ var getPresetBaseUrl = function getPresetBaseUrl() {
820
+ var config = sessionStorageProvider.getConfig();
821
+ return (config == null ? void 0 : config.GW_PRESET_BACKEND_URL) || '';
822
+ };
795
823
  var getIdFromUrl = function getIdFromUrl(url) {
796
824
  return url && /[^/]+$/.exec(url)[0];
797
825
  };
826
+
827
+ var API_NAME = 'workspacepresets';
798
828
  var getApiRoutes$1 = function getApiRoutes(axiosInstance) {
799
829
  return {
800
830
  // workspace presets
@@ -817,88 +847,31 @@ var getApiRoutes$1 = function getApiRoutes(axiosInstance) {
817
847
  }
818
848
  return getWorkspacePresets;
819
849
  }(),
820
- getWorkspacePreset: function () {
821
- var _getWorkspacePreset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(workspacePresetId) {
850
+ saveViewPreset: function () {
851
+ var _saveViewPreset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(viewPresetId, data) {
822
852
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
823
853
  while (1) switch (_context2.prev = _context2.next) {
824
854
  case 0:
825
- return _context2.abrupt("return", axiosInstance.get("/workspacepreset/" + workspacePresetId));
826
- case 1:
827
- case "end":
828
- return _context2.stop();
829
- }
830
- }, _callee2);
831
- }));
832
- function getWorkspacePreset(_x2) {
833
- return _getWorkspacePreset.apply(this, arguments);
834
- }
835
- return getWorkspacePreset;
836
- }(),
837
- saveWorkspacePresetAs: function () {
838
- var _saveWorkspacePresetAs = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(data) {
839
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
840
- while (1) switch (_context3.prev = _context3.next) {
841
- case 0:
842
- return _context3.abrupt("return", axiosInstance.post("/workspacepreset/", data).then(function (response) {
843
- var headerLocation = response == null ? void 0 : response.request.getResponseHeader('Location');
844
- return getIdFromUrl(headerLocation);
845
- }));
846
- case 1:
847
- case "end":
848
- return _context3.stop();
849
- }
850
- }, _callee3);
851
- }));
852
- function saveWorkspacePresetAs(_x3) {
853
- return _saveWorkspacePresetAs.apply(this, arguments);
854
- }
855
- return saveWorkspacePresetAs;
856
- }(),
857
- // view presets
858
- getViewPresets: function () {
859
- var _getViewPresets = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(params) {
860
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
861
- while (1) switch (_context4.prev = _context4.next) {
862
- case 0:
863
- return _context4.abrupt("return", axiosInstance.get('/viewpreset', {
864
- params: params
865
- }));
866
- case 1:
867
- case "end":
868
- return _context4.stop();
869
- }
870
- }, _callee4);
871
- }));
872
- function getViewPresets(_x4) {
873
- return _getViewPresets.apply(this, arguments);
874
- }
875
- return getViewPresets;
876
- }(),
877
- saveViewPreset: function () {
878
- var _saveViewPreset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(viewPresetId, data) {
879
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
880
- while (1) switch (_context5.prev = _context5.next) {
881
- case 0:
882
- return _context5.abrupt("return", axiosInstance.put("/viewpreset/" + viewPresetId + "/", data.initialProps === null ? Object.assign({}, data, {
855
+ return _context2.abrupt("return", axiosInstance.put("/viewpreset/" + viewPresetId + "/", data.initialProps === null ? Object.assign({}, data, {
883
856
  initialProps: {}
884
857
  }) : data));
885
858
  case 1:
886
859
  case "end":
887
- return _context5.stop();
860
+ return _context2.stop();
888
861
  }
889
- }, _callee5);
862
+ }, _callee2);
890
863
  }));
891
- function saveViewPreset(_x5, _x6) {
864
+ function saveViewPreset(_x2, _x3) {
892
865
  return _saveViewPreset.apply(this, arguments);
893
866
  }
894
867
  return saveViewPreset;
895
868
  }(),
896
869
  saveViewPresetAs: function () {
897
- var _saveViewPresetAs = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(data) {
898
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
899
- while (1) switch (_context6.prev = _context6.next) {
870
+ var _saveViewPresetAs = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(data) {
871
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
872
+ while (1) switch (_context3.prev = _context3.next) {
900
873
  case 0:
901
- return _context6.abrupt("return", axiosInstance.post("/viewpreset/", data.initialProps === null ? Object.assign({}, data, {
874
+ return _context3.abrupt("return", axiosInstance.post("/viewpreset/", data.initialProps === null ? Object.assign({}, data, {
902
875
  initialProps: {}
903
876
  }) : data).then(function (response) {
904
877
  var headerLocation = response == null ? void 0 : response.request.getResponseHeader('Location');
@@ -906,11 +879,11 @@ var getApiRoutes$1 = function getApiRoutes(axiosInstance) {
906
879
  }));
907
880
  case 1:
908
881
  case "end":
909
- return _context6.stop();
882
+ return _context3.stop();
910
883
  }
911
- }, _callee6);
884
+ }, _callee3);
912
885
  }));
913
- function saveViewPresetAs(_x7) {
886
+ function saveViewPresetAs(_x4) {
914
887
  return _saveViewPresetAs.apply(this, arguments);
915
888
  }
916
889
  return saveViewPresetAs;
@@ -1048,34 +1021,6 @@ var toViewsArray = function toViewsArray(wsViews) {
1048
1021
  });
1049
1022
  };
1050
1023
 
1051
- /* *
1052
- * Licensed under the Apache License, Version 2.0 (the "License");
1053
- * you may not use this file except in compliance with the License.
1054
- * You may obtain a copy of the License at
1055
- *
1056
- * http://www.apache.org/licenses/LICENSE-2.0
1057
- *
1058
- * Unless required by applicable law or agreed to in writing, software
1059
- * distributed under the License is distributed on an "AS IS" BASIS,
1060
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1061
- * See the License for the specific language governing permissions and
1062
- * limitations under the License.
1063
- *
1064
- * Copyright 2026 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
1065
- * Copyright 2026 - Finnish Meteorological Institute (FMI)
1066
- * Copyright 2026 - The Norwegian Meteorological Institute (MET Norway)
1067
- * */
1068
- /*
1069
- configureLibraryDefaults([LIB_KEY], {
1070
- staleTime: 5 * 60 * 1000,
1071
- });
1072
- */
1073
- var LIB_KEY = 'workspace-lib';
1074
- var getPresetBaseUrl = function getPresetBaseUrl() {
1075
- var config = sessionStorageProvider.getConfig();
1076
- return (config == null ? void 0 : config.GW_PRESET_BACKEND_URL) || '';
1077
- };
1078
-
1079
1024
  var getViewPreset = /*#__PURE__*/function () {
1080
1025
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(viewpresetId, auth) {
1081
1026
  return _regeneratorRuntime().wrap(function _callee$(_context) {
@@ -1094,34 +1039,47 @@ var getViewPreset = /*#__PURE__*/function () {
1094
1039
  return _ref.apply(this, arguments);
1095
1040
  };
1096
1041
  }();
1097
- var updateViewPreset = /*#__PURE__*/function () {
1098
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(viewpresetId, data, auth) {
1042
+ var getViewPresets$1 = /*#__PURE__*/function () {
1043
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(auth, params) {
1044
+ var baseUrl, searchParams, queryString, url;
1099
1045
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
1100
1046
  while (1) switch (_context2.prev = _context2.next) {
1101
1047
  case 0:
1102
- return _context2.abrupt("return", fetch(getPresetBaseUrl() + "/viewpreset/" + viewpresetId, {
1103
- headers: getHeaders(auth),
1104
- method: 'PUT',
1105
- body: JSON.stringify(data)
1048
+ baseUrl = getPresetBaseUrl() + "/viewpreset";
1049
+ searchParams = new URLSearchParams();
1050
+ if (params) {
1051
+ Object.entries(params).forEach(function (_ref3) {
1052
+ var key = _ref3[0],
1053
+ value = _ref3[1];
1054
+ if (value !== undefined && value !== null) {
1055
+ searchParams.append(key, String(value));
1056
+ }
1057
+ });
1058
+ }
1059
+ queryString = searchParams.toString();
1060
+ url = queryString ? baseUrl + "?" + queryString : baseUrl;
1061
+ return _context2.abrupt("return", fetch(url, {
1062
+ headers: getHeaders(auth)
1106
1063
  }).then(handleResponse));
1107
- case 1:
1064
+ case 6:
1108
1065
  case "end":
1109
1066
  return _context2.stop();
1110
1067
  }
1111
1068
  }, _callee2);
1112
1069
  }));
1113
- return function updateViewPreset(_x3, _x4, _x5) {
1070
+ return function getViewPresets(_x3, _x4) {
1114
1071
  return _ref2.apply(this, arguments);
1115
1072
  };
1116
1073
  }();
1117
- var deleteViewPreset = /*#__PURE__*/function () {
1118
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(viewPresetId, auth) {
1074
+ var updateViewPreset = /*#__PURE__*/function () {
1075
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(viewpresetId, data, auth) {
1119
1076
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
1120
1077
  while (1) switch (_context3.prev = _context3.next) {
1121
1078
  case 0:
1122
- return _context3.abrupt("return", fetch(getPresetBaseUrl() + "/viewpreset/" + viewPresetId, {
1123
- method: 'DELETE',
1124
- headers: getHeaders(auth)
1079
+ return _context3.abrupt("return", fetch(getPresetBaseUrl() + "/viewpreset/" + viewpresetId, {
1080
+ headers: getHeaders(auth),
1081
+ method: 'PUT',
1082
+ body: JSON.stringify(data)
1125
1083
  }).then(handleResponse));
1126
1084
  case 1:
1127
1085
  case "end":
@@ -1129,19 +1087,52 @@ var deleteViewPreset = /*#__PURE__*/function () {
1129
1087
  }
1130
1088
  }, _callee3);
1131
1089
  }));
1132
- return function deleteViewPreset(_x6, _x7) {
1133
- return _ref3.apply(this, arguments);
1090
+ return function updateViewPreset(_x5, _x6, _x7) {
1091
+ return _ref4.apply(this, arguments);
1092
+ };
1093
+ }();
1094
+ var deleteViewPreset = /*#__PURE__*/function () {
1095
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(viewPresetId, auth) {
1096
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
1097
+ while (1) switch (_context4.prev = _context4.next) {
1098
+ case 0:
1099
+ return _context4.abrupt("return", fetch(getPresetBaseUrl() + "/viewpreset/" + viewPresetId, {
1100
+ method: 'DELETE',
1101
+ headers: getHeaders(auth)
1102
+ }).then(handleResponse));
1103
+ case 1:
1104
+ case "end":
1105
+ return _context4.stop();
1106
+ }
1107
+ }, _callee4);
1108
+ }));
1109
+ return function deleteViewPreset(_x8, _x9) {
1110
+ return _ref5.apply(this, arguments);
1134
1111
  };
1135
1112
  }();
1136
1113
 
1137
- var API_KEY$1 = 'viewpresets-api';
1138
- var generateViewPresetsQueryKeys = function generateViewPresetsQueryKeys(queryKeys) {
1114
+ var API_KEY$1 = 'viewpreset-api';
1115
+ var generateViewPresetQueryKeys = function generateViewPresetQueryKeys() {
1116
+ for (var _len = arguments.length, queryKeys = new Array(_len), _key = 0; _key < _len; _key++) {
1117
+ queryKeys[_key] = arguments[_key];
1118
+ }
1139
1119
  return [LIB_KEY, API_KEY$1].concat(queryKeys);
1140
1120
  };
1141
- var viewpresetsQueryOptions = {
1121
+ var viewpresetQueryOptions = {
1122
+ keys: {
1123
+ all: function all() {
1124
+ return generateViewPresetQueryKeys();
1125
+ },
1126
+ views: function views() {
1127
+ return [].concat(viewpresetQueryOptions.keys.all(), ['view']);
1128
+ },
1129
+ lists: function lists() {
1130
+ return [].concat(viewpresetQueryOptions.keys.all(), ['list']);
1131
+ }
1132
+ },
1142
1133
  getViewPreset: function getViewPreset$1(id, credentials) {
1143
1134
  return queryOptions({
1144
- queryKey: generateViewPresetsQueryKeys([id]),
1135
+ queryKey: [].concat(viewpresetQueryOptions.keys.views(), [id]),
1145
1136
  queryFn: function () {
1146
1137
  var _queryFn = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
1147
1138
  return _regeneratorRuntime().wrap(function _callee$(_context) {
@@ -1160,6 +1151,28 @@ var viewpresetsQueryOptions = {
1160
1151
  return queryFn;
1161
1152
  }()
1162
1153
  });
1154
+ },
1155
+ getViewPresets: function getViewPresets(params, credentials) {
1156
+ return queryOptions({
1157
+ queryKey: [].concat(viewpresetQueryOptions.keys.lists(), [JSON.stringify(params != null ? params : {})]),
1158
+ queryFn: function () {
1159
+ var _queryFn2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
1160
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
1161
+ while (1) switch (_context2.prev = _context2.next) {
1162
+ case 0:
1163
+ return _context2.abrupt("return", getViewPresets$1(credentials, params));
1164
+ case 1:
1165
+ case "end":
1166
+ return _context2.stop();
1167
+ }
1168
+ }, _callee2);
1169
+ }));
1170
+ function queryFn() {
1171
+ return _queryFn2.apply(this, arguments);
1172
+ }
1173
+ return queryFn;
1174
+ }()
1175
+ });
1163
1176
  }
1164
1177
  };
1165
1178
 
@@ -1520,8 +1533,10 @@ var warningsPresetChangeActions = [publicWarningActions.setWarningFilters];
1520
1533
  var syncGroupChangeActions = [syncGroupsActions.syncGroupRemoveTarget, syncGroupsActions.syncGroupAddTarget];
1521
1534
  var mapPresetChangeActions = [layerActions.setBaseLayers, layerActions.layerDelete, layerActions.addLayer, layerActions.duplicateMapLayer, layerActions.layerChangeEnabled, layerActions.layerChangeName, layerActions.layerChangeStyle, layerActions.layerChangeOpacity, layerActions.layerChangeDimension, layerActions.layerChangeAcceptanceTime, mapActions.layerMoveLayer, mapActions.setAutoLayerId, mapActions.setAutoTimestepLayerId, mapActions.setAutoUpdateLayerId, mapActions.toggleAutoUpdate, mapActions.mapStartAnimation, mapActions.mapStopAnimation, mapActions.toggleTimeSliderIsVisible, mapActions.setTimeStep, mapActions.setTimeSliderSpan, mapActions.toggleTimeSpanAuto, mapActions.setAnimationDelay, mapActions.toggleTimestepAuto, mapActions.setAnimationStartTime, mapActions.setAnimationEndTime, mapActions.changeOverlayer, uiActions.setActiveMapIdForDialog, uiActions.setToggleOpenDialog, genericActions.setBbox, mapActions.setBbox, mapActions.toggleClock];
1522
1535
  var timeSeriesPresetChangeActions = [timeSeriesActions.addParameter, timeSeriesActions.addPlot, timeSeriesActions.deleteParameter, timeSeriesActions.deletePlot, timeSeriesActions.moveParameter, timeSeriesActions.movePlot, timeSeriesActions.toggleParameter, timeSeriesActions.togglePlot, timeSeriesActions.patchParameter, timeSeriesActions.updateTitle];
1536
+ var soundingsChangeActions = [soundingsActions.updateSelectedSource, soundingsActions.updateSelectedLocation, soundingsActions.updateSelectedTime, soundingsActions.updateDiagramType, soundingsActions.toggleLocationMarkers];
1523
1537
  var supportedMapActionOrigins = [layerTypes.LayerActionOrigin.layerManager, layerTypes.LayerActionOrigin.wmsLoader, mapEnums.MapActionOrigin.map];
1524
1538
  var supportedTimeSeriesActionOrigins = [TimeSeriesTypes.TimeSeriesActionOrigin.timeSeriesManager, TimeSeriesTypes.TimeSeriesActionOrigin.timeSeriesSelect];
1539
+ var supportedSoundingsActionOrigins = [SoundingsTypes.SoundingsActionOrigin.soundingsComponent];
1525
1540
  var slice$2 = createSlice({
1526
1541
  initialState: initialState$2,
1527
1542
  name: 'viewPresets',
@@ -1927,6 +1942,21 @@ var slice$2 = createSlice({
1927
1942
  }
1928
1943
  });
1929
1944
  });
1945
+ soundingsChangeActions.map(function (soundingsAction) {
1946
+ return builder.addCase(soundingsAction, function (draft, action) {
1947
+ var _action$payload19 = action.payload,
1948
+ panelId = _action$payload19.panelId,
1949
+ origin = _action$payload19.origin;
1950
+ var isChangeOriginSupported = supportedSoundingsActionOrigins.includes(origin);
1951
+ if (isChangeOriginSupported && panelId && panelId !== '') {
1952
+ var entity = draft.entities[panelId];
1953
+ if (entity && !(entity != null && entity.hasChanges)) {
1954
+ entity.hasChanges = true;
1955
+ viewPresetsAdapter.setOne(draft, entity);
1956
+ }
1957
+ }
1958
+ });
1959
+ });
1930
1960
  }
1931
1961
  });
1932
1962
  var viewPresetsReducer = slice$2.reducer,
@@ -2010,7 +2040,7 @@ var filterAndSortPresets = function filterAndSortPresets(presets, selectedFilter
2010
2040
  var matchesLabelFilters = function matchesLabelFilters(preset) {
2011
2041
  var _preset$labels;
2012
2042
  var presetLabels = (_preset$labels = preset.labels) != null ? _preset$labels : {};
2013
- return activeGroups.some(function (_ref2) {
2043
+ return activeGroups.every(function (_ref2) {
2014
2044
  var _presetLabels$key;
2015
2045
  var key = _ref2.key,
2016
2046
  selectedValues = _ref2.values;
@@ -2231,6 +2261,9 @@ var slice$1 = createSlice({
2231
2261
  draft.viewType = getViewType$1(draft.views.allIds.length, action.payload.componentType);
2232
2262
  },
2233
2263
  setNewWorkspaceView: function setNewWorkspaceView(_draft, _action) {},
2264
+ teardownComplete: function teardownComplete() {
2265
+ // Signal-only action for listener coordination
2266
+ },
2234
2267
  deleteWorkspaceView: function deleteWorkspaceView(draft, action) {
2235
2268
  var id = action.payload.id;
2236
2269
  draft.views.allIds = draft.views.allIds.filter(function (viewId) {
@@ -2461,11 +2494,17 @@ var slice$1 = createSlice({
2461
2494
  }).addCase(viewPresetActions.onSuccessViewPresetAction, function (draft, action) {
2462
2495
  var _action$payload5 = action.payload,
2463
2496
  panelId = _action$payload5.panelId,
2497
+ activeViewPresetId = _action$payload5.activeViewPresetId,
2464
2498
  title = _action$payload5.title,
2465
2499
  presetAction = _action$payload5.action,
2466
2500
  scope = _action$payload5.scope,
2467
2501
  _abstract = _action$payload5["abstract"],
2468
2502
  labels = _action$payload5.labels;
2503
+ // If preset is not the active/selected one
2504
+ var shouldSkipInactivePresetUpdate = activeViewPresetId !== undefined && activeViewPresetId !== action.payload.viewPresetId && (presetAction === PresetAction.EDIT || presetAction === PresetAction.SHARE || presetAction === PresetAction.SAVE_AS && action.payload.shouldSetActiveViewPreset === false);
2505
+ if (shouldSkipInactivePresetUpdate) {
2506
+ return;
2507
+ }
2469
2508
  var entity = draft.views.byId[panelId];
2470
2509
  if (entity && presetAction !== PresetAction.DELETE) {
2471
2510
  entity.title = title;
@@ -2777,7 +2816,7 @@ var getViewComponentType = createSelector(getViewById, function (store) {
2777
2816
  var _store$componentType;
2778
2817
  return (_store$componentType = store == null ? void 0 : store.componentType) != null ? _store$componentType : 'Map';
2779
2818
  }, selectorMemoizationOptions);
2780
- var getViewPresetToSendToBackend = createSelector(getViewById, getViewComponentType, mapSelectors.getMapPreset, syncGroupsSelectors.getAllTargetGroupsForSource, timeSeriesSelectors.getTimeSeriesPreset, publicWarningsSelectors.getWarningsPresetById, mapSelectors.getMultiMapInitialProps, mapSelectors.getTimeSliderInitialProps, function (store) {
2819
+ var getViewPresetToSendToBackend = createSelector(getViewById, getViewComponentType, mapSelectors.getMapPreset, syncGroupsSelectors.getAllTargetGroupsForSource, timeSeriesSelectors.getTimeSeriesPreset, publicWarningsSelectors.getWarningsPresetById, mapSelectors.getMultiMapInitialProps, mapSelectors.getTimeSliderInitialProps, soundingsSelectors.getSoundingsPreset, function (store) {
2781
2820
  return store;
2782
2821
  }, function (panelId) {
2783
2822
  return panelId;
@@ -2786,7 +2825,7 @@ var getViewPresetToSendToBackend = createSelector(getViewById, getViewComponentT
2786
2825
  keepAllDims = false;
2787
2826
  }
2788
2827
  return keepAllDims;
2789
- }, function (workspaceView, viewComponentType, mapPreset, syncGroupsIds, timeSeriesPreset, warningsPreset, multiMapPreset, timeSliderPreset, store, panelId, keepAllDims) {
2828
+ }, function (workspaceView, viewComponentType, mapPreset, syncGroupsIds, timeSeriesPreset, warningsPreset, multiMapPreset, timeSliderPreset, soundingsPreset, store, panelId, keepAllDims) {
2790
2829
  var _workspaceView$scope, _initialPropsByCompon;
2791
2830
  var title = workspaceView == null ? void 0 : workspaceView.title;
2792
2831
  var scope = (_workspaceView$scope = workspaceView == null ? void 0 : workspaceView.scope) != null ? _workspaceView$scope : 'system';
@@ -2803,7 +2842,8 @@ var getViewPresetToSendToBackend = createSelector(getViewById, getViewComponentT
2803
2842
  HarmonieTempAndPrecipPreset: harmonieProps != null && harmonieProps.layers ? {
2804
2843
  layers: harmonieProps.layers
2805
2844
  } : undefined,
2806
- TimeSlider: timeSliderPreset
2845
+ TimeSlider: timeSliderPreset,
2846
+ Soundings: soundingsPreset
2807
2847
  };
2808
2848
  return Object.assign({}, emptyViewPreset(viewComponentType), {
2809
2849
  id: workspaceView == null ? void 0 : workspaceView.id,
@@ -2971,7 +3011,7 @@ var getWorkspaceLabelsConfig = /*#__PURE__*/function () {
2971
3011
  return _ref.apply(this, arguments);
2972
3012
  };
2973
3013
  }();
2974
- var getWorkspace = /*#__PURE__*/function () {
3014
+ var getWorkspacePreset = /*#__PURE__*/function () {
2975
3015
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(workspaceId, auth) {
2976
3016
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
2977
3017
  while (1) switch (_context2.prev = _context2.next) {
@@ -2985,18 +3025,17 @@ var getWorkspace = /*#__PURE__*/function () {
2985
3025
  }
2986
3026
  }, _callee2);
2987
3027
  }));
2988
- return function getWorkspace(_x2, _x3) {
3028
+ return function getWorkspacePreset(_x2, _x3) {
2989
3029
  return _ref2.apply(this, arguments);
2990
3030
  };
2991
3031
  }();
2992
- var deleteWorkspace = /*#__PURE__*/function () {
3032
+ var getWorkspace = /*#__PURE__*/function () {
2993
3033
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(workspaceId, auth) {
2994
3034
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
2995
3035
  while (1) switch (_context3.prev = _context3.next) {
2996
3036
  case 0:
2997
3037
  return _context3.abrupt("return", fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId, {
2998
- headers: getHeaders(auth),
2999
- method: 'DELETE'
3038
+ headers: getHeaders(auth)
3000
3039
  }).then(handleResponse));
3001
3040
  case 1:
3002
3041
  case "end":
@@ -3004,19 +3043,18 @@ var deleteWorkspace = /*#__PURE__*/function () {
3004
3043
  }
3005
3044
  }, _callee3);
3006
3045
  }));
3007
- return function deleteWorkspace(_x4, _x5) {
3046
+ return function getWorkspace(_x4, _x5) {
3008
3047
  return _ref3.apply(this, arguments);
3009
3048
  };
3010
3049
  }();
3011
- var updateWorkspace = /*#__PURE__*/function () {
3012
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(workspaceId, data, auth) {
3050
+ var deleteWorkspace = /*#__PURE__*/function () {
3051
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(workspaceId, auth) {
3013
3052
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
3014
3053
  while (1) switch (_context4.prev = _context4.next) {
3015
3054
  case 0:
3016
3055
  return _context4.abrupt("return", fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId, {
3017
3056
  headers: getHeaders(auth),
3018
- method: 'PUT',
3019
- body: JSON.stringify(data)
3057
+ method: 'DELETE'
3020
3058
  }).then(handleResponse));
3021
3059
  case 1:
3022
3060
  case "end":
@@ -3024,16 +3062,16 @@ var updateWorkspace = /*#__PURE__*/function () {
3024
3062
  }
3025
3063
  }, _callee4);
3026
3064
  }));
3027
- return function updateWorkspace(_x6, _x7, _x8) {
3065
+ return function deleteWorkspace(_x6, _x7) {
3028
3066
  return _ref4.apply(this, arguments);
3029
3067
  };
3030
3068
  }();
3031
- var saveWorkspacePreset = /*#__PURE__*/function () {
3069
+ var updateWorkspace = /*#__PURE__*/function () {
3032
3070
  var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(workspaceId, data, auth) {
3033
3071
  return _regeneratorRuntime().wrap(function _callee5$(_context5) {
3034
3072
  while (1) switch (_context5.prev = _context5.next) {
3035
3073
  case 0:
3036
- return _context5.abrupt("return", fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId + "/", {
3074
+ return _context5.abrupt("return", fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId, {
3037
3075
  headers: getHeaders(auth),
3038
3076
  method: 'PUT',
3039
3077
  body: JSON.stringify(data)
@@ -3044,18 +3082,18 @@ var saveWorkspacePreset = /*#__PURE__*/function () {
3044
3082
  }
3045
3083
  }, _callee5);
3046
3084
  }));
3047
- return function saveWorkspacePreset(_x9, _x0, _x1) {
3085
+ return function updateWorkspace(_x8, _x9, _x0) {
3048
3086
  return _ref5.apply(this, arguments);
3049
3087
  };
3050
3088
  }();
3051
- var createWorkspace = /*#__PURE__*/function () {
3052
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(data, auth) {
3089
+ var saveWorkspacePreset = /*#__PURE__*/function () {
3090
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(workspaceId, data, auth) {
3053
3091
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
3054
3092
  while (1) switch (_context6.prev = _context6.next) {
3055
3093
  case 0:
3056
- return _context6.abrupt("return", fetch(getPresetBaseUrl() + "/workspacepreset", {
3094
+ return _context6.abrupt("return", fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId + "/", {
3057
3095
  headers: getHeaders(auth),
3058
- method: 'POST',
3096
+ method: 'PUT',
3059
3097
  body: JSON.stringify(data)
3060
3098
  }).then(handleResponse));
3061
3099
  case 1:
@@ -3064,32 +3102,78 @@ var createWorkspace = /*#__PURE__*/function () {
3064
3102
  }
3065
3103
  }, _callee6);
3066
3104
  }));
3067
- return function createWorkspace(_x10, _x11) {
3105
+ return function saveWorkspacePreset(_x1, _x10, _x11) {
3068
3106
  return _ref6.apply(this, arguments);
3069
3107
  };
3070
3108
  }();
3109
+ var createWorkspace = /*#__PURE__*/function () {
3110
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(data, auth) {
3111
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
3112
+ while (1) switch (_context7.prev = _context7.next) {
3113
+ case 0:
3114
+ return _context7.abrupt("return", fetch(getPresetBaseUrl() + "/workspacepreset", {
3115
+ headers: getHeaders(auth),
3116
+ method: 'POST',
3117
+ body: JSON.stringify(data)
3118
+ }).then(handleResponse));
3119
+ case 1:
3120
+ case "end":
3121
+ return _context7.stop();
3122
+ }
3123
+ }, _callee7);
3124
+ }));
3125
+ return function createWorkspace(_x12, _x13) {
3126
+ return _ref7.apply(this, arguments);
3127
+ };
3128
+ }();
3129
+ var saveWorkspacePresetAs = /*#__PURE__*/function () {
3130
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(data, auth) {
3131
+ var _response$headers$get;
3132
+ var response, headerLocation;
3133
+ return _regeneratorRuntime().wrap(function _callee8$(_context8) {
3134
+ while (1) switch (_context8.prev = _context8.next) {
3135
+ case 0:
3136
+ _context8.next = 2;
3137
+ return fetch(getPresetBaseUrl() + "/workspacepreset", {
3138
+ headers: getHeaders(auth),
3139
+ method: 'POST',
3140
+ body: JSON.stringify(data)
3141
+ });
3142
+ case 2:
3143
+ response = _context8.sent;
3144
+ _context8.next = 5;
3145
+ return handleResponse(response);
3146
+ case 5:
3147
+ headerLocation = (_response$headers$get = response.headers.get('Location')) != null ? _response$headers$get : response.headers.get('location');
3148
+ return _context8.abrupt("return", getIdFromUrl(headerLocation));
3149
+ case 7:
3150
+ case "end":
3151
+ return _context8.stop();
3152
+ }
3153
+ }, _callee8);
3154
+ }));
3155
+ return function saveWorkspacePresetAs(_x14, _x15) {
3156
+ return _ref8.apply(this, arguments);
3157
+ };
3158
+ }();
3071
3159
 
3072
- var API_KEY = 'workspaces-api';
3073
- // set default query options for this API
3074
- /*
3075
- configureLibraryDefaults([LIB_KEY, API_KEY], {
3076
- staleTime: 5 * 60 * 1000,
3077
- });
3078
- */
3079
- var generateWorkspaceQueryKeys = function generateWorkspaceQueryKeys(queryKeys) {
3160
+ var API_KEY = 'workspace-api';
3161
+ var generateWorkspaceQueryKeys = function generateWorkspaceQueryKeys() {
3162
+ for (var _len = arguments.length, queryKeys = new Array(_len), _key = 0; _key < _len; _key++) {
3163
+ queryKeys[_key] = arguments[_key];
3164
+ }
3080
3165
  return [LIB_KEY, API_KEY].concat(queryKeys);
3081
3166
  };
3082
3167
  var workspaceQueryOptions = {
3083
- saveWorkspacePreset: function saveWorkspacePreset$1(id, data, credentials) {
3168
+ getWorkspacePreset: function getWorkspacePreset$1(id, credentials) {
3084
3169
  return queryOptions({
3085
- queryKey: generateWorkspaceQueryKeys([id]),
3086
- staleTime: 0,
3170
+ queryKey: generateWorkspaceQueryKeys(id),
3087
3171
  queryFn: function () {
3088
3172
  var _queryFn = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
3089
3173
  return _regeneratorRuntime().wrap(function _callee$(_context) {
3090
3174
  while (1) switch (_context.prev = _context.next) {
3091
3175
  case 0:
3092
- return _context.abrupt("return", saveWorkspacePreset(id, data, credentials));
3176
+ return _context.abrupt("return", getWorkspacePreset(id, credentials));
3093
3177
  case 1:
3094
3178
  case "end":
3095
3179
  return _context.stop();
@@ -3102,196 +3186,56 @@ var workspaceQueryOptions = {
3102
3186
  return queryFn;
3103
3187
  }()
3104
3188
  });
3105
- }
3106
- };
3107
-
3108
- var viewPresetsList = [
3109
- {
3110
- title: "Radar",
3111
- abstract: "abstract radar",
3112
- id: "radar",
3113
- date: "2022-06-01T12:34:27.787184",
3114
- scope: "system"
3115
- },
3116
- {
3117
- title: "Temperature",
3118
- id: "temp",
3119
- date: "2022-06-01T12:34:27.787184",
3120
- scope: "user"
3121
- },
3122
- {
3123
- title: "Radar",
3124
- id: "screenRadar",
3125
- date: "2022-06-01T12:34:27.787184",
3126
- scope: "user",
3127
- username: "user.name"
3128
- },
3129
- {
3130
- id: "screenConfigC",
3131
- title: "Satellite",
3132
- date: "2022-06-01T12:34:27.787184",
3133
- scope: "system"
3134
- },
3135
- {
3136
- title: "map_OBSTA",
3137
- id: "map_OBSTA",
3138
- date: "2022-06-01T12:34:27.787184",
3139
- scope: "system"
3140
- },
3141
- {
3142
- title: "map_OBSPP",
3143
- id: "map_OBSPP",
3144
- date: "2022-06-01T12:34:27.787184",
3145
- scope: "system"
3146
- },
3147
- {
3148
- title: "map_OBSWind",
3149
- id: "map_OBSWind",
3150
- date: "2022-06-01T12:34:27.787184",
3151
- scope: "system"
3152
- },
3153
- {
3154
- title: "map_OBSRH",
3155
- id: "map_OBSRH",
3156
- date: "2022-06-01T12:34:27.787184",
3157
- scope: "system"
3158
- },
3159
- {
3160
- title: "map_OBSQG",
3161
- id: "map_OBSQG",
3162
- date: "2022-06-01T12:34:27.787184",
3163
- scope: "system"
3164
- },
3165
- {
3166
- title: "harmPrecip",
3167
- id: "harmPrecip",
3168
- date: "2022-06-01T12:34:27.787184",
3169
- scope: "system"
3170
- },
3171
- {
3172
- title: "harmTemp",
3173
- id: "harmTemp",
3174
- date: "2022-06-01T12:34:27.787184",
3175
- scope: "system"
3176
- },
3177
- {
3178
- title: "screenHarm",
3179
- id: "screenHarm",
3180
- date: "2022-06-01T12:34:27.787184",
3181
- scope: "system"
3182
- },
3183
- {
3184
- title: "Harmonie",
3185
- id: "viewHarmonie",
3186
- date: "2022-06-01T12:34:27.787184",
3187
- scope: "system"
3188
- },
3189
- {
3190
- title: "harmRefTime",
3191
- id: "harmRefTime",
3192
- date: "2022-06-01T12:34:27.787184",
3193
- scope: "system"
3194
- },
3195
- {
3196
- title: "harmRefTimeAll",
3197
- id: "harmRefTimeAll",
3198
- date: "2022-06-01T12:34:27.787184",
3199
- scope: "system"
3200
- },
3201
- {
3202
- title: "screenHarmAll",
3203
- id: "screenHarmAll",
3204
- date: "2022-06-01T12:34:27.787184",
3205
- scope: "system"
3206
- },
3207
- {
3208
- title: "harmPressure",
3209
- id: "harmPressure",
3210
- date: "2022-06-01T12:34:27.787184",
3211
- scope: "system"
3212
- },
3213
- {
3214
- title: "Empty map",
3215
- id: "emptyMap",
3216
- date: "2022-06-01T12:34:27.787184",
3217
- scope: "system"
3218
- },
3219
- {
3220
- title: "Timeseries map",
3221
- id: "TimeseriesMap",
3222
- date: "2022-06-01T12:34:27.787184",
3223
- scope: "system"
3224
- },
3225
- {
3226
- title: "KNMI WMS UWCW HA43 DINI forecast",
3227
- id: "view_knmi_timeseries_ha43_dini_wms",
3228
- date: "2022-06-01T12:34:27.787184",
3229
- scope: "system"
3230
- },
3231
- {
3232
- title: "KNMI EDR UWCW HA43 DINI forecast",
3233
- id: "view_knmi_timeseries_ha43_dini_edr",
3234
- date: "2022-06-01T12:34:27.787184",
3235
- scope: "system"
3236
- },
3237
- {
3238
- title: "sat",
3239
- id: "sat",
3240
- date: "2022-06-01T12:34:27.787184",
3241
- scope: "system"
3242
- },
3243
- {
3244
- title: "rad",
3245
- id: "rad",
3246
- date: "2022-06-01T12:34:27.787184",
3247
- scope: "system"
3248
- },
3249
- {
3250
- title: "screenRadAndObs",
3251
- id: "screenRadAndObs",
3252
- date: "2022-06-01T12:34:27.787184",
3253
- scope: "system"
3254
- },
3255
- {
3256
- title: "demosyncgroupbbox_radar",
3257
- id: "demosyncgroupbbox_radar",
3258
- date: "2022-06-01T12:34:27.787184",
3259
- scope: "system"
3260
- },
3261
- {
3262
- title: "demosyncgroupbbox_temp",
3263
- id: "demosyncgroupbbox_temp",
3264
- date: "2022-06-01T12:34:27.787184",
3265
- scope: "system"
3266
- },
3267
- {
3268
- title: "demosyncgrouptime_radar",
3269
- id: "demosyncgrouptime_radar",
3270
- date: "2022-06-01T12:34:27.787184",
3271
- scope: "system"
3272
- },
3273
- {
3274
- title: "demosyncgrouptime_temp",
3275
- id: "demosyncgrouptime_temp",
3276
- date: "2022-06-01T12:34:27.787184",
3277
- scope: "system"
3278
- },
3279
- {
3280
- title: "Cap Warnings",
3281
- id: "capView",
3282
- date: "2022-06-01T12:34:27.787184",
3283
- scope: "system",
3284
- abstract: "abstract cap"
3285
- },
3286
- {
3287
- title: "Warning List",
3288
- id: "warningList",
3289
- date: "2022-06-01T12:34:27.787184",
3290
- scope: "system"
3291
- }
3292
- ];
3189
+ },
3190
+ saveWorkspacePreset: function saveWorkspacePreset$1(id, data, credentials) {
3191
+ return queryOptions({
3192
+ queryKey: generateWorkspaceQueryKeys(id),
3193
+ staleTime: 0,
3194
+ queryFn: function () {
3195
+ var _queryFn2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
3196
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
3197
+ while (1) switch (_context2.prev = _context2.next) {
3198
+ case 0:
3199
+ return _context2.abrupt("return", saveWorkspacePreset(id, data, credentials));
3200
+ case 1:
3201
+ case "end":
3202
+ return _context2.stop();
3203
+ }
3204
+ }, _callee2);
3205
+ }));
3206
+ function queryFn() {
3207
+ return _queryFn2.apply(this, arguments);
3208
+ }
3209
+ return queryFn;
3210
+ }()
3211
+ });
3212
+ },
3213
+ saveWorkspacePresetAs: function saveWorkspacePresetAs$1(data, credentials) {
3214
+ return queryOptions({
3215
+ queryKey: generateWorkspaceQueryKeys('save-as'),
3216
+ staleTime: 0,
3217
+ queryFn: function () {
3218
+ var _queryFn3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
3219
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
3220
+ while (1) switch (_context3.prev = _context3.next) {
3221
+ case 0:
3222
+ return _context3.abrupt("return", saveWorkspacePresetAs(data, credentials));
3223
+ case 1:
3224
+ case "end":
3225
+ return _context3.stop();
3226
+ }
3227
+ }, _callee3);
3228
+ }));
3229
+ function queryFn() {
3230
+ return _queryFn3.apply(this, arguments);
3231
+ }
3232
+ return queryFn;
3233
+ }()
3234
+ });
3235
+ }
3236
+ };
3293
3237
 
3294
- var workspacePresetsListFullContent = [
3238
+ var workspacePresets = [
3295
3239
  {
3296
3240
  id: "screenConfigRadarTemp",
3297
3241
  title: "Radar and temperature",
@@ -4453,6 +4397,27 @@ var workspacePresetsListFullContent = [
4453
4397
  }
4454
4398
  ],
4455
4399
  mosaicNode: "radarView"
4400
+ },
4401
+ {
4402
+ id: "test-1",
4403
+ title: "Test view preset error",
4404
+ scope: "system",
4405
+ username: "user.name",
4406
+ abstract: "",
4407
+ viewType: "multiWindow",
4408
+ views: [
4409
+ {
4410
+ mosaicNodeId: "screen_no_1",
4411
+ viewPresetId: "temp"
4412
+ }
4413
+ ],
4414
+ syncGroups: [
4415
+ {
4416
+ id: "Area_RadarTemp",
4417
+ type: "SYNCGROUPS_TYPE_SETBBOX"
4418
+ }
4419
+ ],
4420
+ mosaicNode: "screen_no_1"
4456
4421
  }
4457
4422
  ];
4458
4423
 
@@ -4614,11 +4579,6 @@ var workspacePresetsList = [
4614
4579
  ];
4615
4580
 
4616
4581
  var ERROR_NOT_FOUND = 'Request failed with status code 400';
4617
- var extractWorkspacePresetFromJSON = function extractWorkspacePresetFromJSON(workspacePresetId) {
4618
- return workspacePresetsListFullContent.find(function (element) {
4619
- return element.id === workspacePresetId;
4620
- });
4621
- };
4622
4582
  var filterWorkspacePresetList = function filterWorkspacePresetList(params) {
4623
4583
  if (isEmpty(params)) {
4624
4584
  return workspacePresetsList;
@@ -4635,28 +4595,6 @@ var filterWorkspacePresetList = function filterWorkspacePresetList(params) {
4635
4595
  return list;
4636
4596
  }, []);
4637
4597
  };
4638
- var filterViewPresetList = function filterViewPresetList(params) {
4639
- if (isEmpty(params)) {
4640
- return viewPresetsList;
4641
- }
4642
- return viewPresetsList.reduce(function (list, viewPresetRaw) {
4643
- var _params$scope;
4644
- var workspacePreset = viewPresetRaw;
4645
- if (params != null && (_params$scope = params.scope) != null && _params$scope.includes(workspacePreset.scope)) {
4646
- return list.concat(workspacePreset);
4647
- }
4648
- return list;
4649
- }, []);
4650
- };
4651
- var sortViewPresets = function sortViewPresets(viewPresets) {
4652
- var presetOrder = ['system', 'user'];
4653
- return [].concat(viewPresets).sort(function (left, right) {
4654
- if (left.scope === right.scope) {
4655
- return left.title.localeCompare(right.title);
4656
- }
4657
- return presetOrder.indexOf(left.scope) - presetOrder.indexOf(right.scope);
4658
- });
4659
- };
4660
4598
  var getApiRoutes = function getApiRoutes(axiosInstance) {
4661
4599
  return {
4662
4600
  getWorkspacePresets: function () {
@@ -4683,112 +4621,42 @@ var getApiRoutes = function getApiRoutes(axiosInstance) {
4683
4621
  }
4684
4622
  return getWorkspacePresets;
4685
4623
  }(),
4686
- getWorkspacePreset: function () {
4687
- var _getWorkspacePreset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(workspacePresetId) {
4624
+ saveViewPreset: function () {
4625
+ var _saveViewPreset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(presetId, data) {
4688
4626
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
4689
4627
  while (1) switch (_context2.prev = _context2.next) {
4690
- case 0:
4691
- return _context2.abrupt("return", axiosInstance.get("/workspacepreset/" + workspacePresetId).then(function () {
4692
- if (!extractWorkspacePresetFromJSON(workspacePresetId)) {
4693
- throw new Error(ERROR_NOT_FOUND);
4694
- }
4695
- return {
4696
- data: extractWorkspacePresetFromJSON(workspacePresetId)
4697
- };
4698
- }));
4699
- case 1:
4700
- case "end":
4701
- return _context2.stop();
4702
- }
4703
- }, _callee2);
4704
- }));
4705
- function getWorkspacePreset(_x2) {
4706
- return _getWorkspacePreset.apply(this, arguments);
4707
- }
4708
- return getWorkspacePreset;
4709
- }(),
4710
- saveWorkspacePresetAs: function () {
4711
- var _saveWorkspacePresetAs = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(data) {
4712
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
4713
- while (1) switch (_context3.prev = _context3.next) {
4714
- case 0:
4715
- // eslint-disable-next-line no-console
4716
- console.log('api: save workspace preset as', data);
4717
- return _context3.abrupt("return", axiosInstance.post("/workspacepreset/", data).then(function () {
4718
- return null;
4719
- }));
4720
- case 2:
4721
- case "end":
4722
- return _context3.stop();
4723
- }
4724
- }, _callee3);
4725
- }));
4726
- function saveWorkspacePresetAs(_x3) {
4727
- return _saveWorkspacePresetAs.apply(this, arguments);
4728
- }
4729
- return saveWorkspacePresetAs;
4730
- }(),
4731
- // view presets
4732
- getViewPresets: function () {
4733
- var _getViewPresets = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(params) {
4734
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
4735
- while (1) switch (_context4.prev = _context4.next) {
4736
- case 0:
4737
- return _context4.abrupt("return", axiosInstance.get('/viewpreset', {
4738
- params: params
4739
- }).then(function () {
4740
- var data = filterViewPresetList(params);
4741
- return {
4742
- data: sortViewPresets(data)
4743
- };
4744
- }));
4745
- case 1:
4746
- case "end":
4747
- return _context4.stop();
4748
- }
4749
- }, _callee4);
4750
- }));
4751
- function getViewPresets(_x4) {
4752
- return _getViewPresets.apply(this, arguments);
4753
- }
4754
- return getViewPresets;
4755
- }(),
4756
- saveViewPreset: function () {
4757
- var _saveViewPreset = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(presetId, data) {
4758
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
4759
- while (1) switch (_context5.prev = _context5.next) {
4760
4628
  case 0:
4761
4629
  // eslint-disable-next-line no-console
4762
4630
  console.log('api: save view preset', presetId, data);
4763
- return _context5.abrupt("return", axiosInstance.put("/viewpreset/" + presetId + "/", data));
4631
+ return _context2.abrupt("return", axiosInstance.put("/viewpreset/" + presetId + "/", data));
4764
4632
  case 2:
4765
4633
  case "end":
4766
- return _context5.stop();
4634
+ return _context2.stop();
4767
4635
  }
4768
- }, _callee5);
4636
+ }, _callee2);
4769
4637
  }));
4770
- function saveViewPreset(_x5, _x6) {
4638
+ function saveViewPreset(_x2, _x3) {
4771
4639
  return _saveViewPreset.apply(this, arguments);
4772
4640
  }
4773
4641
  return saveViewPreset;
4774
4642
  }(),
4775
4643
  saveViewPresetAs: function () {
4776
- var _saveViewPresetAs = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(data) {
4777
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
4778
- while (1) switch (_context6.prev = _context6.next) {
4644
+ var _saveViewPresetAs = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(data) {
4645
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
4646
+ while (1) switch (_context3.prev = _context3.next) {
4779
4647
  case 0:
4780
4648
  // eslint-disable-next-line no-console
4781
4649
  console.log('api: save view preset as', data);
4782
- return _context6.abrupt("return", axiosInstance.post("/viewpreset/", data).then(function () {
4650
+ return _context3.abrupt("return", axiosInstance.post("/viewpreset/", data).then(function () {
4783
4651
  return null;
4784
4652
  }));
4785
4653
  case 2:
4786
4654
  case "end":
4787
- return _context6.stop();
4655
+ return _context3.stop();
4788
4656
  }
4789
- }, _callee6);
4657
+ }, _callee3);
4790
4658
  }));
4791
- function saveViewPresetAs(_x7) {
4659
+ function saveViewPresetAs(_x4) {
4792
4660
  return _saveViewPresetAs.apply(this, arguments);
4793
4661
  }
4794
4662
  return saveViewPresetAs;
@@ -5037,14 +4905,15 @@ workspaceListListener.startListening({
5037
4905
  actionCreator: workspaceListActions.submitFormWorkspaceActionDialogOptions,
5038
4906
  effect: function () {
5039
4907
  var _effect3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_ref3, listenerApi) {
5040
- var payload, workspaceApi, workspaceState, presetId, presetAction, data, emptyMapPresetTitle, emptyWorkspacePresetTitle, scope, _listenerApi$getState, _yield$workspaceApi$g2, originalData, workspaceDataNewTitle, credentials, _originalData$views, _listenerApi$getState2, _data$views2, _yield$workspaceApi$g3, _originalData, mergedViews, payloadToSave, _credentials, isSaveWorkspaceAction, isSaveAsWorkspaceAction, hasWorkspaceAlreadyBeenSaved, workspaceId, workspaceData, viewsWithInitialProps, newWorkspace, hasChanges, _listenerApi$getState3, _credentials2, message, category;
4908
+ var _listenerApi$getState;
4909
+ var payload, workspaceState, credentials, presetId, presetAction, data, emptyMapPresetTitle, emptyWorkspacePresetTitle, scope, originalData, workspaceDataNewTitle, _originalData$views, _data$views2, _originalData, mergedViews, payloadToSave, isSaveWorkspaceAction, isSaveAsWorkspaceAction, hasWorkspaceAlreadyBeenSaved, workspaceId, workspaceData, viewsWithInitialProps, newWorkspace, _listenerApi$getState2, _credentials, hasChanges, message, category;
5041
4910
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
5042
4911
  while (1) switch (_context3.prev = _context3.next) {
5043
4912
  case 0:
5044
4913
  payload = _ref3.payload;
5045
4914
  listenerApi.cancelActiveListeners();
5046
- workspaceApi = getWorkspaceApi();
5047
4915
  workspaceState = listenerApi.getState();
4916
+ credentials = (_listenerApi$getState = listenerApi.getState().common) == null || (_listenerApi$getState = _listenerApi$getState.auth) == null ? void 0 : _listenerApi$getState.credentials;
5048
4917
  _context3.prev = 4;
5049
4918
  presetId = payload.presetId, presetAction = payload.presetAction, data = payload.data, emptyMapPresetTitle = payload.emptyMapPresetTitle, emptyWorkspacePresetTitle = payload.emptyWorkspacePresetTitle;
5050
4919
  scope = data.scope || 'user'; // duplicate
@@ -5057,10 +4926,9 @@ workspaceListListener.startListening({
5057
4926
  break;
5058
4927
  }
5059
4928
  _context3.next = 12;
5060
- return workspaceApi.getWorkspacePreset(presetId);
4929
+ return getQueryClient().fetchQuery(workspaceQueryOptions.getWorkspacePreset(presetId, credentials));
5061
4930
  case 12:
5062
- _yield$workspaceApi$g2 = _context3.sent;
5063
- originalData = _yield$workspaceApi$g2.data;
4931
+ originalData = _context3.sent;
5064
4932
  workspaceDataNewTitle = Object.assign({}, originalData, {
5065
4933
  title: data.title,
5066
4934
  "abstract": data["abstract"],
@@ -5069,9 +4937,11 @@ workspaceListListener.startListening({
5069
4937
  updated: data.updated,
5070
4938
  updatedBy: data.updatedBy
5071
4939
  });
5072
- credentials = (_listenerApi$getState = listenerApi.getState().common) == null || (_listenerApi$getState = _listenerApi$getState.auth) == null ? void 0 : _listenerApi$getState.credentials;
5073
- _context3.next = 18;
4940
+ _context3.next = 16;
5074
4941
  return getQueryClient().fetchQuery(workspaceQueryOptions.saveWorkspacePreset(presetId, workspaceDataNewTitle, credentials));
4942
+ case 16:
4943
+ _context3.next = 18;
4944
+ return getQueryClient().invalidateQueries(workspaceQueryOptions.getWorkspacePreset(presetId, credentials));
5075
4945
  case 18:
5076
4946
  listenerApi.dispatch(workspaceListActions.onSuccessWorkspacePresetAction({
5077
4947
  workspaceId: presetId,
@@ -5090,10 +4960,9 @@ workspaceListListener.startListening({
5090
4960
  break;
5091
4961
  }
5092
4962
  _context3.next = 22;
5093
- return workspaceApi.getWorkspacePreset(presetId);
4963
+ return getQueryClient().fetchQuery(workspaceQueryOptions.getWorkspacePreset(presetId, credentials));
5094
4964
  case 22:
5095
- _yield$workspaceApi$g3 = _context3.sent;
5096
- _originalData = _yield$workspaceApi$g3.data;
4965
+ _originalData = _context3.sent;
5097
4966
  // 2) Merge the single (or few) edited view titles from `data.views`
5098
4967
  mergedViews = ((_originalData$views = _originalData.views) != null ? _originalData$views : []).map(function (view) {
5099
4968
  var _data$views, _updated$title;
@@ -5107,9 +4976,11 @@ workspaceListListener.startListening({
5107
4976
  payloadToSave = Object.assign({}, _originalData, {
5108
4977
  views: mergedViews
5109
4978
  });
5110
- _credentials = (_listenerApi$getState2 = listenerApi.getState().common) == null || (_listenerApi$getState2 = _listenerApi$getState2.auth) == null ? void 0 : _listenerApi$getState2.credentials;
4979
+ _context3.next = 27;
4980
+ return getQueryClient().fetchQuery(workspaceQueryOptions.saveWorkspacePreset(presetId, payloadToSave, credentials));
4981
+ case 27:
5111
4982
  _context3.next = 29;
5112
- return getQueryClient().fetchQuery(workspaceQueryOptions.saveWorkspacePreset(presetId, payloadToSave, _credentials));
4983
+ return getQueryClient().invalidateQueries(workspaceQueryOptions.getWorkspacePreset(presetId, credentials));
5113
4984
  case 29:
5114
4985
  // 4) Notify success so reducer updates local state
5115
4986
  listenerApi.dispatch(workspaceListActions.onSuccessWorkspacePresetAction({
@@ -5128,7 +4999,7 @@ workspaceListListener.startListening({
5128
4999
  isSaveWorkspaceAction = presetAction === WorkspacePresetAction.SAVE_SYSTEM_PRESET || presetAction === WorkspacePresetAction.SAVE;
5129
5000
  isSaveAsWorkspaceAction = presetAction === WorkspacePresetAction.SAVE_SYSTEM_PRESET_AS || presetAction === WorkspacePresetAction.SAVE_AS;
5130
5001
  if (!(isSaveWorkspaceAction || isSaveAsWorkspaceAction)) {
5131
- _context3.next = 52;
5002
+ _context3.next = 54;
5132
5003
  break;
5133
5004
  }
5134
5005
  hasWorkspaceAlreadyBeenSaved = getWorkspaceDialogIsSaved(workspaceState);
@@ -5152,33 +5023,36 @@ workspaceListListener.startListening({
5152
5023
  views: viewsWithInitialProps
5153
5024
  });
5154
5025
  if (!(!hasWorkspaceAlreadyBeenSaved && isSaveAsWorkspaceAction)) {
5155
- _context3.next = 43;
5026
+ _context3.next = 44;
5156
5027
  break;
5157
5028
  }
5158
- _context3.next = 41;
5159
- return workspaceApi.saveWorkspacePresetAs(newWorkspace);
5160
- case 41:
5029
+ _credentials = (_listenerApi$getState2 = listenerApi.getState().common) == null || (_listenerApi$getState2 = _listenerApi$getState2.auth) == null ? void 0 : _listenerApi$getState2.credentials;
5030
+ _context3.next = 42;
5031
+ return getQueryClient().fetchQuery(workspaceQueryOptions.saveWorkspacePresetAs(newWorkspace, _credentials));
5032
+ case 42:
5161
5033
  workspaceId = _context3.sent;
5162
5034
  newWorkspace = Object.assign({}, newWorkspace, {
5163
5035
  id: workspaceId
5164
5036
  });
5165
- case 43:
5037
+ case 44:
5166
5038
  listenerApi.dispatch(workspaceListActions.onSuccessWorkspaceSaveDialog({
5167
5039
  presetId: workspaceId
5168
5040
  }));
5169
5041
  if (isSaveAsWorkspaceAction) {
5170
- _context3.next = 50;
5042
+ _context3.next = 52;
5171
5043
  break;
5172
5044
  }
5173
5045
  hasChanges = hasWorkspaceChanges(listenerApi.getState());
5174
5046
  if (!hasChanges) {
5175
- _context3.next = 50;
5047
+ _context3.next = 52;
5176
5048
  break;
5177
5049
  }
5178
- _credentials2 = (_listenerApi$getState3 = listenerApi.getState().common) == null || (_listenerApi$getState3 = _listenerApi$getState3.auth) == null ? void 0 : _listenerApi$getState3.credentials;
5179
5050
  _context3.next = 50;
5180
- return getQueryClient().fetchQuery(workspaceQueryOptions.saveWorkspacePreset(workspaceId, newWorkspace, _credentials2));
5051
+ return getQueryClient().fetchQuery(workspaceQueryOptions.saveWorkspacePreset(workspaceId, newWorkspace, credentials));
5181
5052
  case 50:
5053
+ _context3.next = 52;
5054
+ return getQueryClient().invalidateQueries(workspaceQueryOptions.getWorkspacePreset(presetId, credentials));
5055
+ case 52:
5182
5056
  listenerApi.dispatch(workspaceListActions.onSuccessWorkspacePresetAction({
5183
5057
  action: presetAction,
5184
5058
  workspaceId: workspaceId,
@@ -5191,7 +5065,7 @@ workspaceListListener.startListening({
5191
5065
  listenerApi.dispatch(routerActions.navigateToUrl({
5192
5066
  url: getWorkspaceRouteUrl(workspaceId)
5193
5067
  }));
5194
- case 52:
5068
+ case 54:
5195
5069
  // Reset
5196
5070
  if (presetAction === WorkspacePresetAction.RESET) {
5197
5071
  // In case we're resetting the `New workspace` preset
@@ -5216,10 +5090,10 @@ workspaceListListener.startListening({
5216
5090
  scope: scope
5217
5091
  }));
5218
5092
  }
5219
- _context3.next = 60;
5093
+ _context3.next = 62;
5220
5094
  break;
5221
- case 55:
5222
- _context3.prev = 55;
5095
+ case 57:
5096
+ _context3.prev = 57;
5223
5097
  _context3.t0 = _context3["catch"](4);
5224
5098
  message = isAxiosError(_context3.t0) ? getAxiosErrorMessage(_context3.t0) : _context3.t0.message;
5225
5099
  category = isAxiosAuthError(_context3.t0) ? WorkspaceListErrorCategory.AUTH : WorkspaceListErrorCategory.GENERIC;
@@ -5230,11 +5104,11 @@ workspaceListListener.startListening({
5230
5104
  message: message
5231
5105
  }
5232
5106
  }));
5233
- case 60:
5107
+ case 62:
5234
5108
  case "end":
5235
5109
  return _context3.stop();
5236
5110
  }
5237
- }, _callee3, null, [[4, 55]]);
5111
+ }, _callee3, null, [[4, 57]]);
5238
5112
  }));
5239
5113
  function effect(_x5, _x6) {
5240
5114
  return _effect3.apply(this, arguments);
@@ -5307,20 +5181,25 @@ workspaceListener.startListening({
5307
5181
  actionCreator: workspaceActions.changePreset,
5308
5182
  effect: function () {
5309
5183
  var _effect3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_ref3, listenerApi) {
5310
- var _payload$workspacePre, _payload$workspacePre2;
5311
- var payload, allSyncGroups, isTimeScrollingEnabled, views;
5184
+ var _listenerApi$getOrigi, _payload$workspacePre, _payload$workspacePre2;
5185
+ var payload, originalMosaicNode, allSyncGroups, isTimeScrollingEnabled, views;
5312
5186
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
5313
5187
  while (1) switch (_context4.prev = _context4.next) {
5314
5188
  case 0:
5315
5189
  payload = _ref3.payload;
5316
5190
  // Cancel any in-progress instances of this listener
5317
5191
  listenerApi.cancelActiveListeners();
5318
- _context4.next = 4;
5319
- return listenerApi.condition(function (_action, currentState) {
5320
- var _currentState$workspa;
5321
- return ((_currentState$workspa = currentState.workspace) == null ? void 0 : _currentState$workspa.mosaicNode) === '';
5322
- }, 500);
5323
- case 4:
5192
+ // Unmount old components before changing workspace preset
5193
+ // Check state BEFORE reducer ran - if there was a workspace,
5194
+ // wait for React to unmount old components before setting up new ones
5195
+ originalMosaicNode = (_listenerApi$getOrigi = listenerApi.getOriginalState().workspace) == null ? void 0 : _listenerApi$getOrigi.mosaicNode;
5196
+ if (!originalMosaicNode) {
5197
+ _context4.next = 6;
5198
+ break;
5199
+ }
5200
+ _context4.next = 6;
5201
+ return listenerApi.take(workspaceActions.teardownComplete.match);
5202
+ case 6:
5324
5203
  listenerApi.dispatch(syncGroupsActions.syncGroupClear());
5325
5204
  listenerApi.dispatch(workspaceActions.setPreset(payload));
5326
5205
  allSyncGroups = getSyncGroups(payload.workspacePreset.syncGroups);
@@ -5335,7 +5214,7 @@ workspaceListener.startListening({
5335
5214
  isTimeScrollingEnabled: isTimeScrollingEnabled
5336
5215
  }));
5337
5216
  views = toViewsArray(payload.workspacePreset.views);
5338
- _context4.next = 14;
5217
+ _context4.next = 16;
5339
5218
  return Promise.all(views.map(/*#__PURE__*/function () {
5340
5219
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(view) {
5341
5220
  var _view$initialProps$sy, _view$initialProps;
@@ -5367,7 +5246,7 @@ workspaceListener.startListening({
5367
5246
  return _ref4.apply(this, arguments);
5368
5247
  };
5369
5248
  }()));
5370
- case 14:
5249
+ case 16:
5371
5250
  views.forEach(function (view) {
5372
5251
  var panelId = view.mosaicNodeId;
5373
5252
  if (!panelId) {
@@ -5379,7 +5258,7 @@ workspaceListener.startListening({
5379
5258
  isInline: hasInlineConfig
5380
5259
  }));
5381
5260
  });
5382
- case 15:
5261
+ case 17:
5383
5262
  case "end":
5384
5263
  return _context4.stop();
5385
5264
  }
@@ -5405,7 +5284,7 @@ var fetchWorkspaceViewPreset = /*#__PURE__*/function () {
5405
5284
  }));
5406
5285
  // fetch view
5407
5286
  _context5.next = 4;
5408
- return getQueryClient().fetchQuery(viewpresetsQueryOptions.getViewPreset(viewPresetId, credentials));
5287
+ return getQueryClient().fetchQuery(viewpresetQueryOptions.getViewPreset(viewPresetId, credentials));
5409
5288
  case 4:
5410
5289
  data = _context5.sent;
5411
5290
  dispatch(viewPresetActions.fetchedViewPreset({
@@ -5479,7 +5358,7 @@ workspaceListener.startListening({
5479
5358
  matcher: isAnyOf(workspaceActions.fetchWorkspace, routerActions.navigateBackOrForward),
5480
5359
  effect: function () {
5481
5360
  var _effect5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9(action, listenerApi) {
5482
- var _listenerApi$getState2, common, payload, workspaceId, workspaceApi, _yield$workspaceApi$g, workspaceData, fullLoadingWorkspace, workspaceIdsInBatches, actionsToDispatch, errorType;
5361
+ var _listenerApi$getState2, common, payload, workspaceId, _common$auth, workspaceData, fullLoadingWorkspace, workspaceIdsInBatches, actionsToDispatch, errorType;
5483
5362
  return _regeneratorRuntime().wrap(function _callee9$(_context9) {
5484
5363
  while (1) switch (_context9.prev = _context9.next) {
5485
5364
  case 0:
@@ -5498,18 +5377,16 @@ workspaceListener.startListening({
5498
5377
  isWorkspaceListDialogOpen: false
5499
5378
  }));
5500
5379
  // fetch workspace
5501
- workspaceApi = getWorkspaceApi();
5502
- _context9.next = 10;
5503
- return workspaceApi.getWorkspacePreset(workspaceId);
5504
- case 10:
5505
- _yield$workspaceApi$g = _context9.sent;
5506
- workspaceData = _yield$workspaceApi$g.data;
5380
+ _context9.next = 9;
5381
+ return getQueryClient().fetchQuery(workspaceQueryOptions.getWorkspacePreset(workspaceId, common == null || (_common$auth = common.auth) == null ? void 0 : _common$auth.credentials));
5382
+ case 9:
5383
+ workspaceData = _context9.sent;
5507
5384
  if (workspaceData) {
5508
- _context9.next = 14;
5385
+ _context9.next = 12;
5509
5386
  break;
5510
5387
  }
5511
5388
  throw new Error(ERROR_NOT_FOUND);
5512
- case 14:
5389
+ case 12:
5513
5390
  listenerApi.dispatch(workspaceActions.loadedWorkspace({
5514
5391
  workspaceId: workspaceId,
5515
5392
  workspace: workspaceData
@@ -5519,17 +5396,16 @@ workspaceListener.startListening({
5519
5396
  listenerApi.dispatch(workspaceActions.changePreset({
5520
5397
  workspacePreset: fullLoadingWorkspace
5521
5398
  }));
5522
- // wait for teardown of previous workspace to finish
5523
- _context9.next = 19;
5524
- return listenerApi.condition(function (_action, currentState) {
5525
- var _currentState$workspa2;
5526
- return ((_currentState$workspa2 = currentState.workspace) == null ? void 0 : _currentState$workspa2.id) === fullLoadingWorkspace.id;
5527
- }, 500);
5528
- case 19:
5399
+ _context9.next = 17;
5400
+ return listenerApi.condition(function (_, state) {
5401
+ var _state$workspace;
5402
+ return ((_state$workspace = state.workspace) == null ? void 0 : _state$workspace.id) === fullLoadingWorkspace.id;
5403
+ });
5404
+ case 17:
5529
5405
  // fetch all individual view presets in batches and collect all actions
5530
5406
  workspaceIdsInBatches = getListInChunks(workspaceData.views);
5531
5407
  actionsToDispatch = [];
5532
- _context9.next = 23;
5408
+ _context9.next = 21;
5533
5409
  return Promise.all(workspaceIdsInBatches.map(/*#__PURE__*/function () {
5534
5410
  var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(batchCall) {
5535
5411
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
@@ -5568,14 +5444,21 @@ workspaceListener.startListening({
5568
5444
  return _ref7.apply(this, arguments);
5569
5445
  };
5570
5446
  }()));
5571
- case 23:
5447
+ case 21:
5572
5448
  // Trigger all actions at once
5573
5449
  actionsToDispatch.map(listenerApi.dispatch);
5574
- _context9.next = 30;
5450
+ _context9.next = 31;
5575
5451
  break;
5576
- case 26:
5577
- _context9.prev = 26;
5452
+ case 24:
5453
+ _context9.prev = 24;
5578
5454
  _context9.t0 = _context9["catch"](4);
5455
+ if (!listenerApi.signal.aborted) {
5456
+ _context9.next = 29;
5457
+ break;
5458
+ }
5459
+ console.warn('Fetch workspace listener was canceled, this should not happen too often. Triggers on mount in strict mode.');
5460
+ return _context9.abrupt("return");
5461
+ case 29:
5579
5462
  errorType = _context9.t0.message === ERROR_NOT_FOUND ? WorkspaceErrorType.NOT_FOUND : WorkspaceErrorType.GENERIC;
5580
5463
  listenerApi.dispatch(workspaceActions.errorWorkspace({
5581
5464
  workspaceId: workspaceId,
@@ -5584,11 +5467,11 @@ workspaceListener.startListening({
5584
5467
  type: errorType
5585
5468
  }
5586
5469
  }));
5587
- case 30:
5470
+ case 31:
5588
5471
  case "end":
5589
5472
  return _context9.stop();
5590
5473
  }
5591
- }, _callee9, null, [[4, 26]]);
5474
+ }, _callee9, null, [[4, 24]]);
5592
5475
  }));
5593
5476
  function effect(_x12, _x13) {
5594
5477
  return _effect5.apply(this, arguments);
@@ -5613,6 +5496,9 @@ workspaceListener.startListening({
5613
5496
  _context0.next = 7;
5614
5497
  return getQueryClient().fetchQuery(workspaceQueryOptions.saveWorkspacePreset(workspace.id, workspace, credentials));
5615
5498
  case 7:
5499
+ _context0.next = 9;
5500
+ return getQueryClient().invalidateQueries(workspaceQueryOptions.getWorkspacePreset(workspace.id, credentials));
5501
+ case 9:
5616
5502
  listenerApi.dispatch(workspaceActions.loadedWorkspace(undefined));
5617
5503
  listenerApi.dispatch(workspaceListActions.onSuccessWorkspacePresetAction({
5618
5504
  action: WorkspacePresetAction.SAVE,
@@ -5621,10 +5507,10 @@ workspaceListener.startListening({
5621
5507
  scope: (_workspace$scope = workspace.scope) != null ? _workspace$scope : 'user',
5622
5508
  views: workspace.views || [emptyWorkspaceBEData]
5623
5509
  }));
5624
- _context0.next = 14;
5510
+ _context0.next = 16;
5625
5511
  break;
5626
- case 11:
5627
- _context0.prev = 11;
5512
+ case 13:
5513
+ _context0.prev = 13;
5628
5514
  _context0.t0 = _context0["catch"](3);
5629
5515
  listenerApi.dispatch(workspaceActions.errorWorkspace({
5630
5516
  workspaceId: workspace.id,
@@ -5633,11 +5519,11 @@ workspaceListener.startListening({
5633
5519
  type: WorkspaceErrorType.SAVE
5634
5520
  }
5635
5521
  }));
5636
- case 14:
5522
+ case 16:
5637
5523
  case "end":
5638
5524
  return _context0.stop();
5639
5525
  }
5640
- }, _callee0, null, [[3, 11]]);
5526
+ }, _callee0, null, [[3, 13]]);
5641
5527
  }));
5642
5528
  function effect(_x16, _x17) {
5643
5529
  return _effect6.apply(this, arguments);
@@ -5649,17 +5535,24 @@ workspaceListener.startListening({
5649
5535
  actionCreator: workspaceActions.changeToEmptyMapWorkspace,
5650
5536
  effect: function () {
5651
5537
  var _effect7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee1(action, listenerApi) {
5652
- var _action$payload, newMapPresetText, newWorkspaceText, intialViewMapPreset;
5538
+ var _action$payload, newMapPresetText, newWorkspaceText, currentWorkspace, intialViewMapPreset;
5653
5539
  return _regeneratorRuntime().wrap(function _callee1$(_context1) {
5654
5540
  while (1) switch (_context1.prev = _context1.next) {
5655
5541
  case 0:
5656
5542
  _action$payload = action.payload, newMapPresetText = _action$payload.newMapPresetText, newWorkspaceText = _action$payload.newWorkspaceText; // Cancel any in-progress instances of this listener
5657
5543
  listenerApi.cancelActiveListeners();
5544
+ currentWorkspace = listenerApi.getState().workspace;
5545
+ if (!((currentWorkspace == null ? void 0 : currentWorkspace.id) === '' && currentWorkspace != null && currentWorkspace.mosaicNode)) {
5546
+ _context1.next = 5;
5547
+ break;
5548
+ }
5549
+ return _context1.abrupt("return");
5550
+ case 5:
5658
5551
  intialViewMapPreset = mapSelectors.getdefaultMapSettings(listenerApi.getState());
5659
5552
  listenerApi.dispatch(workspaceActions.changePreset({
5660
5553
  workspacePreset: createCustomEmptyMapWorkspace(newWorkspaceText, newMapPresetText, intialViewMapPreset)
5661
5554
  }));
5662
- case 4:
5555
+ case 7:
5663
5556
  case "end":
5664
5557
  return _context1.stop();
5665
5558
  }
@@ -5752,27 +5645,46 @@ workspaceListener.startListening({
5752
5645
  return effect;
5753
5646
  }()
5754
5647
  });
5648
+ var waitForFrame = /*#__PURE__*/function () {
5649
+ var _ref1 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {
5650
+ return _regeneratorRuntime().wrap(function _callee11$(_context11) {
5651
+ while (1) switch (_context11.prev = _context11.next) {
5652
+ case 0:
5653
+ return _context11.abrupt("return", new Promise(function (resolve) {
5654
+ requestAnimationFrame(function () {
5655
+ return resolve();
5656
+ });
5657
+ }));
5658
+ case 1:
5659
+ case "end":
5660
+ return _context11.stop();
5661
+ }
5662
+ }, _callee11);
5663
+ }));
5664
+ return function waitForFrame() {
5665
+ return _ref1.apply(this, arguments);
5666
+ };
5667
+ }();
5755
5668
  workspaceListener.startListening({
5756
5669
  actionCreator: workspaceActions.updateWorkspaceViews,
5757
5670
  effect: function () {
5758
- var _effect9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11(_, listenerApi) {
5671
+ var _effect9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee12(_, listenerApi) {
5759
5672
  var viewIds;
5760
- return _regeneratorRuntime().wrap(function _callee11$(_context11) {
5761
- while (1) switch (_context11.prev = _context11.next) {
5673
+ return _regeneratorRuntime().wrap(function _callee12$(_context12) {
5674
+ while (1) switch (_context12.prev = _context12.next) {
5762
5675
  case 0:
5763
5676
  // Cancel any in-progress instances of this listener
5764
5677
  listenerApi.cancelActiveListeners();
5765
- // Delay before starting actual work
5766
- _context11.next = 3;
5767
- return listenerApi.delay(100);
5678
+ _context12.next = 3;
5679
+ return waitForFrame();
5768
5680
  case 3:
5769
5681
  /* This will trigger all maps and other components
5770
5682
  to get the correct size after views are updated */
5771
5683
  window.dispatchEvent(new Event('resize'));
5772
5684
  // Adjust the bbox of the original view after the new map is added. This is a temporal solution until the OpenLayers ticket
5773
5685
  // https://github.com/openlayers/openlayers/issues/16572 is solved.
5774
- _context11.next = 6;
5775
- return listenerApi.delay(10);
5686
+ _context12.next = 6;
5687
+ return waitForFrame();
5776
5688
  case 6:
5777
5689
  viewIds = getViewIds(listenerApi.getState());
5778
5690
  viewIds.forEach(function (viewId) {
@@ -5788,9 +5700,9 @@ workspaceListener.startListening({
5788
5700
  });
5789
5701
  case 8:
5790
5702
  case "end":
5791
- return _context11.stop();
5703
+ return _context12.stop();
5792
5704
  }
5793
- }, _callee11);
5705
+ }, _callee12);
5794
5706
  }));
5795
5707
  function effect(_x22, _x23) {
5796
5708
  return _effect9.apply(this, arguments);
@@ -5908,39 +5820,38 @@ viewPresetsListener.startListening({
5908
5820
  actionCreator: viewPresetActions.fetchViewPresets,
5909
5821
  effect: function () {
5910
5822
  var _effect = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref, listenerApi) {
5911
- var payload, panelId, filterParams, workspaceApi, _yield$workspaceApi$g, viewPresets;
5823
+ var payload, _listenerApi$getState, common, panelId, filterParams, viewPresets;
5912
5824
  return _regeneratorRuntime().wrap(function _callee$(_context) {
5913
5825
  while (1) switch (_context.prev = _context.next) {
5914
5826
  case 0:
5915
5827
  payload = _ref.payload;
5916
5828
  listenerApi.cancelActiveListeners();
5829
+ _listenerApi$getState = listenerApi.getState(), common = _listenerApi$getState.common;
5917
5830
  panelId = payload.panelId, filterParams = payload.filterParams;
5918
- _context.prev = 3;
5919
- workspaceApi = getWorkspaceApi();
5831
+ _context.prev = 4;
5920
5832
  _context.next = 7;
5921
- return workspaceApi.getViewPresets(filterParams);
5833
+ return getQueryClient().fetchQuery(viewpresetQueryOptions.getViewPresets(filterParams, common == null ? void 0 : common.auth.credentials));
5922
5834
  case 7:
5923
- _yield$workspaceApi$g = _context.sent;
5924
- viewPresets = _yield$workspaceApi$g.data;
5835
+ viewPresets = _context.sent;
5925
5836
  listenerApi.dispatch(viewPresetActions.fetchedViewPresets({
5926
5837
  viewPresets: viewPresets,
5927
5838
  panelId: panelId,
5928
5839
  filterParams: filterParams
5929
5840
  }));
5930
- _context.next = 15;
5841
+ _context.next = 14;
5931
5842
  break;
5932
- case 12:
5933
- _context.prev = 12;
5934
- _context.t0 = _context["catch"](3);
5843
+ case 11:
5844
+ _context.prev = 11;
5845
+ _context.t0 = _context["catch"](4);
5935
5846
  listenerApi.dispatch(viewPresetActions.errorViewPreset({
5936
5847
  error: processError(_context.t0, ViewPresetErrorComponent.PRESET_LIST, 'workspace-mappreset-error-fetch'),
5937
5848
  panelId: panelId
5938
5849
  }));
5939
- case 15:
5850
+ case 14:
5940
5851
  case "end":
5941
5852
  return _context.stop();
5942
5853
  }
5943
- }, _callee, null, [[3, 12]]);
5854
+ }, _callee, null, [[4, 11]]);
5944
5855
  }));
5945
5856
  function effect(_x, _x2) {
5946
5857
  return _effect.apply(this, arguments);
@@ -5953,21 +5864,20 @@ viewPresetsListener.startListening({
5953
5864
  actionCreator: viewPresetsListActions.fetchViewPresetsList,
5954
5865
  effect: function () {
5955
5866
  var _effect2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_, listenerApi) {
5956
- var workspaceApi, _yield$workspaceApi$g2, viewPresets;
5867
+ var _listenerApi$getState2, common, viewPresets;
5957
5868
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
5958
5869
  while (1) switch (_context2.prev = _context2.next) {
5959
5870
  case 0:
5871
+ _listenerApi$getState2 = listenerApi.getState(), common = _listenerApi$getState2.common;
5960
5872
  listenerApi.cancelActiveListeners();
5961
- workspaceApi = getWorkspaceApi();
5962
5873
  _context2.next = 4;
5963
- return workspaceApi.getViewPresets();
5874
+ return getQueryClient().fetchQuery(viewpresetQueryOptions.getViewPresets(undefined, common == null ? void 0 : common.auth.credentials));
5964
5875
  case 4:
5965
- _yield$workspaceApi$g2 = _context2.sent;
5966
- viewPresets = _yield$workspaceApi$g2.data;
5876
+ viewPresets = _context2.sent;
5967
5877
  listenerApi.dispatch(viewPresetsListActions.fetchedViewPresetsList({
5968
5878
  viewPresets: viewPresets
5969
5879
  }));
5970
- case 7:
5880
+ case 6:
5971
5881
  case "end":
5972
5882
  return _context2.stop();
5973
5883
  }
@@ -6094,51 +6004,54 @@ viewPresetsListener.startListening({
6094
6004
  listenerApi.cancelActiveListeners();
6095
6005
  action = payload.action, viewPresetId = payload.viewPresetId, title = payload.title, panelId = payload.panelId; // eslint-disable-next-line @typescript-eslint/naming-convention
6096
6006
  is_shared = 'is_shared' in payload ? payload.is_shared : undefined;
6097
- _context6.prev = 4;
6098
- listenerApi.dispatch(snackbarActions.openSnackbar(getSnackbarMessage(action, title, is_shared)));
6099
- activeMapPresetId = getViewPresetActiveId(listenerApi.getState(), panelId);
6100
- hasChanges = false; // if active preset has been deleted, select the empty new preset
6101
- if (action === PresetAction.DELETE && viewPresetId === activeMapPresetId) {
6102
- listenerApi.dispatch(viewPresetActions.setActiveViewPresetId({
6103
- panelId: panelId,
6104
- viewPresetId: ''
6105
- }));
6106
- hasChanges = true;
6107
- }
6108
- // Fetch the full list to update the list store with the latest presets
6109
- listenerApi.dispatch(viewPresetsListActions.fetchViewPresetsList());
6110
- // Also retrieve new list with current filter and search query for current panel
6111
- viewPresetFilters = getViewPresetListFiltersForView(listenerApi.getState(), panelId);
6112
- viewPresetSearchQuery = getViewPresetListSearchQueryForView(listenerApi.getState(), panelId);
6113
- listenerApi.dispatch(viewPresetActions.fetchViewPresets({
6114
- panelId: panelId,
6115
- filterParams: constructFilterParams(viewPresetFilters, viewPresetSearchQuery)
6116
- }));
6117
- if (action !== PresetAction.EDIT) {
6118
- listenerApi.dispatch(viewPresetActions.setViewPresetHasChanges({
6119
- panelId: panelId,
6120
- hasChanges: hasChanges
6121
- }));
6122
- }
6123
- if (action === PresetAction.SAVE_AS && viewPresetId) {
6124
- listenerApi.dispatch(viewPresetActions.setActiveViewPresetId({
6007
+ _context6.next = 6;
6008
+ return getQueryClient().invalidateQueries(viewpresetQueryOptions.getViewPreset(viewPresetId));
6009
+ case 6:
6010
+ _context6.next = 8;
6011
+ return getQueryClient().invalidateQueries({
6012
+ queryKey: viewpresetQueryOptions.keys.lists()
6013
+ });
6014
+ case 8:
6015
+ try {
6016
+ listenerApi.dispatch(snackbarActions.openSnackbar(getSnackbarMessage(action, title, is_shared)));
6017
+ activeMapPresetId = getViewPresetActiveId(listenerApi.getState(), panelId);
6018
+ hasChanges = false; // if active preset has been deleted, select the empty new preset
6019
+ if (action === PresetAction.DELETE && viewPresetId === activeMapPresetId) {
6020
+ listenerApi.dispatch(viewPresetActions.setActiveViewPresetId({
6021
+ panelId: panelId,
6022
+ viewPresetId: ''
6023
+ }));
6024
+ hasChanges = true;
6025
+ }
6026
+ // Fetch the full list to update the list store with the latest presets
6027
+ listenerApi.dispatch(viewPresetsListActions.fetchViewPresetsList());
6028
+ // Also retrieve new list with current filter and search query for current panel
6029
+ viewPresetFilters = getViewPresetListFiltersForView(listenerApi.getState(), panelId);
6030
+ viewPresetSearchQuery = getViewPresetListSearchQueryForView(listenerApi.getState(), panelId);
6031
+ listenerApi.dispatch(viewPresetActions.fetchViewPresets({
6125
6032
  panelId: panelId,
6126
- viewPresetId: viewPresetId
6033
+ filterParams: constructFilterParams(viewPresetFilters, viewPresetSearchQuery)
6127
6034
  }));
6035
+ if (action !== PresetAction.EDIT) {
6036
+ listenerApi.dispatch(viewPresetActions.setViewPresetHasChanges({
6037
+ panelId: panelId,
6038
+ hasChanges: hasChanges
6039
+ }));
6040
+ }
6041
+ if (action === PresetAction.SAVE_AS && viewPresetId && payload.shouldSetActiveViewPreset !== false) {
6042
+ listenerApi.dispatch(viewPresetActions.setActiveViewPresetId({
6043
+ panelId: panelId,
6044
+ viewPresetId: viewPresetId
6045
+ }));
6046
+ }
6047
+ } catch (_error) {
6048
+ // TODO: use error handling of mapPreset https://gitlab.com/opengeoweb/opengeoweb/-/issues/3043
6128
6049
  }
6129
- _context6.next = 17;
6130
- return getQueryClient().invalidateQueries(viewpresetsQueryOptions.getViewPreset(viewPresetId));
6131
- case 17:
6132
- _context6.next = 21;
6133
- break;
6134
- case 19:
6135
- _context6.prev = 19;
6136
- _context6.t0 = _context6["catch"](4);
6137
- case 21:
6050
+ case 9:
6138
6051
  case "end":
6139
6052
  return _context6.stop();
6140
6053
  }
6141
- }, _callee6, null, [[4, 19]]);
6054
+ }, _callee6);
6142
6055
  }));
6143
6056
  function effect(_x1, _x10) {
6144
6057
  return _effect4.apply(this, arguments);
@@ -6176,6 +6089,7 @@ var workspaceReducersMap = {
6176
6089
  viewPresetsList: viewPresetsListReducer,
6177
6090
  viewPresets: viewPresetsReducer,
6178
6091
  timeSeries: timeSeriesReducer,
6092
+ soundings: soundingsReducer,
6179
6093
  snackbar: snackbarReducer
6180
6094
  };
6181
6095
  var workspaceMiddlewares = [mapListener.middleware, serviceListener.middleware, layersListener.middleware, syncGroupsListener.middleware, workspaceListener.middleware, workspaceListListener.middleware, viewPresetsListener.middleware, snackbarListener.middleware, openlayersListener.middleware];
@@ -8164,6 +8078,7 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8164
8078
  var _useWorkspaceTranslat = useWorkspaceTranslation(),
8165
8079
  t = _useWorkspaceTranslat.t;
8166
8080
  var dispatch = useDispatch();
8081
+ var queryClient = useQueryClient();
8167
8082
  var store = useStore();
8168
8083
  var _useAuthenticationCon = useAuthenticationContext(),
8169
8084
  currentRole = _useAuthenticationCon.currentRole,
@@ -8264,6 +8179,22 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8264
8179
  filterParams: filterParams
8265
8180
  }));
8266
8181
  }, [dispatch, panelId, viewPresetListSearchQuery]);
8182
+ var refreshViewPresets = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
8183
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
8184
+ while (1) switch (_context.prev = _context.next) {
8185
+ case 0:
8186
+ _context.next = 2;
8187
+ return queryClient.invalidateQueries({
8188
+ queryKey: viewpresetQueryOptions.keys.lists()
8189
+ });
8190
+ case 2:
8191
+ fetchViewPresets();
8192
+ case 3:
8193
+ case "end":
8194
+ return _context.stop();
8195
+ }
8196
+ }, _callee);
8197
+ })), [queryClient, fetchViewPresets]);
8267
8198
  var constructInitialProps = function constructInitialProps() {
8268
8199
  switch (viewComponentType) {
8269
8200
  case 'WarningList':
@@ -8283,16 +8214,17 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8283
8214
  switch (workspaceAction) {
8284
8215
  case WorkspacePresetAction.DUPLICATE:
8285
8216
  {
8286
- getQueryClient().fetchQuery(viewpresetsQueryOptions.getViewPreset(presetId, auth)).then(function (presetFromBE) {
8287
- var _getViewById, _ref2, _preset$initialProps;
8217
+ getQueryClient().fetchQuery(viewpresetQueryOptions.getViewPreset(presetId, auth)).then(function (presetFromBE) {
8218
+ var _getViewById, _ref3, _preset$initialProps;
8288
8219
  var preset = presetFromBE;
8289
8220
  var fallbackInitialProps = (_getViewById = getViewById(store.getState(), panelId)) == null ? void 0 : _getViewById.initialProps;
8290
- var initialPropsForForm = (_ref2 = (_preset$initialProps = preset.initialProps) != null ? _preset$initialProps : fallbackInitialProps) != null ? _ref2 : constructInitialProps();
8221
+ var initialPropsForForm = (_ref3 = (_preset$initialProps = preset.initialProps) != null ? _preset$initialProps : fallbackInitialProps) != null ? _ref3 : constructInitialProps();
8291
8222
  openViewPresetsDialog({
8292
8223
  title: t('workspace-mappreset-save-as'),
8293
8224
  action: PresetAction.SAVE_AS,
8294
8225
  viewPresetId: presetId,
8295
8226
  panelId: panelId,
8227
+ shouldSetActiveViewPreset: false,
8296
8228
  formValues: {
8297
8229
  title: preset.title,
8298
8230
  description: preset.description,
@@ -8308,6 +8240,7 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8308
8240
  action: PresetAction.SAVE_AS,
8309
8241
  viewPresetId: presetId,
8310
8242
  panelId: panelId,
8243
+ shouldSetActiveViewPreset: false,
8311
8244
  formValues: {
8312
8245
  title: preset.title,
8313
8246
  description: preset.description,
@@ -8336,7 +8269,7 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8336
8269
  updated: new Date().toISOString()
8337
8270
  }
8338
8271
  });
8339
- void getQueryClient().fetchQuery(viewpresetsQueryOptions.getViewPreset(presetId, auth)).then(function (fullPreset) {
8272
+ void getQueryClient().fetchQuery(viewpresetQueryOptions.getViewPreset(presetId, auth)).then(function (fullPreset) {
8340
8273
  openViewPresetsDialog({
8341
8274
  title: t('workspace-mappreset-dialog-title-edit'),
8342
8275
  action: PresetAction.EDIT,
@@ -8358,13 +8291,14 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8358
8291
  }
8359
8292
  case WorkspacePresetAction.SHARE:
8360
8293
  {
8361
- void getQueryClient().fetchQuery(viewpresetsQueryOptions.getViewPreset(presetId, auth)).then(function (preset) {
8294
+ void getQueryClient().fetchQuery(viewpresetQueryOptions.getViewPreset(presetId, auth)).then(function (preset) {
8362
8295
  return void updateViewPreset(presetId, Object.assign({}, preset, {
8363
8296
  is_shared: !preset.is_shared
8364
8297
  }), auth).then(function () {
8365
8298
  dispatch(viewPresetActions.onSuccessViewPresetAction({
8366
8299
  panelId: panelId,
8367
8300
  viewPresetId: presetId,
8301
+ activeViewPresetId: activeViewPresetId,
8368
8302
  action: PresetAction.SHARE,
8369
8303
  title: preset.title,
8370
8304
  description: preset.description,
@@ -8455,14 +8389,15 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8455
8389
  flexDirection: 'column',
8456
8390
  height: '100%'
8457
8391
  },
8458
- children: [!!isViewPresetsListFetching && jsx(LinearProgress, {
8459
- color: "secondary",
8460
- "data-testid": "loading-bar",
8392
+ children: [jsx(Box, {
8461
8393
  sx: {
8462
- position: 'absolute',
8463
- width: '100%',
8464
- top: 0
8465
- }
8394
+ height: 4,
8395
+ overflow: 'hidden'
8396
+ },
8397
+ children: !!isViewPresetsListFetching && jsx(LinearProgress, {
8398
+ color: "secondary",
8399
+ "data-testid": "loading-bar"
8400
+ })
8466
8401
  }), !isViewPresetsListFetching && !!error && jsx(AlertBanner, Object.assign({
8467
8402
  info: error.message,
8468
8403
  shouldClose: true,
@@ -8542,9 +8477,23 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8542
8477
  },
8543
8478
  children: jsx(LastUpdateTime, {
8544
8479
  hideLabel: true,
8545
- onPressRefresh: function onPressRefresh() {
8546
- return fetchViewPresets();
8547
- }
8480
+ onPressRefresh: function () {
8481
+ var _onPressRefresh = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
8482
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
8483
+ while (1) switch (_context2.prev = _context2.next) {
8484
+ case 0:
8485
+ return _context2.abrupt("return", refreshViewPresets());
8486
+ case 1:
8487
+ case "end":
8488
+ return _context2.stop();
8489
+ }
8490
+ }, _callee2);
8491
+ }));
8492
+ function onPressRefresh() {
8493
+ return _onPressRefresh.apply(this, arguments);
8494
+ }
8495
+ return onPressRefresh;
8496
+ }()
8548
8497
  })
8549
8498
  })]
8550
8499
  }), jsxs(Box, {
@@ -9001,15 +8950,15 @@ var WorkspaceSelectListConnect = function WorkspaceSelectListConnect(_ref) {
9001
8950
  height: '100%'
9002
8951
  },
9003
8952
  tabIndex: 0,
9004
- children: [!!isFetching && jsx(LinearProgress, {
9005
- color: "secondary",
9006
- "data-testid": "loading-bar",
8953
+ children: [jsx(Box, {
9007
8954
  sx: {
9008
- position: 'absolute',
9009
- width: '100%',
9010
- top: 0,
9011
- left: 0
9012
- }
8955
+ height: 4,
8956
+ overflow: 'hidden'
8957
+ },
8958
+ children: !!isFetching && jsx(LinearProgress, {
8959
+ color: "secondary",
8960
+ "data-testid": "loading-bar"
8961
+ })
9013
8962
  }), !!error && jsx("div", {
9014
8963
  style: {
9015
8964
  whiteSpace: 'normal'
@@ -9531,6 +9480,8 @@ var WorkspaceViewTitleConnectNoMemo = function WorkspaceViewTitleConnectNoMemo(_
9531
9480
  return currentWarningsPreset;
9532
9481
  case 'TimeSeries':
9533
9482
  return timeSeriesSelectors.getTimeSeriesPreset(store.getState());
9483
+ case 'Soundings':
9484
+ return soundingsSelectors.getSoundingsPreset(store.getState());
9534
9485
  case 'Map':
9535
9486
  return {
9536
9487
  mapPreset: mapSelectors.getMapPreset(store.getState(), panelId),
@@ -10092,6 +10043,11 @@ var WorkspaceViewConnect = function WorkspaceViewConnect(_ref) {
10092
10043
  return window.removeEventListener('orientationchange', handleOrientationChange);
10093
10044
  };
10094
10045
  }, [handleOrientationChange]);
10046
+ React.useEffect(function () {
10047
+ if (!mosaicNode) {
10048
+ dispatch(workspaceActions.teardownComplete());
10049
+ }
10050
+ }, [mosaicNode, dispatch]);
10095
10051
  return jsx(WorkspaceView, {
10096
10052
  activeWindowId: activeWindowId,
10097
10053
  componentsLookUp: componentsLookUp,
@@ -10947,7 +10903,7 @@ var WorkspaceTabConnect = function WorkspaceTabConnect(_ref) {
10947
10903
  }
10948
10904
  _context.prev = 4;
10949
10905
  _context.next = 7;
10950
- return getQueryClient().fetchQuery(viewpresetsQueryOptions.getViewPreset(view.viewPresetId, auth));
10906
+ return getQueryClient().fetchQuery(viewpresetQueryOptions.getViewPreset(view.viewPresetId, auth));
10951
10907
  case 7:
10952
10908
  preset = _context.sent;
10953
10909
  _viewPresetId = view.viewPresetId, _rest = _objectWithoutPropertiesLoose(view, _excluded2);
@@ -11381,7 +11337,7 @@ var ViewPresetsFormDialog = function ViewPresetsFormDialog(_ref) {
11381
11337
  return _context.abrupt("break", 31);
11382
11338
  case 19:
11383
11339
  _context.next = 21;
11384
- return getQueryClient().fetchQuery(viewpresetsQueryOptions.getViewPreset(viewPresetId, auth));
11340
+ return getQueryClient().fetchQuery(viewpresetQueryOptions.getViewPreset(viewPresetId, auth));
11385
11341
  case 21:
11386
11342
  originalViewPreset = _context.sent;
11387
11343
  viewPresetEdited = Object.assign({}, originalViewPreset, {
@@ -11559,6 +11515,9 @@ var ViewPresetsFormDialogConnect = function ViewPresetsFormDialogConnect(_ref) {
11559
11515
  return getDialogOptions(store);
11560
11516
  });
11561
11517
  var panelId = dialogOptions == null ? void 0 : dialogOptions.panelId;
11518
+ var activeViewPresetId = useSelector(function (store) {
11519
+ return getViewPresetActiveId(store, panelId);
11520
+ });
11562
11521
  var fallbackComponentType = useSelector(function (store) {
11563
11522
  return getViewComponentType(store, panelId);
11564
11523
  });
@@ -11582,6 +11541,8 @@ var ViewPresetsFormDialogConnect = function ViewPresetsFormDialogConnect(_ref) {
11582
11541
  dispatch(viewPresetActions.onSuccessViewPresetAction({
11583
11542
  panelId: panelId,
11584
11543
  viewPresetId: newViewPresetId,
11544
+ activeViewPresetId: activeViewPresetId,
11545
+ shouldSetActiveViewPreset: dialogOptions == null ? void 0 : dialogOptions.shouldSetActiveViewPreset,
11585
11546
  action: action,
11586
11547
  title: title,
11587
11548
  description: description,
@@ -11722,4 +11683,121 @@ var WorkspaceDetail = function WorkspaceDetail(_ref) {
11722
11683
  });
11723
11684
  };
11724
11685
 
11725
- 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, WorkspaceModuleProvider, WorkspacePresetAction, WorkspaceStoreWrapper, WorkspaceThemeProvider, WorkspaceTopBar, WorkspaceViewConnect, WorkspaceWrapperProviderWithStore, createBalancedMosaicNode, createCustomEmptyMapWorkspace, defaultAuthConfig, getEmptyMapWorkspace, getWorkspaceRouteUrl, selectors$2 as selectors, viewPresetActions, viewPresetsListReducer, viewPresetsListener, viewPresetsReducer, workspaceActions, workspaceListActions, workspaceListListener, workspaceListReducer, workspaceListener, workspaceMiddlewares, workspaceReducer, workspaceReducersMap, routes as workspaceRoutes, workspaceTranslations };
11686
+ /* *
11687
+ * Licensed under the Apache License, Version 2.0 (the "License");
11688
+ * you may not use this file except in compliance with the License.
11689
+ * You may obtain a copy of the License at
11690
+ *
11691
+ * http://www.apache.org/licenses/LICENSE-2.0
11692
+ *
11693
+ * Unless required by applicable law or agreed to in writing, software
11694
+ * distributed under the License is distributed on an "AS IS" BASIS,
11695
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11696
+ * See the License for the specific language governing permissions and
11697
+ * limitations under the License.
11698
+ *
11699
+ * Copyright 2025 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11700
+ * Copyright 2025 - Finnish Meteorological Institute (FMI)
11701
+ * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
11702
+ * */
11703
+ var LABELS_CONFIG_DEFAULT = {
11704
+ purpose: ['Aviation', 'Monitor', 'Public', 'Maritime', 'Warning', 'Media', 'Nowcasting (0–12h)'],
11705
+ parameters: ['Pressure', 'Temperature', 'Wind', 'Humidity', 'Water vapour', 'Visibility', 'Geopotential', 'Snow', 'Cloud', 'Waves', 'Index', 'Precipitation'],
11706
+ phenomena: ['Turbulence', 'MTW', 'CAT', 'Icing', 'Freezing rain', 'FlashFlood', 'Wind gust', 'Rain', 'Snow', 'Road ice', 'Lightning strike', 'Drifting snow', 'Wave height + water level', 'Forest fire', 'Polar Low', 'Heat wave', 'Gale warning'],
11707
+ viewType: [].concat(ALL_COMPONENT_TYPES),
11708
+ dataType: ['observation', 'forecast', 'archive'],
11709
+ dataSource: ['Meps', 'Arome Arctic', 'Ecmwf', 'Ensemble', 'AIFS', 'BRIS', 'radar', 'satellite', 'synop']
11710
+ };
11711
+
11712
+ var workspaceEndpoints = [http["delete"](/^.*\/workspacepreset\/(.*)$/, /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
11713
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
11714
+ while (1) switch (_context.prev = _context.next) {
11715
+ case 0:
11716
+ _context.next = 2;
11717
+ return delay();
11718
+ case 2:
11719
+ return _context.abrupt("return", HttpResponse.json(null));
11720
+ case 3:
11721
+ case "end":
11722
+ return _context.stop();
11723
+ }
11724
+ }, _callee);
11725
+ }))), http.post(/^.*\/workspacepreset$/, /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
11726
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
11727
+ while (1) switch (_context2.prev = _context2.next) {
11728
+ case 0:
11729
+ _context2.next = 2;
11730
+ return delay();
11731
+ case 2:
11732
+ return _context2.abrupt("return", HttpResponse.json(null, {
11733
+ status: 200,
11734
+ headers: {
11735
+ Location: '/workspacepreset/workspace-id-1'
11736
+ }
11737
+ }));
11738
+ case 3:
11739
+ case "end":
11740
+ return _context2.stop();
11741
+ }
11742
+ }, _callee2);
11743
+ }))), http.put(/^.*\/workspacepreset\/(.*)$/, /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
11744
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
11745
+ while (1) switch (_context3.prev = _context3.next) {
11746
+ case 0:
11747
+ _context3.next = 2;
11748
+ return delay();
11749
+ case 2:
11750
+ return _context3.abrupt("return", HttpResponse.json(null));
11751
+ case 3:
11752
+ case "end":
11753
+ return _context3.stop();
11754
+ }
11755
+ }, _callee3);
11756
+ }))), http.get(/^.*\/workspacepreset\/(.*)$/, /*#__PURE__*/function () {
11757
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_ref4) {
11758
+ var _params$;
11759
+ var params, presetId, preset;
11760
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
11761
+ while (1) switch (_context4.prev = _context4.next) {
11762
+ case 0:
11763
+ params = _ref4.params;
11764
+ _context4.next = 3;
11765
+ return delay();
11766
+ case 3:
11767
+ presetId = String((_params$ = params[0]) != null ? _params$ : '');
11768
+ preset = workspacePresets.find(function (item) {
11769
+ return item.id === presetId;
11770
+ });
11771
+ if (preset) {
11772
+ _context4.next = 7;
11773
+ break;
11774
+ }
11775
+ return _context4.abrupt("return", HttpResponse.json({
11776
+ message: 'Not found'
11777
+ }, {
11778
+ status: 404
11779
+ }));
11780
+ case 7:
11781
+ return _context4.abrupt("return", HttpResponse.json(preset));
11782
+ case 8:
11783
+ case "end":
11784
+ return _context4.stop();
11785
+ }
11786
+ }, _callee4);
11787
+ }));
11788
+ return function (_x) {
11789
+ return _ref5.apply(this, arguments);
11790
+ };
11791
+ }()), http.get(/^.*\/workspace-labels-config$/, /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
11792
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
11793
+ while (1) switch (_context5.prev = _context5.next) {
11794
+ case 0:
11795
+ return _context5.abrupt("return", HttpResponse.json(LABELS_CONFIG_DEFAULT));
11796
+ case 1:
11797
+ case "end":
11798
+ return _context5.stop();
11799
+ }
11800
+ }, _callee5);
11801
+ })))];
11802
+
11803
+ 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, WorkspaceModuleProvider, WorkspacePresetAction, WorkspaceStoreWrapper, WorkspaceThemeProvider, WorkspaceTopBar, WorkspaceViewConnect, WorkspaceWrapperProviderWithStore, createBalancedMosaicNode, createCustomEmptyMapWorkspace, defaultAuthConfig, getEmptyMapWorkspace, getWorkspaceRouteUrl, selectors$2 as selectors, viewPresetActions, viewPresetsListReducer, viewPresetsListener, viewPresetsReducer, workspaceActions, workspaceEndpoints, workspaceListActions, workspaceListListener, workspaceListReducer, workspaceListener, workspaceMiddlewares, workspaceReducer, workspaceReducersMap, routes as workspaceRoutes, workspaceTranslations };