mirror of
https://github.com/cheveguerra/whaticket-community.git
synced 2026-04-20 04:39:20 +00:00
improvement: started translation of backend errors
This commit is contained in:
@@ -8,9 +8,7 @@ const CheckContactOpenTickets = async (contactId: number): Promise<void> => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (ticket) {
|
if (ticket) {
|
||||||
throw new AppError(
|
throw new AppError("ERR_OTHER_OPEN_TICKET");
|
||||||
"There's already an open or pending ticket for this contact."
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ const GetDefaultWhatsApp = async (): Promise<Whatsapp> => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!defaultWhatsapp) {
|
if (!defaultWhatsapp) {
|
||||||
throw new AppError("No default WhatsApp found. Check Connection page.");
|
throw new AppError("ERR_NO_WAPP_FOUND");
|
||||||
}
|
}
|
||||||
|
|
||||||
return defaultWhatsapp;
|
return defaultWhatsapp;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { Client as Session } from "whatsapp-web.js";
|
import { Client as Session } from "whatsapp-web.js";
|
||||||
import { getWbot } from "../libs/wbot";
|
import { getWbot } from "../libs/wbot";
|
||||||
import AppError from "../errors/AppError";
|
|
||||||
import GetDefaultWhatsApp from "./GetDefaultWhatsApp";
|
import GetDefaultWhatsApp from "./GetDefaultWhatsApp";
|
||||||
import Ticket from "../models/Ticket";
|
import Ticket from "../models/Ticket";
|
||||||
|
|
||||||
@@ -8,9 +7,6 @@ const GetTicketWbot = async (ticket: Ticket): Promise<Session> => {
|
|||||||
if (!ticket.whatsappId) {
|
if (!ticket.whatsappId) {
|
||||||
const defaultWhatsapp = await GetDefaultWhatsApp();
|
const defaultWhatsapp = await GetDefaultWhatsApp();
|
||||||
|
|
||||||
if (!defaultWhatsapp) {
|
|
||||||
throw new AppError("No default WhatsApp found. Check Connection page.");
|
|
||||||
}
|
|
||||||
await ticket.$set("whatsapp", defaultWhatsapp);
|
await ticket.$set("whatsapp", defaultWhatsapp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,10 +17,6 @@ const CreateTicketService = async ({
|
|||||||
}: Request): Promise<Ticket> => {
|
}: Request): Promise<Ticket> => {
|
||||||
const defaultWhatsapp = await GetDefaultWhatsApp();
|
const defaultWhatsapp = await GetDefaultWhatsApp();
|
||||||
|
|
||||||
if (!defaultWhatsapp) {
|
|
||||||
throw new AppError("No default WhatsApp found. Check Connection page.");
|
|
||||||
}
|
|
||||||
|
|
||||||
await CheckContactOpenTickets(contactId);
|
await CheckContactOpenTickets(contactId);
|
||||||
|
|
||||||
const { isGroup } = await ShowContactService(contactId);
|
const { isGroup } = await ShowContactService(contactId);
|
||||||
|
|||||||
@@ -25,11 +25,11 @@ const AuthUserService = async ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
throw new AppError("Incorrect user/password combination.", 401);
|
throw new AppError("ERR_INVALID_CREDENTIALS", 401);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(await user.checkPassword(password))) {
|
if (!(await user.checkPassword(password))) {
|
||||||
throw new AppError("Incorrect user/password combination.", 401);
|
throw new AppError("ERR_INVALID_CREDENTIALS", 401);
|
||||||
}
|
}
|
||||||
|
|
||||||
const token = createAccessToken(user);
|
const token = createAccessToken(user);
|
||||||
|
|||||||
@@ -25,9 +25,7 @@ const DeleteWhatsAppMessage = async (messageId: string): Promise<Message> => {
|
|||||||
try {
|
try {
|
||||||
await messageToDelete.delete(true);
|
await messageToDelete.delete(true);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
throw new AppError(
|
throw new AppError("ERR_DELETE_WAPP_MSG");
|
||||||
"Couldn't delete message from WhatsApp. Check connections page."
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await message.update({ isDeleted: true });
|
await message.update({ isDeleted: true });
|
||||||
|
|||||||
@@ -31,9 +31,7 @@ const SendWhatsAppMedia = async ({
|
|||||||
return sentMessage;
|
return sentMessage;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
throw new AppError(
|
throw new AppError("ERR_SENDING_WAPP_MSG");
|
||||||
"Could not send whatsapp message. Check connections page."
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -24,9 +24,7 @@ const SendWhatsAppMessage = async ({
|
|||||||
return sentMessage;
|
return sentMessage;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
throw new AppError(
|
throw new AppError("ERR_SENDING_WAPP_MSG");
|
||||||
"Could not send whatsapp message. Check connections page."
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -156,6 +156,7 @@ const MessageInput = ({ ticketStatus }) => {
|
|||||||
const handleUploadMedia = async e => {
|
const handleUploadMedia = async e => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("media", media.raw);
|
formData.append("media", media.raw);
|
||||||
formData.append("fromMe", true);
|
formData.append("fromMe", true);
|
||||||
@@ -164,11 +165,14 @@ const MessageInput = ({ ticketStatus }) => {
|
|||||||
try {
|
try {
|
||||||
await api.post(`/messages/${ticketId}`, formData);
|
await api.post(`/messages/${ticketId}`, formData);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
const errorMsg = err.response?.data?.error;
|
||||||
if (err.response && err.response.data && err.response.data.error) {
|
if (errorMsg === "ERR_SENDING_WAPP_MSG") {
|
||||||
|
toast.error(i18n.t("messagesInput.toasts.error"));
|
||||||
|
} else {
|
||||||
toast.error(err.response.data.error);
|
toast.error(err.response.data.error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
setMedia(mediaInitialState);
|
setMedia(mediaInitialState);
|
||||||
};
|
};
|
||||||
@@ -176,6 +180,7 @@ const MessageInput = ({ ticketStatus }) => {
|
|||||||
const handleSendMessage = async () => {
|
const handleSendMessage = async () => {
|
||||||
if (inputMessage.trim() === "") return;
|
if (inputMessage.trim() === "") return;
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
|
|
||||||
const message = {
|
const message = {
|
||||||
read: 1,
|
read: 1,
|
||||||
fromMe: true,
|
fromMe: true,
|
||||||
@@ -185,11 +190,18 @@ const MessageInput = ({ ticketStatus }) => {
|
|||||||
try {
|
try {
|
||||||
await api.post(`/messages/${ticketId}`, message);
|
await api.post(`/messages/${ticketId}`, message);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
const errorMsg = err.response?.data?.error;
|
||||||
if (err.response && err.response.data && err.response.data.error) {
|
if (errorMsg) {
|
||||||
toast.error(err.response.data.error);
|
if (i18n.exists(`backendErrors.${errorMsg}`)) {
|
||||||
|
toast.error(i18n.t(`backendErrors.${errorMsg}`));
|
||||||
|
} else {
|
||||||
|
toast.error(err.response.data.error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toast.error("Unknown error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setInputMessage("");
|
setInputMessage("");
|
||||||
setShowEmoji(false);
|
setShowEmoji(false);
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
@@ -225,15 +237,21 @@ const MessageInput = ({ ticketStatus }) => {
|
|||||||
formData.append("fromMe", true);
|
formData.append("fromMe", true);
|
||||||
|
|
||||||
await api.post(`/messages/${ticketId}`, formData);
|
await api.post(`/messages/${ticketId}`, formData);
|
||||||
|
|
||||||
setRecording(false);
|
|
||||||
setLoading(false);
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
const errorMsg = err.response?.data?.error;
|
||||||
if (err.response && err.response.data && err.response.data.error) {
|
if (errorMsg) {
|
||||||
toast.error(err.response.data.error);
|
if (i18n.exists(`backendErrors.${errorMsg}`)) {
|
||||||
|
toast.error(i18n.t(`backendErrors.${errorMsg}`));
|
||||||
|
} else {
|
||||||
|
toast.error(err.response.data.error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toast.error("Unknown error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setRecording(false);
|
||||||
|
setLoading(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleCancelAudio = async () => {
|
const handleCancelAudio = async () => {
|
||||||
|
|||||||
@@ -16,9 +16,15 @@ const MessageOptionsMenu = ({ messageId, menuOpen, handleClose, anchorEl }) => {
|
|||||||
try {
|
try {
|
||||||
await api.delete(`/messages/${messageId}`);
|
await api.delete(`/messages/${messageId}`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
const errorMsg = err.response?.data?.error;
|
||||||
if (err.response && err.response.data && err.response.data.error) {
|
if (errorMsg) {
|
||||||
toast.error(err.response.data.error);
|
if (i18n.exists(`backendErrors.${errorMsg}`)) {
|
||||||
|
toast.error(i18n.t(`backendErrors.${errorMsg}`));
|
||||||
|
} else {
|
||||||
|
toast.error(err.response.data.error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toast.error("Unknown error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -25,12 +25,6 @@ const useStyles = makeStyles(theme => ({
|
|||||||
display: "flex",
|
display: "flex",
|
||||||
flexWrap: "wrap",
|
flexWrap: "wrap",
|
||||||
},
|
},
|
||||||
|
|
||||||
// btnWrapper: {
|
|
||||||
// // margin: theme.spacing(1),
|
|
||||||
// // position: "relative",
|
|
||||||
// display: "flex",
|
|
||||||
// },
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const filterOptions = createFilterOptions({
|
const filterOptions = createFilterOptions({
|
||||||
@@ -89,9 +83,15 @@ const NewTicketModal = ({ modalOpen, onClose }) => {
|
|||||||
});
|
});
|
||||||
history.push(`/tickets/${ticket.id}`);
|
history.push(`/tickets/${ticket.id}`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
const errorMsg = err.response?.data?.error;
|
||||||
if (err.response && err.response.data && err.response.data.error) {
|
if (errorMsg) {
|
||||||
toast.error(err.response.data.error);
|
if (i18n.exists(`backendErrors.${errorMsg}`)) {
|
||||||
|
toast.error(i18n.t(`backendErrors.${errorMsg}`));
|
||||||
|
} else {
|
||||||
|
toast.error(err.response.data.error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toast.error("Unknown error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ const useAuth = () => {
|
|||||||
const handleLogin = async (e, user) => {
|
const handleLogin = async (e, user) => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { data } = await api.post("/auth/login", user);
|
const { data } = await api.post("/auth/login", user);
|
||||||
localStorage.setItem("token", JSON.stringify(data.token));
|
localStorage.setItem("token", JSON.stringify(data.token));
|
||||||
@@ -79,17 +80,24 @@ const useAuth = () => {
|
|||||||
localStorage.setItem("profile", data.profile);
|
localStorage.setItem("profile", data.profile);
|
||||||
localStorage.setItem("userId", data.userId);
|
localStorage.setItem("userId", data.userId);
|
||||||
api.defaults.headers.Authorization = `Bearer ${data.token}`;
|
api.defaults.headers.Authorization = `Bearer ${data.token}`;
|
||||||
|
|
||||||
setIsAuth(true);
|
setIsAuth(true);
|
||||||
toast.success(i18n.t("auth.toasts.success"));
|
toast.success(i18n.t("auth.toasts.success"));
|
||||||
setLoading(false);
|
|
||||||
history.push("/tickets");
|
history.push("/tickets");
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
const errorMsg = err.response?.data?.error;
|
||||||
if (err.response && err.response.data && err.response.data.error) {
|
if (errorMsg) {
|
||||||
toast.error(err.response.data.error);
|
if (i18n.exists(`backendErrors.${errorMsg}`)) {
|
||||||
|
toast.error(i18n.t(`backendErrors.${errorMsg}`));
|
||||||
|
} else {
|
||||||
|
toast.error(err.response.data.error);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
toast.error("Unknown error");
|
||||||
}
|
}
|
||||||
setLoading(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setLoading(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleLogout = e => {
|
const handleLogout = e => {
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ const messages = {
|
|||||||
auth: {
|
auth: {
|
||||||
toasts: {
|
toasts: {
|
||||||
success: "Login successfully!",
|
success: "Login successfully!",
|
||||||
fail: "Authentication error. Please log in again",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
dashboard: {
|
dashboard: {
|
||||||
@@ -287,6 +286,16 @@ const messages = {
|
|||||||
message: "This action cannot be reverted.",
|
message: "This action cannot be reverted.",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
backendErrors: {
|
||||||
|
ERR_NO_WAPP_FOUND: "No default WhatsApp found. Check connections page.",
|
||||||
|
ERR_INVALID_CREDENTIALS: "Authentication error. Please try again.",
|
||||||
|
ERR_SENDING_WAPP_MSG:
|
||||||
|
"Error sending WhatsApp message. Check connections page.",
|
||||||
|
ERR_DELETE_WAPP_MSG:
|
||||||
|
"Couldn't delete message from WhatsApp. Check connections page.",
|
||||||
|
ERR_OTHER_OPEN_TICKET:
|
||||||
|
"There's already an open or pending ticket for this contact.",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ const messages = {
|
|||||||
auth: {
|
auth: {
|
||||||
toasts: {
|
toasts: {
|
||||||
success: "¡Inicio de sesión exitoso!",
|
success: "¡Inicio de sesión exitoso!",
|
||||||
fail: "Error de autenticación. Por favor intenta de nuevo.",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
dashboard: {
|
dashboard: {
|
||||||
@@ -292,6 +291,17 @@ const messages = {
|
|||||||
message: "Esta acción no puede ser revertida.",
|
message: "Esta acción no puede ser revertida.",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
backendErrors: {
|
||||||
|
ERR_NO_WAPP_FOUND:
|
||||||
|
"No se encontró WhatsApp predeterminado. Verifique la página de conexiones.",
|
||||||
|
ERR_INVALID_CREDENTIALS: "Error de autenticación. Vuelva a intentarlo.",
|
||||||
|
ERR_SENDING_WAPP_MSG:
|
||||||
|
"Error al enviar el mensaje de WhatsApp. Verifique la página de conexiones.",
|
||||||
|
ERR_DELETE_WAPP_MSG:
|
||||||
|
"No se pudo borrar el mensaje de WhatsApp. Verifique la página de conexiones.",
|
||||||
|
ERR_OTHER_OPEN_TICKET:
|
||||||
|
"Ya hay un ticket abierto o pendiente para este contacto.",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ const messages = {
|
|||||||
auth: {
|
auth: {
|
||||||
toasts: {
|
toasts: {
|
||||||
success: "Login efetuado com sucesso!",
|
success: "Login efetuado com sucesso!",
|
||||||
fail: "Erro de autenticação. Por favor, faça login novamente",
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
dashboard: {
|
dashboard: {
|
||||||
@@ -290,6 +289,18 @@ const messages = {
|
|||||||
message: "Esta ação não pode ser revertida.",
|
message: "Esta ação não pode ser revertida.",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
backendErrors: {
|
||||||
|
ERR_NO_WAPP_FOUND:
|
||||||
|
"Nenhum WhatsApp padrão encontrado. Verifique a página de conexões.",
|
||||||
|
ERR_INVALID_CREDENTIALS:
|
||||||
|
"Erro de autenticação. Por favor, tente novamente.",
|
||||||
|
ERR_SENDING_WAPP_MSG:
|
||||||
|
"Erro ao enviar mensagem do WhatsApp. Verifique a página de conexões.",
|
||||||
|
ERR_DELETE_WAPP_MSG:
|
||||||
|
"Não foi possível excluir a mensagem do WhatsApp. Verifique a página de conexões.",
|
||||||
|
ERR_OTHER_OPEN_TICKET:
|
||||||
|
"Já existe um tíquete aberto ou pendente para este contato.",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user