import menuAccount from '@components/contextMenu/account' import menuShare from '@components/contextMenu/share' import { HeaderLeft, HeaderRight } from '@components/Header' import Timeline from '@components/Timeline' import TimelineDefault from '@components/Timeline/Default' import SegmentedControl from '@react-native-community/segmented-control' import { TabSharedStackScreenProps } from '@utils/navigation/navigators' import { useAccountQuery } from '@utils/queryHooks/account' import { QueryKeyTimeline } from '@utils/queryHooks/timeline' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React, { useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import { Text, View } from 'react-native' import { useSharedValue } from 'react-native-reanimated' import { useIsFetching } from 'react-query' import * as DropdownMenu from 'zeego/dropdown-menu' import AccountAttachments from './Account/Attachments' import AccountHeader from './Account/Header' import AccountInformation from './Account/Information' import AccountNav from './Account/Nav' const TabSharedAccount: React.FC> = ({ navigation, route: { params: { account } } }) => { const { t, i18n } = useTranslation('screenTabs') const { colors, mode } = useTheme() const mShare = menuShare({ type: 'account', url: account.url }) const mAccount = menuAccount({ type: 'account', openChange: true, account }) useEffect(() => { navigation.setOptions({ headerTransparent: true, headerStyle: { backgroundColor: `rgba(255, 255, 255, 0)` }, title: '', headerLeft: () => navigation.goBack()} background />, headerRight: () => { return ( {}} background /> {mShare.map((mGroup, index) => ( {mGroup.map(menu => ( ))} ))} {mAccount.map((mGroup, index) => ( {mGroup.map(menu => ( ))} ))} ) } }) }, []) const { data } = useAccountQuery({ id: account.id }) const scrollY = useSharedValue(0) const [queryKey, setQueryKey] = useState([ 'Timeline', { page: 'Account_Default', account: account.id } ]) const isFetchingTimeline = useIsFetching(queryKey) const fetchedTimeline = useRef(false) useEffect(() => { if (!isFetchingTimeline && !fetchedTimeline.current) { fetchedTimeline.current = true } }, [isFetchingTimeline, fetchedTimeline.current]) const ListHeaderComponent = useMemo(() => { return ( <> {!data?.suspended && fetchedTimeline.current ? ( ) : null} {!data?.suspended ? ( { switch (nativeEvent.selectedSegmentIndex) { case 0: setQueryKey([queryKey[0], { ...queryKey[1], page: 'Account_Default' }]) break case 1: setQueryKey([queryKey[0], { ...queryKey[1], page: 'Account_All' }]) break } }} style={{ marginTop: StyleConstants.Spacing.M, marginHorizontal: StyleConstants.Spacing.Global.PagePadding }} /> ) : null} {data?.suspended ? ( {t('shared.account.suspended')} ) : null} ) }, [data, fetchedTimeline.current, queryKey[1].page, i18n.language, mode]) return ( <> {data?.suspended ? ( ListHeaderComponent ) : ( , onScroll: ({ nativeEvent }) => (scrollY.value = nativeEvent.contentOffset.y), ListHeaderComponent, maintainVisibleContentPosition: undefined }} /> )} ) } export default TabSharedAccount