diff options
author | dan <dan.abramov@gmail.com> | 2023-11-10 14:58:13 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-10 14:58:13 +0000 |
commit | 8d7475c13069f99170b40d696a7371c94020ef46 (patch) | |
tree | 8f15343497ac7d7404d028a62ed2ecd20fd1814b /src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts | |
parent | 487d871cfd89948f4db9944c4bb414d268a56537 (diff) | |
download | voidsky-8d7475c13069f99170b40d696a7371c94020ef46.tar.zst |
Work around web stale closure bug in Reanimated (#1865)
Diffstat (limited to 'src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts')
-rw-r--r-- | src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts b/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts new file mode 100644 index 000000000..131e7bdd7 --- /dev/null +++ b/src/lib/hooks/useAnimatedScrollHandler_FIXED.web.ts @@ -0,0 +1,44 @@ +import {useRef, useEffect} from 'react' +import {useAnimatedScrollHandler as useAnimatedScrollHandler_BUGGY} from 'react-native-reanimated' + +export const useAnimatedScrollHandler: typeof useAnimatedScrollHandler_BUGGY = ( + config, + deps, +) => { + const ref = useRef(config) + useEffect(() => { + ref.current = config + }) + return useAnimatedScrollHandler_BUGGY( + { + onBeginDrag(e) { + if (typeof ref.current !== 'function' && ref.current.onBeginDrag) { + ref.current.onBeginDrag(e) + } + }, + onEndDrag(e) { + if (typeof ref.current !== 'function' && ref.current.onEndDrag) { + ref.current.onEndDrag(e) + } + }, + onMomentumBegin(e) { + if (typeof ref.current !== 'function' && ref.current.onMomentumBegin) { + ref.current.onMomentumBegin(e) + } + }, + onMomentumEnd(e) { + if (typeof ref.current !== 'function' && ref.current.onMomentumEnd) { + ref.current.onMomentumEnd(e) + } + }, + onScroll(e) { + if (typeof ref.current === 'function') { + ref.current(e) + } else if (ref.current.onScroll) { + ref.current.onScroll(e) + } + }, + }, + deps, + ) +} |