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

Commit 5375990

Browse files
committed
refactor: fromWindowScroll()
1 parent fe59c21 commit 5375990

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

src/Grid.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ export default defineComponent({
6868
},
6969
setup(props) {
7070
// template refs
71-
const rootRef = ref<Element>(document.createElement("div"));
72-
const probeRef = ref<Element>(document.createElement("div"));
71+
const rootRef = ref<Element>();
72+
const probeRef = ref<Element>();
7373
7474
// data to render
7575
const {
@@ -85,7 +85,7 @@ export default defineComponent({
8585
// a stream of root elements when it is resized
8686
rootResize$: fromResizeObserver(rootRef, "target"),
8787
// a stream of root elements when scrolling
88-
scroll$: fromWindowScroll(() => rootRef.value),
88+
scroll$: fromWindowScroll(rootRef),
8989
});
9090
9191
return {

src/utilites.ts

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import { fromEvent, fromEventPattern, Observable } from "rxjs";
2-
import { Ref, watchEffect } from "vue";
2+
import { watchEffect } from "vue";
33
import { partial, pipe, unary } from "ramda";
4-
import { ResizeObserverEntry, useResizeObserver } from "@vueuse/core";
5-
import { mergeAll, pluck } from "rxjs/operators";
4+
import {
5+
MaybeElementRef,
6+
ResizeObserverEntry,
7+
unrefElement,
8+
useResizeObserver,
9+
} from "@vueuse/core";
10+
import { filter, map, mergeAll, pluck } from "rxjs/operators";
611

712
export function fromProp<T, U extends keyof T>(
813
props: T,
@@ -14,24 +19,22 @@ export function fromProp<T, U extends keyof T>(
1419
}
1520

1621
export function fromResizeObserver<T extends keyof ResizeObserverEntry>(
17-
elRef: Ref<Element>,
22+
elRef: MaybeElementRef,
1823
pluckTarget: T
1924
): Observable<ResizeObserverEntry[T]> {
2025
return fromEventPattern<ResizeObserverEntry[]>(
2126
pipe(unary, partial(useResizeObserver, [elRef]))
2227
).pipe(mergeAll(), pluck<ResizeObserverEntry, T>(pluckTarget));
2328
}
2429

25-
export function fromWindowScroll<T>(
26-
resultSelector: (e: Event) => T
27-
): Observable<T> {
28-
// @ts-expect-error Rxjs has a typing bug on fromEvent() with resultSelector,
29-
// which is fixed in https://github.com/ReactiveX/rxjs/pull/6447.
30-
// TODO: Remove this comment when the PR above is merged.
31-
return fromEvent(
32-
window,
33-
"scroll",
34-
{ passive: true, capture: true },
35-
resultSelector
30+
export function fromWindowScroll(elRef: MaybeElementRef): Observable<Element> {
31+
return fromEvent(window, "scroll", {
32+
passive: true,
33+
capture: true,
34+
}).pipe(
35+
map(() => unrefElement(elRef)),
36+
filter<Element | undefined | null, Element>((el): el is Element =>
37+
Boolean(el)
38+
)
3639
);
3740
}

0 commit comments

Comments
 (0)