diff --git a/web/client/actions/backgroundselector.js b/web/client/actions/backgroundselector.js index a08cdc8b57..ffa293353d 100644 --- a/web/client/actions/backgroundselector.js +++ b/web/client/actions/backgroundselector.js @@ -25,6 +25,7 @@ export const CLEAR_MODAL_PARAMETERS = 'BACKGROUND_SELECTOR:CLEAR_MODAL_PARAMETER export const CONFIRM_DELETE_BACKGROUND_MODAL = 'BACKGROUND_SELECTOR:CONFIRM_DELETE_BACKGROUND_MODAL'; export const ALLOW_BACKGROUNDS_DELETION = 'BACKGROUND_SELECTOR:ALLOW_BACKGROUNDS_DELETION'; export const SYNC_CURRENT_BACKGROUND_LAYER = 'BACKGROUND_SELECTOR:SYNC_CURRENT_BACKGROUND_LAYER'; +export const STASH_SELECTED_SERVICE = 'BACKGROUND_SELECTOR:STASH_SELECTED_SERVICE'; export function createBackgroundsList(backgrounds) { return { @@ -125,3 +126,20 @@ export function confirmDeleteBackgroundModal(show, layerTitle = null, layerId = layerId }; } + +/** + * Stashes the currently selected catalog service for later restoration. + * This is useful when closing the catalog and reopening it for background selection, + * allowing the user to easily return to their previous selection. + * + * @param {Object} service - The service object representing the currently selected catalog. + * @returns {Object} An action object with the type `STASH_SELECTED_SERVICE` + * and the selected service. + */ + +export function stashSelectedCatalogService(service) { + return { + type: STASH_SELECTED_SERVICE, + service + }; +} diff --git a/web/client/epics/backgroundselector.js b/web/client/epics/backgroundselector.js index 7ea5aee5c1..2fab9b4108 100644 --- a/web/client/epics/backgroundselector.js +++ b/web/client/epics/backgroundselector.js @@ -23,7 +23,8 @@ import { setBackgroundModalParams, setCurrentBackgroundLayer, allowBackgroundsDeletion, - backgroundAdded + backgroundAdded, + stashSelectedCatalogService } from '../actions/backgroundselector'; import { setControlProperty } from '../actions/controls'; @@ -35,15 +36,18 @@ import { getLayerCapabilities } from '../observables/wms'; import { getCustomTileGridProperties, getLayerOptions } from '../utils/WMSUtils'; import { getLayerTileMatrixSetsInfo } from '../api/WMTS'; import { generateGeoServerWMTSUrl } from '../utils/WMTSUtils'; +import { selectedServiceSelector } from '../selectors/catalog'; -const accessMetadataExplorer = (action$) => +const accessMetadataExplorer = (action$, store) => action$.ofType(ADD_BACKGROUND) .switchMap(() => Rx.Observable.of( setControlProperty('metadataexplorer', 'enabled', true), allowBackgroundsDeletion(false), + stashSelectedCatalogService(selectedServiceSelector(store.getState())), changeSelectedService('default_map_backgrounds') )); + const addBackgroundPropertiesEpic = (action$) => action$.ofType(ADD_BACKGROUND_PROPERTIES) .switchMap(({modalParams}) => { diff --git a/web/client/epics/catalog.js b/web/client/epics/catalog.js index 19cc9ea87a..a7cf90eaa8 100644 --- a/web/client/epics/catalog.js +++ b/web/client/epics/catalog.js @@ -52,7 +52,7 @@ import { catalogSearchInfoSelector, isActiveSelector, servicesSelectorWithBackgrounds } from '../selectors/catalog'; -import { metadataSourceSelector } from '../selectors/backgroundselector'; +import { metadataSourceSelector, stashedServiceSelector } from '../selectors/backgroundselector'; import { currentMessagesSelector } from "../selectors/locale"; import { getSelectedLayer, selectedNodesSelector } from '../selectors/layers'; @@ -592,13 +592,13 @@ export default (API) => ({ .switchMap(() => { const state = store.getState(); const metadataSource = metadataSourceSelector(state); - const services = servicesSelector(state); + const stashedService = stashedServiceSelector(state); return Rx.Observable.of(...([ setControlProperties('metadataexplorer', "enabled", false, "group", null), changeCatalogMode("view"), resetCatalog() ].concat(metadataSource === 'backgroundSelector' ? - [changeSelectedService(head(keys(services))), allowBackgroundsDeletion(true)] : []))); + [changeSelectedService(stashedService), allowBackgroundsDeletion(true)] : []))); }), /** diff --git a/web/client/reducers/backgroundselector.js b/web/client/reducers/backgroundselector.js index 5f0dfe76cd..d699240b19 100644 --- a/web/client/reducers/backgroundselector.js +++ b/web/client/reducers/backgroundselector.js @@ -15,7 +15,8 @@ import { REMOVE_BACKGROUND, CREATE_BACKGROUNDS_LIST, CLEAR_MODAL_PARAMETERS, - CONFIRM_DELETE_BACKGROUND_MODAL + CONFIRM_DELETE_BACKGROUND_MODAL, + STASH_SELECTED_SERVICE } from '../actions/backgroundselector'; import { RESET_CATALOG } from '../actions/catalog'; @@ -102,6 +103,13 @@ function backgroundselector(state = null, action) { case ALLOW_BACKGROUNDS_DELETION: { return assign({}, state, {allowDeletion: action.allow || false}); } + case STASH_SELECTED_SERVICE : { + return assign({}, state, { + stashedService: action.service + }); + } + + default: return state; } diff --git a/web/client/selectors/backgroundselector.js b/web/client/selectors/backgroundselector.js index b08bb2b21d..fd1d4d60fb 100644 --- a/web/client/selectors/backgroundselector.js +++ b/web/client/selectors/backgroundselector.js @@ -23,3 +23,4 @@ export const backgroundLayersSelector = createSelector(layersSelector, mapTypeSe const backgroundLayers = layers.filter((l) => l && l.group === "background"); return loaded && loaded[maptype] ? backgroundLayers.map((l) => invalidateUnsupportedLayer(l, maptype)) || [] : backgroundLayers; }); +export const stashedServiceSelector = state => state.backgroundSelector && state?.backgroundSelector.stashedService;