Skip to content

Commit e8aff57

Browse files
committed
feat(cdk): allow passing injector to useHostListener$
closes #55
1 parent 7d8560f commit e8aff57

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

libs/cdk/rx-interop/src/lib/use-functions/use-host-listener$.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import {ChangeDetectorRef, ElementRef, inject, NgZone, ViewRef} from '@angular/core';
1+
import {ChangeDetectorRef, ElementRef, inject, Injector, NgZone, runInInjectionContext, ViewRef} from '@angular/core';
22
import {distinctUntilChanged, fromEvent, Observable, ReplaySubject, takeUntil} from 'rxjs';
33

44
export interface UseHostListenerConfig {
55
zoneless?: boolean;
6+
injector?: Injector;
67
}
78
/**
89
*
@@ -23,6 +24,18 @@ export interface UseHostListenerConfig {
2324
export function useHostListener$<T extends Event>(eventName: string): Observable<T>;
2425
export function useHostListener$<T extends Event>(eventName: string, cfg: UseHostListenerConfig): Observable<T>;
2526
export function useHostListener$<T extends Event>(eventName: string, cfg?: UseHostListenerConfig): Observable<T> {
27+
let events$!: Observable<T>;
28+
if (cfg?.injector) {
29+
runInInjectionContext(cfg?.injector, () => {
30+
events$ = _useHostListener$(eventName, cfg);
31+
});
32+
} else {
33+
events$ = _useHostListener$(eventName, cfg);
34+
}
35+
return events$;
36+
}
37+
38+
function _useHostListener$<T extends Event>(eventName: string, cfg?: UseHostListenerConfig): Observable<T> {
2639
const { nativeElement } = inject(ElementRef);
2740
const ngZone = inject(NgZone);
2841
const cdr = cfg?.zoneless ? undefined : inject(ChangeDetectorRef);

0 commit comments

Comments
 (0)