import { HeaderRight } from '@components/Header' import Icon from '@components/Icon' import CustomText from '@components/Text' import Timeline from '@components/Timeline' import menuAccount from '@components/contextMenu/account' import menuShare from '@components/contextMenu/share' import { TabSharedStackScreenProps } from '@utils/navigation/navigators' import { queryClient } from '@utils/queryHooks' import { useAccountQuery } from '@utils/queryHooks/account' import { useRelationshipQuery } from '@utils/queryHooks/relationship' import { QueryKeyTimeline } from '@utils/queryHooks/timeline' import { useAccountStorage } from '@utils/storage/actions' import { useTheme } from '@utils/styles/ThemeManager' import { StyleConstants } from '@utils/styles/constants' import React, { Fragment, useEffect, useMemo } from 'react' import { useTranslation } from 'react-i18next' import { Platform, Pressable, Text, View } from 'react-native' import { useSharedValue } from 'react-native-reanimated' import * as DropdownMenu from 'zeego/dropdown-menu' import AccountAttachments from './Attachments' import AccountContext from './Context' import AccountHeader from './Header' import AccountInformation from './Information' import AccountNav from './Nav' const TabSharedAccount: React.FC> = ({ navigation, route: { params: { account } } }) => { const { t } = useTranslation(['common', 'screenTabs']) const { colors, mode } = useTheme() const { data, dataUpdatedAt, isFetched } = useAccountQuery({ account, _local: true, options: { placeholderData: (account._remote ? { ...account, id: undefined } : account) as Mastodon.Account, onError: () => navigation.goBack() } }) const { data: dataRelationship } = useRelationshipQuery({ id: data?.id, options: { enabled: account._remote ? isFetched : true } }) const queryKeyDefault: QueryKeyTimeline = [ 'Timeline', { page: 'Account', type: 'default', id: data?.id, ...(account._remote && { remote_id: account.id, remote_domain: account._remote }) } ] useEffect(() => { navigation.setParams({ queryKey: queryKeyDefault }) }, [dataUpdatedAt]) const mShare = menuShare({ type: 'account', url: data?.url }) const mAccount = menuAccount({ type: 'account', openChange: true, account: data }) useEffect(() => { navigation.setOptions({ headerTransparent: true, headerStyle: { backgroundColor: `rgba(255, 255, 255, 0)` }, headerRight: () => { return ( {}} background /> {[mShare, mAccount].map((menu, i) => ( {menu.map((group, index) => ( {group.map(item => { switch (item.type) { case 'item': return ( {item.icon ? ( ) : null} ) case 'sub': if (Platform.OS === 'ios') { return ( // @ts-ignore {item.trigger.icon ? ( ) : null} {item.items.map(sub => ( {sub.icon ? ( ) : null} ))} ) } else { return ( {item.items.map(sub => ( {sub.icon ? ( ) : null} ))} ) } } })} ))} ))} ) } }) }, [mAccount]) const scrollY = useSharedValue(0) const [timelineSettings, setTimelineSettings] = useAccountStorage.object('page_account_timeline') const ListHeaderComponent = useMemo(() => { return ( <> {!data?.suspended ? ( } /> { setTimelineSettings({ ...timelineSettings, excludeBoosts: !timelineSettings?.excludeBoosts }) queryClient.refetchQueries(queryKeyDefault) }} > { setTimelineSettings({ ...timelineSettings, excludeReplies: !timelineSettings?.excludeReplies }) queryClient.refetchQueries(queryKeyDefault) }} > ) : null} {data?.suspended ? ( {t('screenTabs:shared.account.suspended')} ) : null} ) }, [timelineSettings, dataUpdatedAt, mode]) const [domain] = useAccountStorage.string('auth.account.domain') return ( {data?.suspended ? ( ListHeaderComponent ) : ( (scrollY.value = nativeEvent.contentOffset.y), ListHeaderComponent, refreshing: false, onRefresh: () => queryClient.refetchQueries(queryKeyDefault) }} /> )} ) } export default TabSharedAccount