forked from MapComplete/MapComplete
		
	Automatically zoom to GPS location if no coordinate is specified in the URL
This commit is contained in:
		
							parent
							
								
									dad579c895
								
							
						
					
					
						commit
						61b6721342
					
				
					 3 changed files with 17 additions and 9 deletions
				
			
		|  | @ -6,6 +6,7 @@ import {LocalStorageSource} from "../Web/LocalStorageSource"; | ||||||
| import {VariableUiElement} from "../../UI/Base/VariableUIElement"; | import {VariableUiElement} from "../../UI/Base/VariableUIElement"; | ||||||
| import BaseUIElement from "../../UI/BaseUIElement"; | import BaseUIElement from "../../UI/BaseUIElement"; | ||||||
| import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; | import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"; | ||||||
|  | import {QueryParameters} from "../Web/QueryParameters"; | ||||||
| 
 | 
 | ||||||
| export default class GeoLocationHandler extends VariableUiElement { | export default class GeoLocationHandler extends VariableUiElement { | ||||||
|     /** |     /** | ||||||
|  | @ -94,8 +95,6 @@ export default class GeoLocationHandler extends VariableUiElement { | ||||||
|         super( |         super( | ||||||
|             hasLocation.map( |             hasLocation.map( | ||||||
|                 (hasLocationData) => { |                 (hasLocationData) => { | ||||||
|                     let icon: BaseUIElement; |  | ||||||
|                     console.log("Determining icon:", permission.data, isActive.data, hasLocationData, isLocked.data, lastClickWithinThreeSecs.data) |  | ||||||
|                     if (permission.data === "denied") { |                     if (permission.data === "denied") { | ||||||
|                         return Svg.location_refused_svg(); |                         return Svg.location_refused_svg(); | ||||||
|                     } |                     } | ||||||
|  | @ -167,9 +166,12 @@ export default class GeoLocationHandler extends VariableUiElement { | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             self.init(true); |             self.init(true, true); | ||||||
|         }); |         }); | ||||||
|         this.init(false); |          | ||||||
|  |         const latLonGiven = QueryParameters.wasInitialized("lat") && QueryParameters.wasInitialized("lon") | ||||||
|  |          | ||||||
|  |         this.init(false, !latLonGiven); | ||||||
| 
 | 
 | ||||||
|         isLocked.addCallbackAndRunD(isLocked => { |         isLocked.addCallbackAndRunD(isLocked => { | ||||||
|             if (isLocked) { |             if (isLocked) { | ||||||
|  | @ -217,7 +219,7 @@ export default class GeoLocationHandler extends VariableUiElement { | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private init(askPermission: boolean) { |     private init(askPermission: boolean, forceZoom: boolean) { | ||||||
|         const self = this; |         const self = this; | ||||||
| 
 | 
 | ||||||
|         if (self._isActive.data) { |         if (self._isActive.data) { | ||||||
|  | @ -231,7 +233,7 @@ export default class GeoLocationHandler extends VariableUiElement { | ||||||
|                 ?.then(function (status) { |                 ?.then(function (status) { | ||||||
|                     console.log("Geolocation is already", status); |                     console.log("Geolocation is already", status); | ||||||
|                     if (status.state === "granted") { |                     if (status.state === "granted") { | ||||||
|                         self.StartGeolocating(false); |                         self.StartGeolocating(forceZoom); | ||||||
|                     } |                     } | ||||||
|                     self._permission.setData(status.state); |                     self._permission.setData(status.state); | ||||||
|                     status.onchange = function () { |                     status.onchange = function () { | ||||||
|  | @ -243,10 +245,10 @@ export default class GeoLocationHandler extends VariableUiElement { | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (askPermission) { |         if (askPermission) { | ||||||
|             self.StartGeolocating(true); |             self.StartGeolocating(forceZoom); | ||||||
|         } else if (this._previousLocationGrant.data === "granted") { |         } else if (this._previousLocationGrant.data === "granted") { | ||||||
|             this._previousLocationGrant.setData(""); |             this._previousLocationGrant.setData(""); | ||||||
|             self.StartGeolocating(false); |             self.StartGeolocating(forceZoom); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -10,6 +10,7 @@ import Combine from "../../UI/Base/Combine"; | ||||||
| export class QueryParameters { | export class QueryParameters { | ||||||
| 
 | 
 | ||||||
|     private static order: string [] = ["layout", "test", "z", "lat", "lon"]; |     private static order: string [] = ["layout", "test", "z", "lat", "lon"]; | ||||||
|  |     private static _wasInitialized: Set<string> = new Set() | ||||||
|     private static knownSources = {}; |     private static knownSources = {}; | ||||||
|     private static initialized = false; |     private static initialized = false; | ||||||
|     private static defaults = {} |     private static defaults = {} | ||||||
|  | @ -91,6 +92,7 @@ export class QueryParameters { | ||||||
|                 const kv = param.split("="); |                 const kv = param.split("="); | ||||||
|                 const key = decodeURIComponent(kv[0]); |                 const key = decodeURIComponent(kv[0]); | ||||||
|                 QueryParameters.addOrder(key) |                 QueryParameters.addOrder(key) | ||||||
|  |                 QueryParameters._wasInitialized.add(key) | ||||||
|                 const v = decodeURIComponent(kv[1]); |                 const v = decodeURIComponent(kv[1]); | ||||||
|                 const source = new UIEventSource<string>(v); |                 const source = new UIEventSource<string>(v); | ||||||
|                 source.addCallback(() => QueryParameters.Serialize()) |                 source.addCallback(() => QueryParameters.Serialize()) | ||||||
|  | @ -103,6 +105,10 @@ export class QueryParameters { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     public static wasInitialized(key: string) : boolean{ | ||||||
|  |         return QueryParameters._wasInitialized.has(key) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private static Serialize() { |     private static Serialize() { | ||||||
|         const parts = [] |         const parts = [] | ||||||
|         for (const key of QueryParameters.order) { |         for (const key of QueryParameters.order) { | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ import { Utils } from "../Utils"; | ||||||
| 
 | 
 | ||||||
| export default class Constants { | export default class Constants { | ||||||
|      |      | ||||||
|     public static vNumber = "0.9.2"; |     public static vNumber = "0.9.3"; | ||||||
| 
 | 
 | ||||||
|     // The user journey states thresholds when a new feature gets unlocked
 |     // The user journey states thresholds when a new feature gets unlocked
 | ||||||
|     public static userJourney = { |     public static userJourney = { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue