Skip to content

Commit

Permalink
feat(cdk): allow passing injector to useFromEvent$
Browse files Browse the repository at this point in the history
closes #56
  • Loading branch information
michaelbe812 committed Jun 27, 2023
1 parent e8aff57 commit 08482ce
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions libs/cdk/rx-interop/src/lib/use-functions/use-from-event$.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import {ChangeDetectorRef, ElementRef, inject, NgZone} from '@angular/core';
import {ChangeDetectorRef, ElementRef, inject, Injector, NgZone, runInInjectionContext,} from '@angular/core';
import {distinctUntilChanged, fromEvent, Observable, ReplaySubject, takeUntil} from 'rxjs';
import {useOnDestroy} from './use-host-listener$';

export interface UseFromEventConfig {
zoneless?: boolean;
injector?: Injector;
}

/**
Expand Down Expand Up @@ -39,9 +40,25 @@ export function useFromEvent$<T extends Event>(
eventName: string,
cfg?: UseFromEventConfig
): Observable<T> {
const ngZone = inject(NgZone);
let events$!: Observable<T>;
if (cfg?.injector) {
runInInjectionContext(cfg?.injector, () => {
events$ = _useFromEvent$(elementOrRef, eventName, cfg);
});
} else {
events$ = _useFromEvent$(elementOrRef, eventName, cfg);
}
return events$;
}

function _useFromEvent$<T extends Event>(
elementOrRef: HTMLElement | ElementRef,
eventName: string,
cfg?: UseFromEventConfig
): Observable<T> {
const events$ = new ReplaySubject<T>(1);
const cdr = cfg?.zoneless ? undefined : inject(ChangeDetectorRef);
const ngZone = inject(NgZone);

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

Expand Down

0 comments on commit 08482ce

Please sign in to comment.