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 '../type/Types' import { useAddTicket, useGetTickets } from '../hooks/useRequestData' 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: 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}
{/* attachments (non-voice) */}
{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}
))}
{/* voice messages */} {item.attachments ?.filter((a) => a.type === 'voice') .map((voice) => ( ))}
) else if (item.admin) return (
طراح :
{item.admin?.firstName + ' ' + item?.admin?.lastName}
{item.content}
{/* attachments (non-voice) */}
{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}
))}
{/* voice messages */} {item.attachments ?.filter((a) => a.type === 'voice') .map((voice) => ( ))}
) }) }
پیام شما