import React from "react";
import { LayoutChangeEvent, ScrollViewProps } from "react-native";
import { ScrollView } from "react-native-gesture-handler";
import Animated, { useAnimatedScrollHandler } from "react-native-reanimated";
import {
NestableScrollContainerProvider,
useSafeNestableScrollContainerContext,
} from "../context/nestableScrollContainerContext";
import { useStableCallback } from "../hooks/useStableCallback";
const AnimatedScrollView = Animated.createAnimatedComponent(ScrollView);
function NestableScrollContainerInner(props: ScrollViewProps) {
const {
outerScrollOffset,
containerSize,
scrollViewSize,
scrollableRef,
outerScrollEnabled,
} = useSafeNestableScrollContainerContext();
const onScroll = useAnimatedScrollHandler({
onScroll: ({ contentOffset }) => {
outerScrollOffset.value = contentOffset.y;
},
});
const onLayout = useStableCallback((event: LayoutChangeEvent) => {
const {
nativeEvent: { layout },
} = event;
containerSize.value = layout.height;
});
const onContentSizeChange = useStableCallback((w: number, h: number) => {
scrollViewSize.value = h;
props.onContentSizeChange?.(w, h);
});
return (
);
}
export const NestableScrollContainer = React.forwardRef(
(props: ScrollViewProps, forwardedRef?: React.ForwardedRef) => {
return (
) || undefined
}
>
);
}
);