Skip to content
This repository was archived by the owner on Nov 5, 2023. It is now read-only.

Commit b9553e6

Browse files
committed
fix: schedule the observables of useResizeObserver on animationFrameScheduler
This fixes "ResizeObserver loop completed with undelivered notifications." in Safari. See https://blog.elantha.com/resizeobserver-loop-limit-exceeded/
1 parent f598b0b commit b9553e6

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/utilites.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import {
2+
animationFrameScheduler,
23
filter,
34
fromEvent,
45
fromEventPattern,
56
mergeAll,
67
Observable,
78
pluck,
9+
scheduled,
810
} from "rxjs";
911
import { Ref, ref, watchEffect } from "vue";
1012
import { partial, pipe, unary } from "ramda";
@@ -29,8 +31,11 @@ export function fromResizeObserver<T extends keyof ResizeObserverEntry>(
2931
elRef: MaybeElementRef,
3032
pluckTarget: T
3133
): Observable<ResizeObserverEntry[T]> {
32-
return fromEventPattern<ResizeObserverEntry[]>(
33-
pipe(unary, partial(useResizeObserver, [elRef]))
34+
return scheduled(
35+
fromEventPattern<ResizeObserverEntry[]>(
36+
pipe(unary, partial(useResizeObserver, [elRef]))
37+
),
38+
animationFrameScheduler
3439
).pipe(mergeAll(), pluck<ResizeObserverEntry, T>(pluckTarget));
3540
}
3641

0 commit comments

Comments
 (0)