MCPcopy Create free account
hub / github.com/angular/components / getLazyEmitter

Method getLazyEmitter

src/google-maps/map-event-manager.ts:52–97  ·  view source on GitHub ↗

* Gets an observable that adds an event listener to the map when a consumer subscribes to it. * @param name Name of the event for which the observable is being set up. * @param type Type of the event (e.g. one going to a DOM node or a custom Maps one).

(name: string, type?: 'custom' | 'native')

Source from the content-addressed store, hash-verified

50 * @param type Type of the event (e.g. one going to a DOM node or a custom Maps one).
51 */
52 getLazyEmitter<T>(name: string, type?: 'custom' | 'native'): Observable<T> {
53 return this._targetStream.pipe(
54 switchMap(target => {
55 const observable = new Observable<T>(observer => {
56 // If the target hasn't been initialized yet, cache the observer so it can be added later.
57 if (!target) {
58 this._pending.push({observable, observer});
59 return undefined;
60 }
61
62 let handle: ListenerHandle;
63 const listener = (event: T) => {
64 this._ngZone.run(() => observer.next(event));
65 };
66
67 if (type === 'native') {
68 if (
69 (typeof ngDevMode === 'undefined' || ngDevMode) &&
70 (!target.addEventListener || !target.removeEventListener)
71 ) {
72 throw new Error(
73 'Maps event target that uses native events must have `addEventListener` and `removeEventListener` methods.',
74 );
75 }
76
77 target.addEventListener!(name, listener);
78 handle = {remove: () => target.removeEventListener!(name, listener)};
79 } else {
80 handle = target.addListener(name, listener)!;
81 }
82
83 // If there's an error when initializing the Maps API (e.g. a wrong API key), it will
84 // return a dummy object that returns `undefined` from `addListener` (see #26514).
85 if (!handle) {
86 observer.complete();
87 return undefined;
88 }
89
90 this._listeners.push(handle);
91 return () => handle.remove();
92 });
93
94 return observable;
95 }),
96 );
97 }
98
99 /** Sets the current target that the manager should bind events to. */
100 setTarget(target: MapEventManagerTarget) {

Callers 14

MapGroundOverlayClass · 0.80
MapMarkerClustererClass · 0.80
MapPolygonClass · 0.80
MapAdvancedMarkerClass · 0.80
MapMarkerClass · 0.80
MapRectangleClass · 0.80
MapInfoWindowClass · 0.80
GoogleMapClass · 0.80
MapCircleClass · 0.80

Calls 3

addListenerMethod · 0.80
pushMethod · 0.65
removeMethod · 0.65

Tested by

no test coverage detected