diff --git a/projects/common-map/src/fm-map/components/map/map.component.ts b/projects/common-map/src/fm-map/components/map/map.component.ts index ab165fc..cfe38b9 100644 --- a/projects/common-map/src/fm-map/components/map/map.component.ts +++ b/projects/common-map/src/fm-map/components/map/map.component.ts @@ -128,29 +128,21 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit { this.store.dispatch(new mapActions.Init()); this.selectedFeatures$.next({x:0,y:0,features:[]}); this.selectedFeatures$.next(null); - this.query$.pipe(withLatestFrom(this.mapState$),withLatestFrom(this.setStateCount$)).subscribe((state) => { - let queryState = state[0][0]; - let mapState = state[0][1]; - let urlparts=[]; - - // TODO: fix this properly move the action to a separte column in itemtypes - if(queryState.itemType && queryState.itemCode) { - let itemType = this.itemTypeService.itemTypes[queryState.itemType]; - if (itemType.viewer == "edit_in_editor" && itemType.editor) { - urlparts.push('/editor'); - urlparts.push(itemType.editor); - urlparts.push('item'); - urlparts.push(queryState.itemCode); - } - } - if(state[1]>0) { - if(urlparts.length>0) { - this.router.navigate(urlparts); - } else { - this.replaceUrl(mapState, queryState,false); - } - } - }); + this.query$.pipe(withLatestFrom(this.mapState$),withLatestFrom(this.setStateCount$)).subscribe(([[queryState,mapState],setStateCount]) =>{ + if(setStateCount>0) { + this.replaceUrl(mapState,queryState,false); + } + }); + this.mapState$.pipe(withLatestFrom(this.queryState$),withLatestFrom(this.setStateCount$)).subscribe(([[mapState,queryState],setStateCount]) =>{ + if(setStateCount>0) { + this.replaceUrl(mapState,queryState,true); + } + }); + this.queryState$.pipe(withLatestFrom(this.mapState$),withLatestFrom(this.setStateCount$)).subscribe(([[queryState,mapState],setStateCount]) =>{ + if(setStateCount>0) { + this.replaceUrl(mapState,queryState,true); + } + }) } initCustomStyles() { @@ -207,13 +199,10 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit { setTimeout(() => { this.zone.run(()=> { if ( queryStateChanged && mapStateChanged) { - console.debug("Both states"); this.store.dispatch(new mapActions.SetState(newMapState,newQueryState)); } else if(queryStateChanged) { - console.debug("Query state"); this.store.dispatch(new mapActions.SetQueryState(newQueryState)); } else if (mapStateChanged) { - console.debug("Map state"); this.store.dispatch(new mapActions.SetMapState(newMapState)); } }) @@ -222,7 +211,6 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit { setTimeout(() => { this.map.instance.updateSize(); }, 500); - console.debug("Afterviewinit"); } handleSearchCollapse(event) { @@ -254,7 +242,6 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit { } replaceUrl(mapState: IMapState, queryState: IQueryState, replace: boolean = true) { - console.debug(`Replace url : Baselayer(${mapState.baseLayerCode}) Querystate(${this.serializeService.serialize(queryState)})`); let parts =["."]; parts.push(mapState.xCenter.toFixed(5)); parts.push(mapState.yCenter.toFixed(5)); @@ -278,10 +265,10 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit { let mapState: IMapState = { xCenter: center[0], yCenter: center[1], zoom: zoom, rotation: rotation, baseLayerCode: null }; let state = { mapState: mapState, extent: extent }; let source = from([state]); - source.pipe(withLatestFrom(this.selectedBaseLayer$), withLatestFrom(this.queryState$)).subscribe(([[state, baselayer], queryState]) => { - if (mapState && baselayer && queryState) { + source.pipe(withLatestFrom(this.selectedBaseLayer$)).subscribe(([state, baselayer]) => { + if (mapState && baselayer) { let newMapState = tassign(state.mapState, { baseLayerCode: baselayer.item.code }); - this.replaceUrl(newMapState, tassign(queryState, { bbox: queryState.bboxFilter ? state.extent : queryState.bbox })); + this.store.dispatch(new mapActions.SetMapState(newMapState)); this.store.dispatch(new mapActions.SetViewExtent(state.extent)); } }); diff --git a/projects/common-map/src/fm-map/effects/map.effects.ts b/projects/common-map/src/fm-map/effects/map.effects.ts index e06a16a..ba77655 100644 --- a/projects/common-map/src/fm-map/effects/map.effects.ts +++ b/projects/common-map/src/fm-map/effects/map.effects.ts @@ -26,6 +26,10 @@ import {FeatureIconService} from '../services/feature-icon.service'; import * as style from 'ol/style'; +import { ItemTypeService } from '@farmmaps/common'; +import { Router } from '@angular/router'; + + @Injectable() export class MapEffects { @@ -252,7 +256,22 @@ export class MapEffects { switchMap((action: mapActions.SetQueryState) => { var newAction:Action; if (action.queryState.itemCode && action.queryState.itemCode != "") { - newAction= new mapActions.SelectItem(action.queryState.itemCode); + let urlparts=[]; + if(action.queryState.itemType && action.queryState.itemType!= "") { + let itemType = this.itemTypeService$.itemTypes[action.queryState.itemType]; + if (itemType.viewer == "edit_in_editor" && itemType.editor) { + urlparts.push('/editor'); + urlparts.push(itemType.editor); + urlparts.push('item'); + urlparts.push(action.queryState.itemCode); + } + } + if(urlparts.length==0 ) { + newAction= new mapActions.SelectItem(action.queryState.itemCode); + } else { + this.router$.navigate(urlparts); + return []; + } } else { newAction= new mapActions.StartSearch(action.queryState); } @@ -272,7 +291,7 @@ export class MapEffects { return of(newAction); })); - constructor(private actions$: Actions, private store$: Store, private folderService$: FolderService, private itemService$: ItemService,private featureIconService$:FeatureIconService) { + constructor(private actions$: Actions, private store$: Store, private folderService$: FolderService, private itemService$: ItemService,private featureIconService$:FeatureIconService,private itemTypeService$:ItemTypeService,private router$:Router) { this._geojsonFormat = new GeoJSON(); this._wktFormat = new WKT(); }