import * as React from 'react'; import type { FlatList } from 'react-native'; import { View } from 'react-native'; import Animated, { useAnimatedStyle } from 'react-native-reanimated'; import { commonStyles } from '../../constants'; import { StickyHeaderFlatList } from '../../primitiveComponents/StickyHeaderFlatList'; import { parseAnimatedColorProp } from '../common/utils/parseAnimatedColorProp'; import type { AvatarHeaderFlatListProps } from './AvatarHeaderProps'; import { HeaderBar } from './components/HeaderBar'; import { useAvatarHeader } from './hooks/useAvatarHeader'; function AvatarHeaderFlatListInner( props: AvatarHeaderFlatListProps, ref: React.ForwardedRef> ) { const { backgroundColor, contentContainerStyle, data, decelerationRate = 'fast', enableSafeAreaTopInset = true, image, keyExtractor, leftTopIcon, leftTopIconAccessibilityLabel, leftTopIconOnPress, leftTopIconTestID, nestedScrollEnabled = true, overScrollMode = 'never', renderHeader, renderHeaderBar, renderItem, rightTopIcon, rightTopIconAccessibilityLabel, rightTopIconOnPress, rightTopIconTestID, scrollEventThrottle = 16, title, titleStyle, ...rest } = props; const { onMomentumScrollEnd, onScroll, onScrollEndDrag, parallaxHeight, renderHeader: defaultRenderHeader, scrollValue, scrollViewRef, } = useAvatarHeader>(props); React.useImperativeHandle(ref, () => scrollViewRef.current as FlatList); const wrapperAnimatedStyle = useAnimatedStyle(() => { return { backgroundColor: parseAnimatedColorProp(backgroundColor), }; }, [backgroundColor]); return ( {renderHeaderBar ? ( renderHeaderBar() ) : ( )} ); } type AvatarHeaderFlatListType = ( props: AvatarHeaderFlatListProps & React.RefAttributes> ) => React.ReactElement; export const AvatarHeaderFlatList = React.forwardRef( AvatarHeaderFlatListInner ) as AvatarHeaderFlatListType;