import Button from '@/components/Button' import UploadBox from '@/components/UploadBox' import { Microphone, Paperclip2 } from 'iconsax-react' import { useState, type FC } from 'react' import { useVoiceRecorder } from '@/hooks/useVoiceRecorder' import { Play, Pause } from 'iconsax-react' import { useMultiUpload, useSingleUpload } from '@/pages/uploader/hooks/useUploader' import type { AddTicketType } from '@/pages/request/type/Types' import { useAddTicket, useGetTickets } from '../hooks/useOrderData' import { useParams } from 'react-router-dom' import { toast } from '@/shared/toast' import { extractErrorMessage, getFileNameAndExtensionFromUrl } from '@/config/func' import VoicePlayer from '@/components/VoicePlayer' const TicketSection: FC = () => { const { id } = useParams() const [message, setMessage] = useState('') const [files, setFiles] = useState([]) const addTicket = useAddTicket() const { data, refetch } = useGetTickets(id!) const singleUpload = useSingleUpload() const multiUpload = useMultiUpload() const { isRecording, isPlaying, audioUrl, audioRef, togglePlayPause, startRecording, stopRecording, progress, audioFile, resetRecorder, } = useVoiceRecorder() const handleSubmit = async () => { const params: AddTicketType = { attachments: [], content: message, } if (audioFile) { await singleUpload.mutateAsync(audioFile, { onSuccess: (data) => { params.attachments.push({ type: 'voice', url: data?.data?.url, }) }, }) } if (files.length) { await multiUpload.mutateAsync(files, { onSuccess: (data) => { data?.data?.map((item) => { params.attachments.push({ type: 'uploads_attach', url: item.url, }) }) }, }) } addTicket.mutate( { requestId: id!, params }, { onSuccess: () => { toast('پیام شما با موفقیت ارسال شد') refetch() setMessage('') setFiles([]) resetRecorder() }, onError: (error) => { toast(extractErrorMessage(error), 'error') }, }, ) } const handleOpenLink = (url: string) => { window.open(url, '_blank') } return (
{data?.data?.map((item) => { if (item.user) return (
{item.content}
{item.attachments ?.filter((a) => a.type !== 'voice') .map((attach) => (
handleOpenLink(attach.url)} className="flex cursor-pointer items-center gap-1.5 text-[#0047FF]" >
{getFileNameAndExtensionFromUrl(attach.url).fileName}
))}
{item.attachments ?.filter((a) => a.type === 'voice') .map((voice) => ( ))}
) if (item.admin) return (
طراح :
{item.admin?.firstName + ' ' + item?.admin?.lastName}
{item.content}
{item.attachments ?.filter((a) => a.type !== 'voice') .map((attach) => (
handleOpenLink(attach.url)} className="flex cursor-pointer items-center gap-1.5 text-[#0047FF]" >
{getFileNameAndExtensionFromUrl(attach.url).fileName}
))}
{item.attachments ?.filter((a) => a.type === 'voice') .map((voice) => ( ))}
) })}
پیام شما