@@ -51,7 +51,9 @@ import {
5151 updateDocument ,
5252 setMapThumbnail ,
5353 updateCompactPermissionsByPk ,
54- getResourceByUuid
54+ getResourceByUuid ,
55+ updateDatasetTimeSeries ,
56+ updateResource as updateResourceAPI
5557} from '@js/api/geonode/v2' ;
5658import { parseDevHostname } from '@js/utils/APIUtils' ;
5759import uuid from 'uuid' ;
@@ -63,7 +65,8 @@ import {
6365 getResourceId ,
6466 getDataPayload ,
6567 getCompactPermissions ,
66- getExtentPayload
68+ getExtentPayload ,
69+ getInitialDatasetLayerStyle
6770} from '@js/selectors/resource' ;
6871
6972import {
@@ -80,13 +83,13 @@ import {
8083 toGeoNodeMapConfig ,
8184 RESOURCE_PUBLISHING_PROPERTIES ,
8285 RESOURCE_OPTIONS_PROPERTIES ,
83- getDimensions
86+ getDimensions ,
87+ isDefaultDatasetSubtype
8488} from '@js/utils/ResourceUtils' ;
8589import {
8690 ProcessTypes ,
8791 ProcessStatus
8892} from '@js/utils/ResourceServiceUtils' ;
89- import { updateDatasetTimeSeries } from '@js/api/geonode/v2/index' ;
9093import { updateNode , updateSettingsParams } from '@mapstore/framework/actions/layers' ;
9194import { layersSelector , getSelectedLayer as getSelectedNode } from '@mapstore/framework/selectors/layers' ;
9295import { styleServiceSelector , getUpdatedLayer , selectedStyleSelector } from '@mapstore/framework/selectors/styleeditor' ;
@@ -112,9 +115,9 @@ const setDefaultStyle = (state, id) => {
112115 availableStyles = [ ...defaultStyle , ...filteredStyles ] ;
113116 }
114117 const { style : currentStyleName } = getSelectedNode ( state ) ?? { } ;
115- const initalStyleName = layer ?. availableStyles ?. [ 0 ] ?. name ;
118+ const initialStyleName = getInitialDatasetLayerStyle ( state ) ;
116119
117- if ( id && initalStyleName && currentStyleName !== initalStyleName ) {
120+ if ( id && initialStyleName && currentStyleName !== initialStyleName ) {
118121 const { baseUrl = '' } = styleServiceSelector ( state ) ;
119122 return {
120123 request : ( ) => LayersAPI . updateDefaultStyle ( {
@@ -171,21 +174,23 @@ const SaveAPI = {
171174 ...( timeseries && { has_time : timeseries ?. has_time } )
172175 } ;
173176 const { request, actions } = setDefaultStyle ( state , id ) ; // set default style, if modified
174-
175- return request ( ) . then ( ( ) => ( id
177+ return request ( ) . then ( ( ) => {
178+ const patchResource = ! isDefaultDatasetSubtype ( currentResource ?. subtype ) ? updateResourceAPI : updateDataset ;
179+ return ( id
176180 // perform dataset and timeseries updates sequentially to avoid race conditions
177- ? updateDataset ( id , updatedBody ) . then ( ( resource ) =>
178- updateDatasetTimeSeries ( id , timeseries ) . then ( ( ) => resource )
179- ) : Promise . resolve ( ) )
180- . then ( ( _resource ) => {
181- let resource = omit ( _resource , 'default_style' ) ;
182- if ( timeseries ) {
183- const layerId = layersSelector ( state ) ?. find ( ( l ) => l . pk === resource ?. pk ) ?. id ;
184- // actions to be dispacted are added to response array
185- return [ resource , updateNode ( layerId , 'layers' , { dimensions : get ( resource , 'data.dimensions' , [ ] ) } ) , ...actions ] ;
186- }
187- return [ resource , ...actions ] ;
188- } ) ) ;
181+ ? patchResource ( id , updatedBody ) . then ( ( resource ) =>
182+ timeseries ? updateDatasetTimeSeries ( id , timeseries ) . then ( ( ) => resource ) : Promise . resolve ( resource )
183+ ) : Promise . resolve ( ) )
184+ . then ( ( _resource ) => {
185+ let resource = omit ( _resource , 'default_style' ) ;
186+ if ( timeseries ) {
187+ const layerId = layersSelector ( state ) ?. find ( ( l ) => l . pk === resource ?. pk ) ?. id ;
188+ // actions to be dispacted are added to response array
189+ return [ resource , updateNode ( layerId , 'layers' , { dimensions : get ( resource , 'data.dimensions' , [ ] ) } ) , ...actions ] ;
190+ }
191+ return [ resource , ...actions ] ;
192+ } ) ;
193+ } ) ;
189194 } ,
190195 [ ResourceTypes . VIEWER ] : ( state , id , body ) => {
191196 const user = userSelector ( state ) ;
@@ -225,7 +230,7 @@ export const gnSaveContent = (action$, store) =>
225230 const { compactPermissions } = getPermissionsPayload ( state ) ;
226231 return Observable . defer ( ( ) => SaveAPI [ contentType ] ( state , action . id , body , action . reload ) )
227232 . switchMap ( ( response ) => {
228- const [ resource , ...actions ] = castArray ( response ) ;
233+ let [ resource , ...actions ] = castArray ( response ) ;
229234 if ( action . reload ) {
230235 if ( contentType === ResourceTypes . VIEWER ) {
231236 const sourcepk = get ( state , 'router.location.pathname' , '' ) . split ( '/' ) . pop ( ) ;
@@ -235,6 +240,11 @@ export const gnSaveContent = (action$, store) =>
235240 window . location . reload ( ) ;
236241 return Observable . empty ( ) ;
237242 }
243+ const selectedLayer = getSelectedNode ( state ) ;
244+ const currentStyle = selectedLayer ?. availableStyles ?. find ( ( { name } ) => selectedLayer ?. style ?. includes ( name ) ) ;
245+ // adding default style upon saving resource for correct style comparison
246+ const defaultStyle = currentStyle ? { sld_title : currentStyle . title , name : selectedLayer ?. style } : null ;
247+ resource = { ...resource , default_style : defaultStyle } ;
238248 return Observable . merge (
239249 Observable . of (
240250 saveSuccess ( resource ) ,
0 commit comments