@opengeoweb/workspace 5.0.1 → 5.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.
Files changed (148) hide show
  1. package/README.md +0 -0
  2. package/index.css +0 -0
  3. package/index.js +600 -306
  4. package/package.json +11 -11
  5. package/src/index.d.ts +0 -0
  6. package/src/lib/Workspace.stories.d.ts +0 -0
  7. package/src/lib/components/ComponentsLookUpWrapper/ComponentsLookUpWrapper.d.ts +0 -0
  8. package/src/lib/components/ComponentsLookUpWrapper/ComponentsLookUpWrapper.spec.d.ts +0 -0
  9. package/src/lib/components/ComponentsLookUpWrapper/index.d.ts +0 -0
  10. package/src/lib/components/DefaultComponentsLookUp/DefaultComponentsLookUp.d.ts +0 -0
  11. package/src/lib/components/DefaultComponentsLookUp/DefaultComponentsLookUp.spec.d.ts +0 -0
  12. package/src/lib/components/DefaultComponentsLookUp/index.d.ts +0 -0
  13. package/src/lib/components/MapPresetsFormDialog/MapPresetsForm.d.ts +0 -0
  14. package/src/lib/components/MapPresetsFormDialog/MapPresetsForm.spec.d.ts +0 -0
  15. package/src/lib/components/MapPresetsFormDialog/MapPresetsFormDialog.d.ts +0 -0
  16. package/src/lib/components/MapPresetsFormDialog/MapPresetsFormDialog.spec.d.ts +0 -0
  17. package/src/lib/components/MapPresetsFormDialog/MapPresetsFormDialog.stories.d.ts +0 -0
  18. package/src/lib/components/MapPresetsFormDialog/MapPresetsFormDialogConnect.d.ts +0 -0
  19. package/src/lib/components/MapPresetsFormDialog/MapPresetsFormDialogConnect.spec.d.ts +0 -0
  20. package/src/lib/components/MapPresetsFormDialog/index.d.ts +0 -0
  21. package/src/lib/components/Providers/Providers.d.ts +0 -0
  22. package/src/lib/components/Providers/WorkspaceDndProvider.d.ts +0 -0
  23. package/src/lib/components/Providers/WorkspaceModuleProvider.d.ts +0 -0
  24. package/src/lib/components/Providers/WorkspaceModuleProvider.spec.d.ts +0 -0
  25. package/src/lib/components/Providers/index.d.ts +0 -0
  26. package/src/lib/components/ViewPresetMenu/ViewPresetMenu.d.ts +0 -0
  27. package/src/lib/components/ViewPresetMenu/ViewPresetMenu.spec.d.ts +0 -0
  28. package/src/lib/components/ViewPresetMenu/ViewPresetMenuListConnect.d.ts +1 -0
  29. package/src/lib/components/ViewPresetMenu/ViewPresetMenuListConnect.spec.d.ts +0 -0
  30. package/src/lib/components/ViewPresetMenu/ViewPresetMenuListConnect.stories.d.ts +0 -0
  31. package/src/lib/components/ViewPresetMenu/ViewPresetsError.stories.d.ts +0 -0
  32. package/src/lib/components/ViewPresetMenu/index.d.ts +0 -0
  33. package/src/lib/components/WorkspaceDetail/WorkspaceDetail.d.ts +0 -0
  34. package/src/lib/components/WorkspaceDetail/WorkspaceDetail.spec.d.ts +0 -0
  35. package/src/lib/components/WorkspaceDetail/WorkspaceDetail.stories.d.ts +0 -0
  36. package/src/lib/components/WorkspaceDetail/WorkspaceDetailError.stories.d.ts +0 -0
  37. package/src/lib/components/WorkspaceDetail/index.d.ts +0 -0
  38. package/src/lib/components/WorkspaceFilter/FilterChip.d.ts +0 -0
  39. package/src/lib/components/WorkspaceFilter/FilterChip.spec.d.ts +0 -0
  40. package/src/lib/components/WorkspaceFilter/FilterList.d.ts +0 -0
  41. package/src/lib/components/WorkspaceFilter/FilterList.spec.d.ts +0 -0
  42. package/src/lib/components/WorkspaceFilter/SearchField.d.ts +0 -0
  43. package/src/lib/components/WorkspaceFilter/SearchField.spec.d.ts +0 -0
  44. package/src/lib/components/WorkspaceFilter/WorkspaceFilter.d.ts +1 -0
  45. package/src/lib/components/WorkspaceFilter/WorkspaceFilter.spec.d.ts +0 -0
  46. package/src/lib/components/WorkspaceFilter/WorkspaceFilter.stories.d.ts +0 -0
  47. package/src/lib/components/WorkspaceMenu/WorkspaceMenu.d.ts +0 -0
  48. package/src/lib/components/WorkspaceMenu/WorkspaceMenu.spec.d.ts +0 -0
  49. package/src/lib/components/WorkspaceMenu/WorkspaceMenu.stories.d.ts +0 -0
  50. package/src/lib/components/WorkspaceMenu/WorkspaceMenuButton.d.ts +0 -0
  51. package/src/lib/components/WorkspaceMenu/WorkspaceMenuButton.spec.d.ts +0 -0
  52. package/src/lib/components/WorkspaceMenu/WorkspaceMenuButton.stories.d.ts +0 -0
  53. package/src/lib/components/WorkspaceMenu/WorkspaceMenuButtonConnect.d.ts +0 -0
  54. package/src/lib/components/WorkspaceMenu/WorkspaceMenuButtonConnect.spec.d.ts +0 -0
  55. package/src/lib/components/WorkspaceMenu/index.d.ts +0 -0
  56. package/src/lib/components/WorkspaceOptions/WorkspaceOptions.d.ts +0 -0
  57. package/src/lib/components/WorkspaceOptions/WorkspaceOptions.spec.d.ts +0 -0
  58. package/src/lib/components/WorkspaceOptions/WorkspaceOptions.stories.d.ts +0 -0
  59. package/src/lib/components/WorkspaceOptions/WorkspaceOptionsConnect.d.ts +0 -0
  60. package/src/lib/components/WorkspaceOptions/WorkspaceOptionsConnect.spec.d.ts +0 -0
  61. package/src/lib/components/WorkspacePresetsFormDialog/WorkspacePresetsForm.d.ts +0 -0
  62. package/src/lib/components/WorkspacePresetsFormDialog/WorkspacePresetsForm.spec.d.ts +0 -0
  63. package/src/lib/components/WorkspacePresetsFormDialog/WorkspacePresetsFormDialog.d.ts +6 -1
  64. package/src/lib/components/WorkspacePresetsFormDialog/WorkspacePresetsFormDialog.spec.d.ts +0 -0
  65. package/src/lib/components/WorkspacePresetsFormDialog/WorkspacePresetsFormDialog.stories.d.ts +8 -0
  66. package/src/lib/components/WorkspaceSelectList/WorkspaceSelectList.d.ts +0 -0
  67. package/src/lib/components/WorkspaceSelectList/WorkspaceSelectList.spec.d.ts +0 -0
  68. package/src/lib/components/WorkspaceSelectList/WorkspaceSelectList.stories.d.ts +0 -0
  69. package/src/lib/components/WorkspaceSelectList/WorkspaceSelectListConnect.d.ts +0 -0
  70. package/src/lib/components/WorkspaceSelectList/WorkspaceSelectListConnect.spec.d.ts +0 -0
  71. package/src/lib/components/WorkspaceSelectList/WorkspaceSelectListError.stories.d.ts +0 -0
  72. package/src/lib/components/WorkspaceSelectList/WorkspaceSelectListRow.d.ts +0 -0
  73. package/src/lib/components/WorkspaceSelectList/WorkspaceSelectListRow.spec.d.ts +0 -0
  74. package/src/lib/components/WorkspaceSelectList/WorkspaceSelectListRow.stories.d.ts +0 -0
  75. package/src/lib/components/WorkspaceTab/WorkspaceTab.d.ts +0 -0
  76. package/src/lib/components/WorkspaceTab/WorkspaceTab.spec.d.ts +0 -0
  77. package/src/lib/components/WorkspaceTab/WorkspaceTabConnect.d.ts +0 -0
  78. package/src/lib/components/WorkspaceTab/WorkspaceTabConnect.spec.d.ts +0 -0
  79. package/src/lib/components/WorkspaceTab/index.d.ts +0 -0
  80. package/src/lib/components/WorkspaceTopBar/WorkspaceTopBar.d.ts +0 -0
  81. package/src/lib/components/WorkspaceTopBar/WorkspaceTopBar.spec.d.ts +0 -0
  82. package/src/lib/components/WorkspaceTopBar/WorkspaceTopBar.stories.d.ts +0 -0
  83. package/src/lib/components/WorkspaceTopBar/index.d.ts +0 -0
  84. package/src/lib/components/WorkspaceView/WorkspaceControls.d.ts +0 -0
  85. package/src/lib/components/WorkspaceView/WorkspaceControls.spec.d.ts +0 -0
  86. package/src/lib/components/WorkspaceView/WorkspaceTileConnect.d.ts +0 -0
  87. package/src/lib/components/WorkspaceView/WorkspaceTileConnect.spec.d.ts +0 -0
  88. package/src/lib/components/WorkspaceView/WorkspaceView.d.ts +0 -0
  89. package/src/lib/components/WorkspaceView/WorkspaceView.spec.d.ts +0 -0
  90. package/src/lib/components/WorkspaceView/WorkspaceViewConnect.d.ts +0 -0
  91. package/src/lib/components/WorkspaceView/WorkspaceViewConnect.spec.d.ts +0 -0
  92. package/src/lib/components/WorkspaceView/helpers.d.ts +0 -0
  93. package/src/lib/components/WorkspaceView/helpers.spec.d.ts +0 -0
  94. package/src/lib/components/WorkspaceView/index.d.ts +0 -0
  95. package/src/lib/components/WorkspaceViewTitle/WorkspaceViewTitleConnect.d.ts +0 -0
  96. package/src/lib/components/WorkspaceViewTitle/WorkspaceViewTitleConnect.spec.d.ts +0 -0
  97. package/src/lib/store/config.d.ts +0 -0
  98. package/src/lib/store/index.d.ts +0 -0
  99. package/src/lib/store/store.d.ts +0 -0
  100. package/src/lib/store/viewPresets/index.d.ts +0 -0
  101. package/src/lib/store/viewPresets/reducer.d.ts +4 -1
  102. package/src/lib/store/viewPresets/reducer.spec.d.ts +0 -0
  103. package/src/lib/store/viewPresets/sagas.d.ts +0 -0
  104. package/src/lib/store/viewPresets/sagas.spec.d.ts +0 -0
  105. package/src/lib/store/viewPresets/selectors.d.ts +5 -1
  106. package/src/lib/store/viewPresets/selectors.spec.d.ts +0 -0
  107. package/src/lib/store/viewPresets/types.d.ts +20 -2
  108. package/src/lib/store/viewPresets/utils.d.ts +3 -1
  109. package/src/lib/store/viewPresets/utils.spec.d.ts +0 -0
  110. package/src/lib/store/viewPresetsList/index.d.ts +0 -0
  111. package/src/lib/store/viewPresetsList/reducer.d.ts +0 -0
  112. package/src/lib/store/viewPresetsList/reducer.spec.d.ts +0 -0
  113. package/src/lib/store/viewPresetsList/selectors.d.ts +19 -2
  114. package/src/lib/store/viewPresetsList/selectors.spec.d.ts +0 -0
  115. package/src/lib/store/viewPresetsList/types.d.ts +4 -0
  116. package/src/lib/store/workspace/reducer.d.ts +0 -0
  117. package/src/lib/store/workspace/reducer.spec.d.ts +0 -0
  118. package/src/lib/store/workspace/sagas.d.ts +0 -0
  119. package/src/lib/store/workspace/sagas.spec.d.ts +0 -0
  120. package/src/lib/store/workspace/selectors.d.ts +0 -0
  121. package/src/lib/store/workspace/selectors.spec.d.ts +0 -0
  122. package/src/lib/store/workspace/types.d.ts +0 -0
  123. package/src/lib/store/workspace/utils.d.ts +0 -0
  124. package/src/lib/store/workspace/utils.spec.d.ts +0 -0
  125. package/src/lib/store/workspaceList/index.d.ts +0 -0
  126. package/src/lib/store/workspaceList/reducer.d.ts +0 -0
  127. package/src/lib/store/workspaceList/reducer.spec.d.ts +0 -0
  128. package/src/lib/store/workspaceList/sagas.d.ts +0 -0
  129. package/src/lib/store/workspaceList/sagas.spec.d.ts +0 -0
  130. package/src/lib/store/workspaceList/selectors.d.ts +0 -0
  131. package/src/lib/store/workspaceList/selectors.spec.d.ts +0 -0
  132. package/src/lib/store/workspaceList/types.d.ts +0 -0
  133. package/src/lib/store/workspaceList/utils.d.ts +0 -0
  134. package/src/lib/store/workspaceList/utils.spec.d.ts +0 -0
  135. package/src/lib/storyUtils/ActionsExampleComponent.d.ts +0 -0
  136. package/src/lib/storyUtils/StoryWrapper.d.ts +0 -0
  137. package/src/lib/storyUtils/componentsLookUp.d.ts +0 -0
  138. package/src/lib/storyUtils/componentsLookUp.stories.d.ts +0 -0
  139. package/src/lib/storyUtils/useFirstTimeError.d.ts +0 -0
  140. package/src/lib/storyUtils/useFirstTimeError.spec.d.ts +0 -0
  141. package/src/lib/storyshots/Storyshots.spec.d.ts +0 -0
  142. package/src/lib/utils/api.d.ts +2 -1
  143. package/src/lib/utils/api.spec.d.ts +0 -0
  144. package/src/lib/utils/fakeApi.d.ts +2 -0
  145. package/src/lib/utils/fakeApi.spec.d.ts +0 -0
  146. package/src/lib/utils/fakeApi.stories.d.ts +0 -0
  147. package/src/lib/utils/routes.d.ts +0 -0
  148. package/src/lib/utils/routes.spec.d.ts +0 -0
package/index.js CHANGED
@@ -3,13 +3,13 @@ import { createApiInstance, createNonAuthApiInstance, getApi, createFakeApiInsta
3
3
  import { getLeaves, MosaicContext, getAndAssertNodeAtPathExists, createBalancedTreeFromLeaves, MosaicWindow, MosaicWithoutDragDropContext } from 'react-mosaic-component';
4
4
  import { isAxiosError, getAxiosErrorMessage, withEggs, useConfirmationDialog, CustomIconButton, AlertBanner, CustomTooltip, SearchHighlight, ToggleMenu, ToolContainer, CustomToggleButton, ConfirmationServiceProvider, ConfirmationDialog } from '@opengeoweb/shared';
5
5
  import * as React from 'react';
6
- import React__default, { createContext, useContext, useDebugValue, useLayoutEffect, useEffect, useMemo, memo, useRef, useCallback, forwardRef, createElement, Fragment } from 'react';
7
- import { ThemeWrapper, lightTheme, Menu, SplitVertical, SplitHorizontal, Expand, UnExpand, Close, Delete, Preset, PresetWorkspace, PresetTiles, WebAssetOff, Clear, Search } from '@opengeoweb/theme';
6
+ import React__default, { createContext, version, useContext, useRef, useCallback, useDebugValue, useLayoutEffect, useEffect, useMemo, memo, forwardRef, createElement, Fragment } from 'react';
7
+ import { ThemeWrapper, lightTheme, Menu, SplitVertical, SplitHorizontal, Expand, UnExpand, Close, Delete, Preset, PresetWorkspace, PresetTiles, Clear, Search, WebAssetOff } from '@opengeoweb/theme';
8
8
  import { unstable_batchedUpdates } from 'react-dom';
9
9
  import { timeSeriesModuleConfig } from '@opengeoweb/timeseries';
10
10
  import { AuthenticationProvider, useAuthenticationContext } from '@opengeoweb/authentication';
11
11
  import { jsx } from 'react/jsx-runtime';
12
- import { useTheme as useTheme$2, LinearProgress, Typography, ListItem, ListItemButton, ListItemIcon, ListItemText, Grid, Box as Box$2, List, Backdrop, Menu as Menu$1, ListSubheader, MenuItem, Chip, Stack, debounce as debounce$1, TextField, InputAdornment, Tabs } from '@mui/material';
12
+ import { useTheme as useTheme$2, LinearProgress, Typography, ListItem, ListItemButton, ListItemIcon, ListItemText, Grid, Box as Box$2, List, Chip, Stack, debounce as debounce$1, TextField, InputAdornment, Backdrop, Menu as Menu$1, ListSubheader, MenuItem, Tabs } from '@mui/material';
13
13
  import 'react-mosaic-component/react-mosaic-component.css';
14
14
  import { ReactHookFormTextField, ReactHookFormHiddenInput, ReactHookFormProvider, defaultFormOptions } from '@opengeoweb/form-fields';
15
15
 
@@ -19124,8 +19124,10 @@ var getApiRoutes$1 = function getApiRoutes(axiosInstance) {
19124
19124
  return axiosInstance["delete"]("/workspacepreset/".concat(workspacePresetId));
19125
19125
  },
19126
19126
  // view presets
19127
- getViewPresets: function getViewPresets() {
19128
- return axiosInstance.get('/viewpreset');
19127
+ getViewPresets: function getViewPresets(params) {
19128
+ return axiosInstance.get('/viewpreset', {
19129
+ params: params
19130
+ });
19129
19131
  },
19130
19132
  getViewPreset: function getViewPreset(viewPresetId) {
19131
19133
  return axiosInstance.get("/viewpreset/".concat(viewPresetId));
@@ -19234,22 +19236,19 @@ var getErrorMessage = function getErrorMessage(error) {
19234
19236
  return suffix ? "".concat(prefix, ": ").concat(suffix) : prefix;
19235
19237
  };
19236
19238
 
19237
- /* *
19238
- * Licensed under the Apache License, Version 2.0 (the "License");
19239
- * you may not use this file except in compliance with the License.
19240
- * You may obtain a copy of the License at
19241
- *
19242
- * http://www.apache.org/licenses/LICENSE-2.0
19243
- *
19244
- * Unless required by applicable law or agreed to in writing, software
19245
- * distributed under the License is distributed on an "AS IS" BASIS,
19246
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19247
- * See the License for the specific language governing permissions and
19248
- * limitations under the License.
19249
- *
19250
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
19251
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
19252
- * */
19239
+ var viewPresetsListFilterOptions = [{
19240
+ label: 'My presets',
19241
+ id: 'user',
19242
+ type: 'scope',
19243
+ isSelected: true,
19244
+ isDisabled: false
19245
+ }, {
19246
+ label: 'System presets',
19247
+ id: 'system',
19248
+ type: 'scope',
19249
+ isSelected: true,
19250
+ isDisabled: false
19251
+ }];
19253
19252
  var viewPresetsAdapter = createEntityAdapter({
19254
19253
  // we use panelId as id (panelId can be mapId or viewId)
19255
19254
  selectId: function selectId(mapPreset) {
@@ -19307,17 +19306,42 @@ var slice$3 = createSlice({
19307
19306
  }
19308
19307
  },
19309
19308
  fetchedViewPresets: function fetchedViewPresets(draft, action) {
19310
- var panelId = action.payload.panelId;
19309
+ var _action$payload = action.payload,
19310
+ panelId = _action$payload.panelId,
19311
+ viewPresets = _action$payload.viewPresets,
19312
+ filterParams = _action$payload.filterParams;
19311
19313
  var entity = draft.entities[panelId];
19312
19314
  if (entity) {
19313
19315
  entity.isFetching = false;
19316
+ // If there are filter params, set filter results
19317
+ if (Object.keys(filterParams).length !== 0 && viewPresets.length !== 0) {
19318
+ var _viewPresets$reduce = viewPresets.reduce(function (result, viewPreset) {
19319
+ return {
19320
+ ids: [].concat(_toConsumableArray$1(result.ids), [viewPreset.id]),
19321
+ entities: Object.assign(Object.assign({}, result.entities), _defineProperty$f({}, viewPreset.id, viewPreset))
19322
+ };
19323
+ }, {
19324
+ ids: [],
19325
+ entities: {}
19326
+ }),
19327
+ ids = _viewPresets$reduce.ids,
19328
+ entities = _viewPresets$reduce.entities;
19329
+ entity.filterResults.entities = entities;
19330
+ entity.filterResults.ids = ids;
19331
+ } else {
19332
+ // If no filtering applied or no results returned from BE, clear out filter results
19333
+ entity.filterResults = {
19334
+ entities: {},
19335
+ ids: []
19336
+ };
19337
+ }
19314
19338
  viewPresetsAdapter.setOne(draft, entity);
19315
19339
  }
19316
19340
  },
19317
19341
  fetchedViewPreset: function fetchedViewPreset(draft, action) {
19318
- var _action$payload = action.payload,
19319
- panelId = _action$payload.panelId,
19320
- mapPresetId = _action$payload.viewPresetId;
19342
+ var _action$payload2 = action.payload,
19343
+ panelId = _action$payload2.panelId,
19344
+ mapPresetId = _action$payload2.viewPresetId;
19321
19345
  var entity = draft.entities[panelId];
19322
19346
  if (entity) {
19323
19347
  entity.isFetching = false;
@@ -19346,9 +19370,9 @@ var slice$3 = createSlice({
19346
19370
  }
19347
19371
  },
19348
19372
  errorViewPreset: function errorViewPreset(draft, action) {
19349
- var _action$payload2 = action.payload,
19350
- panelId = _action$payload2.panelId,
19351
- error = _action$payload2.error;
19373
+ var _action$payload3 = action.payload,
19374
+ panelId = _action$payload3.panelId,
19375
+ error = _action$payload3.error;
19352
19376
  var entity = draft.entities[panelId];
19353
19377
  if (entity) {
19354
19378
  entity.error = error;
@@ -19358,9 +19382,9 @@ var slice$3 = createSlice({
19358
19382
  },
19359
19383
  // map actions
19360
19384
  setViewPresetHasChanges: function setViewPresetHasChanges(draft, action) {
19361
- var _action$payload3 = action.payload,
19362
- panelId = _action$payload3.panelId,
19363
- hasChanges = _action$payload3.hasChanges;
19385
+ var _action$payload4 = action.payload,
19386
+ panelId = _action$payload4.panelId,
19387
+ hasChanges = _action$payload4.hasChanges;
19364
19388
  var entity = draft.entities[panelId];
19365
19389
  if (entity) {
19366
19390
  entity.hasChanges = hasChanges;
@@ -19368,9 +19392,9 @@ var slice$3 = createSlice({
19368
19392
  }
19369
19393
  },
19370
19394
  setActiveViewPresetId: function setActiveViewPresetId(draft, action) {
19371
- var _action$payload4 = action.payload,
19372
- panelId = _action$payload4.panelId,
19373
- mapPresetId = _action$payload4.viewPresetId;
19395
+ var _action$payload5 = action.payload,
19396
+ panelId = _action$payload5.panelId,
19397
+ mapPresetId = _action$payload5.viewPresetId;
19374
19398
  var entity = draft.entities[panelId];
19375
19399
  if (entity) {
19376
19400
  entity.activeViewPresetId = mapPresetId;
@@ -19379,9 +19403,9 @@ var slice$3 = createSlice({
19379
19403
  }
19380
19404
  },
19381
19405
  selectViewPreset: function selectViewPreset(draft, action) {
19382
- var _action$payload5 = action.payload,
19383
- panelId = _action$payload5.panelId,
19384
- mapPresetId = _action$payload5.viewPresetId;
19406
+ var _action$payload6 = action.payload,
19407
+ panelId = _action$payload6.panelId,
19408
+ mapPresetId = _action$payload6.viewPresetId;
19385
19409
  var entity = draft.entities[panelId];
19386
19410
  if (entity) {
19387
19411
  // only update activeMapPresetId after selecting a NEW preset
@@ -19401,16 +19425,22 @@ var slice$3 = createSlice({
19401
19425
  // eslint-disable-next-line no-unused-vars
19402
19426
  action) {},
19403
19427
  registerViewPreset: function registerViewPreset(draft, action) {
19404
- var _action$payload6 = action.payload,
19405
- mapId = _action$payload6.panelId,
19406
- mapPresetId = _action$payload6.viewPresetId;
19428
+ var _action$payload7 = action.payload,
19429
+ mapId = _action$payload7.panelId,
19430
+ mapPresetId = _action$payload7.viewPresetId;
19407
19431
  viewPresetsAdapter.setOne(draft, {
19408
19432
  panelId: mapId,
19409
19433
  activeViewPresetId: mapPresetId,
19410
19434
  hasChanges: false,
19411
19435
  isFetching: false,
19412
19436
  error: undefined,
19413
- isViewPresetListDialogOpen: false
19437
+ isViewPresetListDialogOpen: false,
19438
+ filters: viewPresetsListFilterOptions,
19439
+ searchQuery: '',
19440
+ filterResults: {
19441
+ ids: [],
19442
+ entities: {}
19443
+ }
19414
19444
  });
19415
19445
  },
19416
19446
  unregisterViewPreset: function unregisterViewPreset(draft, action) {
@@ -19426,22 +19456,67 @@ var slice$3 = createSlice({
19426
19456
  delete draft.viewPresetDialog;
19427
19457
  },
19428
19458
  toggleViewPresetListDialog: function toggleViewPresetListDialog(draft, action) {
19429
- var _action$payload7 = action.payload,
19430
- isViewPresetDialogOpen = _action$payload7.isViewPresetListDialogOpen,
19431
- panelId = _action$payload7.panelId;
19459
+ var _action$payload8 = action.payload,
19460
+ isViewPresetDialogOpen = _action$payload8.isViewPresetListDialogOpen,
19461
+ panelId = _action$payload8.panelId;
19432
19462
  var entity = draft.entities[panelId];
19433
19463
  if (entity) {
19434
19464
  entity.isViewPresetListDialogOpen = isViewPresetDialogOpen;
19435
19465
  viewPresetsAdapter.setOne(draft, entity);
19436
19466
  }
19467
+ },
19468
+ toggleSelectFilterChip: function toggleSelectFilterChip(draft, action) {
19469
+ var _action$payload9 = action.payload,
19470
+ id = _action$payload9.id,
19471
+ isSelected = _action$payload9.isSelected,
19472
+ panelId = _action$payload9.panelId;
19473
+ var entity = draft.entities[panelId];
19474
+ if (entity) {
19475
+ var isAllSelected = entity.filters.every(function (filter) {
19476
+ return filter.isSelected;
19477
+ });
19478
+ var index = entity.filters.findIndex(function (filter) {
19479
+ return filter.id === id;
19480
+ });
19481
+ if (index !== -1) {
19482
+ if (isAllSelected) {
19483
+ entity.filters.forEach(function (filter, index) {
19484
+ entity.filters[index].isSelected = filter.id === id ? isSelected : false;
19485
+ });
19486
+ } else {
19487
+ entity.filters[index] = Object.assign(Object.assign({}, entity.filters[index]), {
19488
+ isSelected: isSelected
19489
+ });
19490
+ var isAllUnSelected = entity.filters.every(function (filter) {
19491
+ return !filter.isSelected;
19492
+ });
19493
+ if (isAllUnSelected) {
19494
+ entity.filters.forEach(function (_, index) {
19495
+ entity.filters[index].isSelected = true;
19496
+ });
19497
+ }
19498
+ }
19499
+ }
19500
+ }
19501
+ },
19502
+ setSelectAllFilterChip: function setSelectAllFilterChip(draft, action) {
19503
+ var panelId = action.payload.panelId;
19504
+ var entity = draft.entities[panelId];
19505
+ if (entity) {
19506
+ entity.filters = entity.filters.map(function (filter) {
19507
+ return Object.assign(Object.assign({}, filter), {
19508
+ isSelected: true
19509
+ });
19510
+ });
19511
+ }
19437
19512
  }
19438
19513
  },
19439
19514
  extraReducers: function extraReducers(builder) {
19440
19515
  syncGroupChangeActions.map(function (syncGroupAction) {
19441
19516
  return builder.addCase(syncGroupAction, function (draft, action) {
19442
- var _action$payload8 = action.payload,
19443
- origin = _action$payload8.origin,
19444
- targetId = _action$payload8.targetId;
19517
+ var _action$payload10 = action.payload,
19518
+ origin = _action$payload10.origin,
19519
+ targetId = _action$payload10.targetId;
19445
19520
  if (origin === 'user') {
19446
19521
  var entity = draft.entities[targetId];
19447
19522
  if (entity) {
@@ -19453,9 +19528,9 @@ var slice$3 = createSlice({
19453
19528
  });
19454
19529
  mapPresetChangeActions.map(function (mapPresetAction) {
19455
19530
  return builder.addCase(mapPresetAction, function (draft, action) {
19456
- var _action$payload9 = action.payload,
19457
- mapId = _action$payload9.mapId,
19458
- origin = _action$payload9.origin;
19531
+ var _action$payload11 = action.payload,
19532
+ mapId = _action$payload11.mapId,
19533
+ origin = _action$payload11.origin;
19459
19534
  var isChangeOriginSupported = supportedChangeOrigins.indexOf(origin) >= 0;
19460
19535
  if (isChangeOriginSupported && mapId) {
19461
19536
  var entity = draft.entities[mapId];
@@ -19773,6 +19848,20 @@ var getIsViewPresetListDialogOpen = function getIsViewPresetListDialogOpen(store
19773
19848
  var _a;
19774
19849
  return ((_a = getViewPresetById(store, panelId)) === null || _a === void 0 ? void 0 : _a.isViewPresetListDialogOpen) || false;
19775
19850
  };
19851
+ var getViewPresetListFiltersForView = function getViewPresetListFiltersForView(store, panelId) {
19852
+ var _a;
19853
+ return ((_a = getViewPresetById(store, panelId)) === null || _a === void 0 ? void 0 : _a.filters) || [];
19854
+ };
19855
+ // Used to retrieve the filtered view preset list for your view - if no filters/search applied it will be empty
19856
+ // To ensure you retrieve the view preset list specific for your view (incl and excl filters), use getFilteredViewPresetListForView
19857
+ var getViewPresetListFilterResultsForView = function getViewPresetListFilterResultsForView(store, panelId) {
19858
+ var _a;
19859
+ var filteredResults = ((_a = getViewPresetById(store, panelId)) === null || _a === void 0 ? void 0 : _a.filterResults) || {
19860
+ entities: {},
19861
+ ids: []
19862
+ };
19863
+ return Object.values(filteredResults.entities);
19864
+ };
19776
19865
 
19777
19866
  /* *
19778
19867
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -19810,13 +19899,38 @@ var getPresetsApi = function getPresetsApi() {
19810
19899
  };
19811
19900
  var emptyMapViewPreset = {
19812
19901
  componentType: 'Map',
19813
- keywords: 'mapPreset,viewPreset,layerManager',
19902
+ keywords: '',
19814
19903
  scope: 'user',
19815
19904
  title: '',
19816
19905
  initialProps: {
19817
19906
  mapPreset: {}
19818
19907
  }
19819
19908
  };
19909
+ // Returns object of applied user filters such as scope/search etc
19910
+ // If all filter chips are selected, an empty string is returned for that filter which is interpreted in the BE as "return all" _
19911
+ var constructFilterParams$1 = function constructFilterParams(filters) {
19912
+ // get filters
19913
+ var isAllSelectedForFilters = filters.every(function (filter) {
19914
+ return filter.isSelected;
19915
+ });
19916
+ // If all filters are selected, ensure we return nothing for scope
19917
+ var _ref = isAllSelectedForFilters ? {
19918
+ scope: []
19919
+ } : filters.reduce(function (filterList, filter) {
19920
+ if (filter.isSelected && filter.type === 'scope') {
19921
+ return Object.assign(Object.assign({}, filter), {
19922
+ scope: filterList.scope.concat(filter.id)
19923
+ });
19924
+ }
19925
+ return filterList;
19926
+ }, {
19927
+ scope: []
19928
+ }),
19929
+ scope = _ref.scope;
19930
+ return Object.assign({}, scope.length && {
19931
+ scope: scope.toString()
19932
+ });
19933
+ };
19820
19934
 
19821
19935
  /* *
19822
19936
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -20019,7 +20133,13 @@ var slice$1 = createSlice({
20019
20133
  }
20020
20134
  viewPresetsListAdapter.setAll(draft, action.payload.viewPresets);
20021
20135
  }).addCase(viewPresetActions.fetchedViewPresets, function (draft, action) {
20022
- var viewPresets = action.payload.viewPresets;
20136
+ var _action$payload = action.payload,
20137
+ viewPresets = _action$payload.viewPresets,
20138
+ filterParams = _action$payload.filterParams;
20139
+ // If there are filter params applied, don't do anything, these results are put in the specific panel filterResults
20140
+ if (Object.keys(filterParams).length !== 0) {
20141
+ return;
20142
+ }
20023
20143
  if (!viewPresets || !viewPresets.length) {
20024
20144
  viewPresetsListAdapter.removeAll(draft);
20025
20145
  return;
@@ -22665,6 +22785,7 @@ var getSnackbarMessage = function getSnackbarMessage(action, title) {
22665
22785
  };
22666
22786
  var emptyMapWorkspace = {
22667
22787
  title: 'New workspace',
22788
+ scope: 'system',
22668
22789
  "abstract": '',
22669
22790
  views: {
22670
22791
  allIds: ['1_screen'],
@@ -22763,6 +22884,19 @@ var filterWorkspacePresetList = function filterWorkspacePresetList(params) {
22763
22884
  return list;
22764
22885
  }, []);
22765
22886
  };
22887
+ var filterViewPresetList = function filterViewPresetList(params) {
22888
+ if (lodash.exports.isEmpty(params)) {
22889
+ return viewPresetsList;
22890
+ }
22891
+ return viewPresetsList.reduce(function (list, viewPresetRaw) {
22892
+ var _a;
22893
+ var workspacePreset = viewPresetRaw;
22894
+ if ((_a = params === null || params === void 0 ? void 0 : params.scope) === null || _a === void 0 ? void 0 : _a.includes(workspacePreset.scope)) {
22895
+ return list.concat(workspacePreset);
22896
+ }
22897
+ return list;
22898
+ }, []);
22899
+ };
22766
22900
  var sortViewPresets = function sortViewPresets(viewPresets) {
22767
22901
  var presetOrder = ['system', 'user'];
22768
22902
  return _toConsumableArray$1(viewPresets).sort(function (left, right) {
@@ -22812,10 +22946,13 @@ var getApiRoutes = function getApiRoutes(axiosInstance) {
22812
22946
  return axiosInstance["delete"]("/workspacepreset/".concat(workspacePresetId));
22813
22947
  },
22814
22948
  // view presets
22815
- getViewPresets: function getViewPresets() {
22816
- return axiosInstance.get('/viewpreset').then(function () {
22949
+ getViewPresets: function getViewPresets(params) {
22950
+ return axiosInstance.get('/viewpreset', {
22951
+ params: params
22952
+ }).then(function () {
22953
+ var data = filterViewPresetList(params);
22817
22954
  return {
22818
- data: sortViewPresets(viewPresetsList)
22955
+ data: sortViewPresets(data)
22819
22956
  };
22820
22957
  });
22821
22958
  },
@@ -23720,25 +23857,26 @@ function fetchInitialViewPresetsSaga() {
23720
23857
  function fetchViewPresetsSaga(_ref) {
23721
23858
  var payload = _ref.payload;
23722
23859
  return /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
23723
- var panelId, presetsApi, _yield$call2, viewPresets;
23860
+ var panelId, filterParams, presetsApi, _yield$call2, viewPresets;
23724
23861
  return _regeneratorRuntime().wrap(function _callee$(_context2) {
23725
23862
  while (1) switch (_context2.prev = _context2.next) {
23726
23863
  case 0:
23727
- panelId = payload.panelId;
23864
+ panelId = payload.panelId, filterParams = payload.filterParams;
23728
23865
  _context2.prev = 1;
23729
23866
  _context2.next = 4;
23730
23867
  return call(getPresetsApi);
23731
23868
  case 4:
23732
23869
  presetsApi = _context2.sent;
23733
23870
  _context2.next = 7;
23734
- return call(presetsApi.getViewPresets);
23871
+ return call(presetsApi.getViewPresets, filterParams);
23735
23872
  case 7:
23736
23873
  _yield$call2 = _context2.sent;
23737
23874
  viewPresets = _yield$call2.data;
23738
23875
  _context2.next = 11;
23739
23876
  return put(viewPresetActions.fetchedViewPresets({
23740
23877
  viewPresets: viewPresets,
23741
- panelId: panelId
23878
+ panelId: panelId,
23879
+ filterParams: filterParams
23742
23880
  }));
23743
23881
  case 11:
23744
23882
  _context2.next = 17;
@@ -23871,7 +24009,7 @@ function selectViewPresetSaga(_ref3) {
23871
24009
  function onSuccessViewPresetActionSaga(_ref4) {
23872
24010
  var payload = _ref4.payload;
23873
24011
  return /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
23874
- var action, viewPresetId, title, panelId, activeMapPresetId;
24012
+ var action, viewPresetId, title, panelId, activeMapPresetId, viewPresetFilters;
23875
24013
  return _regeneratorRuntime().wrap(function _callee4$(_context5) {
23876
24014
  while (1) switch (_context5.prev = _context5.next) {
23877
24015
  case 0:
@@ -23897,36 +24035,41 @@ function onSuccessViewPresetActionSaga(_ref4) {
23897
24035
  }));
23898
24036
  case 10:
23899
24037
  _context5.next = 12;
24038
+ return select(getViewPresetListFiltersForView, panelId);
24039
+ case 12:
24040
+ viewPresetFilters = _context5.sent;
24041
+ _context5.next = 15;
23900
24042
  return call(fetchViewPresetsSaga, viewPresetActions.fetchViewPresets({
23901
- panelId: panelId
24043
+ panelId: panelId,
24044
+ filterParams: constructFilterParams$1(viewPresetFilters)
23902
24045
  }));
23903
- case 12:
23904
- _context5.next = 14;
24046
+ case 15:
24047
+ _context5.next = 17;
23905
24048
  return put(viewPresetActions.setViewPresetHasChanges({
23906
24049
  panelId: panelId,
23907
24050
  hasChanges: false
23908
24051
  }));
23909
- case 14:
24052
+ case 17:
23910
24053
  if (!(action === PresetAction.SAVE_AS && viewPresetId)) {
23911
- _context5.next = 17;
24054
+ _context5.next = 20;
23912
24055
  break;
23913
24056
  }
23914
- _context5.next = 17;
24057
+ _context5.next = 20;
23915
24058
  return put(viewPresetActions.setActiveViewPresetId({
23916
24059
  panelId: panelId,
23917
24060
  viewPresetId: viewPresetId
23918
24061
  }));
23919
- case 17:
23920
- _context5.next = 21;
24062
+ case 20:
24063
+ _context5.next = 24;
23921
24064
  break;
23922
- case 19:
23923
- _context5.prev = 19;
24065
+ case 22:
24066
+ _context5.prev = 22;
23924
24067
  _context5.t0 = _context5["catch"](1);
23925
- case 21:
24068
+ case 24:
23926
24069
  case "end":
23927
24070
  return _context5.stop();
23928
24071
  }
23929
- }, _callee4, null, [[1, 19]]);
24072
+ }, _callee4, null, [[1, 22]]);
23930
24073
  })();
23931
24074
  }
23932
24075
  function rootSaga() {
@@ -24439,12 +24582,52 @@ const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip d
24439
24582
 
24440
24583
  const getBatch = () => batch;
24441
24584
 
24442
- const ReactReduxContext = /*#__PURE__*/createContext(null);
24585
+ const ContextKey = Symbol.for(`react-redux-context-${version}`);
24586
+ const gT = globalThis;
24443
24587
 
24444
- if (process.env.NODE_ENV !== 'production') {
24445
- ReactReduxContext.displayName = 'ReactRedux';
24588
+ function getContext() {
24589
+ let realContext = gT[ContextKey];
24590
+
24591
+ if (!realContext) {
24592
+ realContext = createContext(null);
24593
+
24594
+ if (process.env.NODE_ENV !== 'production') {
24595
+ realContext.displayName = 'ReactRedux';
24596
+ }
24597
+
24598
+ gT[ContextKey] = realContext;
24599
+ }
24600
+
24601
+ return realContext;
24446
24602
  }
24447
24603
 
24604
+ const ReactReduxContext = /*#__PURE__*/new Proxy({}, /*#__PURE__*/new Proxy({}, {
24605
+ get(_, handler) {
24606
+ const target = getContext(); // @ts-ignore
24607
+
24608
+ return (_target, ...args) => Reflect[handler](target, ...args);
24609
+ }
24610
+
24611
+ }));
24612
+
24613
+ /**
24614
+ * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level
24615
+ * hook that you should usually not need to call directly.
24616
+ *
24617
+ * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.
24618
+ * @returns {Function} A `useReduxContext` hook bound to the specified context.
24619
+ */
24620
+ function createReduxContextHook(context = ReactReduxContext) {
24621
+ return function useReduxContext() {
24622
+ const contextValue = useContext(context);
24623
+
24624
+ if (process.env.NODE_ENV !== 'production' && !contextValue) {
24625
+ throw new Error('could not find react-redux context value; please ensure the component is wrapped in a <Provider>');
24626
+ }
24627
+
24628
+ return contextValue;
24629
+ };
24630
+ }
24448
24631
  /**
24449
24632
  * A hook to access the value of the `ReactReduxContext`. This is a low-level
24450
24633
  * hook that you should usually not need to call directly.
@@ -24461,15 +24644,8 @@ if (process.env.NODE_ENV !== 'production') {
24461
24644
  * return <div>{store.getState()}</div>
24462
24645
  * }
24463
24646
  */
24464
- function useReduxContext() {
24465
- const contextValue = useContext(ReactReduxContext);
24466
24647
 
24467
- if (process.env.NODE_ENV !== 'production' && !contextValue) {
24468
- throw new Error('could not find react-redux context value; please ensure the component is wrapped in a <Provider>');
24469
- }
24470
-
24471
- return contextValue;
24472
- }
24648
+ const useReduxContext = /*#__PURE__*/createReduxContextHook();
24473
24649
 
24474
24650
  const notInitialized = () => {
24475
24651
  throw new Error('uSES not initialized!');
@@ -24490,8 +24666,16 @@ const refEquality = (a, b) => a === b;
24490
24666
 
24491
24667
 
24492
24668
  function createSelectorHook(context = ReactReduxContext) {
24493
- const useReduxContext$1 = context === ReactReduxContext ? useReduxContext : () => useContext(context);
24494
- return function useSelector(selector, equalityFn = refEquality) {
24669
+ const useReduxContext$1 = context === ReactReduxContext ? useReduxContext : createReduxContextHook(context);
24670
+ return function useSelector(selector, equalityFnOrOptions = {}) {
24671
+ const {
24672
+ equalityFn = refEquality,
24673
+ stabilityCheck = undefined,
24674
+ noopCheck = undefined
24675
+ } = typeof equalityFnOrOptions === 'function' ? {
24676
+ equalityFn: equalityFnOrOptions
24677
+ } : equalityFnOrOptions;
24678
+
24495
24679
  if (process.env.NODE_ENV !== 'production') {
24496
24680
  if (!selector) {
24497
24681
  throw new Error(`You must pass a selector to useSelector`);
@@ -24509,9 +24693,47 @@ function createSelectorHook(context = ReactReduxContext) {
24509
24693
  const {
24510
24694
  store,
24511
24695
  subscription,
24512
- getServerState
24696
+ getServerState,
24697
+ stabilityCheck: globalStabilityCheck,
24698
+ noopCheck: globalNoopCheck
24513
24699
  } = useReduxContext$1();
24514
- const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, selector, equalityFn);
24700
+ const firstRun = useRef(true);
24701
+ const wrappedSelector = useCallback({
24702
+ [selector.name](state) {
24703
+ const selected = selector(state);
24704
+
24705
+ if (process.env.NODE_ENV !== 'production') {
24706
+ const finalStabilityCheck = typeof stabilityCheck === 'undefined' ? globalStabilityCheck : stabilityCheck;
24707
+
24708
+ if (finalStabilityCheck === 'always' || finalStabilityCheck === 'once' && firstRun.current) {
24709
+ const toCompare = selector(state);
24710
+
24711
+ if (!equalityFn(selected, toCompare)) {
24712
+ console.warn('Selector ' + (selector.name || 'unknown') + ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' + '\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization', {
24713
+ state,
24714
+ selected,
24715
+ selected2: toCompare
24716
+ });
24717
+ }
24718
+ }
24719
+
24720
+ const finalNoopCheck = typeof noopCheck === 'undefined' ? globalNoopCheck : noopCheck;
24721
+
24722
+ if (finalNoopCheck === 'always' || finalNoopCheck === 'once' && firstRun.current) {
24723
+ // @ts-ignore
24724
+ if (selected === state) {
24725
+ console.warn('Selector ' + (selector.name || 'unknown') + ' returned the root state when called. This can lead to unnecessary rerenders.' + '\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.');
24726
+ }
24727
+ }
24728
+
24729
+ if (firstRun.current) firstRun.current = false;
24730
+ }
24731
+
24732
+ return selected;
24733
+ }
24734
+
24735
+ }[selector.name], [selector, globalStabilityCheck, stabilityCheck]);
24736
+ const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, wrappedSelector, equalityFn);
24515
24737
  useDebugValue(selectedState);
24516
24738
  return selectedState;
24517
24739
  };
@@ -25164,16 +25386,20 @@ function Provider({
25164
25386
  store,
25165
25387
  context,
25166
25388
  children,
25167
- serverState
25389
+ serverState,
25390
+ stabilityCheck = 'once',
25391
+ noopCheck = 'once'
25168
25392
  }) {
25169
25393
  const contextValue = useMemo(() => {
25170
25394
  const subscription = createSubscription(store);
25171
25395
  return {
25172
25396
  store,
25173
25397
  subscription,
25174
- getServerState: serverState ? () => serverState : undefined
25398
+ getServerState: serverState ? () => serverState : undefined,
25399
+ stabilityCheck,
25400
+ noopCheck
25175
25401
  };
25176
- }, [store, serverState]);
25402
+ }, [store, serverState, stabilityCheck, noopCheck]);
25177
25403
  const previousState = useMemo(() => store.getState(), [store]);
25178
25404
  useIsomorphicLayoutEffect(() => {
25179
25405
  const {
@@ -25207,7 +25433,8 @@ function Provider({
25207
25433
 
25208
25434
  function createStoreHook(context = ReactReduxContext) {
25209
25435
  const useReduxContext$1 = // @ts-ignore
25210
- context === ReactReduxContext ? useReduxContext : () => useContext(context);
25436
+ context === ReactReduxContext ? useReduxContext : // @ts-ignore
25437
+ createReduxContextHook(context);
25211
25438
  return function useStore() {
25212
25439
  const {
25213
25440
  store
@@ -31400,6 +31627,8 @@ var createBalancedMosaicNode = function createBalancedMosaicNode(currentNode) {
31400
31627
  * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
31401
31628
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
31402
31629
  * */
31630
+ // Used to retrieve the unfiltered, general view preset list.
31631
+ // To ensure you retrieve the view preset list specific for your view, use getFilteredViewPresetListForView
31403
31632
  var _viewPresetsListAdapt = viewPresetsListAdapter.getSelectors(function (state) {
31404
31633
  var _a;
31405
31634
  return (_a = state === null || state === void 0 ? void 0 : state.viewPresetsList) !== null && _a !== void 0 ? _a : {
@@ -31409,6 +31638,20 @@ var _viewPresetsListAdapt = viewPresetsListAdapter.getSelectors(function (state)
31409
31638
  }),
31410
31639
  getViewPresetsList = _viewPresetsListAdapt.selectAll;
31411
31640
  _viewPresetsListAdapt.selectById;
31641
+ var getFilteredViewPresetListForView = createSelector(getViewPresetsList, getViewPresetListFilterResultsForView, getViewPresetListFiltersForView, function (fullViewPresetsList, filteredResults, appliedFilters) {
31642
+ // If we have a filtered results list, use this, otherwise fall back to the general unfiltered view presets list
31643
+ // If all filters are set to true we are not filtering
31644
+ var filtersApplied = !appliedFilters.every(function (filter) {
31645
+ return filter.isSelected;
31646
+ });
31647
+ if (filtersApplied) {
31648
+ return filteredResults;
31649
+ }
31650
+ return fullViewPresetsList !== null && fullViewPresetsList !== void 0 ? fullViewPresetsList : {
31651
+ entities: {},
31652
+ ids: []
31653
+ };
31654
+ });
31412
31655
 
31413
31656
  /* *
31414
31657
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31602,6 +31845,196 @@ var WorkspaceSelectList = function WorkspaceSelectList(_ref) {
31602
31845
  })));
31603
31846
  };
31604
31847
 
31848
+ /* *
31849
+ * Licensed under the Apache License, Version 2.0 (the "License");
31850
+ * you may not use this file except in compliance with the License.
31851
+ * You may obtain a copy of the License at
31852
+ *
31853
+ * http://www.apache.org/licenses/LICENSE-2.0
31854
+ *
31855
+ * Unless required by applicable law or agreed to in writing, software
31856
+ * distributed under the License is distributed on an "AS IS" BASIS,
31857
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31858
+ * See the License for the specific language governing permissions and
31859
+ * limitations under the License.
31860
+ *
31861
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
31862
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
31863
+ * */
31864
+ var FilterChip = function FilterChip(_ref) {
31865
+ var label = _ref.label,
31866
+ id = _ref.id,
31867
+ _ref$isSelected = _ref.isSelected,
31868
+ isSelected = _ref$isSelected === void 0 ? false : _ref$isSelected,
31869
+ _ref$isDisabled = _ref.isDisabled,
31870
+ isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
31871
+ _ref$handleClick = _ref.handleClick,
31872
+ handleClick = _ref$handleClick === void 0 ? function () {} : _ref$handleClick;
31873
+ var theme = useTheme$2();
31874
+ return /*#__PURE__*/React.createElement(Chip, {
31875
+ size: "small",
31876
+ id: id,
31877
+ label: label,
31878
+ disabled: isDisabled,
31879
+ variant: isSelected ? 'filled' : 'outlined',
31880
+ color: isSelected ? 'secondary' : 'default',
31881
+ sx: {
31882
+ borderColor: "".concat(theme.palette.geowebColors.buttons.tertiary["default"].borderColor),
31883
+ padding: '0px 4px'
31884
+ },
31885
+ onClick: function onClick() {
31886
+ return handleClick(id);
31887
+ }
31888
+ });
31889
+ };
31890
+
31891
+ /* *
31892
+ * Licensed under the Apache License, Version 2.0 (the "License");
31893
+ * you may not use this file except in compliance with the License.
31894
+ * You may obtain a copy of the License at
31895
+ *
31896
+ * http://www.apache.org/licenses/LICENSE-2.0
31897
+ *
31898
+ * Unless required by applicable law or agreed to in writing, software
31899
+ * distributed under the License is distributed on an "AS IS" BASIS,
31900
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31901
+ * See the License for the specific language governing permissions and
31902
+ * limitations under the License.
31903
+ *
31904
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
31905
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
31906
+ * */
31907
+ var allLabel = 'All';
31908
+ var FilterList = function FilterList(_ref) {
31909
+ var _ref$filters = _ref.filters,
31910
+ filters = _ref$filters === void 0 ? workspaceListFilterOptions : _ref$filters,
31911
+ _ref$onChipClick = _ref.onChipClick,
31912
+ onChipClick = _ref$onChipClick === void 0 ? function () {} : _ref$onChipClick,
31913
+ _ref$isAllSelected = _ref.isAllSelected,
31914
+ isAllSelected = _ref$isAllSelected === void 0 ? false : _ref$isAllSelected;
31915
+ return /*#__PURE__*/React.createElement(Stack, {
31916
+ direction: "row",
31917
+ spacing: 1,
31918
+ "data-testid": "filterList"
31919
+ }, /*#__PURE__*/React.createElement(FilterChip, {
31920
+ id: "all",
31921
+ label: allLabel,
31922
+ isSelected: isAllSelected,
31923
+ handleClick: function handleClick(key) {
31924
+ return onChipClick(key, !isAllSelected);
31925
+ }
31926
+ }), filters.map(function (filter) {
31927
+ return /*#__PURE__*/React.createElement(FilterChip, {
31928
+ key: filter.id,
31929
+ id: filter.id,
31930
+ label: filter.label,
31931
+ isSelected: isAllSelected ? false : filter.isSelected,
31932
+ isDisabled: filter.isDisabled,
31933
+ handleClick: function handleClick(key) {
31934
+ // If they are all isSelected ensure that if one is clicked that one will be the only one set to selected
31935
+ var selected = isAllSelected ? true : !filter.isSelected;
31936
+ onChipClick(key, selected);
31937
+ }
31938
+ });
31939
+ }));
31940
+ };
31941
+
31942
+ var DEBOUNCE_TIMEOUT = 300;
31943
+ var SearchField = function SearchField(_ref) {
31944
+ var _ref$label = _ref.label,
31945
+ label = _ref$label === void 0 ? 'Search' : _ref$label,
31946
+ valueChanged = _ref.valueChanged,
31947
+ _ref$value = _ref.value,
31948
+ value = _ref$value === void 0 ? '' : _ref$value;
31949
+ var _React$useState = React.useState(value),
31950
+ _React$useState2 = _slicedToArray$2(_React$useState, 2),
31951
+ localValue = _React$useState2[0],
31952
+ setLocalValue = _React$useState2[1];
31953
+ // eslint-disable-next-line react-hooks/exhaustive-deps
31954
+ var handleValueChangeDebounced = React.useCallback(debounce$1(valueChanged, DEBOUNCE_TIMEOUT), []);
31955
+ var ClearButton = function ClearButton() {
31956
+ return /*#__PURE__*/React.createElement(CustomIconButton, {
31957
+ tooltipTitle: "Clear",
31958
+ edge: "end",
31959
+ onClick: function onClick() {
31960
+ setLocalValue('');
31961
+ valueChanged('');
31962
+ },
31963
+ size: "large"
31964
+ }, /*#__PURE__*/React.createElement(Clear, null));
31965
+ };
31966
+ var SearchButton = function SearchButton() {
31967
+ return /*#__PURE__*/React.createElement(CustomIconButton, {
31968
+ tooltipTitle: label,
31969
+ edge: "end",
31970
+ size: "large"
31971
+ }, /*#__PURE__*/React.createElement(Search, null));
31972
+ };
31973
+ return /*#__PURE__*/React.createElement(TextField, {
31974
+ variant: "filled",
31975
+ size: "small",
31976
+ sx: {
31977
+ '& input': {
31978
+ paddingTop: '18px'
31979
+ }
31980
+ },
31981
+ label: label,
31982
+ value: localValue,
31983
+ autoFocus: true,
31984
+ fullWidth: true,
31985
+ onChange: function onChange(e) {
31986
+ handleValueChangeDebounced(e.target.value);
31987
+ setLocalValue(e.target.value);
31988
+ },
31989
+ InputProps: {
31990
+ endAdornment: /*#__PURE__*/React.createElement(InputAdornment, {
31991
+ position: "end"
31992
+ }, localValue ? /*#__PURE__*/React.createElement(ClearButton, null) : /*#__PURE__*/React.createElement(SearchButton, null))
31993
+ }
31994
+ });
31995
+ };
31996
+
31997
+ /* *
31998
+ * Licensed under the Apache License, Version 2.0 (the "License");
31999
+ * you may not use this file except in compliance with the License.
32000
+ * You may obtain a copy of the License at
32001
+ *
32002
+ * http://www.apache.org/licenses/LICENSE-2.0
32003
+ *
32004
+ * Unless required by applicable law or agreed to in writing, software
32005
+ * distributed under the License is distributed on an "AS IS" BASIS,
32006
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
32007
+ * See the License for the specific language governing permissions and
32008
+ * limitations under the License.
32009
+ *
32010
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
32011
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
32012
+ * */
32013
+ var WorkspaceFilter = function WorkspaceFilter(_ref) {
32014
+ var filters = _ref.filters,
32015
+ _ref$onClickFilterChi = _ref.onClickFilterChip,
32016
+ onClickFilterChip = _ref$onClickFilterChi === void 0 ? function () {} : _ref$onClickFilterChi,
32017
+ _ref$onSearch = _ref.onSearch,
32018
+ onSearch = _ref$onSearch === void 0 ? function () {} : _ref$onSearch,
32019
+ isAllSelected = _ref.isAllSelected,
32020
+ searchQuery = _ref.searchQuery,
32021
+ _ref$showSearch = _ref.showSearch,
32022
+ showSearch = _ref$showSearch === void 0 ? true : _ref$showSearch;
32023
+ return /*#__PURE__*/React.createElement(Stack, {
32024
+ spacing: 1,
32025
+ sx: {
32026
+ marginBottom: '8px'
32027
+ }
32028
+ }, showSearch && /*#__PURE__*/React.createElement(SearchField, {
32029
+ value: searchQuery,
32030
+ valueChanged: onSearch
32031
+ }), /*#__PURE__*/React.createElement(FilterList, {
32032
+ filters: filters,
32033
+ onChipClick: onClickFilterChip,
32034
+ isAllSelected: isAllSelected
32035
+ }));
32036
+ };
32037
+
31605
32038
  /* *
31606
32039
  * Licensed under the Apache License, Version 2.0 (the "License");
31607
32040
  * you may not use this file except in compliance with the License.
@@ -31621,9 +32054,11 @@ var WorkspaceSelectList = function WorkspaceSelectList(_ref) {
31621
32054
  var ERROR_TITLE = 'View presets not available';
31622
32055
  var ERROR_RETRY = 'Try again';
31623
32056
  var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31624
- var panelId = _ref.panelId;
32057
+ var panelId = _ref.panelId,
32058
+ _ref$isOpen = _ref.isOpen,
32059
+ isOpen = _ref$isOpen === void 0 ? true : _ref$isOpen;
31625
32060
  var viewPresets = useSelector(function (store) {
31626
- return getViewPresetsList(store);
32061
+ return getFilteredViewPresetListForView(store, panelId);
31627
32062
  });
31628
32063
  var activeViewPresetId = useSelector(function (store) {
31629
32064
  return getViewPresetActiveId(store, panelId);
@@ -31631,6 +32066,9 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31631
32066
  var currentMapPreset = useSelector(function (store) {
31632
32067
  return mapSelectors.getMapPreset(store, panelId);
31633
32068
  });
32069
+ var viewPresetListFilters = useSelector(function (store) {
32070
+ return getViewPresetListFiltersForView(store, panelId);
32071
+ });
31634
32072
  var relatedSyncGroupIds = useSelector(function (store) {
31635
32073
  return syncGroupsSelectors.getAllTargetGroupsForSource(store, panelId);
31636
32074
  });
@@ -31642,6 +32080,13 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31642
32080
  });
31643
32081
  var _useAuthenticationCon = useAuthenticationContext(),
31644
32082
  isLoggedIn = _useAuthenticationCon.isLoggedIn;
32083
+ React.useEffect(function () {
32084
+ // Only refetch list on changes to the filters if the dialog is open
32085
+ if (isOpen) {
32086
+ fetchViewPresets();
32087
+ }
32088
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32089
+ }, [viewPresetListFilters]);
31645
32090
  var dispatch = useDispatch();
31646
32091
  var openViewPresetsDialog = React.useCallback(function (viewPresetDialogOptions) {
31647
32092
  dispatch(viewPresetActions.openViewPresetDialog({
@@ -31655,10 +32100,12 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31655
32100
  }));
31656
32101
  }, [dispatch, panelId]);
31657
32102
  var fetchViewPresets = React.useCallback(function () {
32103
+ var filterParams = constructFilterParams$1(viewPresetListFilters);
31658
32104
  dispatch(viewPresetActions.fetchViewPresets({
31659
- panelId: panelId
32105
+ panelId: panelId,
32106
+ filterParams: filterParams
31660
32107
  }));
31661
- }, [dispatch, panelId]);
32108
+ }, [dispatch, panelId, viewPresetListFilters]);
31662
32109
  var onClickViewPresetOption = function onClickViewPresetOption(presetId, workspaceAction, preset) {
31663
32110
  switch (workspaceAction) {
31664
32111
  case WorkspacePresetAction.DUPLICATE:
@@ -31699,6 +32146,31 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31699
32146
  }
31700
32147
  }
31701
32148
  };
32149
+ var toggleSelectFilterChip = React.useCallback(function (id, isSelected) {
32150
+ dispatch(viewPresetActions.toggleSelectFilterChip({
32151
+ id: id,
32152
+ isSelected: isSelected,
32153
+ panelId: panelId
32154
+ }));
32155
+ }, [dispatch, panelId]);
32156
+ var setSelectAllFilterChip = React.useCallback(function () {
32157
+ dispatch(viewPresetActions.setSelectAllFilterChip({
32158
+ panelId: panelId
32159
+ }));
32160
+ }, [dispatch, panelId]);
32161
+ var onClickFilterChip = function onClickFilterChip(id, shouldSelect) {
32162
+ if (id === 'all') {
32163
+ if (shouldSelect) {
32164
+ setSelectAllFilterChip();
32165
+ }
32166
+ } else {
32167
+ toggleSelectFilterChip(id, shouldSelect);
32168
+ }
32169
+ };
32170
+ var isAllSelectedForFilters = viewPresetListFilters.every(function (filter) {
32171
+ return filter.isSelected;
32172
+ });
32173
+ var shouldHideNewWorkspace = !isAllSelectedForFilters; // || workspaceSearchQuery.length > 0;
31702
32174
  return /*#__PURE__*/React.createElement(React.Fragment, null, isViewPresetsListFetching && /*#__PURE__*/React.createElement(LinearProgress, {
31703
32175
  "data-testid": "loading-bar",
31704
32176
  color: "secondary",
@@ -31713,6 +32185,15 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31713
32185
  title: ERROR_RETRY,
31714
32186
  onClick: fetchViewPresets
31715
32187
  }
32188
+ }), /*#__PURE__*/React.createElement(Box$2, {
32189
+ sx: {
32190
+ padding: 1
32191
+ }
32192
+ }, !errorViewPresetsList && /*#__PURE__*/React.createElement(WorkspaceFilter, {
32193
+ filters: viewPresetListFilters,
32194
+ onClickFilterChip: onClickFilterChip,
32195
+ isAllSelected: isAllSelectedForFilters,
32196
+ showSearch: false
31716
32197
  }), /*#__PURE__*/React.createElement(WorkspaceSelectList, {
31717
32198
  workspacePresets: viewPresets,
31718
32199
  currentSelectedId: activeViewPresetId || undefined,
@@ -31722,8 +32203,9 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31722
32203
  id: undefined,
31723
32204
  title: MAPPRESET_ACTIVE_TITLE
31724
32205
  }),
31725
- isLoggedIn: isLoggedIn
31726
- }));
32206
+ isLoggedIn: isLoggedIn,
32207
+ hideNewWorkspace: shouldHideNewWorkspace
32208
+ })));
31727
32209
  };
31728
32210
 
31729
32211
  /* *
@@ -31762,13 +32244,10 @@ var ViewPresetMenu = function ViewPresetMenu(_ref) {
31762
32244
  onClick: function onClick(event) {
31763
32245
  event.stopPropagation();
31764
32246
  }
31765
- }, /*#__PURE__*/React__default.createElement(Box$2, {
31766
- sx: {
31767
- padding: 1
31768
- }
31769
32247
  }, /*#__PURE__*/React__default.createElement(ViewPresetMenuListConnect, {
31770
- panelId: panelId
31771
- })));
32248
+ panelId: panelId,
32249
+ isOpen: isOpen
32250
+ }));
31772
32251
  return /*#__PURE__*/React__default.createElement("div", null, hideBackdrop ?
31773
32252
  // Enable hiding backdrop from snapshot tests
31774
32253
  toolContainer : /*#__PURE__*/React__default.createElement(Backdrop, {
@@ -31821,7 +32300,7 @@ var WorkspaceOptions = function WorkspaceOptions(_ref) {
31821
32300
  title: 'Save as',
31822
32301
  callback: handleSaveAs
31823
32302
  }].concat(_toConsumableArray$1(handleSaveAll ? [{
31824
- title: 'Save all',
32303
+ title: 'Save (incl. viewpresets)',
31825
32304
  callback: handleSaveAll
31826
32305
  }] : []), [{
31827
32306
  title: 'Edit',
@@ -32177,9 +32656,9 @@ var WorkspaceTileConnect = function WorkspaceTileConnect(_ref) {
32177
32656
  id: mosaicNodeId,
32178
32657
  componentType: view === null || view === void 0 ? void 0 : view.componentType,
32179
32658
  initialProps: view === null || view === void 0 ? void 0 : view.initialProps
32180
- }), isViewPresetDialogOpen && /*#__PURE__*/React.createElement(ViewPresetMenu, {
32659
+ }), /*#__PURE__*/React.createElement(ViewPresetMenu, {
32181
32660
  panelId: mosaicNodeId,
32182
- isOpen: isViewPresetDialogOpen,
32661
+ isOpen: isViewPresetDialogOpen || false,
32183
32662
  closeMenu: function closeMenu() {
32184
32663
  toggleViewPresetDialog({
32185
32664
  panelId: mosaicNodeId,
@@ -35925,194 +36404,6 @@ process.env.NODE_ENV !== "production" ? Box.propTypes /* remove-proptypes */ = {
35925
36404
  } : void 0;
35926
36405
  var Box$1 = Box;
35927
36406
 
35928
- /* *
35929
- * Licensed under the Apache License, Version 2.0 (the "License");
35930
- * you may not use this file except in compliance with the License.
35931
- * You may obtain a copy of the License at
35932
- *
35933
- * http://www.apache.org/licenses/LICENSE-2.0
35934
- *
35935
- * Unless required by applicable law or agreed to in writing, software
35936
- * distributed under the License is distributed on an "AS IS" BASIS,
35937
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
35938
- * See the License for the specific language governing permissions and
35939
- * limitations under the License.
35940
- *
35941
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
35942
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
35943
- * */
35944
- var FilterChip = function FilterChip(_ref) {
35945
- var label = _ref.label,
35946
- id = _ref.id,
35947
- _ref$isSelected = _ref.isSelected,
35948
- isSelected = _ref$isSelected === void 0 ? false : _ref$isSelected,
35949
- _ref$isDisabled = _ref.isDisabled,
35950
- isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
35951
- _ref$handleClick = _ref.handleClick,
35952
- handleClick = _ref$handleClick === void 0 ? function () {} : _ref$handleClick;
35953
- var theme = useTheme$2();
35954
- return /*#__PURE__*/React.createElement(Chip, {
35955
- size: "small",
35956
- id: id,
35957
- label: label,
35958
- disabled: isDisabled,
35959
- variant: isSelected ? 'filled' : 'outlined',
35960
- color: isSelected ? 'secondary' : 'default',
35961
- sx: {
35962
- borderColor: "".concat(theme.palette.geowebColors.buttons.tertiary["default"].borderColor),
35963
- padding: '0px 4px'
35964
- },
35965
- onClick: function onClick() {
35966
- return handleClick(id);
35967
- }
35968
- });
35969
- };
35970
-
35971
- /* *
35972
- * Licensed under the Apache License, Version 2.0 (the "License");
35973
- * you may not use this file except in compliance with the License.
35974
- * You may obtain a copy of the License at
35975
- *
35976
- * http://www.apache.org/licenses/LICENSE-2.0
35977
- *
35978
- * Unless required by applicable law or agreed to in writing, software
35979
- * distributed under the License is distributed on an "AS IS" BASIS,
35980
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
35981
- * See the License for the specific language governing permissions and
35982
- * limitations under the License.
35983
- *
35984
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
35985
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
35986
- * */
35987
- var allLabel = 'All';
35988
- var FilterList = function FilterList(_ref) {
35989
- var _ref$filters = _ref.filters,
35990
- filters = _ref$filters === void 0 ? workspaceListFilterOptions : _ref$filters,
35991
- _ref$onChipClick = _ref.onChipClick,
35992
- onChipClick = _ref$onChipClick === void 0 ? function () {} : _ref$onChipClick,
35993
- _ref$isAllSelected = _ref.isAllSelected,
35994
- isAllSelected = _ref$isAllSelected === void 0 ? false : _ref$isAllSelected;
35995
- return /*#__PURE__*/React.createElement(Stack, {
35996
- direction: "row",
35997
- spacing: 1,
35998
- "data-testid": "filterList"
35999
- }, /*#__PURE__*/React.createElement(FilterChip, {
36000
- id: "all",
36001
- label: allLabel,
36002
- isSelected: isAllSelected,
36003
- handleClick: function handleClick(key) {
36004
- return onChipClick(key, !isAllSelected);
36005
- }
36006
- }), filters.map(function (filter) {
36007
- return /*#__PURE__*/React.createElement(FilterChip, {
36008
- key: filter.id,
36009
- id: filter.id,
36010
- label: filter.label,
36011
- isSelected: isAllSelected ? false : filter.isSelected,
36012
- isDisabled: filter.isDisabled,
36013
- handleClick: function handleClick(key) {
36014
- // If they are all isSelected ensure that if one is clicked that one will be the only one set to selected
36015
- var selected = isAllSelected ? true : !filter.isSelected;
36016
- onChipClick(key, selected);
36017
- }
36018
- });
36019
- }));
36020
- };
36021
-
36022
- var DEBOUNCE_TIMEOUT = 300;
36023
- var SearchField = function SearchField(_ref) {
36024
- var _ref$label = _ref.label,
36025
- label = _ref$label === void 0 ? 'Search' : _ref$label,
36026
- valueChanged = _ref.valueChanged,
36027
- _ref$value = _ref.value,
36028
- value = _ref$value === void 0 ? '' : _ref$value;
36029
- var _React$useState = React.useState(value),
36030
- _React$useState2 = _slicedToArray$2(_React$useState, 2),
36031
- localValue = _React$useState2[0],
36032
- setLocalValue = _React$useState2[1];
36033
- // eslint-disable-next-line react-hooks/exhaustive-deps
36034
- var handleValueChangeDebounced = React.useCallback(debounce$1(valueChanged, DEBOUNCE_TIMEOUT), []);
36035
- var ClearButton = function ClearButton() {
36036
- return /*#__PURE__*/React.createElement(CustomIconButton, {
36037
- tooltipTitle: "Clear",
36038
- edge: "end",
36039
- onClick: function onClick() {
36040
- setLocalValue('');
36041
- valueChanged('');
36042
- },
36043
- size: "large"
36044
- }, /*#__PURE__*/React.createElement(Clear, null));
36045
- };
36046
- var SearchButton = function SearchButton() {
36047
- return /*#__PURE__*/React.createElement(CustomIconButton, {
36048
- tooltipTitle: label,
36049
- edge: "end",
36050
- size: "large"
36051
- }, /*#__PURE__*/React.createElement(Search, null));
36052
- };
36053
- return /*#__PURE__*/React.createElement(TextField, {
36054
- variant: "filled",
36055
- size: "small",
36056
- sx: {
36057
- '& input': {
36058
- paddingTop: '18px'
36059
- }
36060
- },
36061
- label: label,
36062
- value: localValue,
36063
- autoFocus: true,
36064
- fullWidth: true,
36065
- onChange: function onChange(e) {
36066
- handleValueChangeDebounced(e.target.value);
36067
- setLocalValue(e.target.value);
36068
- },
36069
- InputProps: {
36070
- endAdornment: /*#__PURE__*/React.createElement(InputAdornment, {
36071
- position: "end"
36072
- }, localValue ? /*#__PURE__*/React.createElement(ClearButton, null) : /*#__PURE__*/React.createElement(SearchButton, null))
36073
- }
36074
- });
36075
- };
36076
-
36077
- /* *
36078
- * Licensed under the Apache License, Version 2.0 (the "License");
36079
- * you may not use this file except in compliance with the License.
36080
- * You may obtain a copy of the License at
36081
- *
36082
- * http://www.apache.org/licenses/LICENSE-2.0
36083
- *
36084
- * Unless required by applicable law or agreed to in writing, software
36085
- * distributed under the License is distributed on an "AS IS" BASIS,
36086
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
36087
- * See the License for the specific language governing permissions and
36088
- * limitations under the License.
36089
- *
36090
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
36091
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
36092
- * */
36093
- var WorkspaceFilter = function WorkspaceFilter(_ref) {
36094
- var filters = _ref.filters,
36095
- _ref$onClickFilterChi = _ref.onClickFilterChip,
36096
- onClickFilterChip = _ref$onClickFilterChi === void 0 ? function () {} : _ref$onClickFilterChi,
36097
- _ref$onSearch = _ref.onSearch,
36098
- onSearch = _ref$onSearch === void 0 ? function () {} : _ref$onSearch,
36099
- isAllSelected = _ref.isAllSelected,
36100
- searchQuery = _ref.searchQuery;
36101
- return /*#__PURE__*/React.createElement(Stack, {
36102
- spacing: 1,
36103
- sx: {
36104
- marginBottom: '8px'
36105
- }
36106
- }, /*#__PURE__*/React.createElement(SearchField, {
36107
- value: searchQuery,
36108
- valueChanged: onSearch
36109
- }), /*#__PURE__*/React.createElement(FilterList, {
36110
- filters: filters,
36111
- onChipClick: onClickFilterChip,
36112
- isAllSelected: isAllSelected
36113
- }));
36114
- };
36115
-
36116
36407
  /* *
36117
36408
  * Licensed under the Apache License, Version 2.0 (the "License");
36118
36409
  * you may not use this file except in compliance with the License.
@@ -36252,7 +36543,9 @@ var WorkspaceSelectListConnect = function WorkspaceSelectListConnect() {
36252
36543
  return filter.isSelected;
36253
36544
  });
36254
36545
  var shouldHideNewWorkspace = !isAllSelected || workspaceSearchQuery.length > 0;
36255
- return /*#__PURE__*/React.createElement("div", null, isFetching && /*#__PURE__*/React.createElement(LinearProgress, {
36546
+ return /*#__PURE__*/React.createElement("div", {
36547
+ "data-testid": "workspace-selectlist-connect"
36548
+ }, isFetching && /*#__PURE__*/React.createElement(LinearProgress, {
36256
36549
  "data-testid": "loading-bar",
36257
36550
  color: "secondary",
36258
36551
  sx: {
@@ -36651,7 +36944,7 @@ var WorkspacePresetsForm = function WorkspacePresetsForm(_ref) {
36651
36944
  onSubmit();
36652
36945
  };
36653
36946
  var hasFormInput = action === WorkspacePresetAction.DUPLICATE || action === WorkspacePresetAction.SAVE_AS || action === WorkspacePresetAction.SAVE_ALL;
36654
- // disable form inputs for 'save all' existing workspace preset
36947
+ // disable form inputs for 'Save (incl. viewpresets)' existing workspace preset
36655
36948
  var isDisabled = action === WorkspacePresetAction.SAVE_ALL && formValues.id !== undefined && formValues.id !== '' && formValues.scope === 'user';
36656
36949
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, Boolean(error) && /*#__PURE__*/React__default.createElement(Box$2, {
36657
36950
  sx: {
@@ -36720,16 +37013,21 @@ var WorkspacePresetsForm = function WorkspacePresetsForm(_ref) {
36720
37013
  * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
36721
37014
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
36722
37015
  * */
36723
- var DIALOG_TITLE_SAVE_ALL = 'Save all';
37016
+ var DIALOG_TITLE_SAVE_AS = 'Save as';
37017
+ var DIALOG_TITLE_SAVE_ALL = 'Save (incl. viewpresets)';
37018
+ var DIALOG_TITLE_DELETE = 'Delete workspace';
37019
+ var DIALOG_TITLE_DUPLICATE = 'Duplicate';
37020
+ var DIALOG_BUTTON_SAVE = 'Save';
37021
+ var DIALOG_BUTTON_DELETE = 'Delete';
36724
37022
  var getDialogTitle = function getDialogTitle(action) {
36725
37023
  switch (action) {
36726
37024
  case WorkspacePresetAction.DELETE:
36727
37025
  {
36728
- return 'Delete workspace';
37026
+ return DIALOG_TITLE_DELETE;
36729
37027
  }
36730
37028
  case WorkspacePresetAction.DUPLICATE:
36731
37029
  {
36732
- return 'Duplicate';
37030
+ return DIALOG_TITLE_DUPLICATE;
36733
37031
  }
36734
37032
  case WorkspacePresetAction.SAVE_ALL:
36735
37033
  {
@@ -36737,7 +37035,7 @@ var getDialogTitle = function getDialogTitle(action) {
36737
37035
  }
36738
37036
  default:
36739
37037
  {
36740
- return 'Save as';
37038
+ return DIALOG_TITLE_SAVE_AS;
36741
37039
  }
36742
37040
  }
36743
37041
  };
@@ -36745,15 +37043,11 @@ var getConfirmLabel$1 = function getConfirmLabel(action) {
36745
37043
  switch (action) {
36746
37044
  case WorkspacePresetAction.DELETE:
36747
37045
  {
36748
- return 'Delete';
36749
- }
36750
- case WorkspacePresetAction.SAVE_ALL:
36751
- {
36752
- return DIALOG_TITLE_SAVE_ALL;
37046
+ return DIALOG_BUTTON_DELETE;
36753
37047
  }
36754
37048
  default:
36755
37049
  {
36756
- return 'Save';
37050
+ return DIALOG_BUTTON_SAVE;
36757
37051
  }
36758
37052
  }
36759
37053
  };