import { Link, useSearchParams } from 'react-router-dom'; import { useEffect, useRef, useState } from 'react'; import { BrandMark } from '../../../shared/components/BrandMark'; import { useViewport } from '../../../shared/hooks/useViewport'; import { ChatConversationList } from '../components/ChatConversationList'; import { ChatTransferPanel } from '../components/ChatTransferPanel'; import { ContactProfilePanel } from '../components/ContactProfilePanel'; import { ChatWindow } from '../components/ChatWindow'; import { useChat } from '../hooks/useChat'; import { quickReplies } from '../services/chatMocks'; export function ChatPage() { const [searchParams, setSearchParams] = useSearchParams(); const { isWideDesktop, isDesktop, isTablet, isMobile } = useViewport(); const { currentUserId, contacts, activeContact, activeContactId, setActiveContactId, messages, draft, setDraft, attachedFile, attachFile, removeAttachedFile, sendMessage, hydrateMessageMedia, assumeChat, releaseChat, closeChat, canAssumeChat, canReply, assignmentLabel, transferNoteLabel, updateContactProfile, isReplying, selectedArea, setSelectedArea, isTransferOpen, setIsTransferOpen, transferArea, setTransferArea, transferAreas, attendants, isSameUserArea, transferAttendant, setTransferAttendant, transferNote, setTransferNote, submitTransfer, isPaused, pauseDurationLabel, } = useChat(); const requestedChatId = searchParams.get('chatId'); const handledRequestedChatIdRef = useRef(''); const [isContactPanelOpen, setIsContactPanelOpen] = useState(false); useEffect(() => { if (!requestedChatId) return; if (handledRequestedChatIdRef.current === requestedChatId) return; if (!contacts.some((contact) => contact.id === requestedChatId)) return; handledRequestedChatIdRef.current = requestedChatId; setActiveContactId(requestedChatId); setSearchParams({}, { replace: true }); }, [requestedChatId, contacts, setActiveContactId, setSearchParams]); function selectContact(contactId) { setActiveContactId(contactId); if (requestedChatId) { setSearchParams({}, { replace: true }); } } const gridTemplateColumns = isMobile ? '1fr' : isWideDesktop ? 'minmax(260px, 320px) minmax(0, 1.6fr) minmax(280px, 320px)' : isDesktop || isTablet ? 'minmax(260px, 320px) minmax(0, 1fr)' : '1fr'; return (
{isPaused ? `Pausado ha ${pauseDurationLabel}` : 'Atendimento em tempo real'}
Voltar para home
{ setIsTransferOpen(false); setIsContactPanelOpen(true); }} currentUserId={currentUserId} isMobile={isMobile} />
{ setIsContactPanelOpen(false); setIsTransferOpen((current) => !current); }} onAssumeChat={assumeChat} onReleaseChat={releaseChat} onCloseChat={closeChat} canAssumeChat={canAssumeChat} canReply={canReply} assignmentLabel={assignmentLabel} transferNote={transferNoteLabel} isReplying={isReplying} isPaused={isPaused} pauseDurationLabel={pauseDurationLabel} isMobile={isMobile} />
{quickReplies.map((reply) => ( ))}
{isWideDesktop ? ( <> setIsTransferOpen(false)} /> setIsContactPanelOpen(false)} onSaved={updateContactProfile} /> ) : null}
{!isWideDesktop ? ( <> setIsTransferOpen(false)} /> setIsContactPanelOpen(false)} onSaved={updateContactProfile} /> ) : null}
); }