DropMediaItem.jsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import React, { memo, useEffect, useState } from "react";
  2. import { backendURL } from "../../helpers/gql";
  3. import DropMediaFilesOptions from "../DropMediaFilesOptions/DropMediaFilesOptions";
  4. import { calculateFileSize } from "../../helpers/calculateFileSize";
  5. import { DropImg, DropVideo, DropAudio, DropFile } from "./DropMediaFiles/DropMediaFiles";
  6. import { DropMediaItemWrap } from "./DropMediaItem.style"
  7. export const DropMediaItem = ({mediaItem, chatId}) => {
  8. const [url, setUrl] = useState('')
  9. const [name, setName] = useState('');
  10. const [size, setSize] = useState('')
  11. useEffect(() => {
  12. setUrl(mediaItem.url ? `${backendURL}/${mediaItem.url || ''}` : URL.createObjectURL(mediaItem))
  13. setName((mediaItem?.name?.length || mediaItem?.originalFileName?.length) > 22 ?
  14. (mediaItem?.name || mediaItem?.originalFileName).slice(0,10) + '...' + (mediaItem?.name || mediaItem?.originalFileName).slice(-10) :
  15. (mediaItem?.name || mediaItem?.originalFileName))
  16. setSize(calculateFileSize(mediaItem?.size))
  17. },[])
  18. const checkType = (type) => {
  19. if(type.includes("image")){
  20. return <DropImg url={url} />
  21. } else if(type.includes("video")){
  22. return <DropVideo url={url}/>
  23. } else if (type.includes("audio")){
  24. return <DropAudio url={url} name={name} size={size}/>
  25. } else {
  26. return <DropFile name={name} url={url} size={size}/>
  27. }
  28. }
  29. return(
  30. <DropMediaItemWrap>
  31. {checkType(mediaItem?.type)}
  32. <DropMediaFilesOptions chatId={chatId} mediaKey={mediaItem.uploadDate}/>
  33. </DropMediaItemWrap>
  34. )
  35. }
  36. export const MemoizedDropMediaItem = memo(DropMediaItem);