import apiInstance from '@api/instance' import { HeaderLeft } from '@components/Header' import Icon from '@components/Icon' import ComponentSeparator from '@components/Separator' import CustomText from '@components/Text' import HeaderSharedCreated from '@components/Timeline/Shared/HeaderShared/Created' import { useAppDispatch } from '@root/store' import { ScreenComposeStackScreenProps } from '@utils/navigation/navigators' import { getInstanceDrafts, removeInstanceDraft } from '@utils/slices/instancesSlice' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React, { useContext, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { Dimensions, Modal, Platform, Pressable, View } from 'react-native' import FastImage from 'react-native-fast-image' import { PanGestureHandler } from 'react-native-gesture-handler' import { SwipeListView } from 'react-native-swipe-list-view' import { useSelector } from 'react-redux' import ComposeContext from './utils/createContext' import { formatText } from './utils/processText' import { ComposeStateDraft, ExtendedAttachment } from './utils/types' 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 instanceDrafts = useSelector(getInstanceDrafts)?.filter( draft => draft.timestamp !== timestamp ) const [checkingAttachments, setCheckingAttachments] = useState(false) const dispatch = useAppDispatch() const actionWidth = StyleConstants.Font.Size.L + StyleConstants.Spacing.Global.PagePadding * 4 return ( <> {t('content.draftsList.warning')} { 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 }) dispatch(removeInstanceDraft(item.timestamp)) navigation.goBack() }} > {item.text || item.spoiler || t('content.draftsList.content.textEmpty')} {item.attachments?.uploads.length ? ( {item.attachments.uploads.map((attachment, index) => ( ))} ) : null} ) }} renderHiddenItem={({ item }) => ( dispatch(removeInstanceDraft(item.timestamp))} children={ } /> } /> )} disableRightSwipe={true} rightOpenValue={-actionWidth} previewOpenValue={-actionWidth / 2} ItemSeparatorComponent={ComponentSeparator} keyExtractor={item => item.timestamp.toString()} /> } /> } /> ) } export default ComposeDraftsList