Use compiler-safe Reanimated get/set APIs (#6391)
* Convert lightbox to get/set * Work around software-mansion/react-native-reanimated#6613 * Use get/set in more places * Port MainScrollProvider to get/set * Port more to get/set * Port composer to get/set * Remove unnecessary thread hops in composer * Port more things to get/set * Convert more to get/set, remove redundant runOnJS * Convert remaining cases to get/set
This commit is contained in:
@@ -1267,12 +1267,12 @@ function useScrollTracker({
|
||||
const contentHeight = useSharedValue(0)
|
||||
|
||||
const hasScrolledToTop = useDerivedValue(() =>
|
||||
withTiming(contentOffset.value === 0 ? 1 : 0),
|
||||
withTiming(contentOffset.get() === 0 ? 1 : 0),
|
||||
)
|
||||
|
||||
const hasScrolledToBottom = useDerivedValue(() =>
|
||||
withTiming(
|
||||
contentHeight.value - contentOffset.value - 5 <= scrollViewHeight.value
|
||||
contentHeight.get() - contentOffset.get() - 5 <= scrollViewHeight.get()
|
||||
? 1
|
||||
: 0,
|
||||
),
|
||||
@@ -1290,11 +1290,11 @@ function useScrollTracker({
|
||||
}) => {
|
||||
'worklet'
|
||||
if (typeof newContentHeight === 'number')
|
||||
contentHeight.value = Math.floor(newContentHeight)
|
||||
contentHeight.set(Math.floor(newContentHeight))
|
||||
if (typeof newContentOffset === 'number')
|
||||
contentOffset.value = Math.floor(newContentOffset)
|
||||
contentOffset.set(Math.floor(newContentOffset))
|
||||
if (typeof newScrollViewHeight === 'number')
|
||||
scrollViewHeight.value = Math.floor(newScrollViewHeight)
|
||||
scrollViewHeight.set(Math.floor(newScrollViewHeight))
|
||||
},
|
||||
[contentHeight, contentOffset, scrollViewHeight],
|
||||
)
|
||||
@@ -1310,21 +1310,22 @@ function useScrollTracker({
|
||||
},
|
||||
})
|
||||
|
||||
const onScrollViewContentSizeChange = useCallback(
|
||||
(_width: number, height: number) => {
|
||||
if (stickyBottom && height > contentHeight.value) {
|
||||
const onScrollViewContentSizeChangeUIThread = useCallback(
|
||||
(newContentHeight: number) => {
|
||||
'worklet'
|
||||
const oldContentHeight = contentHeight.get()
|
||||
let shouldScrollToBottom = false
|
||||
if (stickyBottom && newContentHeight > oldContentHeight) {
|
||||
const isFairlyCloseToBottom =
|
||||
contentHeight.value - contentOffset.value - 100 <=
|
||||
scrollViewHeight.value
|
||||
oldContentHeight - contentOffset.get() - 100 <= scrollViewHeight.get()
|
||||
if (isFairlyCloseToBottom) {
|
||||
runOnUI(() => {
|
||||
scrollTo(scrollViewRef, 0, contentHeight.value, true)
|
||||
})()
|
||||
shouldScrollToBottom = true
|
||||
}
|
||||
}
|
||||
showHideBottomBorder({
|
||||
newContentHeight: height,
|
||||
})
|
||||
showHideBottomBorder({newContentHeight})
|
||||
if (shouldScrollToBottom) {
|
||||
scrollTo(scrollViewRef, 0, newContentHeight, true)
|
||||
}
|
||||
},
|
||||
[
|
||||
showHideBottomBorder,
|
||||
@@ -1336,6 +1337,13 @@ function useScrollTracker({
|
||||
],
|
||||
)
|
||||
|
||||
const onScrollViewContentSizeChange = useCallback(
|
||||
(_width: number, height: number) => {
|
||||
runOnUI(onScrollViewContentSizeChangeUIThread)(height)
|
||||
},
|
||||
[onScrollViewContentSizeChangeUIThread],
|
||||
)
|
||||
|
||||
const onScrollViewLayout = useCallback(
|
||||
(evt: LayoutChangeEvent) => {
|
||||
showHideBottomBorder({
|
||||
@@ -1349,7 +1357,7 @@ function useScrollTracker({
|
||||
return {
|
||||
borderBottomWidth: StyleSheet.hairlineWidth,
|
||||
borderColor: interpolateColor(
|
||||
hasScrolledToTop.value,
|
||||
hasScrolledToTop.get(),
|
||||
[0, 1],
|
||||
[t.atoms.border_contrast_medium.borderColor, 'transparent'],
|
||||
),
|
||||
@@ -1359,7 +1367,7 @@ function useScrollTracker({
|
||||
return {
|
||||
borderTopWidth: StyleSheet.hairlineWidth,
|
||||
borderColor: interpolateColor(
|
||||
hasScrolledToBottom.value,
|
||||
hasScrolledToBottom.get(),
|
||||
[0, 1],
|
||||
[t.atoms.border_contrast_medium.borderColor, 'transparent'],
|
||||
),
|
||||
@@ -1604,7 +1612,7 @@ function VideoUploadToolbar({state}: {state: VideoState}) {
|
||||
|
||||
const animatedStyle = useAnimatedStyle(() => {
|
||||
return {
|
||||
transform: [{rotateZ: `${rotate.value}deg`}],
|
||||
transform: [{rotateZ: `${rotate.get()}deg`}],
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user