using Microsoft.JSInterop; using System.Threading.Tasks; namespace cwebplusApp.Shared.Services { public class PermissionsProvider { private bool _isGeoLocationAllowed; public delegate void GeoLocationPermissionChangeCallBack(); private GeoLocationPermissionChangeCallBack _geoLocationPermissionChangeCallBack; public IJSRuntime JSRuntime { get; set; } public bool IsGeoLocationAllowed { get { return _isGeoLocationAllowed; } set { _isGeoLocationAllowed = value; } } public PermissionsProvider(IJSRuntime _jSRuntime) { this.JSRuntime = _jSRuntime; } [JSInvokable] public void GeoLocationPermissionChanged(string geoLocationStatus) { IsGeoLocationAllowed = (geoLocationStatus.Equals("granted") || geoLocationStatus.Equals("prompt")) ? true : false; _geoLocationPermissionChangeCallBack(); } public void SetGeoLocationPermissionChangeCallBack(GeoLocationPermissionChangeCallBack callback) { _geoLocationPermissionChangeCallBack = callback; } public void RemoveOnlineStatusChangeCallBack() { _geoLocationPermissionChangeCallBack = null; } public async Task GeoLocationAllowed() { var dotNetObjRef = DotNetObjectReference.Create(this); string result = await JSRuntime.InvokeAsync("IsGeoLocationAllowed", dotNetObjRef); this.IsGeoLocationAllowed = result.Equals("granted") || result.Equals("prompt"); return IsGeoLocationAllowed; } } }