1
1
import { fromEvent , fromEventPattern , Observable } from "rxjs" ;
2
- import { Ref , watchEffect } from "vue" ;
2
+ import { watchEffect } from "vue" ;
3
3
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" ;
6
11
7
12
export function fromProp < T , U extends keyof T > (
8
13
props : T ,
@@ -14,24 +19,22 @@ export function fromProp<T, U extends keyof T>(
14
19
}
15
20
16
21
export function fromResizeObserver < T extends keyof ResizeObserverEntry > (
17
- elRef : Ref < Element > ,
22
+ elRef : MaybeElementRef ,
18
23
pluckTarget : T
19
24
) : Observable < ResizeObserverEntry [ T ] > {
20
25
return fromEventPattern < ResizeObserverEntry [ ] > (
21
26
pipe ( unary , partial ( useResizeObserver , [ elRef ] ) )
22
27
) . pipe ( mergeAll ( ) , pluck < ResizeObserverEntry , T > ( pluckTarget ) ) ;
23
28
}
24
29
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
+ )
36
39
) ;
37
40
}
0 commit comments