From b10106fd95fcb857c57304e7bd4590e7f9ef8714 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Fri, 17 Jul 2026 20:20:12 +0330 Subject: [PATCH] avatar url --- src/components/PresignedImage.tsx | 18 ++++++ src/components/VoicePlayer.tsx | 10 +-- .../auth/components/CompleteProfileForm.tsx | 64 +++++++++++++++---- src/pages/criticisms/Add.tsx | 2 +- src/pages/home/components/ServiceItem.tsx | 13 +++- src/pages/invoice/Detail.tsx | 18 ++++-- src/pages/learning/Detail.tsx | 17 +++-- src/pages/learning/List.tsx | 3 +- src/pages/order/OrderDetail.tsx | 19 ++++-- src/pages/order/components/TicketSection.tsx | 10 +-- src/pages/order/type/Types.ts | 19 +++++- src/pages/payment/PayInvoice.tsx | 2 +- src/pages/request/components/Request.tsx | 4 +- .../request/components/RequestDetailItem.tsx | 37 ++++++----- .../request/components/TicketMessage.tsx | 4 +- .../request/components/TicketSection.tsx | 4 +- src/pages/ticket/MessageBubble.tsx | 16 +++-- src/pages/uploader/hooks/usePresignedUrl.ts | 33 ++++++++++ src/pages/uploader/service/UploaderService.ts | 9 +++ src/pages/uploader/types/Types.ts | 21 +++--- src/pages/user/types/Types.ts | 2 + 21 files changed, 244 insertions(+), 81 deletions(-) create mode 100644 src/components/PresignedImage.tsx create mode 100644 src/pages/uploader/hooks/usePresignedUrl.ts diff --git a/src/components/PresignedImage.tsx b/src/components/PresignedImage.tsx new file mode 100644 index 0000000..9cb5871 --- /dev/null +++ b/src/components/PresignedImage.tsx @@ -0,0 +1,18 @@ +import { type FC, type ImgHTMLAttributes } from "react"; +import { usePresignedUrl } from "@/pages/uploader/hooks/usePresignedUrl"; + +type Props = ImgHTMLAttributes & { + src?: string; +}; + +const PresignedImage: FC = ({ src, alt = "", ...props }) => { + const resolvedSrc = usePresignedUrl(src); + + if (!resolvedSrc) { + return null; + } + + return {alt}; +}; + +export default PresignedImage; diff --git a/src/components/VoicePlayer.tsx b/src/components/VoicePlayer.tsx index b96fab0..f4ac9d0 100644 --- a/src/components/VoicePlayer.tsx +++ b/src/components/VoicePlayer.tsx @@ -1,18 +1,20 @@ import { Pause, Play } from "iconsax-react" import { useEffect, useRef, useState, type FC } from "react" +import { usePresignedUrl } from "@/pages/uploader/hooks/usePresignedUrl" type VoicePlayerProps = { url: string } const VoicePlayer: FC = ({ url }) => { + const resolvedUrl = usePresignedUrl(url) const audioRef = useRef(null) const [isPlaying, setIsPlaying] = useState(false) const [progress, setProgress] = useState(0) useEffect(() => { const audio = audioRef.current - if (!audio) return + if (!audio || !resolvedUrl) return const update = () => { if (!audio.duration) return @@ -28,7 +30,7 @@ const VoicePlayer: FC = ({ url }) => { return () => { audio.removeEventListener('timeupdate', update) } - }, []) + }, [resolvedUrl]) const toggle = () => { if (!audioRef.current) return @@ -66,9 +68,9 @@ const VoicePlayer: FC = ({ url }) => { })} -