import apiInstance from '@api/instance' import GracefullyImage from '@components/GracefullyImage' 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 { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React, { useCallback } from 'react' import { Pressable, View } from 'react-native' import { useMutation, useQueryClient } from 'react-query' import TimelineActions from './Shared/Actions' import TimelineContent from './Shared/Content' import StatusContext from './Shared/Context' import TimelineHeaderConversation from './Shared/HeaderConversation' import TimelinePoll from './Shared/Poll' export interface Props { conversation: Mastodon.Conversation queryKey: QueryKeyTimeline highlighted?: boolean } const TimelineConversation: React.FC = ({ conversation, queryKey, highlighted = false }) => { const { colors } = useTheme() const queryClient = useQueryClient() const fireMutation = useCallback(() => { return apiInstance({ method: 'post', url: `conversations/${conversation.id}/read` }) }, []) const { mutate } = useMutation(fireMutation, { onSettled: () => { queryClient.invalidateQueries(queryKey) } }) const navigation = useNavigation>() const onPress = useCallback(() => { if (conversation.last_status) { conversation.unread && mutate() navigation.push('Tab-Shared-Toot', { toot: conversation.last_status, rootQueryKey: queryKey }) } }, []) return ( {conversation.accounts.slice(0, 4).map(account => ( 2 ? StyleConstants.Avatar.M / 2 : StyleConstants.Avatar.M }} style={{ flex: 1, flexBasis: '50%' }} /> ))} {conversation.last_status ? ( <> ) : null} ) } export default TimelineConversation