Skip to content

Commit 54c993e

Browse files
authored
[Fixes #2184] Saving map layer settings for a dataset calls the wrong URL (#2185)
1 parent 73ac861 commit 54c993e

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

geonode_mapstore_client/client/js/epics/gnresource.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ import {
9797
import {
9898
canAddResource,
9999
getInitialDatasetLayer,
100+
getInitialDatasetLayerStyle,
100101
getResourceData,
101102
getResourceId,
102103
getResourceThumbnail
@@ -538,7 +539,7 @@ export const gnViewerRequestResourceConfig = (action$, store) =>
538539
...action.options,
539540
isSamePreviousResource,
540541
resourceData,
541-
selectedLayer: isSamePreviousResource && getInitialDatasetLayer(state),
542+
selectedLayer: isSamePreviousResource && {...getInitialDatasetLayer(state), style: getInitialDatasetLayerStyle(state)},
542543
params: {...action?.options?.params, query}
543544
}),
544545
Observable.of(

geonode_mapstore_client/client/js/epics/gnsave.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ import {
6565
getResourceId,
6666
getDataPayload,
6767
getCompactPermissions,
68-
getExtentPayload
68+
getExtentPayload,
69+
getInitialDatasetLayerStyle
6970
} from '@js/selectors/resource';
7071

7172
import {
@@ -113,9 +114,9 @@ const setDefaultStyle = (state, id) => {
113114
availableStyles = [...defaultStyle, ...filteredStyles];
114115
}
115116
const {style: currentStyleName} = getSelectedNode(state) ?? {};
116-
const initalStyleName = layer?.availableStyles?.[0]?.name;
117+
const initialStyleName = getInitialDatasetLayerStyle(state);
117118

118-
if (id && initalStyleName && currentStyleName !== initalStyleName) {
119+
if (id && initialStyleName && currentStyleName !== initialStyleName) {
119120
const { baseUrl = '' } = styleServiceSelector(state);
120121
return {
121122
request: () => LayersAPI.updateDefaultStyle({
@@ -228,7 +229,7 @@ export const gnSaveContent = (action$, store) =>
228229
const { compactPermissions } = getPermissionsPayload(state);
229230
return Observable.defer(() => SaveAPI[contentType](state, action.id, body, action.reload))
230231
.switchMap((response) => {
231-
const [resource, ...actions] = castArray(response);
232+
let [resource, ...actions] = castArray(response);
232233
if (action.reload) {
233234
if (contentType === ResourceTypes.VIEWER) {
234235
const sourcepk = get(state, 'router.location.pathname', '').split('/').pop();
@@ -238,6 +239,11 @@ export const gnSaveContent = (action$, store) =>
238239
window.location.reload();
239240
return Observable.empty();
240241
}
242+
const selectedLayer = getSelectedNode(state);
243+
const currentStyle = selectedLayer?.availableStyles?.find(({ name }) => selectedLayer?.style?.includes(name));
244+
// adding default style upon saving resource for correct style comparison
245+
const defaultStyle = currentStyle ? { sld_title: currentStyle.title, name: selectedLayer?.style } : null;
246+
resource = {...resource, default_style: defaultStyle};
241247
return Observable.merge(
242248
Observable.of(
243249
saveSuccess(resource),

geonode_mapstore_client/client/js/selectors/resource.js

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -232,10 +232,20 @@ function isMapCenterEqual(initialCenter = {}, currentCenter = {}) {
232232
return initialCenter.crs === currentCenter.crs && Math.abs(initialCenter.x - currentCenter.x) < CENTER_EPS && Math.abs(initialCenter.y - currentCenter.y) < CENTER_EPS;
233233
}
234234

235-
export function getInitialDatasetLayer(state) {
235+
export const getInitialDatasetResource = (state) => {
236236
const initialResource = state?.gnresource?.initialResource;
237-
return initialResource && initialResource.resource_type === ResourceTypes.DATASET && resourceToLayerConfig(omit(initialResource, ['default_style']));
238-
}
237+
return initialResource && initialResource.resource_type === ResourceTypes.DATASET ? initialResource : null;
238+
};
239+
240+
export const getInitialDatasetLayer = (state) => {
241+
const initialResource = getInitialDatasetResource(state);
242+
return initialResource && resourceToLayerConfig(omit(initialResource, ['default_style']));
243+
};
244+
245+
export const getInitialDatasetLayerStyle = (state) => {
246+
const initialResource = getInitialDatasetResource(state);
247+
return initialResource ? resourceToLayerConfig(initialResource)?.style : null;
248+
};
239249

240250
function isResourceDataEqual(state, initialData = {}, currentData = {}) {
241251
const resourceType = state?.gnresource?.type;
@@ -308,11 +318,12 @@ function isResourceDataEqual(state, initialData = {}, currentData = {}) {
308318
const selectedLayer = getSelectedNode(state);
309319
const selectedLayerInitial = getSelectedLayer(state);
310320
const initialLayerData = {...selectedLayerInitial, ...initialData};
321+
const initialStyle = getInitialDatasetLayerStyle(state);
311322

312323
const isSettingsEqual = compareObjects(omit(currentData, ['style', 'fields']),
313324
omit(initialLayerData, ['style', 'fields', 'extendedParams', 'pk', '_v_', 'isDataset', 'perms']));
314-
const isStyleEqual = isEmpty(selectedLayer?.availableStyles) || isEmpty(selectedLayer?.style) ? true
315-
: selectedLayer?.style === selectedLayer?.availableStyles?.[0]?.name;
325+
const isStyleEqual = isEmpty(initialStyle) || isEmpty(selectedLayer?.style) ? true
326+
: selectedLayer?.style === initialStyle;
316327
const isAttributesEqual = isEmpty(selectedLayer) ? true
317328
: !isEmpty(initialLayerData) && isEqual(
318329
isEmpty(initialLayerData?.fields) ? {} : initialLayerData?.fields,

0 commit comments

Comments
 (0)