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 (
<>
{filename}
>
)
}
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 ? (
) : (
{filename}
)}
)
}
export default Upload