From a8c7539ec2df3091db851ec68262c443dfbb90d8 Mon Sep 17 00:00:00 2001 From: arturovt Date: Fri, 11 Jul 2025 01:05:18 +0300 Subject: [PATCH] refactor: reduce RxJS overhead This commit removes the usage of `fromEvent`, as developers may not rely on this function at all, yet it was being bundled into the main bundle due to a single usage in the scroll register. --- .../src/lib/services/scroll-register.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/projects/ngx-infinite-scroll/src/lib/services/scroll-register.ts b/projects/ngx-infinite-scroll/src/lib/services/scroll-register.ts index 18f31c4c..961f35f5 100644 --- a/projects/ngx-infinite-scroll/src/lib/services/scroll-register.ts +++ b/projects/ngx-infinite-scroll/src/lib/services/scroll-register.ts @@ -1,5 +1,5 @@ -import { Observable, of, fromEvent } from 'rxjs'; -import { map, mergeMap, tap, throttleTime, filter } from 'rxjs/operators'; +import { Observable } from 'rxjs'; +import { map, tap, throttleTime, filter } from 'rxjs/operators'; import * as Models from '../../models'; import { AxisResolver } from './axis-resolver'; @@ -32,7 +32,7 @@ export function createScroller(config: Models.IScroller) { down: config.downDistance, }; return attachScrollEvent(options).pipe( - mergeMap(() => of(calculatePoints(element, resolver))), + map(() => calculatePoints(element, resolver)), map((positionStats: Models.IPositionStats) => toInfiniteScrollParams( scrollState.lastScrollPosition, @@ -61,7 +61,11 @@ export function createScroller(config: Models.IScroller) { export function attachScrollEvent( options: Models.IScrollRegisterConfig ): Observable<{}> { - let obs = fromEvent(options.container, 'scroll'); + let obs = new Observable((subscriber) => { + const onScroll = (event: Event) => subscriber.next(event); + options.container.addEventListener('scroll', onScroll); + return () => options.container.removeEventListener('scroll', onScroll); + }); // For an unknown reason calling `sampleTime()` causes trouble for many users, even with `options.throttle = 0`. // Let's avoid calling the function unless needed. // Replacing with throttleTime seems to solve the problem