@opengeoweb/workspace 20.0.1-nightly-20261015 → 20.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1819,6 +1819,11 @@ var createCustomEmptyMapWorkspace = function createCustomEmptyMapWorkspace(empty
1819
1819
  });
1820
1820
  return emptyWorkspacePreset;
1821
1821
  };
1822
+ var getTemplatePresetTitle = function getTemplatePresetTitle(preset, t) {
1823
+ return preset.titleKey && t ? t(preset.titleKey, {
1824
+ defaultValue: preset.title
1825
+ }) : preset.title;
1826
+ };
1822
1827
  var LOCAL_SOUNDINGS_ID = 'newSoundingsWorkspace';
1823
1828
  var getNewSoundingsWorkspaceListItem = function getNewSoundingsWorkspaceListItem(t) {
1824
1829
  return {
@@ -1900,7 +1905,7 @@ var togglePresetFilter = function togglePresetFilter(filters, id, isSelected, is
1900
1905
  if (filter.id === PresetFilterType.favourites) {
1901
1906
  return isFavouritesEnabled;
1902
1907
  }
1903
- return !isAdmin || filter.id === 'system' || filter.id === 'shared';
1908
+ return !isAdmin || filter.id === PresetFilterType.system || filter.id === PresetFilterType.shared || filter.id === PresetFilterType.templates;
1904
1909
  });
1905
1910
  var allSelected = availableFilters.every(function (filter) {
1906
1911
  return filter.isSelected;
@@ -2095,7 +2100,13 @@ var defaultViewPresetsFilters = [{
2095
2100
  id: PresetFilterType.shared,
2096
2101
  isSelected: true,
2097
2102
  isDisabled: false
2103
+ }, {
2104
+ label: 'shared-filter-template-presets',
2105
+ id: PresetFilterType.templates,
2106
+ isSelected: true,
2107
+ isDisabled: false
2098
2108
  }, favouriteFilterState];
2109
+ var ADMIN_VIEW_PRESET_FILTER_IDS = [PresetFilterType.system, PresetFilterType.shared, PresetFilterType.templates, PresetFilterType.favourites];
2099
2110
  var pluginViewPresetsFilter = {
2100
2111
  label: 'shared-filter-plugin-view-presets',
2101
2112
  id: PresetFilterType.plugin,
@@ -2227,6 +2238,17 @@ var slice$1 = createSlice({
2227
2238
  viewPresetsAdapter.setOne(draft, entity);
2228
2239
  }
2229
2240
  },
2241
+ // the view itself is replaced in viewPresets/listener
2242
+ selectViewTemplate: function selectViewTemplate(draft, action) {
2243
+ var panelId = action.payload.panelId;
2244
+ var entity = draft.entities[panelId];
2245
+ if (entity) {
2246
+ entity.activeViewPresetId = '';
2247
+ entity.error = undefined;
2248
+ entity.isViewPresetListDialogOpen = false;
2249
+ viewPresetsAdapter.setOne(draft, entity);
2250
+ }
2251
+ },
2230
2252
  selectViewPlugin: function selectViewPlugin(draft, action) {
2231
2253
  var _action$payload8 = action.payload,
2232
2254
  panelId = _action$payload8.panelId,
@@ -2941,6 +2963,51 @@ var emptyViewPreset = function emptyViewPreset(componentType) {
2941
2963
  initialProps: initialPropsByType[actualComponentType]
2942
2964
  };
2943
2965
  };
2966
+ var findViewTemplatePreset = function findViewTemplatePreset(templates, presetId) {
2967
+ return presetId ? (templates != null ? templates : []).find(function (template) {
2968
+ return template.id === presetId;
2969
+ }) : undefined;
2970
+ };
2971
+ var findViewTemplatePresetForComponentType = function findViewTemplatePresetForComponentType(templates, componentType) {
2972
+ return componentType ? (templates != null ? templates : []).find(function (template) {
2973
+ return template.componentType === componentType;
2974
+ }) : undefined;
2975
+ };
2976
+ var toTranslatedViewTemplatePreset = function toTranslatedViewTemplatePreset(template, t) {
2977
+ return Object.assign({}, template, {
2978
+ title: getTemplatePresetTitle(template, t),
2979
+ titleKey: undefined
2980
+ });
2981
+ };
2982
+ var toViewPresetFromTemplate = function toViewPresetFromTemplate(template, t) {
2983
+ var _template$initialProp;
2984
+ var componentType = template.componentType;
2985
+ var emptyPreset = emptyViewPreset(componentType);
2986
+ return Object.assign({}, emptyPreset, {
2987
+ title: getTemplatePresetTitle(template, t),
2988
+ "abstract": template["abstract"],
2989
+ description: template.description,
2990
+ initialProps: (_template$initialProp = template.initialProps) != null ? _template$initialProp : emptyPreset.initialProps
2991
+ });
2992
+ };
2993
+ var toViewTemplateListItem = function toViewTemplateListItem(template, t) {
2994
+ var _template$abstract;
2995
+ return {
2996
+ id: template.id,
2997
+ title: getTemplatePresetTitle(template, t),
2998
+ date: '',
2999
+ scope: 'system',
3000
+ "abstract": (_template$abstract = template["abstract"]) != null ? _template$abstract : '',
3001
+ description: template.description,
3002
+ labels: template.labels,
3003
+ isViewTemplate: true
3004
+ };
3005
+ };
3006
+ var toViewTemplateListItems = function toViewTemplateListItems(templates, t) {
3007
+ return (templates != null ? templates : []).map(function (template) {
3008
+ return toViewTemplateListItem(template, t);
3009
+ });
3010
+ };
2944
3011
 
2945
3012
  /* *
2946
3013
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -3290,9 +3357,9 @@ var getViewPresetListFiltersForView = createSelector(getViewPresetById, function
3290
3357
  }, function (viewPreset, _scope, isAdmin) {
3291
3358
  var filters = (viewPreset == null ? void 0 : viewPreset.filters) || [];
3292
3359
  if (isAdmin) {
3293
- // Admin users: Only system and shared filters
3360
+ // Admin users: Only system, shared, template and favourite filters
3294
3361
  return filters.filter(function (filter) {
3295
- return filter.id === 'system' || filter.id === 'shared' || filter.id === 'favourites';
3362
+ return ADMIN_VIEW_PRESET_FILTER_IDS.includes(filter.id);
3296
3363
  }).map(function (filter) {
3297
3364
  return Object.assign({}, filter, {
3298
3365
  isDisabled: false
@@ -4857,17 +4924,62 @@ viewPresetsListener.startListening({
4857
4924
  return effect;
4858
4925
  }()
4859
4926
  });
4860
- // select view preset
4861
4927
  viewPresetsListener.startListening({
4862
- actionCreator: viewPresetActions.selectViewPreset,
4928
+ actionCreator: viewPresetActions.selectViewTemplate,
4863
4929
  effect: function () {
4864
4930
  var _effect2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(_ref4, listenerApi) {
4865
- var payload, panelId, _payload$viewPresetId, viewPresetId, isMapAnimating;
4931
+ var payload, panelId, template, isMapAnimating, viewPreset;
4866
4932
  return _regenerator().w(function (_context3) {
4867
4933
  while (1) switch (_context3.n) {
4868
4934
  case 0:
4869
4935
  payload = _ref4.payload;
4870
4936
  listenerApi.cancelActiveListeners();
4937
+ panelId = payload.panelId, template = payload.template;
4938
+ isMapAnimating = mapSelectors.isAnimating(listenerApi.getState(), panelId);
4939
+ if (isMapAnimating) {
4940
+ listenerApi.dispatch(mapActions.mapStopAnimation({
4941
+ mapId: panelId
4942
+ }));
4943
+ }
4944
+ viewPreset = toViewPresetFromTemplate(template); // A map keeps its state in the store, so it needs to be reset explicitly,
4945
+ // the other modules pick up the initialProps of the new view themselves
4946
+ if (viewPreset.componentType === 'Map') {
4947
+ listenerApi.dispatch(mapActions.setMapPreset({
4948
+ mapId: panelId,
4949
+ initialProps: viewPreset.initialProps
4950
+ }));
4951
+ }
4952
+ listenerApi.dispatch(workspaceActions.updateWorkspaceView({
4953
+ mosaicNodeId: panelId,
4954
+ viewPreset: viewPreset
4955
+ }));
4956
+ listenerApi.dispatch(viewPresetActions.fetchedViewPreset({
4957
+ panelId: panelId,
4958
+ viewPresetId: '',
4959
+ viewPreset: viewPreset
4960
+ }));
4961
+ case 1:
4962
+ return _context3.a(2);
4963
+ }
4964
+ }, _callee3);
4965
+ }));
4966
+ function effect(_x5, _x6) {
4967
+ return _effect2.apply(this, arguments);
4968
+ }
4969
+ return effect;
4970
+ }()
4971
+ });
4972
+ // select view preset
4973
+ viewPresetsListener.startListening({
4974
+ actionCreator: viewPresetActions.selectViewPreset,
4975
+ effect: function () {
4976
+ var _effect3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(_ref5, listenerApi) {
4977
+ var payload, panelId, _payload$viewPresetId, viewPresetId, isMapAnimating;
4978
+ return _regenerator().w(function (_context4) {
4979
+ while (1) switch (_context4.n) {
4980
+ case 0:
4981
+ payload = _ref5.payload;
4982
+ listenerApi.cancelActiveListeners();
4871
4983
  panelId = payload.panelId, _payload$viewPresetId = payload.viewPresetId, viewPresetId = _payload$viewPresetId === void 0 ? '' : _payload$viewPresetId;
4872
4984
  isMapAnimating = mapSelectors.isAnimating(listenerApi.getState(), panelId);
4873
4985
  if (isMapAnimating) {
@@ -4898,12 +5010,12 @@ viewPresetsListener.startListening({
4898
5010
  }));
4899
5011
  }
4900
5012
  case 1:
4901
- return _context3.a(2);
5013
+ return _context4.a(2);
4902
5014
  }
4903
- }, _callee3);
5015
+ }, _callee4);
4904
5016
  }));
4905
- function effect(_x5, _x6) {
4906
- return _effect2.apply(this, arguments);
5017
+ function effect(_x7, _x8) {
5018
+ return _effect3.apply(this, arguments);
4907
5019
  }
4908
5020
  return effect;
4909
5021
  }()
@@ -4912,19 +5024,19 @@ viewPresetsListener.startListening({
4912
5024
  viewPresetsListener.startListening({
4913
5025
  actionCreator: viewPresetActions.onSuccessViewPresetAction,
4914
5026
  effect: function () {
4915
- var _effect3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(_ref5, listenerApi) {
5027
+ var _effect4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(_ref6, listenerApi) {
4916
5028
  var payload, action, viewPresetId, title, panelId, is_shared, activeMapPresetId, hasChanges;
4917
- return _regenerator().w(function (_context4) {
4918
- while (1) switch (_context4.n) {
5029
+ return _regenerator().w(function (_context5) {
5030
+ while (1) switch (_context5.n) {
4919
5031
  case 0:
4920
- payload = _ref5.payload;
5032
+ payload = _ref6.payload;
4921
5033
  listenerApi.cancelActiveListeners();
4922
5034
  action = payload.action, viewPresetId = payload.viewPresetId, title = payload.title, panelId = payload.panelId; // eslint-disable-next-line @typescript-eslint/naming-convention
4923
5035
  is_shared = 'is_shared' in payload ? payload.is_shared : undefined;
4924
- _context4.n = 1;
5036
+ _context5.n = 1;
4925
5037
  return getQueryClient().invalidateQueries(viewpresetQueryOptions.getViewPreset(viewPresetId));
4926
5038
  case 1:
4927
- _context4.n = 2;
5039
+ _context5.n = 2;
4928
5040
  return getQueryClient().invalidateQueries({
4929
5041
  queryKey: viewpresetQueryOptions.keys.lists()
4930
5042
  });
@@ -4956,12 +5068,12 @@ viewPresetsListener.startListening({
4956
5068
  // TODO: use error handling of mapPreset https://gitlab.com/opengeoweb/opengeoweb/-/issues/3043
4957
5069
  }
4958
5070
  case 3:
4959
- return _context4.a(2);
5071
+ return _context5.a(2);
4960
5072
  }
4961
- }, _callee4);
5073
+ }, _callee5);
4962
5074
  }));
4963
- function effect(_x7, _x8) {
4964
- return _effect3.apply(this, arguments);
5075
+ function effect(_x9, _x0) {
5076
+ return _effect4.apply(this, arguments);
4965
5077
  }
4966
5078
  return effect;
4967
5079
  }()
@@ -6015,6 +6127,13 @@ var useFavouritePresets = function useFavouritePresets(type) {
6015
6127
  };
6016
6128
  };
6017
6129
 
6130
+ var useViewTemplatePresets = function useViewTemplatePresets() {
6131
+ return useQuery(Object.assign({}, workspaceQueryOptions.getTemplatePresets(), {
6132
+ select: function select(response) {
6133
+ return response.viewPresets;
6134
+ }
6135
+ }));
6136
+ };
6018
6137
  var useDeleteViewPreset = function useDeleteViewPreset() {
6019
6138
  var _useAuthenticationCon = useAuthenticationContext(),
6020
6139
  auth = _useAuthenticationCon.auth;
@@ -7865,6 +7984,7 @@ var WorkspaceSelectList = function WorkspaceSelectList(_ref2) {
7865
7984
  };
7866
7985
 
7867
7986
  var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
7987
+ var _findViewTemplatePres, _ref8;
7868
7988
  var panelId = _ref.panelId,
7869
7989
  _ref$isLabelFilterOpe = _ref.isLabelFilterOpen,
7870
7990
  isLabelFilterOpen = _ref$isLabelFilterOpe === void 0 ? false : _ref$isLabelFilterOpe,
@@ -7926,6 +8046,11 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
7926
8046
  var _useViewPresets = useViewPresets(),
7927
8047
  viewPresets = _useViewPresets.data,
7928
8048
  isViewPresetsListFetching = _useViewPresets.isFetching;
8049
+ var _useViewTemplatePrese = useViewTemplatePresets(),
8050
+ viewTemplatePresets = _useViewTemplatePrese.data;
8051
+ var templateListItems = React.useMemo(function () {
8052
+ return toViewTemplateListItems(viewTemplatePresets, t);
8053
+ }, [viewTemplatePresets, t]);
7929
8054
  var viewPresetListFilters = useSelector(function (store) {
7930
8055
  return getViewPresetListFiltersForView(store, panelId, scope, isAdmin);
7931
8056
  });
@@ -7950,11 +8075,8 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
7950
8075
  return Object.values(viewPresetLabelFilters).flat().length;
7951
8076
  }, [viewPresetLabelFilters]);
7952
8077
  var filteredPresets = React.useMemo(function () {
7953
- if (viewPresets) {
7954
- return [].concat(filterAndSortPresets([].concat(viewPresets, pluginCatalogAsPresets), viewPresetListFilters, username, isAdmin, viewPresetLabelFilters != null ? viewPresetLabelFilters : undefined, viewPresetListSearchQuery, favourites.isFavourite));
7955
- }
7956
- return [];
7957
- }, [viewPresets, viewPresetListFilters, username, isAdmin, viewPresetLabelFilters, viewPresetListSearchQuery, favourites.isFavourite, pluginCatalogAsPresets]);
8078
+ return filterAndSortPresets([].concat(viewPresets != null ? viewPresets : [], pluginCatalogAsPresets, templateListItems), viewPresetListFilters, username, isAdmin, viewPresetLabelFilters != null ? viewPresetLabelFilters : undefined, viewPresetListSearchQuery, favourites.isFavourite);
8079
+ }, [viewPresets, viewPresetListFilters, username, isAdmin, viewPresetLabelFilters, viewPresetListSearchQuery, favourites.isFavourite, pluginCatalogAsPresets, templateListItems]);
7958
8080
  var labelsFormMethods = useForm({
7959
8081
  defaultValues: {
7960
8082
  labels: viewPresetLabelFilters
@@ -8015,16 +8137,22 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8015
8137
  }, [dispatch, panelId, pluginCatalog]);
8016
8138
  var selectViewPreset = React.useCallback(/*#__PURE__*/function () {
8017
8139
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(viewPresetId) {
8018
- var plugin;
8140
+ var plugin, template;
8019
8141
  return _regenerator().w(function (_context) {
8020
8142
  while (1) switch (_context.n) {
8021
8143
  case 0:
8022
- plugin = pluginCatalog == null ? void 0 : pluginCatalog[viewPresetId]; // only on loading a plugin view from outside geoweb, not when selecting a regular preset
8144
+ plugin = pluginCatalog == null ? void 0 : pluginCatalog[viewPresetId];
8145
+ template = findViewTemplatePreset(viewTemplatePresets, viewPresetId); // only on loading a plugin view from outside geoweb, not when selecting a regular preset
8023
8146
  if (plugin) {
8024
8147
  dispatch(viewPresetActions.selectViewPlugin({
8025
8148
  panelId: panelId,
8026
8149
  pluginMetaData: plugin
8027
8150
  }));
8151
+ } else if (template) {
8152
+ dispatch(viewPresetActions.selectViewTemplate({
8153
+ panelId: panelId,
8154
+ template: toTranslatedViewTemplatePreset(template, t)
8155
+ }));
8028
8156
  } else {
8029
8157
  dispatch(viewPresetActions.selectViewPreset({
8030
8158
  panelId: panelId,
@@ -8039,7 +8167,7 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8039
8167
  return function (_x) {
8040
8168
  return _ref4.apply(this, arguments);
8041
8169
  };
8042
- }(), [dispatch, panelId, pluginCatalog]);
8170
+ }(), [dispatch, panelId, pluginCatalog, t, viewTemplatePresets]);
8043
8171
  var refreshViewPresets = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
8044
8172
  return _regenerator().w(function (_context2) {
8045
8173
  while (1) switch (_context2.n) {
@@ -8264,7 +8392,7 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8264
8392
  return filter.isSelected;
8265
8393
  });
8266
8394
  var showLabelFilterToggle = Boolean(onToggleLabelFilter);
8267
- var shouldHideNewWorkspace = !isAllSelectedForFilters || viewPresetListSearchQuery.length > 0 || hasActiveLabelFilters;
8395
+ var activeTemplateId = (_findViewTemplatePres = findViewTemplatePresetForComponentType(viewTemplatePresets, viewComponentType)) == null ? void 0 : _findViewTemplatePres.id;
8268
8396
  var closeInfo = React.useCallback(function () {
8269
8397
  setInfoPreset(undefined);
8270
8398
  }, []);
@@ -8412,16 +8540,12 @@ var ViewPresetMenuListConnect = function ViewPresetMenuListConnect(_ref) {
8412
8540
  minHeight: 0
8413
8541
  },
8414
8542
  children: [jsx(WorkspaceSelectList, {
8415
- currentSelectedId: activeViewPresetId || undefined,
8543
+ currentSelectedId: (_ref8 = activeViewPresetId || activeTemplateId) != null ? _ref8 : undefined,
8416
8544
  favouritesDisabled: favourites.disabled,
8417
- hideNewWorkspace: shouldHideNewWorkspace,
8418
8545
  infoOpenPresetId: infoPreset == null ? void 0 : infoPreset.id,
8419
8546
  isAdmin: isAdmin,
8420
8547
  isEditable: isLoggedIn,
8421
8548
  isFavourite: favourites.isFavourite,
8422
- newPresets: [Object.assign({}, getEmptyWorkspaceListItem(t), {
8423
- title: t('workspace-mappreset-new')
8424
- })],
8425
8549
  onClickWorkspacePreset: selectViewPreset,
8426
8550
  onClickWorkspacePresetOption: onClickViewPresetOption,
8427
8551
  onOpenPresetInfo: onOpenPresetInfo,
@@ -1,7 +1,8 @@
1
1
  import type { UseQueryResult } from '@tanstack/react-query';
2
2
  import type { UseMutationReturnType } from '@opengeoweb/api';
3
3
  import type { ViewPreset } from '../../store/viewPresets/types';
4
- import type { ViewPresetListItem } from '../../store/workspace/types';
4
+ import type { ViewPresetListItem, ViewTemplatePreset } from '../../store/workspace/types';
5
+ export declare const useViewTemplatePresets: () => UseQueryResult<ViewTemplatePreset[]>;
5
6
  export declare const useDeleteViewPreset: () => UseMutationReturnType<Headers | null, {
6
7
  id: string;
7
8
  }>;
@@ -2,8 +2,10 @@ import type { Draft, PayloadAction } from '@reduxjs/toolkit';
2
2
  import { SoundingsTypes } from '@opengeoweb/soundings';
3
3
  import { layerTypes, mapEnums } from '@opengeoweb/store';
4
4
  import { TimeSeriesTypes } from '@opengeoweb/time-series';
5
- import type { ClearViewPresetLabelFiltersPayload, ErrorViewPresetPayload, FetchedViewPresetPayload, FetchViewPresetsPayload, OnSuccesViewPresetActionPayload, OpenViewPresetDialogPayload, RegisterViewPresetPayload, SavedViewPresetPayload, SaveViewPresetPayload, SearchWorkspaceFilter, SelectPluginPayload, SelectViewPresetPayload, SetActiveViewPresetIdPayload, SetFilterChipsPayload, SetSelectAllFilterChip, SetViewPresetHasChangePayload, SetViewPresetInlineOverridePayload, SetViewPresetLabelFiltersPayload, ToggleSelectFilterChip, ToggleViewPresetListDialogPayload, UnregisterViewPresetPayload, ViewPresetEntity, ViewPresetsListFilter, ViewPresetState } from './types';
5
+ import type { ClearViewPresetLabelFiltersPayload, ErrorViewPresetPayload, FetchedViewPresetPayload, FetchViewPresetsPayload, OnSuccesViewPresetActionPayload, OpenViewPresetDialogPayload, RegisterViewPresetPayload, SavedViewPresetPayload, SaveViewPresetPayload, SearchWorkspaceFilter, SelectPluginPayload, SelectViewPresetPayload, SelectViewTemplatePayload, SetActiveViewPresetIdPayload, SetFilterChipsPayload, SetSelectAllFilterChip, SetViewPresetHasChangePayload, SetViewPresetInlineOverridePayload, SetViewPresetLabelFiltersPayload, ToggleSelectFilterChip, ToggleViewPresetListDialogPayload, UnregisterViewPresetPayload, ViewPresetEntity, ViewPresetsListFilter, ViewPresetState } from './types';
6
+ import { PresetFilterType } from '../workspaceList/types';
6
7
  export declare const defaultViewPresetsFilters: ViewPresetsListFilter[];
8
+ export declare const ADMIN_VIEW_PRESET_FILTER_IDS: (PresetFilterType | 'all')[];
7
9
  export declare const pluginViewPresetsFilter: ViewPresetsListFilter;
8
10
  export declare const viewPresetsAdapter: import("@reduxjs/toolkit").EntityAdapter<ViewPresetEntity, string>;
9
11
  export declare const initialState: ViewPresetState;
@@ -23,6 +25,7 @@ export declare const viewPresetsReducer: import("redux").Reducer<ViewPresetState
23
25
  setViewPresetInline: (draft: Draft<ViewPresetState>, action: PayloadAction<SetViewPresetInlineOverridePayload>) => void;
24
26
  setActiveViewPresetId: (draft: Draft<ViewPresetState>, action: PayloadAction<SetActiveViewPresetIdPayload>) => void;
25
27
  selectViewPreset: (draft: Draft<ViewPresetState>, action: PayloadAction<SelectViewPresetPayload>) => void;
28
+ selectViewTemplate: (draft: Draft<ViewPresetState>, action: PayloadAction<SelectViewTemplatePayload>) => void;
26
29
  selectViewPlugin: (draft: Draft<ViewPresetState>, action: PayloadAction<SelectPluginPayload>) => void;
27
30
  onSuccessViewPresetAction: (_draft: Draft<ViewPresetState>, _action: PayloadAction<OnSuccesViewPresetActionPayload>) => void;
28
31
  registerViewPreset: (draft: Draft<ViewPresetState>, action: PayloadAction<RegisterViewPresetPayload>) => void;
@@ -5,7 +5,7 @@ import type { SystemScope } from '@opengeoweb/shared';
5
5
  import type { SoundingsComponentType } from '@opengeoweb/soundings';
6
6
  import type { SupportedComponentTypes as SupportedTimeSeriesComponentTypes } from '@opengeoweb/time-series';
7
7
  import type { WarningListComponentType } from '@opengeoweb/warnings';
8
- import type { ViewPresetListItem, WorkspaceLabelsConfigResponse, WorkspacePresetLabels, WorkspaceViewPresetComponentsLookupType } from '../workspace/types';
8
+ import type { ViewTemplatePreset, ViewPresetListItem, WorkspaceLabelsConfigResponse, WorkspacePresetLabels, WorkspaceViewPresetComponentsLookupType } from '../workspace/types';
9
9
  import type { PresetFilterType } from '../workspaceList/types';
10
10
  export declare const AVIATION_COMPONENT_TYPES: readonly ["AirmetModule", "SigmetModule"];
11
11
  export type AviationComponentType = (typeof AVIATION_COMPONENT_TYPES)[number];
@@ -151,6 +151,9 @@ export interface SelectViewPresetPayload extends ViewPresetAction {
151
151
  export interface SelectPluginPayload extends ViewPresetAction {
152
152
  pluginMetaData?: PluginMeta;
153
153
  }
154
+ export interface SelectViewTemplatePayload extends ViewPresetAction {
155
+ template: ViewTemplatePreset;
156
+ }
154
157
  export interface RegisterViewPresetPayload extends ViewPresetAction {
155
158
  viewPresetId: string;
156
159
  filters?: ViewPresetsListFilter[];
@@ -1,5 +1,13 @@
1
+ import type { TFunction } from 'i18next';
1
2
  import { snackbarTypes } from '@opengeoweb/snackbar';
2
3
  import type { ViewPreset, WorkspaceSupportedComponentTypes } from './types';
3
4
  import { PresetAction } from './types';
5
+ import type { ViewTemplatePreset, ViewPresetListItem } from '../workspace/types';
4
6
  export declare const getSnackbarMessage: (action: PresetAction, title: string, is_shared?: boolean) => snackbarTypes.TranslatableMessage;
5
7
  export declare const emptyViewPreset: (componentType?: WorkspaceSupportedComponentTypes | undefined) => ViewPreset;
8
+ export declare const findViewTemplatePreset: (templates: ViewTemplatePreset[] | undefined, presetId?: string) => ViewTemplatePreset | undefined;
9
+ export declare const findViewTemplatePresetForComponentType: (templates: ViewTemplatePreset[] | undefined, componentType?: WorkspaceSupportedComponentTypes) => ViewTemplatePreset | undefined;
10
+ export declare const toTranslatedViewTemplatePreset: (template: ViewTemplatePreset, t?: TFunction) => ViewTemplatePreset;
11
+ export declare const toViewPresetFromTemplate: (template: ViewTemplatePreset, t?: TFunction) => ViewPreset;
12
+ export declare const toViewTemplateListItem: (template: ViewTemplatePreset, t?: TFunction) => ViewPresetListItem;
13
+ export declare const toViewTemplateListItems: (templates: ViewTemplatePreset[] | undefined, t?: TFunction) => ViewPresetListItem[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/workspace",
3
- "version": "20.0.1-nightly-20261015",
3
+ "version": "20.1.0",
4
4
  "description": "GeoWeb Workspace library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -21,33 +21,33 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "react-redux": "^9.2.0",
24
- "@opengeoweb/shared": "20.0.1-nightly-20261015",
25
- "@opengeoweb/store": "20.0.1-nightly-20261015",
26
- "@opengeoweb/api": "20.0.1-nightly-20261015",
24
+ "@opengeoweb/shared": "20.1.0",
25
+ "@opengeoweb/store": "20.1.0",
26
+ "@opengeoweb/api": "20.1.0",
27
27
  "react-hook-form": "^7.50.1",
28
- "@opengeoweb/theme": "20.0.1-nightly-20261015",
28
+ "@opengeoweb/theme": "20.1.0",
29
29
  "@reduxjs/toolkit": "^2.6.1",
30
- "@opengeoweb/snackbar": "20.0.1-nightly-20261015",
30
+ "@opengeoweb/snackbar": "20.1.0",
31
31
  "react-window": "^2.2.6",
32
32
  "lodash": "^4.18.1",
33
33
  "axios": "^1.20.0",
34
34
  "react-mosaic-component": "npm:react-mosaic-component-opengeoweb@^6.1.1-opengeoweb.1",
35
- "@opengeoweb/form-fields": "20.0.1-nightly-20261015",
36
- "@opengeoweb/time-series": "20.0.1-nightly-20261015",
37
- "@opengeoweb/authentication": "20.0.1-nightly-20261015",
38
- "@opengeoweb/plugins": "20.0.1-nightly-20261015",
39
- "@opengeoweb/core": "20.0.1-nightly-20261015",
40
- "@opengeoweb/taf": "20.0.1-nightly-20261015",
41
- "@opengeoweb/sigmet-airmet": "20.0.1-nightly-20261015",
42
- "@opengeoweb/warnings": "20.0.1-nightly-20261015",
43
- "@opengeoweb/space-weather": "20.0.1-nightly-20261015",
35
+ "@opengeoweb/form-fields": "20.1.0",
36
+ "@opengeoweb/time-series": "20.1.0",
37
+ "@opengeoweb/authentication": "20.1.0",
38
+ "@opengeoweb/plugins": "20.1.0",
39
+ "@opengeoweb/core": "20.1.0",
40
+ "@opengeoweb/taf": "20.1.0",
41
+ "@opengeoweb/sigmet-airmet": "20.1.0",
42
+ "@opengeoweb/warnings": "20.1.0",
43
+ "@opengeoweb/space-weather": "20.1.0",
44
44
  "i18next": "^25.0.1",
45
45
  "react-i18next": "^15.1.1",
46
46
  "@mui/material": "^9.0.1",
47
- "@opengeoweb/webmap-react": "20.0.1-nightly-20261015",
47
+ "@opengeoweb/webmap-react": "20.1.0",
48
48
  "@tanstack/react-query": "^5.85.5",
49
- "@opengeoweb/soundings": "20.0.1-nightly-20261015",
50
- "@opengeoweb/knmi-components": "20.0.1-nightly-20261015",
49
+ "@opengeoweb/soundings": "20.1.0",
50
+ "@opengeoweb/knmi-components": "20.1.0",
51
51
  "@mui/system": "^9.0.1"
52
52
  },
53
53
  "peerDependencies": {