omnichannel-frontend/src/shared/hooks/useWhatsappSocket.js

67 lines
1.7 KiB
JavaScript

import { useEffect, useState, useRef } from 'react';
import io from 'socket.io-client';
export function useWhatsappSocket() {
const [socket, setSocket] = useState(null);
const [qrCode, setQrCode] = useState(null);
const [status, setStatus] = useState('DISCONNECTED');
const [incomingMessage, setIncomingMessage] = useState(null);
const [presenceUpdate, setPresenceUpdate] = useState(null);
const socketRef = useRef(null);
useEffect(() => {
if (socketRef.current) return;
// Conectar ao namespace /whatsapp
const newSocket = io('http://localhost:3001/whatsapp', {
reconnectionAttempts: 5,
});
socketRef.current = newSocket;
setSocket(newSocket);
newSocket.on('connect', () => {
console.log('Conectado ao WebSocket do WhatsApp');
// Fetch status atual
fetch('http://localhost:3001/whatsapp/status')
.then(res => res.json())
.then(data => setStatus(data.status))
.catch(console.error);
});
newSocket.on('qr', (qr) => {
setQrCode(qr);
setStatus('AWAITING_QR');
});
newSocket.on('status', (newStatus) => {
setStatus(newStatus);
});
newSocket.on('message', (message) => {
console.log('Nova mensagem recebida:', message);
setIncomingMessage(message);
});
newSocket.on('presence', (presence) => {
console.log('Atualização de presença:', presence);
setPresenceUpdate(presence);
});
return () => {
newSocket.disconnect();
socketRef.current = null;
};
}, []);
return {
socket,
qrCode,
status,
incomingMessage,
presenceUpdate,
clearIncomingMessage: () => setIncomingMessage(null),
clearPresenceUpdate: () => setPresenceUpdate(null)
};
}