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 TimelineHeaderNotification from '@components/Timeline/Shared/HeaderNotification' 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, { useCallback, useRef } from 'react' import { Platform, Pressable, View } from 'react-native' import { useSelector } from 'react-redux' import TimelineContextMenu from './Shared/ContextMenu' import TimelineFiltered, { shouldFilter } from './Shared/Filtered' import TimelineFullConversation from './Shared/FullConversation' export interface Props { notification: Mastodon.Notification queryKey: QueryKeyTimeline highlighted?: boolean } const TimelineNotifications: React.FC = ({ notification, queryKey, highlighted = false }) => { const copiableContent = useRef<{ content: string; complete: boolean }>({ content: '', complete: false }) const filtered = notification.status && shouldFilter({ copiableContent, status: notification.status, queryKey }) if (notification.status && filtered) { return } const { colors } = useTheme() const instanceAccount = useSelector(getInstanceAccount, (prev, next) => prev?.id === next?.id) const navigation = useNavigation>() const actualAccount = notification.status ? notification.status.account : notification.account const onPress = useCallback(() => { notification.status && navigation.push('Tab-Shared-Toot', { toot: notification.status, rootQueryKey: queryKey }) }, []) const main = () => { return ( <> {notification.type !== 'mention' ? ( ) : null} {notification.status ? ( {notification.status.content.length > 0 ? ( ) : null} {notification.status.poll ? ( ) : null} {notification.status.media_attachments.length > 0 ? ( ) : null} {notification.status.card ? : null} ) : null} {notification.status ? ( d?.id !== instanceAccount?.id), d => d?.id ).map(d => d?.acct)} reblog={false} /> ) : null} ) } return Platform.OS === 'android' ? ( {}} > {main()} ) : ( {}} > {main()} ) } export default TimelineNotifications