Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion geonode_mapstore_client/client/js/epics/gnresource.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ import {
import {
canAddResource,
getInitialDatasetLayer,
getInitialDatasetLayerStyle,
getResourceData,
getResourceId,
getResourceThumbnail
Expand Down Expand Up @@ -538,7 +539,7 @@ export const gnViewerRequestResourceConfig = (action$, store) =>
...action.options,
isSamePreviousResource,
resourceData,
selectedLayer: isSamePreviousResource && getInitialDatasetLayer(state),
selectedLayer: isSamePreviousResource && {...getInitialDatasetLayer(state), style: getInitialDatasetLayerStyle(state)},
params: {...action?.options?.params, query}
}),
Observable.of(
Expand Down
12 changes: 9 additions & 3 deletions geonode_mapstore_client/client/js/epics/gnsave.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ import {
getResourceId,
getDataPayload,
getCompactPermissions,
getExtentPayload
getExtentPayload,
getInitialDatasetLayerStyle
} from '@js/selectors/resource';

import {
Expand Down Expand Up @@ -111,7 +112,7 @@ const setDefaultStyle = (state, id) => {
availableStyles = [...defaultStyle, ...filteredStyles];
}
const {style: currentStyleName} = getSelectedNode(state) ?? {};
const initalStyleName = layer?.availableStyles?.[0]?.name;
const initalStyleName = getInitialDatasetLayerStyle(state);

if (id && initalStyleName && currentStyleName !== initalStyleName) {
const { baseUrl = '' } = styleServiceSelector(state);
Expand Down Expand Up @@ -224,7 +225,7 @@ export const gnSaveContent = (action$, store) =>
const { compactPermissions } = getPermissionsPayload(state);
return Observable.defer(() => SaveAPI[contentType](state, action.id, body, action.reload))
.switchMap((response) => {
const [resource, ...actions] = castArray(response);
let [resource, ...actions] = castArray(response);
if (action.reload) {
if (contentType === ResourceTypes.VIEWER) {
const sourcepk = get(state, 'router.location.pathname', '').split('/').pop();
Expand All @@ -234,6 +235,11 @@ export const gnSaveContent = (action$, store) =>
window.location.reload();
return Observable.empty();
}
const selectedLayer = getSelectedNode(state);
const currentStyle = selectedLayer?.availableStyles?.find(({ name }) => selectedLayer?.style?.includes(name));
// adding default style upon saving resource for correct style comparison
const defaultStyle = currentStyle ? { sld_title: currentStyle.title, name: selectedLayer?.style } : null;
resource = {...resource, default_style: defaultStyle};
return Observable.merge(
Observable.of(
saveSuccess(resource),
Expand Down
21 changes: 16 additions & 5 deletions geonode_mapstore_client/client/js/selectors/resource.js
Original file line number Diff line number Diff line change
Expand Up @@ -232,10 +232,20 @@ function isMapCenterEqual(initialCenter = {}, currentCenter = {}) {
return initialCenter.crs === currentCenter.crs && Math.abs(initialCenter.x - currentCenter.x) < CENTER_EPS && Math.abs(initialCenter.y - currentCenter.y) < CENTER_EPS;
}

export function getInitialDatasetLayer(state) {
export const getInitialDatasetResource = (state) => {
const initialResource = state?.gnresource?.initialResource;
return initialResource && initialResource.resource_type === ResourceTypes.DATASET && resourceToLayerConfig(omit(initialResource, ['default_style']));
}
return initialResource && initialResource.resource_type === ResourceTypes.DATASET ? initialResource : null;
};

export const getInitialDatasetLayer = (state) => {
const initialResource = getInitialDatasetResource(state);
return initialResource && resourceToLayerConfig(omit(initialResource, ['default_style']));
};

export const getInitialDatasetLayerStyle = (state) => {
const initialResource = getInitialDatasetResource(state);
return initialResource ? resourceToLayerConfig(initialResource)?.style : null;
};

function isResourceDataEqual(state, initialData = {}, currentData = {}) {
const resourceType = state?.gnresource?.type;
Expand Down Expand Up @@ -308,11 +318,12 @@ function isResourceDataEqual(state, initialData = {}, currentData = {}) {
const selectedLayer = getSelectedNode(state);
const selectedLayerInitial = getSelectedLayer(state);
const initialLayerData = {...selectedLayerInitial, ...initialData};
const initialStyle = getInitialDatasetLayerStyle(state);

const isSettingsEqual = compareObjects(omit(currentData, ['style', 'fields']),
omit(initialLayerData, ['style', 'fields', 'extendedParams', 'pk', '_v_', 'isDataset', 'perms']));
const isStyleEqual = isEmpty(selectedLayer?.availableStyles) || isEmpty(selectedLayer?.style) ? true
: selectedLayer?.style === selectedLayer?.availableStyles?.[0]?.name;
const isStyleEqual = isEmpty(initialStyle) || isEmpty(selectedLayer?.style) ? true
: selectedLayer?.style === initialStyle;
const isAttributesEqual = isEmpty(selectedLayer) ? true : !isEmpty(initialLayerData) && isEqual(initialLayerData?.fields, selectedLayer.fields);

return isSettingsEqual && isAttributesEqual && isStyleEqual;
Expand Down