@opengeoweb/workspace 20.0.0 → 20.0.1-nightly-20261002

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -7,7 +7,7 @@ import { chunk, cloneDeep, isEqual, isString } from 'lodash';
7
7
  import { getLeaves, createBalancedTreeFromLeaves, MosaicContext, getAndAssertNodeAtPathExists, MosaicWindow, Mosaic } from 'react-mosaic-component';
8
8
  import { queryOptions, useQueryClient, useQuery, useMutation, useIsMutating } from '@tanstack/react-query';
9
9
  import { sessionStorageProvider, isAxiosError, getAxiosErrorMessage, isAuthError, isAxiosAuthError, SHARED_NAMESPACE, safelyInitI18nForTestsAndStories, sharedTranslations, ConfirmationServiceProvider, CustomIconButton, useConfirmationDialog, usePrevious, AlertBanner, CustomAccordion, CustomTooltip, linkifyText, dateUtils, SystemScope, SearchHighlight, ToggleMenu, SearchField, Filter, LastUpdateTime, renderCounter, CustomDialog, ToolContainer, CustomToggleButton, ConfirmationButtons } from '@opengeoweb/shared';
10
- import { pluginsActions, getPluginState, pluginsReducer, PluginProvider, PluginDebugProvider, OverlayPluginMenuButton, usePluginCatalog } from '@opengeoweb/plugins';
10
+ import { pluginsActions, getPluginState, pluginsReducer, PluginProvider, PluginDebugProvider, OverlayPluginMenuButton, usePluginCatalog, OverlayPluginWindows } from '@opengeoweb/plugins';
11
11
  import { warningsFiltersActions, publicWarningsSelectors, warningsTranslations, WARN_NAMESPACE } from '@opengeoweb/warnings';
12
12
  import { snackbarTypes, snackbarActions, snackbarListener, snackbarReducer, SnackbarWrapperConnect } from '@opengeoweb/snackbar';
13
13
  import { isAxiosError as isAxiosError$1 } from 'axios';
@@ -35,6 +35,11 @@ var en = {
35
35
  "workspace-menu": "Workspace menu",
36
36
  "workspace-new": "New workspace",
37
37
  "workspace-new-soundings": "New soundings workspace",
38
+ "workspace-template-map": "New map preset",
39
+ "workspace-template-timeseries": "New timeseries preset",
40
+ "workspace-template-soundings": "New sounding preset",
41
+ "workspace-template-warninglist": "New warninglist preset",
42
+ "workspace-template-timeline": "New timeline preset",
38
43
  "workspace-loading": "Loading",
39
44
  "workspace-options": "Options",
40
45
  "workspace-results": "results",
@@ -192,6 +197,11 @@ var fi = {
192
197
  "workspace-menu": "Workspace menu",
193
198
  "workspace-new": "Uusi workspace",
194
199
  "workspace-new-soundings": "Uusi luotaustyötila",
200
+ "workspace-template-map": "Uusi map preset",
201
+ "workspace-template-timeseries": "Uusi timeseries preset",
202
+ "workspace-template-soundings": "Uusi luotauspreset",
203
+ "workspace-template-warninglist": "Uusi varoituslistapreset",
204
+ "workspace-template-timeline": "Uusi aikajanapreset",
195
205
  "workspace-loading": "Ladataan",
196
206
  "workspace-options": "Valinnat",
197
207
  "workspace-results": "tulokset",
@@ -341,6 +351,11 @@ var no = {
341
351
  "workspace-menu": "Arbeidsflater",
342
352
  "workspace-new": "Ny arbeidsflate",
343
353
  "workspace-new-soundings": "New soundings workspace",
354
+ "workspace-template-map": "Ny kartpreset",
355
+ "workspace-template-timeseries": "Ny tidsseriepreset",
356
+ "workspace-template-soundings": "Ny sonderingspreset",
357
+ "workspace-template-warninglist": "Ny varsellistepreset",
358
+ "workspace-template-timeline": "Ny tidslinjepreset",
344
359
  "workspace-loading": "Laster",
345
360
  "workspace-options": "Valg",
346
361
  "workspace-results": "resultater",
@@ -491,6 +506,11 @@ var nl = {
491
506
  "workspace-menu": "Workspace menu",
492
507
  "workspace-new": "Nieuwe workspace",
493
508
  "workspace-new-soundings": "Nieuwe soundings workspace",
509
+ "workspace-template-map": "Nieuwe map preset",
510
+ "workspace-template-timeseries": "Nieuwe timeseries preset",
511
+ "workspace-template-soundings": "Nieuwe sounding preset",
512
+ "workspace-template-warninglist": "Nieuwe warninglist preset",
513
+ "workspace-template-timeline": "Nieuwe timeline preset",
494
514
  "workspace-loading": "Laden",
495
515
  "workspace-options": "Opties",
496
516
  "workspace-results": "resultaten",
@@ -1226,6 +1246,11 @@ var workspacePresetsFallback = [
1226
1246
  * Copyright 2026 - Finnish Meteorological Institute (FMI)
1227
1247
  * Copyright 2026 - The Norwegian Meteorological Institute (MET Norway)
1228
1248
  * */
1249
+ /*
1250
+ configureLibraryDefaults([LIB_KEY], {
1251
+ staleTime: 5 * 60 * 1000,
1252
+ });
1253
+ */
1229
1254
  var LIB_KEY = 'workspace-lib';
1230
1255
  var getPresetBaseUrl = function getPresetBaseUrl() {
1231
1256
  var config = sessionStorageProvider.getConfig();
@@ -1644,9 +1669,262 @@ var PresetFilterType;
1644
1669
  PresetFilterType["shared"] = "shared";
1645
1670
  PresetFilterType["system"] = "system";
1646
1671
  PresetFilterType["plugin"] = "plugin";
1672
+ PresetFilterType["templates"] = "templates";
1647
1673
  PresetFilterType["favourites"] = "favourites";
1648
1674
  })(PresetFilterType || (PresetFilterType = {}));
1649
1675
 
1676
+ /* eslint-disable no-redeclare */
1677
+ /* *
1678
+ * Licensed under the Apache License, Version 2.0 (the "License");
1679
+ * you may not use this file except in compliance with the License.
1680
+ * You may obtain a copy of the License at
1681
+ *
1682
+ * http://www.apache.org/licenses/LICENSE-2.0
1683
+ *
1684
+ * Unless required by applicable law or agreed to in writing, software
1685
+ * distributed under the License is distributed on an "AS IS" BASIS,
1686
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1687
+ * See the License for the specific language governing permissions and
1688
+ * limitations under the License.
1689
+ *
1690
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
1691
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
1692
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
1693
+ * */
1694
+ var getSnackbarMessage$1 = function getSnackbarMessage(action, title, is_shared) {
1695
+ // Trim and add quotes
1696
+ var trimmedTitle = title.trim();
1697
+ switch (action) {
1698
+ case WorkspacePresetAction.DELETE:
1699
+ return {
1700
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
1701
+ key: 'workspace-list-success-delete',
1702
+ params: {
1703
+ TITLE: trimmedTitle
1704
+ }
1705
+ };
1706
+ case WorkspacePresetAction.DELETE_SYSTEM_PRESET:
1707
+ return {
1708
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
1709
+ key: 'workspace-list-success-delete-system',
1710
+ params: {
1711
+ TITLE: trimmedTitle
1712
+ }
1713
+ };
1714
+ case WorkspacePresetAction.DUPLICATE:
1715
+ return {
1716
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
1717
+ key: 'workspace-list-success-duplicate',
1718
+ params: {
1719
+ TITLE: trimmedTitle
1720
+ }
1721
+ };
1722
+ case WorkspacePresetAction.EDIT:
1723
+ return {
1724
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
1725
+ key: 'workspace-list-success-edit',
1726
+ params: {
1727
+ TITLE: trimmedTitle
1728
+ }
1729
+ };
1730
+ case WorkspacePresetAction.RESET:
1731
+ return {
1732
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
1733
+ key: 'workspace-list-success-reset',
1734
+ params: {
1735
+ TITLE: trimmedTitle
1736
+ }
1737
+ };
1738
+ case WorkspacePresetAction.SHARE:
1739
+ return {
1740
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
1741
+ key: is_shared ? 'workspace-list-success-unshare' : 'workspace-list-success-share',
1742
+ params: {
1743
+ TITLE: trimmedTitle
1744
+ }
1745
+ };
1746
+ default:
1747
+ return {
1748
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
1749
+ key: 'workspace-list-success-save',
1750
+ params: {
1751
+ TITLE: trimmedTitle
1752
+ }
1753
+ };
1754
+ }
1755
+ };
1756
+ function getEmptyWorkspaceListItem(t) {
1757
+ return {
1758
+ id: undefined,
1759
+ title: t ? t('workspace-new') : undefined,
1760
+ labels: undefined,
1761
+ scope: 'system',
1762
+ "abstract": '',
1763
+ viewType: 'singleWindow'
1764
+ };
1765
+ }
1766
+ function getEmptyMapWorkspace(t) {
1767
+ return Object.assign({}, getEmptyWorkspaceListItem(t), {
1768
+ views: {
1769
+ allIds: ['1_screen'],
1770
+ byId: {
1771
+ '1_screen': {
1772
+ title: t ? t('workspace-mappreset-new') : undefined,
1773
+ componentType: 'Map',
1774
+ initialProps: {
1775
+ mapPreset: {
1776
+ shouldShowLayerManager: true,
1777
+ dockedLayerManagerSize: 'sizeSmall'
1778
+ },
1779
+ syncGroupsIds: []
1780
+ }
1781
+ }
1782
+ }
1783
+ },
1784
+ mosaicNode: '1_screen'
1785
+ });
1786
+ }
1787
+ var getEmptyWorkspacePreset = function getEmptyWorkspacePreset() {
1788
+ return {
1789
+ scope: 'system',
1790
+ "abstract": '',
1791
+ views: {
1792
+ allIds: ['1_screen'],
1793
+ byId: {
1794
+ '1_screen': {
1795
+ componentType: 'Map',
1796
+ initialProps: {
1797
+ mapPreset: {
1798
+ shouldShowLayerManager: true,
1799
+ dockedLayerManagerSize: 'sizeSmall'
1800
+ },
1801
+ syncGroupsIds: []
1802
+ }
1803
+ }
1804
+ }
1805
+ },
1806
+ mosaicNode: '1_screen',
1807
+ viewType: 'singleWindow',
1808
+ username: 'global'
1809
+ };
1810
+ };
1811
+ var createCustomEmptyMapWorkspace = function createCustomEmptyMapWorkspace(emptyWorkspaceTitle, emptyMapWorkspaceTitle, customMapPreset) {
1812
+ var customEmptyMapWorkspace = cloneDeep(getEmptyWorkspacePreset());
1813
+ if (customMapPreset) {
1814
+ customEmptyMapWorkspace.views.byId['1_screen'].initialProps.mapPreset = customMapPreset;
1815
+ }
1816
+ customEmptyMapWorkspace.views.byId['1_screen'].title = emptyMapWorkspaceTitle;
1817
+ var emptyWorkspacePreset = Object.assign({}, customEmptyMapWorkspace, {
1818
+ title: emptyWorkspaceTitle
1819
+ });
1820
+ return emptyWorkspacePreset;
1821
+ };
1822
+ var LOCAL_SOUNDINGS_ID = 'newSoundingsWorkspace';
1823
+ var getNewSoundingsWorkspaceListItem = function getNewSoundingsWorkspaceListItem(t) {
1824
+ return {
1825
+ id: LOCAL_SOUNDINGS_ID,
1826
+ title: t ? t('workspace-new-soundings') : 'New soundings workspace',
1827
+ labels: undefined,
1828
+ scope: 'system',
1829
+ "abstract": '',
1830
+ viewType: 'multiWindow'
1831
+ };
1832
+ };
1833
+ function getNewSoundingsWorkspace(t) {
1834
+ return Object.assign({}, getNewSoundingsWorkspaceListItem(t), {
1835
+ views: {
1836
+ allIds: ['1_screen', '2_screen'],
1837
+ byId: {
1838
+ '1_screen': {
1839
+ mosaicNodeId: '1_screen',
1840
+ title: 'New soundings map',
1841
+ componentType: 'Map',
1842
+ initialProps: {
1843
+ mapPreset: {
1844
+ shouldShowLegend: false,
1845
+ shouldShowLayerManager: false
1846
+ }
1847
+ }
1848
+ },
1849
+ '2_screen': {
1850
+ mosaicNodeId: '2_screen',
1851
+ title: 'New soundings view',
1852
+ componentType: 'Soundings',
1853
+ initialProps: {}
1854
+ }
1855
+ }
1856
+ },
1857
+ linking: {
1858
+ '2_screen': ['1_screen']
1859
+ },
1860
+ syncGroups: [{
1861
+ id: 'Features_2_screen',
1862
+ sourcePanelId: '2_screen',
1863
+ type: 'SYNCGROUPS_TYPE_SETFEATURES'
1864
+ }],
1865
+ mosaicNode: {
1866
+ direction: 'row',
1867
+ first: '1_screen',
1868
+ second: '2_screen'
1869
+ }
1870
+ });
1871
+ }
1872
+ var getBEViewsFromState = function getBEViewsFromState(workspace) {
1873
+ var _workspace$views$allI, _workspace$views;
1874
+ var result = [];
1875
+ ((_workspace$views$allI = workspace == null || (_workspace$views = workspace.views) == null ? void 0 : _workspace$views.allIds) != null ? _workspace$views$allI : []).forEach(function (id) {
1876
+ var _workspace$views$byId;
1877
+ var view = (_workspace$views$byId = workspace.views.byId[id]) != null ? _workspace$views$byId : {};
1878
+ result.push({
1879
+ mosaicNodeId: id,
1880
+ title: typeof view.title === 'string' && view.title.trim() ? view.title : id,
1881
+ componentType: view.componentType,
1882
+ initialProps: view.initialProps
1883
+ });
1884
+ });
1885
+ return result;
1886
+ };
1887
+ var togglePresetFilter = function togglePresetFilter(filters, id, isSelected, isAdmin, isFavouritesEnabled) {
1888
+ if (isAdmin === void 0) {
1889
+ isAdmin = false;
1890
+ }
1891
+ if (isFavouritesEnabled === void 0) {
1892
+ isFavouritesEnabled = true;
1893
+ }
1894
+ if (!filters.some(function (filter) {
1895
+ return filter.id === id;
1896
+ })) {
1897
+ return filters;
1898
+ }
1899
+ var availableFilters = filters.filter(function (filter) {
1900
+ if (filter.id === PresetFilterType.favourites) {
1901
+ return isFavouritesEnabled;
1902
+ }
1903
+ return !isAdmin || filter.id === 'system' || filter.id === 'shared';
1904
+ });
1905
+ var allSelected = availableFilters.every(function (filter) {
1906
+ return filter.isSelected;
1907
+ });
1908
+ var allUnselected = availableFilters.every(function (filter) {
1909
+ return filter.id === id ? !isSelected : !filter.isSelected;
1910
+ });
1911
+ return filters.map(function (filter) {
1912
+ if (allSelected) {
1913
+ return Object.assign({}, filter, {
1914
+ isSelected: filter.id === id && isSelected
1915
+ });
1916
+ }
1917
+ if (isAdmin && id !== PresetFilterType.favourites && filter.id !== PresetFilterType.favourites) {
1918
+ return Object.assign({}, filter, {
1919
+ isSelected: filter.id === id
1920
+ });
1921
+ }
1922
+ return Object.assign({}, filter, {
1923
+ isSelected: allUnselected || (filter.id === id ? isSelected : filter.isSelected)
1924
+ });
1925
+ });
1926
+ };
1927
+
1650
1928
  /* *
1651
1929
  * Licensed under the Apache License, Version 2.0 (the "License");
1652
1930
  * you may not use this file except in compliance with the License.
@@ -1684,7 +1962,13 @@ var sharedFilterState = {
1684
1962
  };
1685
1963
  ({
1686
1964
  id: PresetFilterType.plugin});
1687
- var defaultPresetFilterState = [personalFilterState, systemFilterState, sharedFilterState];
1965
+ var favouriteFilterState = {
1966
+ label: 'workspace-favourites',
1967
+ id: PresetFilterType.favourites,
1968
+ isSelected: true,
1969
+ isDisabled: false
1970
+ };
1971
+ var defaultPresetFilterState = [personalFilterState, systemFilterState, sharedFilterState, favouriteFilterState];
1688
1972
  var initialState$2 = {
1689
1973
  error: undefined,
1690
1974
  isWorkspaceListDialogOpen: false,
@@ -1741,58 +2025,11 @@ var slice$2 = createSlice({
1741
2025
  var _action$payload = action.payload,
1742
2026
  id = _action$payload.id,
1743
2027
  isSelected = _action$payload.isSelected,
1744
- isAdmin = _action$payload.isAdmin;
1745
- if (id === PresetFilterType.favourites) {
1746
- draft.favouritesOnly = isSelected;
1747
- draft.workspaceListFilters = draft.workspaceListFilters.map(function (filter) {
1748
- return Object.assign({}, filter, {
1749
- isSelected: true
1750
- });
1751
- });
1752
- return;
1753
- }
1754
- if (draft.favouritesOnly) {
1755
- draft.favouritesOnly = false;
1756
- }
1757
- var relevantFilters = isAdmin ? draft.workspaceListFilters.filter(function (filter) {
1758
- return filter.id === 'system' || filter.id === 'shared';
1759
- }) : draft.workspaceListFilters;
1760
- var index = draft.workspaceListFilters.findIndex(function (filter) {
1761
- return filter.id === id;
1762
- });
1763
- if (index !== -1) {
1764
- if (isAdmin) {
1765
- draft.workspaceListFilters.forEach(function (filter, i) {
1766
- draft.workspaceListFilters[i].isSelected = filter.id === id;
1767
- });
1768
- } else {
1769
- var isAllSelected = relevantFilters.every(function (filter) {
1770
- return filter.isSelected;
1771
- });
1772
- if (isAllSelected) {
1773
- draft.workspaceListFilters.forEach(function (filter, i) {
1774
- draft.workspaceListFilters[i].isSelected = filter.id === id ? isSelected : false;
1775
- });
1776
- } else {
1777
- draft.workspaceListFilters[index] = Object.assign({}, draft.workspaceListFilters[index], {
1778
- isSelected: isSelected
1779
- });
1780
- var isAllUnSelected = relevantFilters.every(function (filter) {
1781
- return !filter.isSelected;
1782
- });
1783
- if (isAllUnSelected) {
1784
- draft.workspaceListFilters.forEach(function (_, i) {
1785
- draft.workspaceListFilters[i].isSelected = true;
1786
- });
1787
- }
1788
- }
1789
- }
1790
- }
2028
+ isAdmin = _action$payload.isAdmin,
2029
+ isFavouritesEnabled = _action$payload.isFavouritesEnabled;
2030
+ draft.workspaceListFilters = togglePresetFilter(draft.workspaceListFilters, id, isSelected, isAdmin, isFavouritesEnabled);
1791
2031
  },
1792
2032
  setSelectAllFilterChip: function setSelectAllFilterChip(draft) {
1793
- if (draft.favouritesOnly) {
1794
- draft.favouritesOnly = false;
1795
- }
1796
2033
  draft.workspaceListFilters = draft.workspaceListFilters.map(function (filter) {
1797
2034
  return Object.assign({}, filter, {
1798
2035
  isSelected: true
@@ -1858,7 +2095,7 @@ var defaultViewPresetsFilters = [{
1858
2095
  id: PresetFilterType.shared,
1859
2096
  isSelected: true,
1860
2097
  isDisabled: false
1861
- }];
2098
+ }, favouriteFilterState];
1862
2099
  var pluginViewPresetsFilter = {
1863
2100
  label: 'shared-filter-plugin-view-presets',
1864
2101
  id: PresetFilterType.plugin,
@@ -2048,64 +2285,17 @@ var slice$1 = createSlice({
2048
2285
  id = _action$payload1.id,
2049
2286
  isSelected = _action$payload1.isSelected,
2050
2287
  panelId = _action$payload1.panelId,
2051
- isAdmin = _action$payload1.isAdmin;
2288
+ isAdmin = _action$payload1.isAdmin,
2289
+ isFavouritesEnabled = _action$payload1.isFavouritesEnabled;
2052
2290
  var entity = draft.entities[panelId];
2053
2291
  if (entity) {
2054
- if (id === PresetFilterType.favourites) {
2055
- entity.favouritesOnly = isSelected;
2056
- entity.filters = entity.filters.map(function (filter) {
2057
- return Object.assign({}, filter, {
2058
- isSelected: true
2059
- });
2060
- });
2061
- return;
2062
- }
2063
- if (entity.favouritesOnly) {
2064
- entity.favouritesOnly = false;
2065
- }
2066
- var relevantFilters = isAdmin ? entity.filters.filter(function (filter) {
2067
- return filter.id === 'system' || filter.id === 'shared';
2068
- }) : entity.filters;
2069
- var index = entity.filters.findIndex(function (filter) {
2070
- return filter.id === id;
2071
- });
2072
- if (index !== -1) {
2073
- if (isAdmin) {
2074
- entity.filters.forEach(function (filter, i) {
2075
- entity.filters[i].isSelected = filter.id === id;
2076
- });
2077
- } else {
2078
- var isAllSelected = relevantFilters.every(function (filter) {
2079
- return filter.isSelected;
2080
- });
2081
- if (isAllSelected) {
2082
- entity.filters.forEach(function (filter, i) {
2083
- entity.filters[i].isSelected = filter.id === id ? isSelected : false;
2084
- });
2085
- } else {
2086
- entity.filters[index] = Object.assign({}, entity.filters[index], {
2087
- isSelected: isSelected
2088
- });
2089
- var isAllUnSelected = relevantFilters.every(function (filter) {
2090
- return !filter.isSelected;
2091
- });
2092
- if (isAllUnSelected) {
2093
- entity.filters.forEach(function (_, i) {
2094
- entity.filters[i].isSelected = true;
2095
- });
2096
- }
2097
- }
2098
- }
2099
- }
2292
+ entity.filters = togglePresetFilter(entity.filters, id, isSelected, isAdmin, isFavouritesEnabled);
2100
2293
  }
2101
2294
  },
2102
2295
  setSelectAllFilterChip: function setSelectAllFilterChip(draft, action) {
2103
2296
  var panelId = action.payload.panelId;
2104
2297
  var entity = draft.entities[panelId];
2105
2298
  if (entity) {
2106
- if (entity.favouritesOnly) {
2107
- entity.favouritesOnly = false;
2108
- }
2109
2299
  entity.filters = entity.filters.map(function (filter) {
2110
2300
  return Object.assign({}, filter, {
2111
2301
  isSelected: true
@@ -2273,261 +2463,49 @@ var slice$1 = createSlice({
2273
2463
  var hasRelevantNonReferenceTimeChanges = Object.keys(parameter).filter(function (key) {
2274
2464
  return key !== 'id' && key !== 'instanceId';
2275
2465
  }).length > 0;
2276
- var hasRelativeReferenceTimeChange = /^latest(?:-\d+)?$/.test(parameter.instanceId || '');
2277
- return hasRelevantNonReferenceTimeChanges || hasRelativeReferenceTimeChange;
2278
- }() : true;
2279
- if (changesRelevantProperties && isChangeOriginSupported && panelId) {
2280
- var entity = draft.entities[panelId];
2281
- if (entity && !(entity != null && entity.hasChanges)) {
2282
- entity.hasChanges = true;
2283
- viewPresetsAdapter.setOne(draft, entity);
2284
- }
2285
- }
2286
- });
2287
- });
2288
- pluginPresetChangeActions.map(function (pluginPresetAction) {
2289
- return builder.addCase(pluginPresetAction, function (draft, action) {
2290
- var panelId = action.payload.panelId;
2291
- if (panelId) {
2292
- var entity = draft.entities[panelId];
2293
- if (entity && !(entity != null && entity.hasChanges)) {
2294
- entity.hasChanges = true;
2295
- viewPresetsAdapter.setOne(draft, entity);
2296
- }
2297
- }
2298
- });
2299
- });
2300
- soundingsChangeActions.map(function (soundingsAction) {
2301
- return builder.addCase(soundingsAction, function (draft, action) {
2302
- var _action$payload19 = action.payload,
2303
- viewId = _action$payload19.viewId,
2304
- origin = _action$payload19.origin;
2305
- var isChangeOriginSupported = supportedSoundingsActionOrigins.includes(origin);
2306
- if (isChangeOriginSupported && viewId && viewId !== '') {
2307
- var entity = draft.entities[viewId];
2308
- if (entity && !(entity != null && entity.hasChanges)) {
2309
- entity.hasChanges = true;
2310
- viewPresetsAdapter.setOne(draft, entity);
2311
- }
2312
- }
2313
- });
2314
- });
2315
- }
2316
- });
2317
- var viewPresetsReducer = slice$1.reducer,
2318
- viewPresetActions = slice$1.actions;
2319
-
2320
- /* eslint-disable no-redeclare */
2321
- /* *
2322
- * Licensed under the Apache License, Version 2.0 (the "License");
2323
- * you may not use this file except in compliance with the License.
2324
- * You may obtain a copy of the License at
2325
- *
2326
- * http://www.apache.org/licenses/LICENSE-2.0
2327
- *
2328
- * Unless required by applicable law or agreed to in writing, software
2329
- * distributed under the License is distributed on an "AS IS" BASIS,
2330
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2331
- * See the License for the specific language governing permissions and
2332
- * limitations under the License.
2333
- *
2334
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
2335
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
2336
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
2337
- * */
2338
- var getSnackbarMessage$1 = function getSnackbarMessage(action, title, is_shared) {
2339
- // Trim and add quotes
2340
- var trimmedTitle = title.trim();
2341
- switch (action) {
2342
- case WorkspacePresetAction.DELETE:
2343
- return {
2344
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
2345
- key: 'workspace-list-success-delete',
2346
- params: {
2347
- TITLE: trimmedTitle
2348
- }
2349
- };
2350
- case WorkspacePresetAction.DELETE_SYSTEM_PRESET:
2351
- return {
2352
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
2353
- key: 'workspace-list-success-delete-system',
2354
- params: {
2355
- TITLE: trimmedTitle
2356
- }
2357
- };
2358
- case WorkspacePresetAction.DUPLICATE:
2359
- return {
2360
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
2361
- key: 'workspace-list-success-duplicate',
2362
- params: {
2363
- TITLE: trimmedTitle
2364
- }
2365
- };
2366
- case WorkspacePresetAction.EDIT:
2367
- return {
2368
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
2369
- key: 'workspace-list-success-edit',
2370
- params: {
2371
- TITLE: trimmedTitle
2372
- }
2373
- };
2374
- case WorkspacePresetAction.RESET:
2375
- return {
2376
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
2377
- key: 'workspace-list-success-reset',
2378
- params: {
2379
- TITLE: trimmedTitle
2380
- }
2381
- };
2382
- case WorkspacePresetAction.SHARE:
2383
- return {
2384
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
2385
- key: is_shared ? 'workspace-list-success-unshare' : 'workspace-list-success-share',
2386
- params: {
2387
- TITLE: trimmedTitle
2388
- }
2389
- };
2390
- default:
2391
- return {
2392
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
2393
- key: 'workspace-list-success-save',
2394
- params: {
2395
- TITLE: trimmedTitle
2396
- }
2397
- };
2398
- }
2399
- };
2400
- function getEmptyWorkspaceListItem(t) {
2401
- return {
2402
- id: undefined,
2403
- title: t ? t('workspace-new') : undefined,
2404
- labels: undefined,
2405
- scope: 'system',
2406
- "abstract": '',
2407
- viewType: 'singleWindow'
2408
- };
2409
- }
2410
- function getEmptyMapWorkspace(t) {
2411
- return Object.assign({}, getEmptyWorkspaceListItem(t), {
2412
- views: {
2413
- allIds: ['1_screen'],
2414
- byId: {
2415
- '1_screen': {
2416
- title: t ? t('workspace-mappreset-new') : undefined,
2417
- componentType: 'Map',
2418
- initialProps: {
2419
- mapPreset: {
2420
- shouldShowLayerManager: true,
2421
- dockedLayerManagerSize: 'sizeSmall'
2422
- },
2423
- syncGroupsIds: []
2424
- }
2425
- }
2426
- }
2427
- },
2428
- mosaicNode: '1_screen'
2429
- });
2430
- }
2431
- var getEmptyWorkspacePreset = function getEmptyWorkspacePreset() {
2432
- return {
2433
- scope: 'system',
2434
- "abstract": '',
2435
- views: {
2436
- allIds: ['1_screen'],
2437
- byId: {
2438
- '1_screen': {
2439
- componentType: 'Map',
2440
- initialProps: {
2441
- mapPreset: {
2442
- shouldShowLayerManager: true,
2443
- dockedLayerManagerSize: 'sizeSmall'
2444
- },
2445
- syncGroupsIds: []
2446
- }
2447
- }
2448
- }
2449
- },
2450
- mosaicNode: '1_screen',
2451
- viewType: 'singleWindow',
2452
- username: 'global'
2453
- };
2454
- };
2455
- var createCustomEmptyMapWorkspace = function createCustomEmptyMapWorkspace(emptyWorkspaceTitle, emptyMapWorkspaceTitle, customMapPreset) {
2456
- var customEmptyMapWorkspace = cloneDeep(getEmptyWorkspacePreset());
2457
- if (customMapPreset) {
2458
- customEmptyMapWorkspace.views.byId['1_screen'].initialProps.mapPreset = customMapPreset;
2459
- }
2460
- customEmptyMapWorkspace.views.byId['1_screen'].title = emptyMapWorkspaceTitle;
2461
- var emptyWorkspacePreset = Object.assign({}, customEmptyMapWorkspace, {
2462
- title: emptyWorkspaceTitle
2463
- });
2464
- return emptyWorkspacePreset;
2465
- };
2466
- var LOCAL_SOUNDINGS_ID = 'newSoundingsWorkspace';
2467
- var getNewSoundingsWorkspaceListItem = function getNewSoundingsWorkspaceListItem(t) {
2468
- return {
2469
- id: LOCAL_SOUNDINGS_ID,
2470
- title: t ? t('workspace-new-soundings') : 'New soundings workspace',
2471
- labels: undefined,
2472
- scope: 'system',
2473
- "abstract": '',
2474
- viewType: 'multiWindow'
2475
- };
2476
- };
2477
- function getNewSoundingsWorkspace(t) {
2478
- return Object.assign({}, getNewSoundingsWorkspaceListItem(t), {
2479
- views: {
2480
- allIds: ['1_screen', '2_screen'],
2481
- byId: {
2482
- '1_screen': {
2483
- mosaicNodeId: '1_screen',
2484
- title: 'New soundings map',
2485
- componentType: 'Map',
2486
- initialProps: {
2487
- mapPreset: {
2488
- shouldShowLegend: false,
2489
- shouldShowLayerManager: false
2490
- }
2466
+ var hasRelativeReferenceTimeChange = /^latest(?:-\d+)?$/.test(parameter.instanceId || '');
2467
+ return hasRelevantNonReferenceTimeChanges || hasRelativeReferenceTimeChange;
2468
+ }() : true;
2469
+ if (changesRelevantProperties && isChangeOriginSupported && panelId) {
2470
+ var entity = draft.entities[panelId];
2471
+ if (entity && !(entity != null && entity.hasChanges)) {
2472
+ entity.hasChanges = true;
2473
+ viewPresetsAdapter.setOne(draft, entity);
2491
2474
  }
2492
- },
2493
- '2_screen': {
2494
- mosaicNodeId: '2_screen',
2495
- title: 'New soundings view',
2496
- componentType: 'Soundings',
2497
- initialProps: {}
2498
2475
  }
2499
- }
2500
- },
2501
- linking: {
2502
- '2_screen': ['1_screen']
2503
- },
2504
- syncGroups: [{
2505
- id: 'Features_2_screen',
2506
- sourcePanelId: '2_screen',
2507
- type: 'SYNCGROUPS_TYPE_SETFEATURES'
2508
- }],
2509
- mosaicNode: {
2510
- direction: 'row',
2511
- first: '1_screen',
2512
- second: '2_screen'
2513
- }
2514
- });
2515
- }
2516
- var getBEViewsFromState = function getBEViewsFromState(workspace) {
2517
- var _workspace$views$allI, _workspace$views;
2518
- var result = [];
2519
- ((_workspace$views$allI = workspace == null || (_workspace$views = workspace.views) == null ? void 0 : _workspace$views.allIds) != null ? _workspace$views$allI : []).forEach(function (id) {
2520
- var _workspace$views$byId;
2521
- var view = (_workspace$views$byId = workspace.views.byId[id]) != null ? _workspace$views$byId : {};
2522
- result.push({
2523
- mosaicNodeId: id,
2524
- title: typeof view.title === 'string' && view.title.trim() ? view.title : id,
2525
- componentType: view.componentType,
2526
- initialProps: view.initialProps
2476
+ });
2527
2477
  });
2528
- });
2529
- return result;
2530
- };
2478
+ pluginPresetChangeActions.map(function (pluginPresetAction) {
2479
+ return builder.addCase(pluginPresetAction, function (draft, action) {
2480
+ var panelId = action.payload.panelId;
2481
+ if (panelId) {
2482
+ var entity = draft.entities[panelId];
2483
+ if (entity && !(entity != null && entity.hasChanges)) {
2484
+ entity.hasChanges = true;
2485
+ viewPresetsAdapter.setOne(draft, entity);
2486
+ }
2487
+ }
2488
+ });
2489
+ });
2490
+ soundingsChangeActions.map(function (soundingsAction) {
2491
+ return builder.addCase(soundingsAction, function (draft, action) {
2492
+ var _action$payload19 = action.payload,
2493
+ viewId = _action$payload19.viewId,
2494
+ origin = _action$payload19.origin;
2495
+ var isChangeOriginSupported = supportedSoundingsActionOrigins.includes(origin);
2496
+ if (isChangeOriginSupported && viewId && viewId !== '') {
2497
+ var entity = draft.entities[viewId];
2498
+ if (entity && !(entity != null && entity.hasChanges)) {
2499
+ entity.hasChanges = true;
2500
+ viewPresetsAdapter.setOne(draft, entity);
2501
+ }
2502
+ }
2503
+ });
2504
+ });
2505
+ }
2506
+ });
2507
+ var viewPresetsReducer = slice$1.reducer,
2508
+ viewPresetActions = slice$1.actions;
2531
2509
 
2532
2510
  var initialState = {
2533
2511
  id: '',
@@ -3314,7 +3292,7 @@ var getViewPresetListFiltersForView = createSelector(getViewPresetById, function
3314
3292
  if (isAdmin) {
3315
3293
  // Admin users: Only system and shared filters
3316
3294
  return filters.filter(function (filter) {
3317
- return filter.id === 'system' || filter.id === 'shared';
3295
+ return filter.id === 'system' || filter.id === 'shared' || filter.id === 'favourites';
3318
3296
  }).map(function (filter) {
3319
3297
  return Object.assign({}, filter, {
3320
3298
  isDisabled: false
@@ -3345,10 +3323,6 @@ var getViewPresetLabelFilters = createSelector(getViewPresetById, function (_sto
3345
3323
  }, function (viewPreset) {
3346
3324
  return viewPreset == null ? void 0 : viewPreset.labelFilters;
3347
3325
  }, selectorMemoizationOptions);
3348
- var getFavouritesOnly$1 = createSelector(getViewPresetById, function (entity) {
3349
- var _entity$favouritesOnl;
3350
- return (_entity$favouritesOnl = entity == null ? void 0 : entity.favouritesOnly) != null ? _entity$favouritesOnl : false;
3351
- });
3352
3326
 
3353
3327
  /* *
3354
3328
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -3395,29 +3369,38 @@ var LABELS_CONFIG_DEFAULT = {
3395
3369
  dataSource: ['Meps', 'Arome Arctic', 'Ecmwf', 'Ensemble', 'AIFS', 'BRIS', 'radar', 'satellite', 'synop']
3396
3370
  };
3397
3371
 
3398
- var getWorkspaceLabelsConfig = /*#__PURE__*/function () {
3399
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(auth) {
3372
+ var TEMPLATE_PRESETS_FILENAME = 'templatePresets.json';
3373
+ var getTemplatePresetsFilename = function getTemplatePresetsFilename() {
3374
+ var _sessionStorageProvid;
3375
+ return ((_sessionStorageProvid = sessionStorageProvider.getConfig()) == null ? void 0 : _sessionStorageProvid.GW_TEMPLATE_PRESETS_FILENAME) || TEMPLATE_PRESETS_FILENAME;
3376
+ };
3377
+ var getTemplatePresets = /*#__PURE__*/function () {
3378
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(filename) {
3379
+ var _response$workspacePr, _response$viewPresets;
3380
+ var response;
3400
3381
  return _regenerator().w(function (_context) {
3401
3382
  while (1) switch (_context.n) {
3402
3383
  case 0:
3403
- if (!hasNoPresetBackend()) {
3404
- _context.n = 1;
3405
- break;
3384
+ if (filename === void 0) {
3385
+ filename = getTemplatePresetsFilename();
3406
3386
  }
3407
- return _context.a(2, LABELS_CONFIG_DEFAULT);
3387
+ _context.n = 1;
3388
+ return fetch("./assets/" + encodeURIComponent(filename)).then(handleResponse);
3408
3389
  case 1:
3409
- return _context.a(2, fetch(getPresetBaseUrl() + "/workspace-labels-config", {
3410
- headers: getHeaders(auth)
3411
- }).then(handleResponse));
3390
+ response = _context.v;
3391
+ return _context.a(2, {
3392
+ workspacePresets: (_response$workspacePr = response == null ? void 0 : response.workspacePresets) != null ? _response$workspacePr : [],
3393
+ viewPresets: (_response$viewPresets = response == null ? void 0 : response.viewPresets) != null ? _response$viewPresets : []
3394
+ });
3412
3395
  }
3413
3396
  }, _callee);
3414
3397
  }));
3415
- return function getWorkspaceLabelsConfig(_x) {
3398
+ return function getTemplatePresets(_x) {
3416
3399
  return _ref.apply(this, arguments);
3417
3400
  };
3418
3401
  }();
3419
- var getWorkspacePreset = /*#__PURE__*/function () {
3420
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(workspaceId, auth) {
3402
+ var getWorkspaceLabelsConfig = /*#__PURE__*/function () {
3403
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(auth) {
3421
3404
  return _regenerator().w(function (_context2) {
3422
3405
  while (1) switch (_context2.n) {
3423
3406
  case 0:
@@ -3425,21 +3408,20 @@ var getWorkspacePreset = /*#__PURE__*/function () {
3425
3408
  _context2.n = 1;
3426
3409
  break;
3427
3410
  }
3428
- return _context2.a(2, extractWorkspacePresetFromJSON(workspaceId));
3411
+ return _context2.a(2, LABELS_CONFIG_DEFAULT);
3429
3412
  case 1:
3430
- return _context2.a(2, fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId, {
3413
+ return _context2.a(2, fetch(getPresetBaseUrl() + "/workspace-labels-config", {
3431
3414
  headers: getHeaders(auth)
3432
3415
  }).then(handleResponse));
3433
3416
  }
3434
3417
  }, _callee2);
3435
3418
  }));
3436
- return function getWorkspacePreset(_x2, _x3) {
3419
+ return function getWorkspaceLabelsConfig(_x2) {
3437
3420
  return _ref2.apply(this, arguments);
3438
3421
  };
3439
3422
  }();
3440
- var getWorkspacePresets = /*#__PURE__*/function () {
3441
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(auth, params) {
3442
- var presetsUrl, searchParams, queryString, url;
3423
+ var getWorkspacePreset = /*#__PURE__*/function () {
3424
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(workspaceId, auth) {
3443
3425
  return _regenerator().w(function (_context3) {
3444
3426
  while (1) switch (_context3.n) {
3445
3427
  case 0:
@@ -3447,33 +3429,21 @@ var getWorkspacePresets = /*#__PURE__*/function () {
3447
3429
  _context3.n = 1;
3448
3430
  break;
3449
3431
  }
3450
- return _context3.a(2, filterWorkspacePresetList(params));
3432
+ return _context3.a(2, extractWorkspacePresetFromJSON(workspaceId));
3451
3433
  case 1:
3452
- presetsUrl = getPresetBaseUrl() + "/workspacepreset";
3453
- searchParams = new URLSearchParams();
3454
- if (params) {
3455
- Object.entries(params).forEach(function (_ref4) {
3456
- var key = _ref4[0],
3457
- value = _ref4[1];
3458
- if (value !== undefined && value !== null) {
3459
- searchParams.append(key, String(value));
3460
- }
3461
- });
3462
- }
3463
- queryString = searchParams.toString();
3464
- url = queryString ? presetsUrl + "?" + queryString : presetsUrl;
3465
- return _context3.a(2, fetch(url, {
3434
+ return _context3.a(2, fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId, {
3466
3435
  headers: getHeaders(auth)
3467
3436
  }).then(handleResponse));
3468
3437
  }
3469
3438
  }, _callee3);
3470
3439
  }));
3471
- return function getWorkspacePresets(_x4, _x5) {
3440
+ return function getWorkspacePreset(_x3, _x4) {
3472
3441
  return _ref3.apply(this, arguments);
3473
3442
  };
3474
3443
  }();
3475
- var getWorkspace = /*#__PURE__*/function () {
3476
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(workspaceId, auth) {
3444
+ var getWorkspacePresets = /*#__PURE__*/function () {
3445
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(auth, params) {
3446
+ var presetsUrl, searchParams, queryString, url;
3477
3447
  return _regenerator().w(function (_context4) {
3478
3448
  while (1) switch (_context4.n) {
3479
3449
  case 0:
@@ -3481,57 +3451,74 @@ var getWorkspace = /*#__PURE__*/function () {
3481
3451
  _context4.n = 1;
3482
3452
  break;
3483
3453
  }
3484
- return _context4.a(2, extractWorkspacePresetFromJSON(workspaceId));
3454
+ return _context4.a(2, filterWorkspacePresetList(params));
3485
3455
  case 1:
3486
- return _context4.a(2, fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId, {
3456
+ presetsUrl = getPresetBaseUrl() + "/workspacepreset";
3457
+ searchParams = new URLSearchParams();
3458
+ if (params) {
3459
+ Object.entries(params).forEach(function (_ref5) {
3460
+ var key = _ref5[0],
3461
+ value = _ref5[1];
3462
+ if (value !== undefined && value !== null) {
3463
+ searchParams.append(key, String(value));
3464
+ }
3465
+ });
3466
+ }
3467
+ queryString = searchParams.toString();
3468
+ url = queryString ? presetsUrl + "?" + queryString : presetsUrl;
3469
+ return _context4.a(2, fetch(url, {
3487
3470
  headers: getHeaders(auth)
3488
3471
  }).then(handleResponse));
3489
3472
  }
3490
3473
  }, _callee4);
3491
3474
  }));
3492
- return function getWorkspace(_x6, _x7) {
3493
- return _ref5.apply(this, arguments);
3475
+ return function getWorkspacePresets(_x5, _x6) {
3476
+ return _ref4.apply(this, arguments);
3494
3477
  };
3495
3478
  }();
3496
- var deleteWorkspace = /*#__PURE__*/function () {
3479
+ var getWorkspace = /*#__PURE__*/function () {
3497
3480
  var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(workspaceId, auth) {
3498
3481
  return _regenerator().w(function (_context5) {
3499
3482
  while (1) switch (_context5.n) {
3500
3483
  case 0:
3484
+ if (!hasNoPresetBackend()) {
3485
+ _context5.n = 1;
3486
+ break;
3487
+ }
3488
+ return _context5.a(2, extractWorkspacePresetFromJSON(workspaceId));
3489
+ case 1:
3501
3490
  return _context5.a(2, fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId, {
3502
- headers: getHeaders(auth),
3503
- method: 'DELETE'
3491
+ headers: getHeaders(auth)
3504
3492
  }).then(handleResponse));
3505
3493
  }
3506
3494
  }, _callee5);
3507
3495
  }));
3508
- return function deleteWorkspace(_x8, _x9) {
3496
+ return function getWorkspace(_x7, _x8) {
3509
3497
  return _ref6.apply(this, arguments);
3510
3498
  };
3511
3499
  }();
3512
- var updateWorkspace = /*#__PURE__*/function () {
3513
- var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(workspaceId, data, auth) {
3500
+ var deleteWorkspace = /*#__PURE__*/function () {
3501
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(workspaceId, auth) {
3514
3502
  return _regenerator().w(function (_context6) {
3515
3503
  while (1) switch (_context6.n) {
3516
3504
  case 0:
3517
3505
  return _context6.a(2, fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId, {
3518
3506
  headers: getHeaders(auth),
3519
- method: 'PUT',
3520
- body: JSON.stringify(data)
3507
+ method: 'DELETE'
3521
3508
  }).then(handleResponse));
3522
3509
  }
3523
3510
  }, _callee6);
3524
3511
  }));
3525
- return function updateWorkspace(_x0, _x1, _x10) {
3512
+ return function deleteWorkspace(_x9, _x0) {
3526
3513
  return _ref7.apply(this, arguments);
3527
3514
  };
3528
3515
  }();
3529
- var saveWorkspacePreset = /*#__PURE__*/function () {
3516
+ var updateWorkspace = /*#__PURE__*/function () {
3530
3517
  var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(workspaceId, data, auth) {
3531
3518
  return _regenerator().w(function (_context7) {
3532
3519
  while (1) switch (_context7.n) {
3533
3520
  case 0:
3534
- return _context7.a(2, fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId + "/", {
3521
+ return _context7.a(2, fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId, {
3535
3522
  headers: getHeaders(auth),
3536
3523
  method: 'PUT',
3537
3524
  body: JSON.stringify(data)
@@ -3539,52 +3526,69 @@ var saveWorkspacePreset = /*#__PURE__*/function () {
3539
3526
  }
3540
3527
  }, _callee7);
3541
3528
  }));
3542
- return function saveWorkspacePreset(_x11, _x12, _x13) {
3529
+ return function updateWorkspace(_x1, _x10, _x11) {
3543
3530
  return _ref8.apply(this, arguments);
3544
3531
  };
3545
3532
  }();
3546
- var createWorkspace = /*#__PURE__*/function () {
3547
- var _ref9 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(data, auth) {
3533
+ var saveWorkspacePreset = /*#__PURE__*/function () {
3534
+ var _ref9 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(workspaceId, data, auth) {
3548
3535
  return _regenerator().w(function (_context8) {
3549
3536
  while (1) switch (_context8.n) {
3550
3537
  case 0:
3551
- return _context8.a(2, fetch(getPresetBaseUrl() + "/workspacepreset", {
3538
+ return _context8.a(2, fetch(getPresetBaseUrl() + "/workspacepreset/" + workspaceId + "/", {
3552
3539
  headers: getHeaders(auth),
3553
- method: 'POST',
3540
+ method: 'PUT',
3554
3541
  body: JSON.stringify(data)
3555
3542
  }).then(handleResponse));
3556
3543
  }
3557
3544
  }, _callee8);
3558
3545
  }));
3559
- return function createWorkspace(_x14, _x15) {
3546
+ return function saveWorkspacePreset(_x12, _x13, _x14) {
3560
3547
  return _ref9.apply(this, arguments);
3561
3548
  };
3562
3549
  }();
3563
- var saveWorkspacePresetAs = /*#__PURE__*/function () {
3550
+ var createWorkspace = /*#__PURE__*/function () {
3564
3551
  var _ref0 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9(data, auth) {
3565
- var _response$headers$get;
3566
- var response, headerLocation;
3567
3552
  return _regenerator().w(function (_context9) {
3568
3553
  while (1) switch (_context9.n) {
3569
3554
  case 0:
3570
- _context9.n = 1;
3555
+ return _context9.a(2, fetch(getPresetBaseUrl() + "/workspacepreset", {
3556
+ headers: getHeaders(auth),
3557
+ method: 'POST',
3558
+ body: JSON.stringify(data)
3559
+ }).then(handleResponse));
3560
+ }
3561
+ }, _callee9);
3562
+ }));
3563
+ return function createWorkspace(_x15, _x16) {
3564
+ return _ref0.apply(this, arguments);
3565
+ };
3566
+ }();
3567
+ var saveWorkspacePresetAs = /*#__PURE__*/function () {
3568
+ var _ref1 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0(data, auth) {
3569
+ var _response$headers$get;
3570
+ var response, headerLocation;
3571
+ return _regenerator().w(function (_context0) {
3572
+ while (1) switch (_context0.n) {
3573
+ case 0:
3574
+ _context0.n = 1;
3571
3575
  return fetch(getPresetBaseUrl() + "/workspacepreset", {
3572
3576
  headers: getHeaders(auth),
3573
3577
  method: 'POST',
3574
3578
  body: JSON.stringify(data)
3575
3579
  });
3576
3580
  case 1:
3577
- response = _context9.v;
3578
- _context9.n = 2;
3581
+ response = _context0.v;
3582
+ _context0.n = 2;
3579
3583
  return handleResponse(response);
3580
3584
  case 2:
3581
3585
  headerLocation = (_response$headers$get = response.headers.get('Location')) != null ? _response$headers$get : response.headers.get('location');
3582
- return _context9.a(2, getIdFromUrl(headerLocation));
3586
+ return _context0.a(2, getIdFromUrl(headerLocation));
3583
3587
  }
3584
- }, _callee9);
3588
+ }, _callee0);
3585
3589
  }));
3586
- return function saveWorkspacePresetAs(_x16, _x17) {
3587
- return _ref0.apply(this, arguments);
3590
+ return function saveWorkspacePresetAs(_x17, _x18) {
3591
+ return _ref1.apply(this, arguments);
3588
3592
  };
3589
3593
  }();
3590
3594
 
@@ -3607,15 +3611,18 @@ var workspaceQueryOptions = {
3607
3611
  return [].concat(workspaceQueryOptions.keys.all(), ['list']);
3608
3612
  }
3609
3613
  },
3610
- getWorkspacePreset: function getWorkspacePreset$1(id, credentials) {
3614
+ getTemplatePresets: function getTemplatePresets$1(filename) {
3615
+ if (filename === void 0) {
3616
+ filename = getTemplatePresetsFilename();
3617
+ }
3611
3618
  return queryOptions({
3612
- queryKey: generateWorkspaceQueryKeys(id),
3619
+ queryKey: generateWorkspaceQueryKeys('templates', filename),
3613
3620
  queryFn: function () {
3614
3621
  var _queryFn = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
3615
3622
  return _regenerator().w(function (_context) {
3616
3623
  while (1) switch (_context.n) {
3617
3624
  case 0:
3618
- return _context.a(2, getWorkspacePreset(id, credentials));
3625
+ return _context.a(2, getTemplatePresets(filename));
3619
3626
  }
3620
3627
  }, _callee);
3621
3628
  }));
@@ -3623,18 +3630,19 @@ var workspaceQueryOptions = {
3623
3630
  return _queryFn.apply(this, arguments);
3624
3631
  }
3625
3632
  return queryFn;
3626
- }()
3633
+ }(),
3634
+ staleTime: Infinity
3627
3635
  });
3628
3636
  },
3629
- getWorkspacePresets: function getWorkspacePresets$1(credentials) {
3637
+ getWorkspacePreset: function getWorkspacePreset$1(id, credentials) {
3630
3638
  return queryOptions({
3631
- queryKey: workspaceQueryOptions.keys.lists(),
3639
+ queryKey: generateWorkspaceQueryKeys(id),
3632
3640
  queryFn: function () {
3633
3641
  var _queryFn2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
3634
3642
  return _regenerator().w(function (_context2) {
3635
3643
  while (1) switch (_context2.n) {
3636
3644
  case 0:
3637
- return _context2.a(2, getWorkspacePresets(credentials));
3645
+ return _context2.a(2, getWorkspacePreset(id, credentials));
3638
3646
  }
3639
3647
  }, _callee2);
3640
3648
  }));
@@ -3642,21 +3650,18 @@ var workspaceQueryOptions = {
3642
3650
  return _queryFn2.apply(this, arguments);
3643
3651
  }
3644
3652
  return queryFn;
3645
- }(),
3646
- staleTime: 2 * 60 * 1000,
3647
- refetchOnMount: true
3653
+ }()
3648
3654
  });
3649
3655
  },
3650
- saveWorkspacePreset: function saveWorkspacePreset$1(id, data, credentials) {
3656
+ getWorkspacePresets: function getWorkspacePresets$1(credentials) {
3651
3657
  return queryOptions({
3652
- queryKey: generateWorkspaceQueryKeys(id),
3653
- staleTime: 0,
3658
+ queryKey: workspaceQueryOptions.keys.lists(),
3654
3659
  queryFn: function () {
3655
3660
  var _queryFn3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
3656
3661
  return _regenerator().w(function (_context3) {
3657
3662
  while (1) switch (_context3.n) {
3658
3663
  case 0:
3659
- return _context3.a(2, saveWorkspacePreset(id, data, credentials));
3664
+ return _context3.a(2, getWorkspacePresets(credentials));
3660
3665
  }
3661
3666
  }, _callee3);
3662
3667
  }));
@@ -3664,19 +3669,21 @@ var workspaceQueryOptions = {
3664
3669
  return _queryFn3.apply(this, arguments);
3665
3670
  }
3666
3671
  return queryFn;
3667
- }()
3672
+ }(),
3673
+ staleTime: 2 * 60 * 1000,
3674
+ refetchOnMount: true
3668
3675
  });
3669
3676
  },
3670
- saveWorkspacePresetAs: function saveWorkspacePresetAs$1(data, credentials) {
3677
+ saveWorkspacePreset: function saveWorkspacePreset$1(id, data, credentials) {
3671
3678
  return queryOptions({
3672
- queryKey: generateWorkspaceQueryKeys('save-as'),
3679
+ queryKey: generateWorkspaceQueryKeys(id),
3673
3680
  staleTime: 0,
3674
3681
  queryFn: function () {
3675
3682
  var _queryFn4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
3676
3683
  return _regenerator().w(function (_context4) {
3677
3684
  while (1) switch (_context4.n) {
3678
3685
  case 0:
3679
- return _context4.a(2, saveWorkspacePresetAs(data, credentials));
3686
+ return _context4.a(2, saveWorkspacePreset(id, data, credentials));
3680
3687
  }
3681
3688
  }, _callee4);
3682
3689
  }));
@@ -3686,6 +3693,26 @@ var workspaceQueryOptions = {
3686
3693
  return queryFn;
3687
3694
  }()
3688
3695
  });
3696
+ },
3697
+ saveWorkspacePresetAs: function saveWorkspacePresetAs$1(data, credentials) {
3698
+ return queryOptions({
3699
+ queryKey: generateWorkspaceQueryKeys('save-as'),
3700
+ staleTime: 0,
3701
+ queryFn: function () {
3702
+ var _queryFn5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
3703
+ return _regenerator().w(function (_context5) {
3704
+ while (1) switch (_context5.n) {
3705
+ case 0:
3706
+ return _context5.a(2, saveWorkspacePresetAs(data, credentials));
3707
+ }
3708
+ }, _callee5);
3709
+ }));
3710
+ function queryFn() {
3711
+ return _queryFn5.apply(this, arguments);
3712
+ }
3713
+ return queryFn;
3714
+ }()
3715
+ });
3689
3716
  }
3690
3717
  };
3691
3718
 
@@ -3774,7 +3801,7 @@ var getWorkspaceListFilters = createSelector(function (store) {
3774
3801
  if (isAdmin) {
3775
3802
  // Only return system and shared for admins
3776
3803
  return filters.filter(function (filter) {
3777
- return filter.id === 'system' || filter.id === 'shared';
3804
+ return filter.id === 'system' || filter.id === 'shared' || filter.id === 'favourites';
3778
3805
  }).map(function (filter) {
3779
3806
  return Object.assign({}, filter, {
3780
3807
  isDisabled: false
@@ -3799,17 +3826,6 @@ var getWorkspaceLabelFilters = createSelector(getWorkspaceListStore, function (s
3799
3826
  }, function (state) {
3800
3827
  return state.workspaceLabelFilters;
3801
3828
  }, selectorMemoizationOptions);
3802
- var getFavouritesOnly = createSelector(getWorkspaceListStore, function (state) {
3803
- var _state$favouritesOnly;
3804
- return (_state$favouritesOnly = state == null ? void 0 : state.favouritesOnly) != null ? _state$favouritesOnly : false;
3805
- });
3806
- var filterAndSortFavouritePresets = function filterAndSortFavouritePresets(presets, isFavourite, favouritesOnly) {
3807
- return presets.filter(function (preset) {
3808
- return !favouritesOnly || isFavourite(preset);
3809
- }).sort(function (first, second) {
3810
- return Number(isFavourite(second)) - Number(isFavourite(first));
3811
- });
3812
- };
3813
3829
 
3814
3830
  var emptyWorkspaceBEData = Object.assign({}, getEmptyMapWorkspace(), {
3815
3831
  views: [{
@@ -6310,7 +6326,12 @@ var humanizeLabelStrings = function humanizeLabelStrings(value) {
6310
6326
  return match.toUpperCase();
6311
6327
  });
6312
6328
  };
6313
- var filterAndSortPresets = function filterAndSortPresets(presets, selectedFilters, username, isAdmin, labelFilters, searchQuery) {
6329
+ var filterAndSortPresets = function filterAndSortPresets(presets, selectedFilters, username, isAdmin, labelFilters, searchQuery, isFavourite) {
6330
+ if (isFavourite === void 0) {
6331
+ isFavourite = function isFavourite() {
6332
+ return false;
6333
+ };
6334
+ }
6314
6335
  var searchFiltered = searchQuery ? presets.filter(function (preset) {
6315
6336
  var terms = searchQuery.toLowerCase().trim().split(/\s+/).filter(Boolean);
6316
6337
  var fields = [preset.title, preset["abstract"], preset.description].filter(Boolean).map(function (field) {
@@ -6333,7 +6354,14 @@ var filterAndSortPresets = function filterAndSortPresets(presets, selectedFilter
6333
6354
  var isAllSelected = expectedIdsForAll.every(function (id) {
6334
6355
  return selectedIds.includes(id);
6335
6356
  });
6357
+ // Templates are filtered by their own chip instead of by scope
6358
+ var isTemplate = function isTemplate(preset) {
6359
+ return Boolean(preset.isViewTemplate) || Boolean(preset.isWorkspaceTemplate);
6360
+ };
6336
6361
  var scopeFiltered = isAllSelected ? searchFiltered.filter(function (preset) {
6362
+ if (isTemplate(preset)) {
6363
+ return true;
6364
+ }
6337
6365
  if (isAdmin) {
6338
6366
  // Admin users: Only system + shared, never personal
6339
6367
  return preset.scope === 'system' || preset.scope === 'plugin' || preset.scope === 'user' && preset.is_shared;
@@ -6341,7 +6369,10 @@ var filterAndSortPresets = function filterAndSortPresets(presets, selectedFilter
6341
6369
  // Regular users: Keep everything
6342
6370
  return true;
6343
6371
  }) : searchFiltered.filter(function (preset) {
6344
- return selectedIds.includes(PresetFilterType.system) && preset.scope === 'system' || selectedIds.includes(PresetFilterType.personal) && preset.scope === 'user' && preset.username === username || selectedIds.includes(PresetFilterType.shared) && preset.scope === 'user' && preset.is_shared && (isAdmin || preset.username !== username) || selectedIds.includes(PresetFilterType.plugin) && preset.scope === 'plugin';
6372
+ if (isTemplate(preset)) {
6373
+ return selectedIds.includes(PresetFilterType.templates);
6374
+ }
6375
+ return selectedIds.includes(PresetFilterType.favourites) && isFavourite(preset) || selectedIds.includes(PresetFilterType.system) && preset.scope === 'system' || selectedIds.includes(PresetFilterType.personal) && preset.scope === 'user' && preset.username === username || selectedIds.includes(PresetFilterType.shared) && preset.scope === 'user' && preset.is_shared && (isAdmin || preset.username !== username) || selectedIds.includes(PresetFilterType.plugin) && preset.scope === 'plugin';
6345
6376
  });
6346
6377
  var labelFiltered = function () {
6347
6378
  if (!labelFilters) {
@@ -6375,27 +6406,31 @@ var filterAndSortPresets = function filterAndSortPresets(presets, selectedFilter
6375
6406
  };
6376
6407
  return scopeFiltered.filter(matchesLabelFilters);
6377
6408
  }();
6378
- var systemPresets = labelFiltered.filter(function (preset) {
6409
+ var templatePresets = labelFiltered.filter(isTemplate);
6410
+ var storedPresets = labelFiltered.filter(function (preset) {
6411
+ return !isTemplate(preset);
6412
+ });
6413
+ var systemPresets = storedPresets.filter(function (preset) {
6379
6414
  return preset.scope === 'system';
6380
6415
  }).sort(function (presetA, presetB) {
6381
6416
  return presetA.title.localeCompare(presetB.title);
6382
6417
  });
6383
- var personalPresets = labelFiltered.filter(function (preset) {
6418
+ var personalPresets = storedPresets.filter(function (preset) {
6384
6419
  return preset.scope === 'user' && preset.username === username;
6385
6420
  }).sort(function (presetA, presetB) {
6386
6421
  return presetA.title.localeCompare(presetB.title);
6387
6422
  });
6388
- var sharedPresets = labelFiltered.filter(function (preset) {
6423
+ var sharedPresets = storedPresets.filter(function (preset) {
6389
6424
  return preset.scope === 'user' && preset.username !== username;
6390
6425
  }).sort(function (presetA, presetB) {
6391
6426
  return presetA.title.localeCompare(presetB.title);
6392
6427
  });
6393
- var pluginPresets = labelFiltered.filter(function (preset) {
6428
+ var pluginPresets = storedPresets.filter(function (preset) {
6394
6429
  return preset.scope === 'plugin';
6395
6430
  }).sort(function (presetA, presetB) {
6396
6431
  return presetA.title.localeCompare(presetB.title);
6397
6432
  });
6398
- var filteredByQuery = [].concat(systemPresets, personalPresets, sharedPresets, pluginPresets).filter(function (preset) {
6433
+ var filteredByQuery = [].concat(templatePresets, systemPresets, personalPresets, sharedPresets, pluginPresets).filter(function (preset) {
6399
6434
  if (!searchQuery) {
6400
6435
  return true;
6401
6436
  }
@@ -6409,7 +6444,9 @@ var filterAndSortPresets = function filterAndSortPresets(presets, selectedFilter
6409
6444
  });
6410
6445
  });
6411
6446
  });
6412
- return filteredByQuery;
6447
+ return filteredByQuery.slice().sort(function (first, second) {
6448
+ return Number(isFavourite(second)) - Number(isFavourite(first));
6449
+ });
6413
6450
  };
6414
6451
 
6415
6452
  var VIEW_TYPE_KEY = 'viewType';
@@ -7456,8 +7493,10 @@ var WorkspaceSelectListRow = function WorkspaceSelectListRow(_ref) {
7456
7493
  event.stopPropagation();
7457
7494
  onOpenPresetInfo == null || onOpenPresetInfo(workspacePreset);
7458
7495
  };
7459
- var canDelete = (workspacePreset.scope === SystemScope.user && (auth == null ? void 0 : auth.username) === workspacePreset.username || isAdmin) && Boolean(workspacePreset.id);
7460
- var isNewPreset = !workspacePreset.id || workspacePreset.id === LOCAL_SOUNDINGS_ID;
7496
+ var isViewTemplate = Boolean(workspacePreset.isViewTemplate);
7497
+ var isTemplate = isViewTemplate || Boolean(workspacePreset.isWorkspaceTemplate);
7498
+ var canDelete = (workspacePreset.scope === SystemScope.user && (auth == null ? void 0 : auth.username) === workspacePreset.username || isAdmin) && Boolean(workspacePreset.id) && !isTemplate;
7499
+ var isNewPreset = !workspacePreset.id || workspacePreset.id === LOCAL_SOUNDINGS_ID || isTemplate;
7461
7500
  var menuItems = [{
7462
7501
  text: t('workspace-duplicate'),
7463
7502
  action: function action() {
@@ -7476,7 +7515,7 @@ var WorkspaceSelectListRow = function WorkspaceSelectListRow(_ref) {
7476
7515
  isDisabled: isNewPreset
7477
7516
  }];
7478
7517
  // Show "Edit" if it's your own user-scoped preset OR you're an admin
7479
- if (workspacePreset.scope === SystemScope.user && (auth == null ? void 0 : auth.username) === workspacePreset.username || isAdmin) {
7518
+ if (!isTemplate && (workspacePreset.scope === SystemScope.user && (auth == null ? void 0 : auth.username) === workspacePreset.username || isAdmin)) {
7480
7519
  menuItems.push({
7481
7520
  text: t('workspace-edit'),
7482
7521
  action: function action() {
@@ -7527,7 +7566,7 @@ var WorkspaceSelectListRow = function WorkspaceSelectListRow(_ref) {
7527
7566
  }
7528
7567
  return 'workspace-version';
7529
7568
  };
7530
- var showInfoIcon = !!workspacePreset.id && workspacePreset.id !== LOCAL_SOUNDINGS_ID;
7569
+ var showInfoIcon = !!workspacePreset.id && workspacePreset.id !== LOCAL_SOUNDINGS_ID && !isTemplate;
7531
7570
  return jsx(ListItem, {
7532
7571
  disablePadding: true,
7533
7572
  sx: {
@@ -7558,7 +7597,8 @@ var WorkspaceSelectListRow = function WorkspaceSelectListRow(_ref) {
7558
7597
  "aria-label": testIdPrefix,
7559
7598
  "data-testid": testIdPrefix + "-selectListRow",
7560
7599
  onClick: function onClick(event) {
7561
- if (event.ctrlKey || event.metaKey) {
7600
+ // A template has no workspace of its own to open in a new tab
7601
+ if ((event.ctrlKey || event.metaKey) && !isViewTemplate) {
7562
7602
  var url = getWorkspaceRouteUrl(workspacePreset.id);
7563
7603
  window.open(url, '_blank');
7564
7604
  } else {
@@ -7677,7 +7717,7 @@ var WorkspaceSelectListRow = function WorkspaceSelectListRow(_ref) {
7677
7717
  children: jsx(Info, {
7678
7718
  fontSize: "small"
7679
7719
  })
7680
- }), workspacePreset.scope !== 'plugin' && jsx(ToggleMenu, {
7720
+ }), workspacePreset.scope !== 'plugin' && !isViewTemplate && jsx(ToggleMenu, {
7681
7721
  buttonTestId: testIdPrefix + "-listOptionsButton",
7682
7722
  isDefaultOpen: isOptionsMenuOpen,
7683
7723
  menuItems: menuItems,
@@ -7771,7 +7811,7 @@ var WorkspaceSelectList = function WorkspaceSelectList(_ref2) {
7771
7811
  var _useWorkspaceTranslat = useWorkspaceTranslation(),
7772
7812
  t = _useWorkspaceTranslat.t;
7773
7813
  var items = React.useMemo(function () {
7774
- var newPresetsTruthy = newPresets && newPresets.length > 0 ? newPresets : [getEmptyWorkspaceListItem(t), getNewSoundingsWorkspaceListItem(t)];
7814
+ var newPresetsTruthy = newPresets != null ? newPresets : [];
7775
7815
  var favourites = workspacePresets.filter(function (preset) {
7776
7816
  return isFavourite == null ? void 0 : isFavourite(preset);
7777
7817
  });
@@ -7779,7 +7819,7 @@ var WorkspaceSelectList = function WorkspaceSelectList(_ref2) {
7779
7819
  return !(isFavourite != null && isFavourite(preset));
7780
7820
  });
7781
7821
  return [].concat(favourites, !hideNewWorkspace ? newPresetsTruthy : [], otherPresets);
7782
- }, [hideNewWorkspace, newPresets, workspacePresets, isFavourite, t]);
7822
+ }, [hideNewWorkspace, newPresets, workspacePresets, isFavourite]);
7783
7823
  return jsxs(Box, {
7784
7824
  "data-testid": testIdPrefix + "-selectList",
7785
7825
  sx: {
@@ -7834,9 +7874,6 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
7834
7874
  var _useWorkspaceTranslat = useWorkspaceTranslation(),
7835
7875
  t = _useWorkspaceTranslat.t;
7836
7876
  var favourites = useFavouritePresets('view');
7837
- var selectedFavouritesOnly = useSelector(function (state) {
7838
- return getFavouritesOnly$1(state, panelId);
7839
- });
7840
7877
  var dispatch = useDispatch();
7841
7878
  var queryClient = useQueryClient();
7842
7879
  var store = useStore();
@@ -7844,7 +7881,6 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
7844
7881
  currentRole = _useAuthenticationCon.currentRole,
7845
7882
  isLoggedIn = _useAuthenticationCon.isLoggedIn,
7846
7883
  auth = _useAuthenticationCon.auth;
7847
- var favouritesOnly = isLoggedIn && selectedFavouritesOnly;
7848
7884
  var username = (auth == null ? void 0 : auth.username) || '';
7849
7885
  var isAdmin = (currentRole == null ? void 0 : currentRole.name) === GEOWEB_ROLE_PRESETS_ADMIN.name;
7850
7886
  var scope = !isAdmin ? 'user' : 'system';
@@ -7913,13 +7949,12 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
7913
7949
  }
7914
7950
  return Object.values(viewPresetLabelFilters).flat().length;
7915
7951
  }, [viewPresetLabelFilters]);
7916
- var matchingPresets = React.useMemo(function () {
7952
+ var filteredPresets = React.useMemo(function () {
7917
7953
  if (viewPresets) {
7918
- return [].concat(filterAndSortPresets([].concat(viewPresets, pluginCatalogAsPresets), viewPresetListFilters, username, isAdmin, viewPresetLabelFilters != null ? viewPresetLabelFilters : undefined, viewPresetListSearchQuery));
7954
+ return [].concat(filterAndSortPresets([].concat(viewPresets, pluginCatalogAsPresets), viewPresetListFilters, username, isAdmin, viewPresetLabelFilters != null ? viewPresetLabelFilters : undefined, viewPresetListSearchQuery, favourites.isFavourite));
7919
7955
  }
7920
7956
  return [];
7921
- }, [viewPresets, viewPresetListFilters, username, isAdmin, viewPresetLabelFilters, viewPresetListSearchQuery, pluginCatalogAsPresets]);
7922
- var filteredPresets = filterAndSortFavouritePresets(matchingPresets, favourites.isFavourite, favouritesOnly);
7957
+ }, [viewPresets, viewPresetListFilters, username, isAdmin, viewPresetLabelFilters, viewPresetListSearchQuery, favourites.isFavourite, pluginCatalogAsPresets]);
7923
7958
  var labelsFormMethods = useForm({
7924
7959
  defaultValues: {
7925
7960
  labels: viewPresetLabelFilters
@@ -8199,9 +8234,10 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8199
8234
  id: id,
8200
8235
  isSelected: isSelected,
8201
8236
  panelId: panelId,
8202
- isAdmin: isAdmin
8237
+ isAdmin: isAdmin,
8238
+ isFavouritesEnabled: isLoggedIn
8203
8239
  }));
8204
- }, [dispatch, panelId, isAdmin]);
8240
+ }, [dispatch, panelId, isAdmin, isLoggedIn]);
8205
8241
  var setSelectAllFilterChip = React.useCallback(function () {
8206
8242
  dispatch(viewPresetActions.setSelectAllFilterChip({
8207
8243
  panelId: panelId
@@ -8222,7 +8258,9 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8222
8258
  panelId: panelId
8223
8259
  }));
8224
8260
  }, [dispatch, panelId]);
8225
- var isAllSelectedForFilters = viewPresetListFilters.every(function (filter) {
8261
+ var isAllSelectedForFilters = viewPresetListFilters.filter(function (filter) {
8262
+ return isLoggedIn || filter.id !== 'favourites';
8263
+ }).every(function (filter) {
8226
8264
  return filter.isSelected;
8227
8265
  });
8228
8266
  var showLabelFilterToggle = Boolean(onToggleLabelFilter);
@@ -8329,17 +8367,14 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8329
8367
  },
8330
8368
  children: jsx(Filter, {
8331
8369
  activeLabelFilterCount: activeLabelFilterCount,
8332
- filters: [].concat(viewPresetListFilters.map(function (filter) {
8370
+ filters: viewPresetListFilters.map(function (filter) {
8333
8371
  return Object.assign({}, filter, {
8334
- isSelected: !favouritesOnly && !isAllSelectedForFilters && filter.isSelected
8372
+ label: filter.id === 'favourites' ? t('workspace-favourites') : filter.label,
8373
+ isSelected: !isAllSelectedForFilters && filter.isSelected && (filter.id !== 'favourites' || isLoggedIn),
8374
+ isDisabled: filter.id === 'favourites' ? !isLoggedIn : filter.isDisabled
8335
8375
  });
8336
- }), [{
8337
- id: 'favourites',
8338
- label: t('workspace-favourites'),
8339
- isSelected: favouritesOnly,
8340
- isDisabled: !isLoggedIn
8341
- }]),
8342
- isAllSelected: isAllSelectedForFilters ? !favouritesOnly : false,
8376
+ }),
8377
+ isAllSelected: isAllSelectedForFilters,
8343
8378
  isLabelFilterOpen: isLabelFilterOpen,
8344
8379
  onClickFilterChip: onClickFilterChip,
8345
8380
  onSearch: onSearchFilter,
@@ -8379,7 +8414,7 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8379
8414
  children: [jsx(WorkspaceSelectList, {
8380
8415
  currentSelectedId: activeViewPresetId || undefined,
8381
8416
  favouritesDisabled: favourites.disabled,
8382
- hideNewWorkspace: shouldHideNewWorkspace || favouritesOnly,
8417
+ hideNewWorkspace: shouldHideNewWorkspace,
8383
8418
  infoOpenPresetId: infoPreset == null ? void 0 : infoPreset.id,
8384
8419
  isAdmin: isAdmin,
8385
8420
  isEditable: isLoggedIn,
@@ -8617,9 +8652,6 @@ var WorkspaceSelectListConnect = function WorkspaceSelectListConnect(_ref) {
8617
8652
  isLabelFilterOpen = _ref$isLabelFilterOpe === void 0 ? false : _ref$isLabelFilterOpe,
8618
8653
  onToggleLabelFilter = _ref.onToggleLabelFilter;
8619
8654
  var favourites = useFavouritePresets('workspace');
8620
- var selectedFavouritesOnly = useSelector(function (state) {
8621
- return getFavouritesOnly(state);
8622
- });
8623
8655
  var dispatch = useDispatch();
8624
8656
  var _useWorkspaceTranslat = useWorkspaceTranslation(),
8625
8657
  t = _useWorkspaceTranslat.t;
@@ -8627,7 +8659,6 @@ var WorkspaceSelectListConnect = function WorkspaceSelectListConnect(_ref) {
8627
8659
  currentRole = _useAuthenticationCon.currentRole,
8628
8660
  isLoggedIn = _useAuthenticationCon.isLoggedIn,
8629
8661
  auth = _useAuthenticationCon.auth;
8630
- var favouritesOnly = isLoggedIn && selectedFavouritesOnly;
8631
8662
  var username = (auth == null ? void 0 : auth.username) || '';
8632
8663
  var isAdmin = (currentRole == null ? void 0 : currentRole.name) === GEOWEB_ROLE_PRESETS_ADMIN.name;
8633
8664
  var scope = !isAdmin ? 'user' : 'system';
@@ -8658,10 +8689,9 @@ var WorkspaceSelectListConnect = function WorkspaceSelectListConnect(_ref) {
8658
8689
  }
8659
8690
  return Object.values(labelFilters).flat().length;
8660
8691
  }, [labelFilters]);
8661
- var matchingPresets = React.useMemo(function () {
8662
- return filterAndSortPresets(workspacePresets, selectedFilters, username, isAdmin, labelFilters != null ? labelFilters : undefined, workspaceSearchQuery);
8663
- }, [workspacePresets, selectedFilters, username, isAdmin, labelFilters, workspaceSearchQuery]);
8664
- var filteredPresets = filterAndSortFavouritePresets(matchingPresets, favourites.isFavourite, favouritesOnly);
8692
+ var filteredPresets = React.useMemo(function () {
8693
+ return filterAndSortPresets(workspacePresets, selectedFilters, username, isAdmin, labelFilters != null ? labelFilters : undefined, workspaceSearchQuery, favourites.isFavourite);
8694
+ }, [workspacePresets, selectedFilters, username, isAdmin, labelFilters, workspaceSearchQuery, favourites.isFavourite]);
8665
8695
  var infoPanelAnchorRef = React.useRef(null);
8666
8696
  var _React$useState = React.useState(),
8667
8697
  infoPreset = _React$useState[0],
@@ -8707,9 +8737,10 @@ var WorkspaceSelectListConnect = function WorkspaceSelectListConnect(_ref) {
8707
8737
  dispatch(workspaceListActions.toggleSelectFilterChip({
8708
8738
  id: id,
8709
8739
  isSelected: isSelected,
8710
- isAdmin: isAdmin
8740
+ isAdmin: isAdmin,
8741
+ isFavouritesEnabled: isLoggedIn
8711
8742
  }));
8712
- }, [dispatch, isAdmin]);
8743
+ }, [dispatch, isAdmin, isLoggedIn]);
8713
8744
  var setSelectAllFilterChip = React.useCallback(function () {
8714
8745
  dispatch(workspaceListActions.setSelectAllFilterChip());
8715
8746
  }, [dispatch]);
@@ -8965,7 +8996,9 @@ var WorkspaceSelectListConnect = function WorkspaceSelectListConnect(_ref) {
8965
8996
  return _ref2.apply(this, arguments);
8966
8997
  };
8967
8998
  }();
8968
- var isAllSelected = workspaceListFilters.length > 0 && workspaceListFilters.every(function (filter) {
8999
+ var isAllSelected = workspaceListFilters.length > 0 && workspaceListFilters.filter(function (filter) {
9000
+ return isLoggedIn || filter.id !== 'favourites';
9001
+ }).every(function (filter) {
8969
9002
  return filter.isSelected;
8970
9003
  });
8971
9004
  var shouldHideNewWorkspace = !isAllSelected || workspaceSearchQuery.length > 0 || hasActiveLabelFilters;
@@ -9076,17 +9109,14 @@ var WorkspaceSelectListConnect = function WorkspaceSelectListConnect(_ref) {
9076
9109
  },
9077
9110
  children: jsx(Filter, {
9078
9111
  activeLabelFilterCount: activeLabelFilterCount,
9079
- filters: [].concat(workspaceListFilters.map(function (filter) {
9112
+ filters: workspaceListFilters.map(function (filter) {
9080
9113
  return Object.assign({}, filter, {
9081
- isSelected: !favouritesOnly && !isAllSelected && filter.isSelected
9114
+ label: filter.id === 'favourites' ? t('workspace-favourites') : filter.label,
9115
+ isSelected: !isAllSelected && filter.isSelected && (filter.id !== 'favourites' || isLoggedIn),
9116
+ isDisabled: filter.id === 'favourites' ? !isLoggedIn : filter.isDisabled
9082
9117
  });
9083
- }), [{
9084
- id: 'favourites',
9085
- label: t('workspace-favourites'),
9086
- isSelected: favouritesOnly,
9087
- isDisabled: !isLoggedIn
9088
- }]),
9089
- isAllSelected: isAllSelected ? !favouritesOnly : false,
9118
+ }),
9119
+ isAllSelected: isAllSelected,
9090
9120
  isLabelFilterOpen: isLabelFilterOpen,
9091
9121
  onClickFilterChip: onClickFilterChip,
9092
9122
  onSearch: searchFilter,
@@ -9118,11 +9148,12 @@ var WorkspaceSelectListConnect = function WorkspaceSelectListConnect(_ref) {
9118
9148
  children: [jsx(WorkspaceSelectList, {
9119
9149
  currentSelectedId: currentView.id || '',
9120
9150
  favouritesDisabled: favourites.disabled,
9121
- hideNewWorkspace: shouldHideNewWorkspace || favouritesOnly,
9151
+ hideNewWorkspace: shouldHideNewWorkspace,
9122
9152
  infoOpenPresetId: infoPreset == null ? void 0 : infoPreset.id,
9123
9153
  isAdmin: isAdmin,
9124
9154
  isEditable: isLoggedIn,
9125
9155
  isFavourite: favourites.isFavourite,
9156
+ newPresets: [getEmptyWorkspaceListItem(t), getNewSoundingsWorkspaceListItem(t)],
9126
9157
  onClickWorkspacePreset: onClickWorkspacePreset,
9127
9158
  onClickWorkspacePresetOption: onClickWorkspacePresetOption,
9128
9159
  onOpenPresetInfo: onOpenPresetInfo,
@@ -9926,7 +9957,9 @@ var WorkspaceTileConnect = /*#__PURE__*/React.memo(function (_ref) {
9926
9957
  var _sessionStorageProvid;
9927
9958
  var hasPluginsConfigured = !!((_sessionStorageProvid = sessionStorageProvider.getConfig()) != null && _sessionStorageProvid.GW_PLUGIN_BACKEND_URL);
9928
9959
  if (hasPluginsConfigured) {
9929
- return [].concat(defaultViewPresetsFilters, [pluginViewPresetsFilter]);
9960
+ return defaultViewPresetsFilters.flatMap(function (filter) {
9961
+ return filter.id === 'favourites' ? [pluginViewPresetsFilter, filter] : [filter];
9962
+ });
9930
9963
  }
9931
9964
  return defaultViewPresetsFilters;
9932
9965
  }, []);
@@ -10075,6 +10108,8 @@ var WorkspaceTileConnect = /*#__PURE__*/React.memo(function (_ref) {
10075
10108
  },
10076
10109
  isOpen: isViewPresetDialogOpen,
10077
10110
  panelId: mosaicNodeId
10111
+ }), jsx(OverlayPluginWindows, {
10112
+ panelId: mosaicNodeId
10078
10113
  })]
10079
10114
  });
10080
10115
  }, isEqual);
@@ -12001,6 +12036,106 @@ var WorkspaceDetail = function WorkspaceDetail(_ref) {
12001
12036
  });
12002
12037
  };
12003
12038
 
12039
+ var workspacePresets$1 = [
12040
+ {
12041
+ titleKey: "workspace-new",
12042
+ title: "New workspace",
12043
+ scope: "system",
12044
+ abstract: "",
12045
+ viewType: "singleWindow",
12046
+ mosaicNode: "1_screen",
12047
+ views: {
12048
+ allIds: [
12049
+ "1_screen"
12050
+ ],
12051
+ byId: {
12052
+ "1_screen": {
12053
+ titleKey: "workspace-mappreset-new",
12054
+ title: "New map preset",
12055
+ componentType: "Map",
12056
+ initialProps: {
12057
+ mapPreset: {
12058
+ shouldShowLayerManager: true,
12059
+ dockedLayerManagerSize: "sizeSmall"
12060
+ },
12061
+ syncGroupsIds: [
12062
+ ]
12063
+ }
12064
+ }
12065
+ }
12066
+ }
12067
+ }
12068
+ ];
12069
+ var viewPresets = [
12070
+ {
12071
+ id: "template-map",
12072
+ titleKey: "workspace-template-map",
12073
+ title: "New map preset",
12074
+ componentType: "Map",
12075
+ initialProps: {
12076
+ mapPreset: {
12077
+ shouldShowLayerManager: true,
12078
+ dockedLayerManagerSize: "sizeSmall"
12079
+ },
12080
+ syncGroupsIds: [
12081
+ ]
12082
+ }
12083
+ },
12084
+ {
12085
+ id: "template-timeseries",
12086
+ titleKey: "workspace-template-timeseries",
12087
+ title: "New timeseries preset",
12088
+ componentType: "TimeSeries",
12089
+ initialProps: {
12090
+ plotPreset: {
12091
+ mapId: "",
12092
+ plots: [
12093
+ ],
12094
+ parameters: [
12095
+ ]
12096
+ },
12097
+ services: [
12098
+ ],
12099
+ syncGroupsIds: [
12100
+ ]
12101
+ }
12102
+ },
12103
+ {
12104
+ id: "template-soundings",
12105
+ titleKey: "workspace-template-soundings",
12106
+ title: "New sounding preset",
12107
+ componentType: "Soundings",
12108
+ initialProps: {
12109
+ selectedSources: {
12110
+ },
12111
+ selectedLocations: {
12112
+ },
12113
+ syncGroupsIds: [
12114
+ ]
12115
+ }
12116
+ },
12117
+ {
12118
+ id: "template-warninglist",
12119
+ titleKey: "workspace-template-warninglist",
12120
+ title: "New warninglist preset",
12121
+ componentType: "WarningList",
12122
+ initialProps: {
12123
+ }
12124
+ },
12125
+ {
12126
+ id: "template-timeline",
12127
+ titleKey: "workspace-template-timeline",
12128
+ title: "New timeline preset",
12129
+ componentType: "WarningsTimeline",
12130
+ initialProps: {
12131
+ }
12132
+ }
12133
+ ];
12134
+ var templatePresets = {
12135
+ workspacePresets: workspacePresets$1,
12136
+ viewPresets: viewPresets
12137
+ };
12138
+
12004
12139
  var workspacePresets = [
12005
12140
  {
12006
12141
  id: "screenConfigRadarTemp",
@@ -13297,6 +13432,7 @@ var createUserPreferencesEndpoints = function createUserPreferencesEndpoints() {
13297
13432
  };
13298
13433
 
13299
13434
  var defaultWorkspacePresets = workspacePresets;
13435
+ var templatePresetsFixture = templatePresets;
13300
13436
  // Transforms full workspace presets to list items
13301
13437
  var workspacePresetList = defaultWorkspacePresets.map(function (preset) {
13302
13438
  var _preset$abstract;
@@ -13310,7 +13446,9 @@ var workspacePresetList = defaultWorkspacePresets.map(function (preset) {
13310
13446
  username: preset.username
13311
13447
  };
13312
13448
  });
13313
- var workspaceEndpoints = [].concat(createUserPreferencesEndpoints(), [http["delete"](/^.*\/workspacepreset\/(.*)$/, /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
13449
+ var workspaceEndpoints = [].concat(createUserPreferencesEndpoints(), [http.get(/\/assets\/templatePresets\.json$/, function () {
13450
+ return HttpResponse.json(templatePresetsFixture);
13451
+ }), http["delete"](/^.*\/workspacepreset\/(.*)$/, /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
13314
13452
  return _regenerator().w(function (_context) {
13315
13453
  while (1) switch (_context.n) {
13316
13454
  case 0:
@@ -13396,4 +13534,4 @@ var workspaceEndpoints = [].concat(createUserPreferencesEndpoints(), [http["dele
13396
13534
  }, _callee6);
13397
13535
  })))]);
13398
13536
 
13399
- export { ALL_COMPONENT_TYPES, AVIATION_COMPONENT_TYPES, CAP_COMPONENT_TYPES, ComponentsLookUpWrapper, DemoWrapper, PresetAction, SUPPORTED_COMPONENT_TYPES, SUPPORTED_TIMESERIES_COMPONENT_TYPES, ViewPresetErrorComponent, ViewPresetErrorType, WARNING_LIST_COMPONENT_TYPES, WORKSPACE_NAMESPACE, WorkspaceDetail, WorkspaceErrorType, WorkspaceI18nProvider, WorkspacePresetAction, WorkspaceStoreWrapper, WorkspaceThemeProvider, WorkspaceTopBar, WorkspaceViewConnect, WorkspaceWrapperProviderWithStore, createBalancedMosaicNode, createCustomEmptyMapWorkspace, defaultAuthConfig, defaultViewPresetsFilters, getEmptyMapWorkspace, getWorkspaceRouteUrl, selectors$1 as selectors, viewPresetActions, viewPresetsListener, viewPresetsReducer, workspaceActions, workspaceEndpoints, workspaceListActions, workspaceListListener, workspaceListReducer, workspaceListener, workspaceMiddlewares, workspaceReducer, workspaceReducersMap, routes as workspaceRoutes, workspaceTranslations };
13537
+ export { ALL_COMPONENT_TYPES, AVIATION_COMPONENT_TYPES, CAP_COMPONENT_TYPES, ComponentsLookUpWrapper, DemoWrapper, PresetAction, SUPPORTED_COMPONENT_TYPES, SUPPORTED_TIMESERIES_COMPONENT_TYPES, ViewPresetErrorComponent, ViewPresetErrorType, WARNING_LIST_COMPONENT_TYPES, WORKSPACE_NAMESPACE, WorkspaceDetail, WorkspaceErrorType, WorkspaceI18nProvider, WorkspacePresetAction, WorkspaceStoreWrapper, WorkspaceThemeProvider, WorkspaceTopBar, WorkspaceViewConnect, WorkspaceWrapperProviderWithStore, createBalancedMosaicNode, createCustomEmptyMapWorkspace, defaultAuthConfig, defaultViewPresetsFilters, getEmptyMapWorkspace, getWorkspaceRouteUrl, selectors$1 as selectors, templatePresetsFixture, viewPresetActions, viewPresetsListener, viewPresetsReducer, workspaceActions, workspaceEndpoints, workspaceListActions, workspaceListListener, workspaceListReducer, workspaceListener, workspaceMiddlewares, workspaceReducer, workspaceReducersMap, routes as workspaceRoutes, workspaceTranslations };