import { HeaderLeft } from '@components/Header' import Icon from '@components/Icon' import { SwipeToActions } from '@components/SwipeToActions' import CustomText from '@components/Text' import HeaderSharedCreated from '@components/Timeline/Shared/HeaderShared/Created' import { connectMedia } from '@utils/api/helpers/connect' import apiInstance from '@utils/api/instance' import { ScreenComposeStackScreenProps } from '@utils/navigation/navigators' import { getAccountStorage, setAccountStorage, useAccountStorage } from '@utils/storage/actions' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import { Image } from 'expo-image' import React, { useContext, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { Dimensions, Modal, Pressable, View } from 'react-native' import ComposeContext from './utils/createContext' import { formatText } from './utils/processText' import { ComposeStateDraft, ExtendedAttachment } from './utils/types' export const removeDraft = (timestamp: number) => setAccountStorage([ { key: 'drafts', value: getAccountStorage.object('drafts')?.filter(draft => draft.timestamp !== timestamp) || [] } ]) const ComposeDraftsList: React.FC> = ({ navigation, route: { params: { timestamp } } }) => { const { colors } = useTheme() const { t } = useTranslation('screenCompose') useEffect(() => { navigation.setOptions({ title: t('content.draftsList.header.title'), headerLeft: () => navigation.goBack()} /> }) }, []) const { composeDispatch } = useContext(ComposeContext) const [drafts] = useAccountStorage.object('drafts') const [checkingAttachments, setCheckingAttachments] = useState(false) return ( <> {t('content.draftsList.warning')} removeDraft(item.timestamp), color: colors.red, icon: 'trash' } ]} data={drafts.filter(draft => draft.timestamp !== timestamp)} renderItem={({ item }: { item: ComposeStateDraft }) => { return ( { setCheckingAttachments(true) let tempDraft = item let tempUploads: ExtendedAttachment[] = [] if (item.attachments && item.attachments.uploads.length) { for (const attachment of item.attachments.uploads) { await apiInstance({ method: 'get', url: `media/${attachment.remote?.id}` }) .then(res => { if (res.body.id === attachment.remote?.id) { tempUploads.push(attachment) } }) .catch(() => {}) } tempDraft = { ...tempDraft, attachments: { ...item.attachments, uploads: tempUploads } } } tempDraft.spoiler?.length && formatText({ textInput: 'text', composeDispatch, content: tempDraft.spoiler }) tempDraft.text?.length && formatText({ textInput: 'text', composeDispatch, content: tempDraft.text }) composeDispatch({ type: 'loadDraft', payload: tempDraft }) removeDraft(item.timestamp) navigation.goBack() }} > {item.text || item.spoiler || t('content.draftsList.content.textEmpty')} {item.attachments?.uploads.length ? ( {item.attachments.uploads.map((attachment, index) => ( ))} ) : null} ) }} keyExtractor={item => item.timestamp?.toString()} /> } /> } /> ) } export default ComposeDraftsList