import TimelineActioned from '@components/Timeline/Shared/Actioned' import TimelineActions from '@components/Timeline/Shared/Actions' import TimelineAttachment from '@components/Timeline/Shared/Attachment' import TimelineAvatar from '@components/Timeline/Shared/Avatar' import TimelineCard from '@components/Timeline/Shared/Card' import TimelineContent from '@components/Timeline/Shared/Content' // @ts-ignore import TimelineHeaderDefault from '@components/Timeline/Shared/HeaderDefault' import TimelinePoll from '@components/Timeline/Shared/Poll' import { useNavigation } from '@react-navigation/native' import { StackNavigationProp } from '@react-navigation/stack' import { TabLocalStackParamList } from '@utils/navigation/navigators' import { QueryKeyTimeline } from '@utils/queryHooks/timeline' import { getInstanceAccount } from '@utils/slices/instancesSlice' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import { uniqBy } from 'lodash' import React, { useRef } from 'react' import { Pressable, StyleProp, View, ViewStyle } from 'react-native' import { useSelector } from 'react-redux' import TimelineContextMenu from './Shared/ContextMenu' import TimelineFeedback from './Shared/Feedback' import TimelineFiltered, { shouldFilter } from './Shared/Filtered' import TimelineFullConversation from './Shared/FullConversation' import TimelineTranslate from './Shared/Translate' export interface Props { item: Mastodon.Status & { _pinned?: boolean } // For account page, internal property queryKey?: QueryKeyTimeline rootQueryKey?: QueryKeyTimeline highlighted?: boolean disableDetails?: boolean disableOnPress?: boolean } // When the poll is long const TimelineDefault: React.FC = ({ item, queryKey, rootQueryKey, highlighted = false, disableDetails = false, disableOnPress = false }) => { const { colors } = useTheme() const instanceAccount = useSelector(getInstanceAccount, () => true) const navigation = useNavigation>() const actualStatus = item.reblog ? item.reblog : item const ownAccount = actualStatus.account?.id === instanceAccount?.id const copiableContent = useRef<{ content: string; complete: boolean }>({ content: '', complete: false }) const filtered = queryKey && shouldFilter({ copiableContent, status: actualStatus, queryKey }) if (queryKey && filtered && !highlighted) { return } const onPress = () => { if (highlighted) return navigation.push('Tab-Shared-Toot', { toot: actualStatus, rootQueryKey: queryKey }) } const mainStyle: StyleProp = { padding: StyleConstants.Spacing.Global.PagePadding, backgroundColor: colors.backgroundDefault, paddingBottom: disableDetails ? StyleConstants.Spacing.Global.PagePadding : 0 } const main = () => ( <> {item.reblog ? ( ) : item._pinned ? ( ) : null} {typeof actualStatus.content === 'string' && actualStatus.content.length > 0 ? ( ) : null} {queryKey && actualStatus.poll ? ( ) : null} {!disableDetails && Array.isArray(actualStatus.media_attachments) && actualStatus.media_attachments.length ? ( ) : null} {!disableDetails && actualStatus.card ? : null} {!disableDetails ? ( ) : null} {queryKey && !disableDetails ? ( d?.id !== instanceAccount?.id), d => d?.id ).map(d => d?.acct)} reblog={item.reblog ? true : false} /> ) : null} ) return disableOnPress ? ( {main()} ) : ( {}} > {main()} ) } export default TimelineDefault