forked from MapComplete/MapComplete
		
	Zoom to current location if it is in view
This commit is contained in:
		
							parent
							
								
									92b311bffa
								
							
						
					
					
						commit
						e2419c19cd
					
				
					 2 changed files with 23 additions and 3 deletions
				
			
		|  | @ -2,13 +2,21 @@ import { VariableUiElement } from "../Base/VariableUIElement" | ||||||
| import Svg from "../../Svg" | import Svg from "../../Svg" | ||||||
| import { UIEventSource } from "../../Logic/UIEventSource" | import { UIEventSource } from "../../Logic/UIEventSource" | ||||||
| import GeoLocationHandler from "../../Logic/Actors/GeoLocationHandler" | import GeoLocationHandler from "../../Logic/Actors/GeoLocationHandler" | ||||||
|  | import { BBox } from "../../Logic/BBox" | ||||||
|  | import Loc from "../../Models/Loc" | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Displays an icon depending on the state of the geolocation. |  * Displays an icon depending on the state of the geolocation. | ||||||
|  * Will set the 'lock' if clicked twice |  * Will set the 'lock' if clicked twice | ||||||
|  */ |  */ | ||||||
| export class GeolocationControl extends VariableUiElement { | export class GeolocationControl extends VariableUiElement { | ||||||
|     constructor(geolocationHandler: GeoLocationHandler) { |     constructor( | ||||||
|  |         geolocationHandler: GeoLocationHandler, | ||||||
|  |         state: { | ||||||
|  |             locationControl: UIEventSource<Loc> | ||||||
|  |             currentBounds: UIEventSource<BBox> | ||||||
|  |         } | ||||||
|  |     ) { | ||||||
|         const lastClick = new UIEventSource<Date>(undefined) |         const lastClick = new UIEventSource<Date>(undefined) | ||||||
|         const lastClickWithinThreeSecs = lastClick.map((lastClick) => { |         const lastClickWithinThreeSecs = lastClick.map((lastClick) => { | ||||||
|             if (lastClick === undefined) { |             if (lastClick === undefined) { | ||||||
|  | @ -78,8 +86,20 @@ export class GeolocationControl extends VariableUiElement { | ||||||
|                 return |                 return | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             // A location _is_ known! Let's zoom to this location
 |             // A location _is_ known! Let's move to this location
 | ||||||
|  |             const currentLocation = geolocationState.currentGPSLocation.data | ||||||
|  |             const inBounds = state.currentBounds.data.contains([ | ||||||
|  |                 currentLocation.longitude, | ||||||
|  |                 currentLocation.latitude, | ||||||
|  |             ]) | ||||||
|             geolocationHandler.MoveMapToCurrentLocation() |             geolocationHandler.MoveMapToCurrentLocation() | ||||||
|  |             if (inBounds) { | ||||||
|  |                 const lc = state.locationControl.data | ||||||
|  |                 state.locationControl.setData({ | ||||||
|  |                     ...lc, | ||||||
|  |                     zoom: lc.zoom + 3, | ||||||
|  |                 }) | ||||||
|  |             } | ||||||
| 
 | 
 | ||||||
|             if (lastClickWithinThreeSecs.data && geolocationState.permission.data === "granted") { |             if (lastClickWithinThreeSecs.data && geolocationState.permission.data === "granted") { | ||||||
|                 geolocationState.isLocked.setData(true) |                 geolocationState.isLocked.setData(true) | ||||||
|  |  | ||||||
|  | @ -14,7 +14,7 @@ export default class RightControls extends Combine { | ||||||
|         geolocationHandler: GeoLocationHandler |         geolocationHandler: GeoLocationHandler | ||||||
|     ) { |     ) { | ||||||
|         const geolocationButton = new Toggle( |         const geolocationButton = new Toggle( | ||||||
|             new MapControlButton(new GeolocationControl(geolocationHandler), { |             new MapControlButton(new GeolocationControl(geolocationHandler, state), { | ||||||
|                 dontStyle: true, |                 dontStyle: true, | ||||||
|             }).SetClass("p-1"), |             }).SetClass("p-1"), | ||||||
|             undefined, |             undefined, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue