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' 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 { featureCheck } from '@utils/helpers/featureCheck' import { checkIsMyAccount } from '@utils/helpers/isMyAccount' import { TabLocalStackParamList } from '@utils/navigation/navigators' import { usePreferencesQuery } from '@utils/queryHooks/preferences' import { QueryKeyTimeline } from '@utils/queryHooks/timeline' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React, { useState } from 'react' import { Pressable, View } from 'react-native' import StatusContext from './Shared/Context' import TimelineFiltered, { FilteredProps, shouldFilter } from './Shared/Filtered' import TimelineFullConversation from './Shared/FullConversation' import TimelineHeaderAndroid from './Shared/HeaderAndroid' export interface Props { notification: Mastodon.Notification queryKey: QueryKeyTimeline } const TimelineNotifications: React.FC = ({ notification, queryKey }) => { const { data: preferences } = usePreferencesQuery() const status = notification.status?.reblog ? notification.status.reblog : notification.status const account = notification.type === 'admin.report' ? notification.report.target_account : notification.status ? notification.status.account : notification.account const isMyAccount = checkIsMyAccount(notification.account?.id) const [spoilerExpanded, setSpoilerExpanded] = useState( preferences?.['reading:expand:spoilers'] || false ) const spoilerHidden = notification.status?.spoiler_text?.length ? !preferences?.['reading:expand:spoilers'] && !spoilerExpanded : false const { colors } = useTheme() const navigation = useNavigation>() const main = () => { return ( <> {notification.type !== 'mention' ? ( ) : null} {notification.status ? ( ) : null} ) } if (!isMyAccount) { let filterResults: FilteredProps['filterResults'] = [] const [filterRevealed, setFilterRevealed] = useState(false) const hasFilterServerSide = featureCheck('filter_server_side') if (notification.status) { if (hasFilterServerSide) { if (notification.status.filtered?.length) { filterResults = notification.status.filtered.map(filter => filter.filter) } } else { const checkFilter = shouldFilter({ queryKey, status: notification.status }) if (checkFilter?.length) { filterResults = checkFilter } } if (filterResults?.length && !filterRevealed) { return !filterResults.filter(result => result.filter_action === 'hide')?.length ? ( setFilterRevealed(!filterRevealed)}> ) : null } } } return ( notification.status && navigation.push('Tab-Shared-Toot', { toot: notification.status }) } onLongPress={() => {}} children={main()} /> ) } export default React.memo(TimelineNotifications)