@@ -7,52 +7,32 @@ import {
7
7
} from "recyclerlistview" ;
8
8
import { DefaultJSItemAnimator } from "recyclerlistview/dist/reactnative/platform/reactnative/itemanimators/defaultjsanimator/DefaultJSItemAnimator" ;
9
9
10
- const invertedWheelEventHandler = ( event : globalThis . WheelEvent ) => {
11
- const node = event . currentTarget as HTMLElement ;
10
+ const createInvertedWheelEventHandler = ( type : "horizontal" | "vertical" ) => {
11
+ return ( event : globalThis . WheelEvent ) => {
12
+ const node = event . currentTarget as HTMLElement ;
12
13
13
- // For inverted lists, we want to scroll in the opposite direction
14
- // So when deltaY is positive (scroll down), we want to scroll up
15
- const deltaY = - event . deltaY ;
16
- const deltaX = - event . deltaX ;
14
+ const deltaX = type === "horizontal" ? - event . deltaX : event . deltaX ;
15
+ const deltaY = type === "vertical" ? - event . deltaY : event . deltaY ;
17
16
18
- // Scroll by the inverted delta
19
- node . scrollBy ( {
20
- top : deltaY ,
21
- left : deltaX ,
22
- behavior : "auto" ,
23
- } ) ;
17
+ node . scrollBy ( {
18
+ top : deltaY ,
19
+ left : deltaX ,
20
+ behavior : "auto" ,
21
+ } ) ;
24
22
25
- // Prevent the default scroll
26
- event . preventDefault ( ) ;
23
+ event . preventDefault ( ) ;
24
+ } ;
27
25
} ;
28
26
27
+ const verticalInvertedWheelEventHandler =
28
+ createInvertedWheelEventHandler ( "vertical" ) ;
29
+ const horizontalInvertedWheelEventHandler =
30
+ createInvertedWheelEventHandler ( "horizontal" ) ;
31
+
29
32
const PlatformConfig = {
30
33
defaultDrawDistance : 2000 ,
31
34
invertedTransformStyle : { transform : [ { scaleY : - 1 } ] } ,
32
35
invertedTransformStyleHorizontal : { transform : [ { scaleX : - 1 } ] } ,
33
- addInvertedWheelHandler : (
34
- ref : RecyclerListView < RecyclerListViewProps , any > | undefined
35
- ) : ( ( event : globalThis . WheelEvent ) => void ) | undefined => {
36
- if ( ! ref ) return undefined ;
37
- const node = findNodeHandle ( ref ) as unknown as HTMLElement ;
38
- if ( node ) {
39
- node . addEventListener ( "wheel" , invertedWheelEventHandler , {
40
- passive : false ,
41
- } ) ;
42
- return invertedWheelEventHandler ;
43
- }
44
- return undefined ;
45
- } ,
46
- removeInvertedWheelHandler : (
47
- ref : RecyclerListView < RecyclerListViewProps , any > | undefined
48
- ) : ( ( event : globalThis . WheelEvent ) => void ) | undefined => {
49
- if ( ! ref ) return undefined ;
50
- const node = findNodeHandle ( ref ) as unknown as HTMLElement ;
51
- if ( node ) {
52
- node . removeEventListener ( "wheel" , invertedWheelEventHandler ) ;
53
- }
54
- return undefined ;
55
- } ,
56
36
} ;
57
37
const getCellContainerPlatformStyles = (
58
38
inverted : boolean ,
@@ -71,10 +51,41 @@ const getItemAnimator = (): BaseItemAnimator | undefined => {
71
51
const getFooterContainer = ( ) : React . ComponentClass | undefined => {
72
52
return View ;
73
53
} ;
54
+ const addInvertedWheelHandler = (
55
+ ref : RecyclerListView < RecyclerListViewProps , any > | undefined ,
56
+ type : "horizontal" | "vertical"
57
+ ) : ( ( event : globalThis . WheelEvent ) => void ) | undefined => {
58
+ if ( ! ref ) return undefined ;
59
+ const node = findNodeHandle ( ref ) as unknown as HTMLElement ;
60
+ if ( node ) {
61
+ const handler =
62
+ type === "horizontal"
63
+ ? horizontalInvertedWheelEventHandler
64
+ : verticalInvertedWheelEventHandler ;
65
+ node . addEventListener ( "wheel" , handler , {
66
+ passive : false ,
67
+ } ) ;
68
+ return handler ;
69
+ }
70
+ return undefined ;
71
+ } ;
72
+ const removeInvertedWheelHandler = (
73
+ ref : RecyclerListView < RecyclerListViewProps , any > | undefined
74
+ ) : ( ( event : globalThis . WheelEvent ) => void ) | undefined => {
75
+ if ( ! ref ) return undefined ;
76
+ const node = findNodeHandle ( ref ) as unknown as HTMLElement ;
77
+ if ( node ) {
78
+ node . removeEventListener ( "wheel" , verticalInvertedWheelEventHandler ) ;
79
+ node . removeEventListener ( "wheel" , horizontalInvertedWheelEventHandler ) ;
80
+ }
81
+ return undefined ;
82
+ } ;
74
83
75
84
export {
76
85
PlatformConfig ,
77
86
getCellContainerPlatformStyles ,
78
87
getItemAnimator ,
79
88
getFooterContainer ,
89
+ addInvertedWheelHandler ,
90
+ removeInvertedWheelHandler ,
80
91
} ;
0 commit comments