about summary refs log tree commit diff
path: root/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts
blob: b94f49e4281b5ad5eac786bdc1aa4d2f231169e6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import {useRef, useEffect} from 'react'
import {useAnimatedScrollHandler as useAnimatedScrollHandler_BUGGY} from 'react-native-reanimated'

export const useAnimatedScrollHandler_FIXED: typeof useAnimatedScrollHandler_BUGGY =
  (config, deps) => {
    const ref = useRef(config)
    useEffect(() => {
      ref.current = config
    })
    return useAnimatedScrollHandler_BUGGY(
      {
        onBeginDrag(e, ctx) {
          if (typeof ref.current !== 'function' && ref.current.onBeginDrag) {
            ref.current.onBeginDrag(e, ctx)
          }
        },
        onEndDrag(e, ctx) {
          if (typeof ref.current !== 'function' && ref.current.onEndDrag) {
            ref.current.onEndDrag(e, ctx)
          }
        },
        onMomentumBegin(e, ctx) {
          if (
            typeof ref.current !== 'function' &&
            ref.current.onMomentumBegin
          ) {
            ref.current.onMomentumBegin(e, ctx)
          }
        },
        onMomentumEnd(e, ctx) {
          if (typeof ref.current !== 'function' && ref.current.onMomentumEnd) {
            ref.current.onMomentumEnd(e, ctx)
          }
        },
        onScroll(e, ctx) {
          if (typeof ref.current === 'function') {
            ref.current(e, ctx)
          } else if (ref.current.onScroll) {
            ref.current.onScroll(e, ctx)
          }
        },
      },
      deps,
    )
  }