@opengeoweb/workspace 5.0.0 → 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 +603 -310
  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];
@@ -19584,6 +19659,7 @@ var slice$2 = createSlice({
19584
19659
  draft.id = '';
19585
19660
  draft.title = workspacePreset.title;
19586
19661
  draft["abstract"] = workspacePreset["abstract"];
19662
+ draft.scope = workspacePreset.scope;
19587
19663
  draft.syncGroups = [];
19588
19664
  },
19589
19665
  setPreset: function setPreset(draft, action) {
@@ -19772,6 +19848,20 @@ var getIsViewPresetListDialogOpen = function getIsViewPresetListDialogOpen(store
19772
19848
  var _a;
19773
19849
  return ((_a = getViewPresetById(store, panelId)) === null || _a === void 0 ? void 0 : _a.isViewPresetListDialogOpen) || false;
19774
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
+ };
19775
19865
 
19776
19866
  /* *
19777
19867
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -19809,13 +19899,38 @@ var getPresetsApi = function getPresetsApi() {
19809
19899
  };
19810
19900
  var emptyMapViewPreset = {
19811
19901
  componentType: 'Map',
19812
- keywords: 'mapPreset,viewPreset,layerManager',
19902
+ keywords: '',
19813
19903
  scope: 'user',
19814
19904
  title: '',
19815
19905
  initialProps: {
19816
19906
  mapPreset: {}
19817
19907
  }
19818
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
+ };
19819
19934
 
19820
19935
  /* *
19821
19936
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -20018,7 +20133,13 @@ var slice$1 = createSlice({
20018
20133
  }
20019
20134
  viewPresetsListAdapter.setAll(draft, action.payload.viewPresets);
20020
20135
  }).addCase(viewPresetActions.fetchedViewPresets, function (draft, action) {
20021
- 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
+ }
20022
20143
  if (!viewPresets || !viewPresets.length) {
20023
20144
  viewPresetsListAdapter.removeAll(draft);
20024
20145
  return;
@@ -22664,6 +22785,7 @@ var getSnackbarMessage = function getSnackbarMessage(action, title) {
22664
22785
  };
22665
22786
  var emptyMapWorkspace = {
22666
22787
  title: 'New workspace',
22788
+ scope: 'system',
22667
22789
  "abstract": '',
22668
22790
  views: {
22669
22791
  allIds: ['1_screen'],
@@ -22762,6 +22884,19 @@ var filterWorkspacePresetList = function filterWorkspacePresetList(params) {
22762
22884
  return list;
22763
22885
  }, []);
22764
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
+ };
22765
22900
  var sortViewPresets = function sortViewPresets(viewPresets) {
22766
22901
  var presetOrder = ['system', 'user'];
22767
22902
  return _toConsumableArray$1(viewPresets).sort(function (left, right) {
@@ -22811,10 +22946,13 @@ var getApiRoutes = function getApiRoutes(axiosInstance) {
22811
22946
  return axiosInstance["delete"]("/workspacepreset/".concat(workspacePresetId));
22812
22947
  },
22813
22948
  // view presets
22814
- getViewPresets: function getViewPresets() {
22815
- 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);
22816
22954
  return {
22817
- data: sortViewPresets(viewPresetsList)
22955
+ data: sortViewPresets(data)
22818
22956
  };
22819
22957
  });
22820
22958
  },
@@ -23719,25 +23857,26 @@ function fetchInitialViewPresetsSaga() {
23719
23857
  function fetchViewPresetsSaga(_ref) {
23720
23858
  var payload = _ref.payload;
23721
23859
  return /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
23722
- var panelId, presetsApi, _yield$call2, viewPresets;
23860
+ var panelId, filterParams, presetsApi, _yield$call2, viewPresets;
23723
23861
  return _regeneratorRuntime().wrap(function _callee$(_context2) {
23724
23862
  while (1) switch (_context2.prev = _context2.next) {
23725
23863
  case 0:
23726
- panelId = payload.panelId;
23864
+ panelId = payload.panelId, filterParams = payload.filterParams;
23727
23865
  _context2.prev = 1;
23728
23866
  _context2.next = 4;
23729
23867
  return call(getPresetsApi);
23730
23868
  case 4:
23731
23869
  presetsApi = _context2.sent;
23732
23870
  _context2.next = 7;
23733
- return call(presetsApi.getViewPresets);
23871
+ return call(presetsApi.getViewPresets, filterParams);
23734
23872
  case 7:
23735
23873
  _yield$call2 = _context2.sent;
23736
23874
  viewPresets = _yield$call2.data;
23737
23875
  _context2.next = 11;
23738
23876
  return put(viewPresetActions.fetchedViewPresets({
23739
23877
  viewPresets: viewPresets,
23740
- panelId: panelId
23878
+ panelId: panelId,
23879
+ filterParams: filterParams
23741
23880
  }));
23742
23881
  case 11:
23743
23882
  _context2.next = 17;
@@ -23870,7 +24009,7 @@ function selectViewPresetSaga(_ref3) {
23870
24009
  function onSuccessViewPresetActionSaga(_ref4) {
23871
24010
  var payload = _ref4.payload;
23872
24011
  return /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
23873
- var action, viewPresetId, title, panelId, activeMapPresetId;
24012
+ var action, viewPresetId, title, panelId, activeMapPresetId, viewPresetFilters;
23874
24013
  return _regeneratorRuntime().wrap(function _callee4$(_context5) {
23875
24014
  while (1) switch (_context5.prev = _context5.next) {
23876
24015
  case 0:
@@ -23896,36 +24035,41 @@ function onSuccessViewPresetActionSaga(_ref4) {
23896
24035
  }));
23897
24036
  case 10:
23898
24037
  _context5.next = 12;
24038
+ return select(getViewPresetListFiltersForView, panelId);
24039
+ case 12:
24040
+ viewPresetFilters = _context5.sent;
24041
+ _context5.next = 15;
23899
24042
  return call(fetchViewPresetsSaga, viewPresetActions.fetchViewPresets({
23900
- panelId: panelId
24043
+ panelId: panelId,
24044
+ filterParams: constructFilterParams$1(viewPresetFilters)
23901
24045
  }));
23902
- case 12:
23903
- _context5.next = 14;
24046
+ case 15:
24047
+ _context5.next = 17;
23904
24048
  return put(viewPresetActions.setViewPresetHasChanges({
23905
24049
  panelId: panelId,
23906
24050
  hasChanges: false
23907
24051
  }));
23908
- case 14:
24052
+ case 17:
23909
24053
  if (!(action === PresetAction.SAVE_AS && viewPresetId)) {
23910
- _context5.next = 17;
24054
+ _context5.next = 20;
23911
24055
  break;
23912
24056
  }
23913
- _context5.next = 17;
24057
+ _context5.next = 20;
23914
24058
  return put(viewPresetActions.setActiveViewPresetId({
23915
24059
  panelId: panelId,
23916
24060
  viewPresetId: viewPresetId
23917
24061
  }));
23918
- case 17:
23919
- _context5.next = 21;
24062
+ case 20:
24063
+ _context5.next = 24;
23920
24064
  break;
23921
- case 19:
23922
- _context5.prev = 19;
24065
+ case 22:
24066
+ _context5.prev = 22;
23923
24067
  _context5.t0 = _context5["catch"](1);
23924
- case 21:
24068
+ case 24:
23925
24069
  case "end":
23926
24070
  return _context5.stop();
23927
24071
  }
23928
- }, _callee4, null, [[1, 19]]);
24072
+ }, _callee4, null, [[1, 22]]);
23929
24073
  })();
23930
24074
  }
23931
24075
  function rootSaga() {
@@ -24438,12 +24582,52 @@ const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip d
24438
24582
 
24439
24583
  const getBatch = () => batch;
24440
24584
 
24441
- const ReactReduxContext = /*#__PURE__*/createContext(null);
24585
+ const ContextKey = Symbol.for(`react-redux-context-${version}`);
24586
+ const gT = globalThis;
24442
24587
 
24443
- if (process.env.NODE_ENV !== 'production') {
24444
- 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;
24445
24602
  }
24446
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
+ }
24447
24631
  /**
24448
24632
  * A hook to access the value of the `ReactReduxContext`. This is a low-level
24449
24633
  * hook that you should usually not need to call directly.
@@ -24460,15 +24644,8 @@ if (process.env.NODE_ENV !== 'production') {
24460
24644
  * return <div>{store.getState()}</div>
24461
24645
  * }
24462
24646
  */
24463
- function useReduxContext() {
24464
- const contextValue = useContext(ReactReduxContext);
24465
24647
 
24466
- if (process.env.NODE_ENV !== 'production' && !contextValue) {
24467
- throw new Error('could not find react-redux context value; please ensure the component is wrapped in a <Provider>');
24468
- }
24469
-
24470
- return contextValue;
24471
- }
24648
+ const useReduxContext = /*#__PURE__*/createReduxContextHook();
24472
24649
 
24473
24650
  const notInitialized = () => {
24474
24651
  throw new Error('uSES not initialized!');
@@ -24489,8 +24666,16 @@ const refEquality = (a, b) => a === b;
24489
24666
 
24490
24667
 
24491
24668
  function createSelectorHook(context = ReactReduxContext) {
24492
- const useReduxContext$1 = context === ReactReduxContext ? useReduxContext : () => useContext(context);
24493
- 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
+
24494
24679
  if (process.env.NODE_ENV !== 'production') {
24495
24680
  if (!selector) {
24496
24681
  throw new Error(`You must pass a selector to useSelector`);
@@ -24508,9 +24693,47 @@ function createSelectorHook(context = ReactReduxContext) {
24508
24693
  const {
24509
24694
  store,
24510
24695
  subscription,
24511
- getServerState
24696
+ getServerState,
24697
+ stabilityCheck: globalStabilityCheck,
24698
+ noopCheck: globalNoopCheck
24512
24699
  } = useReduxContext$1();
24513
- 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);
24514
24737
  useDebugValue(selectedState);
24515
24738
  return selectedState;
24516
24739
  };
@@ -25163,16 +25386,20 @@ function Provider({
25163
25386
  store,
25164
25387
  context,
25165
25388
  children,
25166
- serverState
25389
+ serverState,
25390
+ stabilityCheck = 'once',
25391
+ noopCheck = 'once'
25167
25392
  }) {
25168
25393
  const contextValue = useMemo(() => {
25169
25394
  const subscription = createSubscription(store);
25170
25395
  return {
25171
25396
  store,
25172
25397
  subscription,
25173
- getServerState: serverState ? () => serverState : undefined
25398
+ getServerState: serverState ? () => serverState : undefined,
25399
+ stabilityCheck,
25400
+ noopCheck
25174
25401
  };
25175
- }, [store, serverState]);
25402
+ }, [store, serverState, stabilityCheck, noopCheck]);
25176
25403
  const previousState = useMemo(() => store.getState(), [store]);
25177
25404
  useIsomorphicLayoutEffect(() => {
25178
25405
  const {
@@ -25206,7 +25433,8 @@ function Provider({
25206
25433
 
25207
25434
  function createStoreHook(context = ReactReduxContext) {
25208
25435
  const useReduxContext$1 = // @ts-ignore
25209
- context === ReactReduxContext ? useReduxContext : () => useContext(context);
25436
+ context === ReactReduxContext ? useReduxContext : // @ts-ignore
25437
+ createReduxContextHook(context);
25210
25438
  return function useStore() {
25211
25439
  const {
25212
25440
  store
@@ -31399,6 +31627,8 @@ var createBalancedMosaicNode = function createBalancedMosaicNode(currentNode) {
31399
31627
  * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
31400
31628
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
31401
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
31402
31632
  var _viewPresetsListAdapt = viewPresetsListAdapter.getSelectors(function (state) {
31403
31633
  var _a;
31404
31634
  return (_a = state === null || state === void 0 ? void 0 : state.viewPresetsList) !== null && _a !== void 0 ? _a : {
@@ -31408,6 +31638,20 @@ var _viewPresetsListAdapt = viewPresetsListAdapter.getSelectors(function (state)
31408
31638
  }),
31409
31639
  getViewPresetsList = _viewPresetsListAdapt.selectAll;
31410
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
+ });
31411
31655
 
31412
31656
  /* *
31413
31657
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -31601,6 +31845,196 @@ var WorkspaceSelectList = function WorkspaceSelectList(_ref) {
31601
31845
  })));
31602
31846
  };
31603
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
+
31604
32038
  /* *
31605
32039
  * Licensed under the Apache License, Version 2.0 (the "License");
31606
32040
  * you may not use this file except in compliance with the License.
@@ -31620,9 +32054,11 @@ var WorkspaceSelectList = function WorkspaceSelectList(_ref) {
31620
32054
  var ERROR_TITLE = 'View presets not available';
31621
32055
  var ERROR_RETRY = 'Try again';
31622
32056
  var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31623
- var panelId = _ref.panelId;
32057
+ var panelId = _ref.panelId,
32058
+ _ref$isOpen = _ref.isOpen,
32059
+ isOpen = _ref$isOpen === void 0 ? true : _ref$isOpen;
31624
32060
  var viewPresets = useSelector(function (store) {
31625
- return getViewPresetsList(store);
32061
+ return getFilteredViewPresetListForView(store, panelId);
31626
32062
  });
31627
32063
  var activeViewPresetId = useSelector(function (store) {
31628
32064
  return getViewPresetActiveId(store, panelId);
@@ -31630,6 +32066,9 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31630
32066
  var currentMapPreset = useSelector(function (store) {
31631
32067
  return mapSelectors.getMapPreset(store, panelId);
31632
32068
  });
32069
+ var viewPresetListFilters = useSelector(function (store) {
32070
+ return getViewPresetListFiltersForView(store, panelId);
32071
+ });
31633
32072
  var relatedSyncGroupIds = useSelector(function (store) {
31634
32073
  return syncGroupsSelectors.getAllTargetGroupsForSource(store, panelId);
31635
32074
  });
@@ -31641,6 +32080,13 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31641
32080
  });
31642
32081
  var _useAuthenticationCon = useAuthenticationContext(),
31643
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]);
31644
32090
  var dispatch = useDispatch();
31645
32091
  var openViewPresetsDialog = React.useCallback(function (viewPresetDialogOptions) {
31646
32092
  dispatch(viewPresetActions.openViewPresetDialog({
@@ -31654,10 +32100,12 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31654
32100
  }));
31655
32101
  }, [dispatch, panelId]);
31656
32102
  var fetchViewPresets = React.useCallback(function () {
32103
+ var filterParams = constructFilterParams$1(viewPresetListFilters);
31657
32104
  dispatch(viewPresetActions.fetchViewPresets({
31658
- panelId: panelId
32105
+ panelId: panelId,
32106
+ filterParams: filterParams
31659
32107
  }));
31660
- }, [dispatch, panelId]);
32108
+ }, [dispatch, panelId, viewPresetListFilters]);
31661
32109
  var onClickViewPresetOption = function onClickViewPresetOption(presetId, workspaceAction, preset) {
31662
32110
  switch (workspaceAction) {
31663
32111
  case WorkspacePresetAction.DUPLICATE:
@@ -31698,6 +32146,31 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31698
32146
  }
31699
32147
  }
31700
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;
31701
32174
  return /*#__PURE__*/React.createElement(React.Fragment, null, isViewPresetsListFetching && /*#__PURE__*/React.createElement(LinearProgress, {
31702
32175
  "data-testid": "loading-bar",
31703
32176
  color: "secondary",
@@ -31712,6 +32185,15 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31712
32185
  title: ERROR_RETRY,
31713
32186
  onClick: fetchViewPresets
31714
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
31715
32197
  }), /*#__PURE__*/React.createElement(WorkspaceSelectList, {
31716
32198
  workspacePresets: viewPresets,
31717
32199
  currentSelectedId: activeViewPresetId || undefined,
@@ -31721,8 +32203,9 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
31721
32203
  id: undefined,
31722
32204
  title: MAPPRESET_ACTIVE_TITLE
31723
32205
  }),
31724
- isLoggedIn: isLoggedIn
31725
- }));
32206
+ isLoggedIn: isLoggedIn,
32207
+ hideNewWorkspace: shouldHideNewWorkspace
32208
+ })));
31726
32209
  };
31727
32210
 
31728
32211
  /* *
@@ -31761,13 +32244,10 @@ var ViewPresetMenu = function ViewPresetMenu(_ref) {
31761
32244
  onClick: function onClick(event) {
31762
32245
  event.stopPropagation();
31763
32246
  }
31764
- }, /*#__PURE__*/React__default.createElement(Box$2, {
31765
- sx: {
31766
- padding: 1
31767
- }
31768
32247
  }, /*#__PURE__*/React__default.createElement(ViewPresetMenuListConnect, {
31769
- panelId: panelId
31770
- })));
32248
+ panelId: panelId,
32249
+ isOpen: isOpen
32250
+ }));
31771
32251
  return /*#__PURE__*/React__default.createElement("div", null, hideBackdrop ?
31772
32252
  // Enable hiding backdrop from snapshot tests
31773
32253
  toolContainer : /*#__PURE__*/React__default.createElement(Backdrop, {
@@ -31820,7 +32300,7 @@ var WorkspaceOptions = function WorkspaceOptions(_ref) {
31820
32300
  title: 'Save as',
31821
32301
  callback: handleSaveAs
31822
32302
  }].concat(_toConsumableArray$1(handleSaveAll ? [{
31823
- title: 'Save all',
32303
+ title: 'Save (incl. viewpresets)',
31824
32304
  callback: handleSaveAll
31825
32305
  }] : []), [{
31826
32306
  title: 'Edit',
@@ -32176,9 +32656,9 @@ var WorkspaceTileConnect = function WorkspaceTileConnect(_ref) {
32176
32656
  id: mosaicNodeId,
32177
32657
  componentType: view === null || view === void 0 ? void 0 : view.componentType,
32178
32658
  initialProps: view === null || view === void 0 ? void 0 : view.initialProps
32179
- }), isViewPresetDialogOpen && /*#__PURE__*/React.createElement(ViewPresetMenu, {
32659
+ }), /*#__PURE__*/React.createElement(ViewPresetMenu, {
32180
32660
  panelId: mosaicNodeId,
32181
- isOpen: isViewPresetDialogOpen,
32661
+ isOpen: isViewPresetDialogOpen || false,
32182
32662
  closeMenu: function closeMenu() {
32183
32663
  toggleViewPresetDialog({
32184
32664
  panelId: mosaicNodeId,
@@ -35924,194 +36404,6 @@ process.env.NODE_ENV !== "production" ? Box.propTypes /* remove-proptypes */ = {
35924
36404
  } : void 0;
35925
36405
  var Box$1 = Box;
35926
36406
 
35927
- /* *
35928
- * Licensed under the Apache License, Version 2.0 (the "License");
35929
- * you may not use this file except in compliance with the License.
35930
- * You may obtain a copy of the License at
35931
- *
35932
- * http://www.apache.org/licenses/LICENSE-2.0
35933
- *
35934
- * Unless required by applicable law or agreed to in writing, software
35935
- * distributed under the License is distributed on an "AS IS" BASIS,
35936
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
35937
- * See the License for the specific language governing permissions and
35938
- * limitations under the License.
35939
- *
35940
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
35941
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
35942
- * */
35943
- var FilterChip = function FilterChip(_ref) {
35944
- var label = _ref.label,
35945
- id = _ref.id,
35946
- _ref$isSelected = _ref.isSelected,
35947
- isSelected = _ref$isSelected === void 0 ? false : _ref$isSelected,
35948
- _ref$isDisabled = _ref.isDisabled,
35949
- isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
35950
- _ref$handleClick = _ref.handleClick,
35951
- handleClick = _ref$handleClick === void 0 ? function () {} : _ref$handleClick;
35952
- var theme = useTheme$2();
35953
- return /*#__PURE__*/React.createElement(Chip, {
35954
- size: "small",
35955
- id: id,
35956
- label: label,
35957
- disabled: isDisabled,
35958
- variant: isSelected ? 'filled' : 'outlined',
35959
- color: isSelected ? 'secondary' : 'default',
35960
- sx: {
35961
- borderColor: "".concat(theme.palette.geowebColors.buttons.tertiary["default"].borderColor),
35962
- padding: '0px 4px'
35963
- },
35964
- onClick: function onClick() {
35965
- return handleClick(id);
35966
- }
35967
- });
35968
- };
35969
-
35970
- /* *
35971
- * Licensed under the Apache License, Version 2.0 (the "License");
35972
- * you may not use this file except in compliance with the License.
35973
- * You may obtain a copy of the License at
35974
- *
35975
- * http://www.apache.org/licenses/LICENSE-2.0
35976
- *
35977
- * Unless required by applicable law or agreed to in writing, software
35978
- * distributed under the License is distributed on an "AS IS" BASIS,
35979
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
35980
- * See the License for the specific language governing permissions and
35981
- * limitations under the License.
35982
- *
35983
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
35984
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
35985
- * */
35986
- var allLabel = 'All';
35987
- var FilterList = function FilterList(_ref) {
35988
- var _ref$filters = _ref.filters,
35989
- filters = _ref$filters === void 0 ? workspaceListFilterOptions : _ref$filters,
35990
- _ref$onChipClick = _ref.onChipClick,
35991
- onChipClick = _ref$onChipClick === void 0 ? function () {} : _ref$onChipClick,
35992
- _ref$isAllSelected = _ref.isAllSelected,
35993
- isAllSelected = _ref$isAllSelected === void 0 ? false : _ref$isAllSelected;
35994
- return /*#__PURE__*/React.createElement(Stack, {
35995
- direction: "row",
35996
- spacing: 1,
35997
- "data-testid": "filterList"
35998
- }, /*#__PURE__*/React.createElement(FilterChip, {
35999
- id: "all",
36000
- label: allLabel,
36001
- isSelected: isAllSelected,
36002
- handleClick: function handleClick(key) {
36003
- return onChipClick(key, !isAllSelected);
36004
- }
36005
- }), filters.map(function (filter) {
36006
- return /*#__PURE__*/React.createElement(FilterChip, {
36007
- key: filter.id,
36008
- id: filter.id,
36009
- label: filter.label,
36010
- isSelected: isAllSelected ? false : filter.isSelected,
36011
- isDisabled: filter.isDisabled,
36012
- handleClick: function handleClick(key) {
36013
- // If they are all isSelected ensure that if one is clicked that one will be the only one set to selected
36014
- var selected = isAllSelected ? true : !filter.isSelected;
36015
- onChipClick(key, selected);
36016
- }
36017
- });
36018
- }));
36019
- };
36020
-
36021
- var DEBOUNCE_TIMEOUT = 300;
36022
- var SearchField = function SearchField(_ref) {
36023
- var _ref$label = _ref.label,
36024
- label = _ref$label === void 0 ? 'Search' : _ref$label,
36025
- valueChanged = _ref.valueChanged,
36026
- _ref$value = _ref.value,
36027
- value = _ref$value === void 0 ? '' : _ref$value;
36028
- var _React$useState = React.useState(value),
36029
- _React$useState2 = _slicedToArray$2(_React$useState, 2),
36030
- localValue = _React$useState2[0],
36031
- setLocalValue = _React$useState2[1];
36032
- // eslint-disable-next-line react-hooks/exhaustive-deps
36033
- var handleValueChangeDebounced = React.useCallback(debounce$1(valueChanged, DEBOUNCE_TIMEOUT), []);
36034
- var ClearButton = function ClearButton() {
36035
- return /*#__PURE__*/React.createElement(CustomIconButton, {
36036
- tooltipTitle: "Clear",
36037
- edge: "end",
36038
- onClick: function onClick() {
36039
- setLocalValue('');
36040
- valueChanged('');
36041
- },
36042
- size: "large"
36043
- }, /*#__PURE__*/React.createElement(Clear, null));
36044
- };
36045
- var SearchButton = function SearchButton() {
36046
- return /*#__PURE__*/React.createElement(CustomIconButton, {
36047
- tooltipTitle: label,
36048
- edge: "end",
36049
- size: "large"
36050
- }, /*#__PURE__*/React.createElement(Search, null));
36051
- };
36052
- return /*#__PURE__*/React.createElement(TextField, {
36053
- variant: "filled",
36054
- size: "small",
36055
- sx: {
36056
- '& input': {
36057
- paddingTop: '18px'
36058
- }
36059
- },
36060
- label: label,
36061
- value: localValue,
36062
- autoFocus: true,
36063
- fullWidth: true,
36064
- onChange: function onChange(e) {
36065
- handleValueChangeDebounced(e.target.value);
36066
- setLocalValue(e.target.value);
36067
- },
36068
- InputProps: {
36069
- endAdornment: /*#__PURE__*/React.createElement(InputAdornment, {
36070
- position: "end"
36071
- }, localValue ? /*#__PURE__*/React.createElement(ClearButton, null) : /*#__PURE__*/React.createElement(SearchButton, null))
36072
- }
36073
- });
36074
- };
36075
-
36076
- /* *
36077
- * Licensed under the Apache License, Version 2.0 (the "License");
36078
- * you may not use this file except in compliance with the License.
36079
- * You may obtain a copy of the License at
36080
- *
36081
- * http://www.apache.org/licenses/LICENSE-2.0
36082
- *
36083
- * Unless required by applicable law or agreed to in writing, software
36084
- * distributed under the License is distributed on an "AS IS" BASIS,
36085
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
36086
- * See the License for the specific language governing permissions and
36087
- * limitations under the License.
36088
- *
36089
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
36090
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
36091
- * */
36092
- var WorkspaceFilter = function WorkspaceFilter(_ref) {
36093
- var filters = _ref.filters,
36094
- _ref$onClickFilterChi = _ref.onClickFilterChip,
36095
- onClickFilterChip = _ref$onClickFilterChi === void 0 ? function () {} : _ref$onClickFilterChi,
36096
- _ref$onSearch = _ref.onSearch,
36097
- onSearch = _ref$onSearch === void 0 ? function () {} : _ref$onSearch,
36098
- isAllSelected = _ref.isAllSelected,
36099
- searchQuery = _ref.searchQuery;
36100
- return /*#__PURE__*/React.createElement(Stack, {
36101
- spacing: 1,
36102
- sx: {
36103
- marginBottom: '8px'
36104
- }
36105
- }, /*#__PURE__*/React.createElement(SearchField, {
36106
- value: searchQuery,
36107
- valueChanged: onSearch
36108
- }), /*#__PURE__*/React.createElement(FilterList, {
36109
- filters: filters,
36110
- onChipClick: onClickFilterChip,
36111
- isAllSelected: isAllSelected
36112
- }));
36113
- };
36114
-
36115
36407
  /* *
36116
36408
  * Licensed under the Apache License, Version 2.0 (the "License");
36117
36409
  * you may not use this file except in compliance with the License.
@@ -36251,7 +36543,9 @@ var WorkspaceSelectListConnect = function WorkspaceSelectListConnect() {
36251
36543
  return filter.isSelected;
36252
36544
  });
36253
36545
  var shouldHideNewWorkspace = !isAllSelected || workspaceSearchQuery.length > 0;
36254
- 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, {
36255
36549
  "data-testid": "loading-bar",
36256
36550
  color: "secondary",
36257
36551
  sx: {
@@ -36506,9 +36800,7 @@ var WorkspaceOptionsConnect = function WorkspaceOptionsConnect(_ref) {
36506
36800
  setWorkspaceActionDialogOptions({
36507
36801
  action: WorkspacePresetAction.SAVE_ALL,
36508
36802
  presetId: workspaceId,
36509
- formValues: Object.assign(Object.assign({}, workspaceData), {
36510
- scope: 'user'
36511
- })
36803
+ formValues: Object.assign({}, workspaceData)
36512
36804
  });
36513
36805
  };
36514
36806
  var onSave = React.useCallback(function () {
@@ -36652,8 +36944,8 @@ var WorkspacePresetsForm = function WorkspacePresetsForm(_ref) {
36652
36944
  onSubmit();
36653
36945
  };
36654
36946
  var hasFormInput = action === WorkspacePresetAction.DUPLICATE || action === WorkspacePresetAction.SAVE_AS || action === WorkspacePresetAction.SAVE_ALL;
36655
- // disable form inputs for 'save all' existing workspace preset
36656
- var isDisabled = !!(action === WorkspacePresetAction.SAVE_ALL && formValues.id);
36947
+ // disable form inputs for 'Save (incl. viewpresets)' existing workspace preset
36948
+ var isDisabled = action === WorkspacePresetAction.SAVE_ALL && formValues.id !== undefined && formValues.id !== '' && formValues.scope === 'user';
36657
36949
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, Boolean(error) && /*#__PURE__*/React__default.createElement(Box$2, {
36658
36950
  sx: {
36659
36951
  marginBottom: 2
@@ -36721,16 +37013,21 @@ var WorkspacePresetsForm = function WorkspacePresetsForm(_ref) {
36721
37013
  * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
36722
37014
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
36723
37015
  * */
36724
- 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';
36725
37022
  var getDialogTitle = function getDialogTitle(action) {
36726
37023
  switch (action) {
36727
37024
  case WorkspacePresetAction.DELETE:
36728
37025
  {
36729
- return 'Delete workspace';
37026
+ return DIALOG_TITLE_DELETE;
36730
37027
  }
36731
37028
  case WorkspacePresetAction.DUPLICATE:
36732
37029
  {
36733
- return 'Duplicate';
37030
+ return DIALOG_TITLE_DUPLICATE;
36734
37031
  }
36735
37032
  case WorkspacePresetAction.SAVE_ALL:
36736
37033
  {
@@ -36738,7 +37035,7 @@ var getDialogTitle = function getDialogTitle(action) {
36738
37035
  }
36739
37036
  default:
36740
37037
  {
36741
- return 'Save as';
37038
+ return DIALOG_TITLE_SAVE_AS;
36742
37039
  }
36743
37040
  }
36744
37041
  };
@@ -36746,15 +37043,11 @@ var getConfirmLabel$1 = function getConfirmLabel(action) {
36746
37043
  switch (action) {
36747
37044
  case WorkspacePresetAction.DELETE:
36748
37045
  {
36749
- return 'Delete';
36750
- }
36751
- case WorkspacePresetAction.SAVE_ALL:
36752
- {
36753
- return DIALOG_TITLE_SAVE_ALL;
37046
+ return DIALOG_BUTTON_DELETE;
36754
37047
  }
36755
37048
  default:
36756
37049
  {
36757
- return 'Save';
37050
+ return DIALOG_BUTTON_SAVE;
36758
37051
  }
36759
37052
  }
36760
37053
  };