Skip to content

Commit 08482ce

Browse files
committed
feat(cdk): allow passing injector to useFromEvent$
closes #56
1 parent e8aff57 commit 08482ce

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

libs/cdk/rx-interop/src/lib/use-functions/use-from-event$.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import {ChangeDetectorRef, ElementRef, inject, NgZone} from '@angular/core';
1+
import {ChangeDetectorRef, ElementRef, inject, Injector, NgZone, runInInjectionContext,} from '@angular/core';
22
import {distinctUntilChanged, fromEvent, Observable, ReplaySubject, takeUntil} from 'rxjs';
33
import {useOnDestroy} from './use-host-listener$';
44

55
export interface UseFromEventConfig {
66
zoneless?: boolean;
7+
injector?: Injector;
78
}
89

910
/**
@@ -39,9 +40,25 @@ export function useFromEvent$<T extends Event>(
3940
eventName: string,
4041
cfg?: UseFromEventConfig
4142
): Observable<T> {
42-
const ngZone = inject(NgZone);
43+
let events$!: Observable<T>;
44+
if (cfg?.injector) {
45+
runInInjectionContext(cfg?.injector, () => {
46+
events$ = _useFromEvent$(elementOrRef, eventName, cfg);
47+
});
48+
} else {
49+
events$ = _useFromEvent$(elementOrRef, eventName, cfg);
50+
}
51+
return events$;
52+
}
53+
54+
function _useFromEvent$<T extends Event>(
55+
elementOrRef: HTMLElement | ElementRef,
56+
eventName: string,
57+
cfg?: UseFromEventConfig
58+
): Observable<T> {
4359
const events$ = new ReplaySubject<T>(1);
4460
const cdr = cfg?.zoneless ? undefined : inject(ChangeDetectorRef);
61+
const ngZone = inject(NgZone);
4562

4663
const el = elementOrRef instanceof ElementRef ? elementOrRef?.nativeElement : elementOrRef;
4764

0 commit comments

Comments
 (0)