import {useCallback, useImperativeHandle, useState} from 'react' import {View} from 'react-native' import {type AppBskyGraphDefs} from '@atproto/api' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {isNative} from '#/platform/detection' import {useSession} from '#/state/session' import {ListMembers} from '#/view/com/lists/ListMembers' import {EmptyState} from '#/view/com/util/EmptyState' import {type ListRef} from '#/view/com/util/List' import {LoadLatestBtn} from '#/view/com/util/load-latest/LoadLatestBtn' import {atoms as a, useBreakpoints} from '#/alf' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import {PersonPlus_Stroke2_Corner0_Rounded as PersonPlusIcon} from '#/components/icons/Person' interface SectionRef { scrollToTop: () => void } interface AboutSectionProps { ref?: React.Ref list: AppBskyGraphDefs.ListView onPressAddUser: () => void headerHeight: number scrollElRef: ListRef } export function AboutSection({ ref, list, onPressAddUser, headerHeight, scrollElRef, }: AboutSectionProps) { const {_} = useLingui() const {currentAccount} = useSession() const {gtMobile} = useBreakpoints() const [isScrolledDown, setIsScrolledDown] = useState(false) const isOwner = list.creator.did === currentAccount?.did const onScrollToTop = useCallback(() => { scrollElRef.current?.scrollToOffset({ animated: isNative, offset: -headerHeight, }) }, [scrollElRef, headerHeight]) useImperativeHandle(ref, () => ({ scrollToTop: onScrollToTop, })) const renderHeader = useCallback(() => { if (!isOwner) { return } if (!gtMobile) { return ( ) } return ( ) }, [isOwner, _, onPressAddUser, gtMobile]) const renderEmptyState = useCallback(() => { return ( {isOwner && ( )} ) }, [_, onPressAddUser, isOwner]) return ( {isScrolledDown && ( )} ) }