private async Task SetMarkerListeners() { if (_listeningLoneMarkerKeys == null) { _listeningLoneMarkerKeys = new List <string>(); } //use GetMappedValue<T> to map and extract the array of guid keys of unclustered markers GoogleMapsComponents.JsObjectRef jsRef = new GoogleMapsComponents.JsObjectRef(JsObjectRef, _markerClustering.Guid); var guidStrings = (await jsRef.GetMappedValue <List <string> >("clusters", "marker", "guidString")) .Where((x) => { return(x != null); }); if (!guidStrings.Any()) { return; } // Among markers not in clusters, find those which don't yet have a listener MarkerList deafLoneMarkersList = await MarkerList.CreateAsync(JsObjectRef, new Dictionary <string, MarkerOptions>()); foreach (var key in guidStrings) { var markr = markers.First(x => key == x.Guid.ToString()); if (_listeningLoneMarkerKeys.Contains(key)) { continue; } deafLoneMarkersList.BaseListableEntities.Add(key, markr); _listeningLoneMarkerKeys.Add(key); } if (!deafLoneMarkersList.BaseListableEntities.Any()) { return; } await deafLoneMarkersList.AddListeners <MouseEvent>(deafLoneMarkersList.Markers.Keys.ToList(), "click", async (o, e) => { //await JsObjectRef.InvokeVoidAsync("loneMarkerClickEvent", e); }); // if all points set, clean up idle listener. if (_listeningLoneMarkerKeys.Count == markers.Count) { _listeningLoneMarkerKeys = null; await _markerClustering.ClearListeners("clusteringend"); } }
public async static Task <JsObjectRef> CreateAsync( IJSRuntime jsRuntime, Guid guid, string functionName, params object[] args) { var jsObjectRef = new JsObjectRef(jsRuntime, guid); await jsRuntime.MyInvokeAsync <object>( "googleMapsObjectManager.createObject", new object[] { guid.ToString(), functionName } .Concat(args).ToArray() ); return(jsObjectRef); }