Skip to content

Commit 40b8727

Browse files
authored
Enhance pending state handler for dataset (#2079)
1 parent ac5aec4 commit 40b8727

File tree

3 files changed

+25
-19
lines changed

3 files changed

+25
-19
lines changed

geonode_mapstore_client/client/js/epics/gnresource.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ import {
9595
} from '@js/utils/ResourceUtils';
9696
import {
9797
canAddResource,
98+
getInitialDatasetLayer,
9899
getResourceData,
99100
getResourceId,
100-
getResourceThumbnail,
101-
getSelectedLayer
101+
getResourceThumbnail
102102
} from '@js/selectors/resource';
103103
import { updateAdditionalLayer } from '@mapstore/framework/actions/additionallayers';
104104
import { STYLE_OWNER_NAME } from '@mapstore/framework/utils/StyleEditorUtils';
@@ -431,7 +431,7 @@ const resourceTypes = {
431431
// collect all the reset action needed before changing a viewer
432432
const getResetActions = (state, isSameResource) => {
433433
const initialResource = state?.gnresource?.initialResource;
434-
const initialLayer = initialResource && initialResource.resource_type === ResourceTypes.DATASET && resourceToLayerConfig(initialResource);
434+
const initialLayer = getInitialDatasetLayer(state);
435435
return [
436436
resetControls(),
437437
...(!isSameResource
@@ -537,7 +537,7 @@ export const gnViewerRequestResourceConfig = (action$, store) =>
537537
...action.options,
538538
isSamePreviousResource,
539539
resourceData,
540-
selectedLayer: isSamePreviousResource && getSelectedLayer(state),
540+
selectedLayer: isSamePreviousResource && getInitialDatasetLayer(state),
541541
params: {...action?.options?.params, query}
542542
}),
543543
Observable.of(

geonode_mapstore_client/client/js/epics/gnsave.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { Observable } from 'rxjs';
1111
import get from 'lodash/get';
1212
import castArray from 'lodash/castArray';
1313
import omit from 'lodash/omit';
14+
import isEmpty from 'lodash/isEmpty';
1415

1516
import { mapInfoSelector } from '@mapstore/framework/selectors/map';
1617
import { userSelector } from '@mapstore/framework/selectors/security';
@@ -62,8 +63,7 @@ import {
6263
getResourceId,
6364
getDataPayload,
6465
getCompactPermissions,
65-
getExtentPayload,
66-
getSelectedLayer
66+
getExtentPayload
6767
} from '@js/selectors/resource';
6868

6969
import {
@@ -102,16 +102,18 @@ function parseMapBody(body) {
102102
}
103103

104104
const setDefaultStyle = (state, id) => {
105-
const {style: currentStyle} = getSelectedNode(state) ?? {};
106-
const {style: initalStyle} = getSelectedLayer(state) ?? {};
107-
108105
const layer = getUpdatedLayer(state);
109106
const styleName = selectedStyleSelector(state);
110-
const defaultStyle = layer.availableStyles.filter(({ name }) => styleName === name);
111-
const filteredStyles = layer.availableStyles.filter(({ name }) => styleName !== name);
112-
const availableStyles = [...defaultStyle, ...filteredStyles];
107+
let availableStyles = [];
108+
if (!isEmpty(layer.availableStyles)) {
109+
const defaultStyle = layer.availableStyles.filter(({ name }) => styleName === name);
110+
const filteredStyles = layer.availableStyles.filter(({ name }) => styleName !== name);
111+
availableStyles = [...defaultStyle, ...filteredStyles];
112+
}
113+
const {style: currentStyleName} = getSelectedNode(state) ?? {};
114+
const initalStyleName = layer?.availableStyles?.[0]?.name;
113115

114-
if (id && currentStyle !== initalStyle) {
116+
if (id && initalStyleName && currentStyleName !== initalStyleName) {
115117
const { baseUrl = '' } = styleServiceSelector(state);
116118
return {
117119
request: () => LayersAPI.updateDefaultStyle({

geonode_mapstore_client/client/js/selectors/resource.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { compareMapChanges } from '@mapstore/framework/utils/MapUtils';
1212
import { currentStorySelector } from '@mapstore/framework/selectors/geostory';
1313
import { originalDataSelector } from '@mapstore/framework/selectors/dashboard';
1414
import { widgetsConfig } from '@mapstore/framework/selectors/widgets';
15-
import { ResourceTypes, RESOURCE_MANAGEMENT_PROPERTIES } from '@js/utils/ResourceUtils';
15+
import { ResourceTypes, RESOURCE_MANAGEMENT_PROPERTIES, resourceToLayerConfig } from '@js/utils/ResourceUtils';
1616
import {
1717
getCurrentResourceDeleteLoading,
1818
getCurrentResourceCopyLoading
@@ -228,6 +228,11 @@ function isMapCenterEqual(initialCenter = {}, currentCenter = {}) {
228228
return initialCenter.crs === currentCenter.crs && Math.abs(initialCenter.x - currentCenter.x) < CENTER_EPS && Math.abs(initialCenter.y - currentCenter.y) < CENTER_EPS;
229229
}
230230

231+
export function getInitialDatasetLayer(state) {
232+
const initialResource = state?.gnresource?.initialResource;
233+
return initialResource && initialResource.resource_type === ResourceTypes.DATASET && resourceToLayerConfig(omit(initialResource, ['default_style']));
234+
}
235+
231236
function isResourceDataEqual(state, initialData = {}, currentData = {}) {
232237
const resourceType = state?.gnresource?.type;
233238
if (isEmpty(initialData) || isEmpty(currentData)) {
@@ -300,11 +305,10 @@ function isResourceDataEqual(state, initialData = {}, currentData = {}) {
300305
const selectedLayerInitial = getSelectedLayer(state);
301306
const initialLayerData = {...selectedLayerInitial, ...initialData};
302307

303-
const isSettingsEqual = compareObjects(currentData, initialLayerData);
304-
const isStyleEqual = selectedLayer?.style === initialLayerData?.style;
305-
const isAttributesEqual = !isEmpty(initialLayerData)
306-
&& !isEmpty(selectedLayer)
307-
&& isEqual(initialLayerData?.fields, selectedLayer.fields);
308+
const isSettingsEqual = compareObjects(omit(currentData, ['style', 'fields']), omit(initialLayerData, ['style', 'fields']));
309+
const isStyleEqual = isEmpty(selectedLayer?.availableStyles) || isEmpty(selectedLayer?.style) ? true
310+
: selectedLayer?.style === selectedLayer?.availableStyles?.[0]?.name;
311+
const isAttributesEqual = isEmpty(selectedLayer) ? true : !isEmpty(initialLayerData) && isEqual(initialLayerData?.fields, selectedLayer.fields);
308312

309313
return isSettingsEqual && isAttributesEqual && isStyleEqual;
310314
}

0 commit comments

Comments
 (0)