import analytics from '@components/analytics' import haptics from '@components/haptics' import Icon from '@components/Icon' import { ParseEmojis } from '@components/Parse' import { toast } from '@components/toast' import { QueryKeyTimeline, useTimelineMutation } from '@utils/queryHooks/timeline' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React, { useCallback, useMemo } from 'react' import { useTranslation } from 'react-i18next' import { Pressable, StyleSheet, Text, View } from 'react-native' import { useQueryClient } from 'react-query' import HeaderSharedCreated from './HeaderShared/Created' import HeaderSharedMuted from './HeaderShared/Muted' const Names: React.FC<{ accounts: Mastodon.Account[] }> = ({ accounts }) => { const { t } = useTranslation('componentTimeline') const { theme } = useTheme() return ( {t('shared.header.conversation.withAccounts')}{' '} {accounts.map((account, index) => ( {index !== 0 ? ', ' : undefined} ))} ) } export interface Props { queryKey: QueryKeyTimeline conversation: Mastodon.Conversation } const HeaderConversation: React.FC = ({ queryKey, conversation }) => { const { t } = useTranslation('componentTimeline') const queryClient = useQueryClient() const mutation = useTimelineMutation({ queryClient, onMutate: true, onError: (err: any, _, oldData) => { haptics('Error') toast({ type: 'error', message: t('common:toastMessage.error.message', { function: t(`shared.header.conversation.delete.function`) }), ...(err.status && typeof err.status === 'number' && err.data && err.data.error && typeof err.data.error === 'string' && { description: err.data.error }), autoHide: false }) queryClient.setQueryData(queryKey, oldData) } }) const { theme } = useTheme() const actionOnPress = useCallback(() => { analytics('timeline_conversation_delete_press') mutation.mutate({ type: 'deleteItem', source: 'conversations', queryKey, id: conversation.id }) }, []) const actionChildren = useMemo( () => ( ), [] ) return ( {conversation.last_status?.created_at ? ( ) : null} ) } const styles = StyleSheet.create({ base: { flex: 1, flexDirection: 'row' }, nameAndMeta: { flex: 3 }, meta: { flexDirection: 'row', alignItems: 'center', marginTop: StyleConstants.Spacing.XS, marginBottom: StyleConstants.Spacing.S }, created_at: { ...StyleConstants.FontStyle.S }, action: { flex: 1, flexDirection: 'row', justifyContent: 'center' }, namesLeading: { ...StyleConstants.FontStyle.M } }) export default HeaderConversation