diff --git a/src/components/FileMessage/AudioMessage.tsx b/src/components/FileMessage/AudioMessage.tsx index 34377e5c..da914e88 100644 --- a/src/components/FileMessage/AudioMessage.tsx +++ b/src/components/FileMessage/AudioMessage.tsx @@ -4,7 +4,7 @@ import clsx from "clsx"; import IconDownload from "@/assets/icons/download.svg"; import IconAudio from "@/assets/icons/file.audio.svg"; import { formatBytes } from "../../utils"; -import { ExpireTip } from "./OtherFileMessage"; +import ExpiredMessage from "./ExpiredMessage"; type Props = { url: string; @@ -23,40 +23,34 @@ const AudioMessage = ({ url, name, size, download }: Props) => { setError(true); }; const _size = formatBytes(size); + if (error) return ; return (
- +
- {error ? "File not Found" : name} + {name} - {error ? "File expired or deleted" : _size} + {_size}
- {error ? ( - - ) : ( - - - - )} + + +
- {!error && ( -
); }; diff --git a/src/components/FileMessage/ExpiredMessage.tsx b/src/components/FileMessage/ExpiredMessage.tsx new file mode 100644 index 00000000..9e38309c --- /dev/null +++ b/src/components/FileMessage/ExpiredMessage.tsx @@ -0,0 +1,66 @@ +import React from "react"; +import clsx from "clsx"; + +import IconAudio from "@/assets/icons/file.audio.svg"; +import IconImage from "@/assets/icons/file.image.svg"; +import IconUnknown from "@/assets/icons/file.unknown.svg"; +import IconVideo from "@/assets/icons/file.video.svg"; +import IconInfo from "@/assets/icons/info.svg"; + +type Props = { + type?: "file" | "audio" | "image" | "video"; +}; +const InfoMap = { + file: { + title: "File not Found", + desc: "File expired or deleted", + icon: + }, + audio: { + title: "Audio not Found", + desc: "Audio expired or deleted", + icon: + }, + image: { + title: "Image not Found", + desc: "Image expired or deleted", + icon: + }, + video: { + title: "Video not Found", + desc: "Video expired or deleted", + icon: + } +}; +const ExpiredMessage = ({ type = "file" }: Props) => { + const { title, desc, icon } = InfoMap[type]; + return ( +
+
+ {icon} +
+ + {title} + + + {desc} + +
+ + + +
+
+ ); +}; + +export default ExpiredMessage; diff --git a/src/components/FileMessage/ImageMessage.tsx b/src/components/FileMessage/ImageMessage.tsx index 63b87fee..ebc688fb 100644 --- a/src/components/FileMessage/ImageMessage.tsx +++ b/src/components/FileMessage/ImageMessage.tsx @@ -2,6 +2,7 @@ import { FC, useEffect, useState } from "react"; import { LineWobble, Ping } from "@uiball/loaders"; import { getDefaultSize, isMobile } from "@/utils"; +import ExpiredMessage from "./ExpiredMessage"; type Props = { uploading: boolean; @@ -36,7 +37,7 @@ const ImageMessage: FC = ({ }; img.src = url; }, [url]); - + if (status == "error") return ; return (
= ({ {progress}%
)} - {status == "error" ? ( -

- Image expired or removed -

- ) : status == "loading" ? ( + {status == "loading" ? (

diff --git a/src/components/FileMessage/OtherFileMessage.tsx b/src/components/FileMessage/OtherFileMessage.tsx index 6a595b37..1f23ac9b 100644 --- a/src/components/FileMessage/OtherFileMessage.tsx +++ b/src/components/FileMessage/OtherFileMessage.tsx @@ -1,23 +1,13 @@ import { useEffect, useState } from "react"; -import { useTranslation } from "react-i18next"; import clsx from "clsx"; import { User } from "@/types/user"; import { formatBytes, fromNowTime, getFileIcon } from "@/utils"; import IconClose from "@/assets/icons/close.circle.svg"; import IconDownload from "@/assets/icons/download.svg"; -import IconInfo from "@/assets/icons/info.svg"; +import ExpiredMessage from "./ExpiredMessage"; import Progress from "./Progress"; -const ExpireTip = () => { - const { t } = useTranslation("chat"); - return ( - - - - ); -}; - type Props = { content: string; sending: boolean; @@ -42,7 +32,7 @@ const OtherFileMessage = ({ handleCancel }: Props) => { const [error, setError] = useState(false); - const icon = getFileIcon(content_type, name, `w-9 shrink-0 h-auto ${error ? "grayscale" : ""}`); + const icon = getFileIcon(content_type, name, `w-9 shrink-0 h-auto`); useEffect(() => { if (content) { fetch(content) @@ -58,7 +48,7 @@ const OtherFileMessage = ({ }); } }, [content]); - + if (error) return ; return (
- {error ? "File not Found" : name} + {name} {sending ? ( - ) : error ? ( - File expired or deleted ) : ( <> {formatBytes(size)} @@ -98,8 +86,6 @@ const OtherFileMessage = ({
{sending ? ( - ) : error ? ( - ) : ( { setError(true); }; const tipClass = "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"; + if (error) return ; return ( ); }; diff --git a/src/components/VoiceMessage.tsx b/src/components/VoiceMessage.tsx index 5794121f..11df93d7 100644 --- a/src/components/VoiceMessage.tsx +++ b/src/components/VoiceMessage.tsx @@ -5,8 +5,9 @@ import WaveSurfer from "wavesurfer.js"; import IconPause from "@/assets/icons/pause.svg"; import IconPlay from "@/assets/icons/play.circle.svg"; -import IconRefresh from "@/assets/icons/refresh.svg"; +// import IconRefresh from "@/assets/icons/refresh.svg"; import BASE_URL from "../app/config"; +import ExpiredMessage from "./FileMessage/ExpiredMessage"; export type VoiceMessageProps = { type: string; @@ -103,15 +104,16 @@ const VoiceMessage = ({ file_path }: { file_path: string }) => { current.playPause(); } }; - const handleReload = () => { - initWave(file_path); - }; + // const handleReload = () => { + // initWave(file_path); + // }; const notReady = status !== "ready"; + if (status == "error") return ; return (
-
+
{status == "loading" && Loading voice message...} - {status == "error" && ( - Load voice message error - )}
- {status !== "error" && ( - - )} - {status === "error" && ( + + {/* {status === "error" && ( - )} + )} */}
); };