AW-6981 Support for backup and restore (current) features
All checks were successful
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good

This commit is contained in:
2025-09-02 09:32:00 +02:00
parent 4ec75b3d5a
commit 6fd69d7999
2 changed files with 42 additions and 7 deletions

View File

@@ -59,6 +59,8 @@ export const TOGGLESHOWDATALAYERSLIDE = '[Map] ToggleShowDataLayerSlide'
export const SETVIEWSTATE = '[Map] SetViewState' export const SETVIEWSTATE = '[Map] SetViewState'
export const CLEARFEATURES = '[Map] ClearFeatures'; export const CLEARFEATURES = '[Map] ClearFeatures';
export const SETPANELEXTRAWIDE = '[Map] SetPanelExtraWide'; export const SETPANELEXTRAWIDE = '[Map] SetPanelExtraWide';
export const BACKUPFEATURES = '[Map] BackupFeatures';
export const RESTOREFEATURES = '[Map] RestoreFeatures';
export class Clear implements Action { export class Clear implements Action {
readonly type = CLEAR; readonly type = CLEAR;
@@ -347,6 +349,16 @@ export class SetPanelExtraWide implements Action {
constructor(public panelExtraWide:boolean) {} constructor(public panelExtraWide:boolean) {}
} }
export class BackupFeatures implements Action {
readonly type = BACKUPFEATURES;
constructor() {}
}
export class RestoreFeatures implements Action {
readonly type = RESTOREFEATURES;
constructor() {}
}
export type Actions = SetMapState export type Actions = SetMapState
| Init | Init
| Clear | Clear
@@ -395,5 +407,7 @@ export type Actions = SetMapState
| ToggleShowDataLayerSlide | ToggleShowDataLayerSlide
| SetViewState | SetViewState
| ClearFeatures | ClearFeatures
| SetPanelExtraWide; | SetPanelExtraWide
| BackupFeatures
| RestoreFeatures;

View File

@@ -9,6 +9,7 @@ import { ILayervalue } from '../models/layer.value';
import * as mapActions from '../actions/map.actions'; import * as mapActions from '../actions/map.actions';
import {commonActions} from '@farmmaps/common'; import {commonActions} from '@farmmaps/common';
import { createSelector, createFeatureSelector } from '@ngrx/store'; import { createSelector, createFeatureSelector } from '@ngrx/store';
import * as _ from 'lodash';
import {Feature} from 'ol'; import {Feature} from 'ol';
import {Geometry} from 'ol/geom'; import {Geometry} from 'ol/geom';
@@ -47,6 +48,7 @@ export interface State {
query:IQuery, query:IQuery,
parentCode: string, parentCode: string,
features: Array<Feature<Geometry>>, features: Array<Feature<Geometry>>,
featuresBackup: Array<Feature<Geometry>>,
panelVisible: boolean, panelVisible: boolean,
panelCollapsed: boolean, panelCollapsed: boolean,
panelExtraWide: boolean, panelExtraWide: boolean,
@@ -93,6 +95,7 @@ export const initialState: State = {
query: null, query: null,
parentCode: null, parentCode: null,
features: [], features: [],
featuresBackup: [],
panelVisible: false, panelVisible: false,
panelCollapsed: false, panelCollapsed: false,
panelExtraWide: false, panelExtraWide: false,
@@ -156,13 +159,15 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
const a = action as mapActions.StartSearchSuccess; const a = action as mapActions.StartSearchSuccess;
return tassign(state, { return tassign(state, {
features: a.features, features: a.features,
featuresBackup: [],
inSearch:false inSearch:false
}); });
} }
case mapActions.SETFEATURES: { case mapActions.SETFEATURES: {
const a = action as mapActions.SetFeatures; const a = action as mapActions.SetFeatures;
return tassign(state, { return tassign(state, {
features: a.features features: a.features,
featuresBackup: []
}); });
} }
case mapActions.SELECTFEATURE: { case mapActions.SELECTFEATURE: {
@@ -180,6 +185,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
selectedItemLayer: null, selectedItemLayer: null,
showDataLayerSlide: false, showDataLayerSlide: false,
features:[], features:[],
featuresBackup: [],
inSearch:inSearch inSearch:inSearch
}); });
} }
@@ -296,6 +302,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
return tassign(state, { return tassign(state, {
selectedItem: null, selectedItem: null,
features:[], features:[],
featuresBackup: [],
selectedItemLayer:null, selectedItemLayer:null,
searchCollapsed: !panelVisible, searchCollapsed: !panelVisible,
panelVisible: panelVisible, panelVisible: panelVisible,
@@ -332,7 +339,8 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
extent: a.feature.getGeometry().getExtent(), extent: a.feature.getGeometry().getExtent(),
searchCollapsed: false, searchCollapsed: false,
clearEnabled:true, clearEnabled:true,
features:features features:features,
featuresBackup:[]
}); });
} }
case mapActions.UPDATEFEATURESUCCESS: { case mapActions.UPDATEFEATURESUCCESS: {
@@ -346,7 +354,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
features.push(state.features[i]); features.push(state.features[i]);
} }
} }
return tassign(state, { features: features }); return tassign(state, { features: features, featuresBackup: [] });
} }
case mapActions.EXPANDSEARCH: { case mapActions.EXPANDSEARCH: {
return tassign(state, { searchCollapsed: false }); return tassign(state, { searchCollapsed: false });
@@ -391,7 +399,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
return tassign(state, {overlayLayers: [], selectedOverlayLayer: null}); return tassign(state, {overlayLayers: [], selectedOverlayLayer: null});
} }
case mapActions.CLEARFEATURES: { case mapActions.CLEARFEATURES: {
return tassign(state, {features: [], selectedFeature: null}); return tassign(state, {features: [], featuresBackup: [], selectedFeature: null});
} }
case mapActions.SETVISIBILITY: { case mapActions.SETVISIBILITY: {
const a = action as mapActions.SetVisibility; const a = action as mapActions.SetVisibility;
@@ -509,6 +517,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
searchCollapsed: true, searchCollapsed: true,
searchMinified: false, searchMinified: false,
features: [], features: [],
featuresBackup: [],
query:initialState.query, query:initialState.query,
showLayerSwitcher: false, showLayerSwitcher: false,
extent: null, extent: null,
@@ -556,7 +565,8 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
selectedItem: null, selectedItem: null,
selectedItemLayer: null, selectedItemLayer: null,
showDataLayerSlide: false, showDataLayerSlide: false,
features:[] features:[],
featuresBackup:[]
}); });
} }
if(state.features.length>0) { if(state.features.length>0) {
@@ -569,7 +579,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
if(index>=0) { if(index>=0) {
const newFeatures = state.features.slice(0); const newFeatures = state.features.slice(0);
newFeatures.splice(index,1); newFeatures.splice(index,1);
return tassign(state,{features:newFeatures}); return tassign(state,{features:newFeatures, featuresBackup:[]});
} }
} }
return state; return state;
@@ -578,6 +588,17 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
const a= action as mapActions.SetPanelExtraWide; const a= action as mapActions.SetPanelExtraWide;
return tassign(state,{panelExtraWide:a.panelExtraWide}); return tassign(state,{panelExtraWide:a.panelExtraWide});
} }
case mapActions.BACKUPFEATURES: {
return tassign(state, {
featuresBackup: _.cloneDeep(state.features)
});
}
case mapActions.RESTOREFEATURES: {
return tassign(state, {
features: _.cloneDeep(state.featuresBackup),
featuresBackup: []
});
}
default: { default: {
return state; return state;
} }