2022-01-06 01:26:15 +00:00
|
|
|
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) {
|
|
|
|
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];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-06-29 01:27:17 +00:00
|
|
|
|
|
|
|
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];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
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];
|
|
|
|
}
|
|
|
|
|
2022-06-29 01:27:17 +00:00
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
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 => {
|
2022-06-29 01:27:17 +00:00
|
|
|
if (data.action === "update") {
|
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
dispatch({ type: "UPDATE_SESSION", payload: data.session });
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2022-06-29 01:27:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
//test del
|
|
|
|
|
|
|
|
socket.on("whatsappSessionMonit", data => {
|
|
|
|
if (data.action === "update") {
|
|
|
|
|
2022-07-07 19:15:14 +00:00
|
|
|
// console.log('data.whatsappSessionSize: ', data.whatsappSessionSize)
|
2022-06-29 01:27:17 +00:00
|
|
|
|
|
|
|
dispatch({ type: "UPDATE_WHATSAPPS_SESSION_MONIT", payload: data.whatsappSessionSize });
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
//
|
|
|
|
|
2022-01-06 01:26:15 +00:00
|
|
|
return () => {
|
|
|
|
socket.disconnect();
|
|
|
|
};
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
return { whatsApps, loading };
|
|
|
|
};
|
|
|
|
|
|
|
|
export default useWhatsApps;
|