import { useState, useEffect, useReducer } from "react"; import openSocket from "socket.io-client"; import toastError from "../../errors/toastError"; import api from "../../services/api"; const reducer = (state, action) => { if (action.type === "LOAD_WHATSAPPS") { const whatsApps = action.payload; return [...whatsApps]; } if (action.type === "UPDATE_WHATSAPPS") { const whatsApp = action.payload; const whatsAppIndex = state.findIndex(s => s.id === whatsApp.id); if (whatsAppIndex !== -1) { state[whatsAppIndex] = whatsApp; return [...state]; } else { return [whatsApp, ...state]; } } if (action.type === "UPDATE_SESSION") { const whatsApp = action.payload; const whatsAppIndex = state.findIndex(s => s.id === whatsApp.id); if (whatsAppIndex !== -1) { if ('disabled' in whatsApp) { state[whatsAppIndex].disabled = whatsApp.disabled } else { state[whatsAppIndex].status = whatsApp.status; state[whatsAppIndex].updatedAt = whatsApp.updatedAt; state[whatsAppIndex].qrcode = whatsApp.qrcode; state[whatsAppIndex].retries = whatsApp.retries; } return [...state]; } else { return [...state]; } } // if(action.type === "UPDATE_SESSION_RESTORE"){ // const whatsApp = action.payload; // console.log('------> whatsApp: ', whatsApp) // const whatsAppIndex = state.findIndex(s => s.id === whatsApp.id); // if (whatsAppIndex !== -1) { // console.log('kkkkkkkkkkkkkkkkkkkkkkkkkk: ',whatsAppIndex) // return [...state]; // } // } // if (action.type === "UPDATE_DISK_SPACE_MONIT") { // const whatsApp = action.payload; // const whatsAppIndex = state.findIndex(s => s.id === whatsApp.id); // if (whatsAppIndex !== -1) { // state[whatsAppIndex].sessionSize = whatsApp.sessionSize; // return [...state]; // } else { // return [whatsApp, ...state]; // } // } if (action.type === "UPDATE_WHATSAPPS_SESSION_MONIT") { const whatsApp = action.payload; const whatsAppIndex = state.findIndex(s => s.id === whatsApp.id); if (whatsAppIndex !== -1) { state[whatsAppIndex].sessionSize = whatsApp.sessionSize; return [...state]; } else { return [whatsApp, ...state]; } } if (action.type === "DELETE_WHATSAPPS") { const whatsAppId = action.payload; const whatsAppIndex = state.findIndex(s => s.id === whatsAppId); if (whatsAppIndex !== -1) { state.splice(whatsAppIndex, 1); } return [...state]; } if (action.type === "RESET") { return []; } }; const useWhatsApps = () => { const [whatsApps, dispatch] = useReducer(reducer, []); const [loading, setLoading] = useState(true); useEffect(() => { setLoading(true); const fetchSession = async () => { try { const { data } = await api.get("/whatsapp/"); dispatch({ type: "LOAD_WHATSAPPS", payload: data }); setLoading(false); } catch (err) { setLoading(false); toastError(err); } }; fetchSession(); }, []); useEffect(() => { const socket = openSocket(process.env.REACT_APP_BACKEND_URL); socket.on("whatsapp", data => { if (data.action === "update") { dispatch({ type: "UPDATE_WHATSAPPS", payload: data.whatsapp }); } }); socket.on("whatsapp", data => { if (data.action === "delete") { dispatch({ type: "DELETE_WHATSAPPS", payload: data.whatsappId }); } }); socket.on("whatsappSession", data => { if (data.action === "update") { dispatch({ type: "UPDATE_SESSION", payload: data.session }); } else if (data.action === "update_restore") { dispatch({ type: "UPDATE_SESSION_RESTORE", payload: data.session }); } }); socket.on("whatsappSessionMonit", data => { if (data.action === "update") { dispatch({ type: "UPDATE_WHATSAPPS_SESSION_MONIT", payload: data.whatsappSessionSize }); } }); return () => { socket.disconnect(); }; }, []); return { whatsApps, loading }; }; export default useWhatsApps;