import { useI18n } from 'domains/i18n/hooks' import { RootState } from 'domains/store' import { useTranslatedEventData } from 'domains/translations/hooks' import { className } from 'lib/css' import { useMemo } from 'preact/hooks' import { useSelector } from 'react-redux' import MessageContainer from 'ui/components/conversation/message-container' import Icon from 'ui/components/layout/icon' import { useSeamlyApiContext } from 'ui/hooks/seamly-api-hooks' const PROCESSING_IMAGE = 'PROCESSING_IMAGE' const useImageFromStorage = (currentFileId) => { const { processingFileUploads } = useSelector(({ state }: RootState) => state) return useMemo(() => { const isProcessingImg = processingFileUploads.some( (fileId) => fileId === currentFileId, ) if (isProcessingImg) return PROCESSING_IMAGE try { return sessionStorage.getItem(`image-${currentFileId}`) } catch (_error) { return undefined } }, [currentFileId, processingFileUploads]) } const UploadedImage = ({ img, filename }) => { const { t } = useI18n() const srText = t('fileUpload.srFileUploadedText', { fileName: filename }) return ( <> {srText} ) } const UploadContent = ({ children, fileId, isDeleted, onClickHandler, url, target, }) => { if (fileId && !isDeleted) { return ( ) } if (url) { return ( {children} ) } return {children} } const Upload = ({ event, ...props }) => { const { t } = useI18n() const { body } = useTranslatedEventData(event) const { fromClient, id } = event.payload const { filename, id: fileId, isDeleted, url } = body const api = useSeamlyApiContext() const img = useImageFromStorage(id) const downloadFileFromApi = () => { if (fileId && filename) { api.downloadFile(fileId, filename) } } const srText = useMemo( () => !isDeleted && (url || fileId) ? t('fileUpload.srFileDownloadText', { fileName: filename }) : t('fileUpload.srFileUploadedText', { fileName: filename }), [url, fileId, filename, isDeleted, t], ) return ( {img && img !== PROCESSING_IMAGE ? ( ) : ( )} ) } export default Upload