From 011d8d5dfedaf3b2cc5ec6549bcb01ac3bd78c43 Mon Sep 17 00:00:00 2001 From: canove Date: Tue, 13 Oct 2020 06:50:00 -0300 Subject: [PATCH] improvement: started translation of backend errors --- .../src/helpers/CheckContactOpenTickets.ts | 4 +- backend/src/helpers/GetDefaultWhatsApp.ts | 2 +- backend/src/helpers/GetTicketWbot.ts | 4 -- .../TicketServices/CreateTicketService.ts | 4 -- .../services/UserServices/AuthUserSerice.ts | 4 +- .../WbotServices/DeleteWhatsAppMessage.ts | 4 +- .../WbotServices/SendWhatsAppMedia.ts | 4 +- .../WbotServices/SendWhatsAppMessage.ts | 4 +- frontend/src/components/MessageInput/index.js | 40 ++++++++++++++----- .../components/MessageOptionsMenu/index.js | 12 ++++-- .../src/components/NewTicketModal/index.js | 18 ++++----- frontend/src/context/Auth/useAuth.js | 18 ++++++--- frontend/src/translate/languages/en.js | 11 ++++- frontend/src/translate/languages/es.js | 12 +++++- frontend/src/translate/languages/pt.js | 13 +++++- 15 files changed, 100 insertions(+), 54 deletions(-) diff --git a/backend/src/helpers/CheckContactOpenTickets.ts b/backend/src/helpers/CheckContactOpenTickets.ts index 0ebd556..3437cce 100644 --- a/backend/src/helpers/CheckContactOpenTickets.ts +++ b/backend/src/helpers/CheckContactOpenTickets.ts @@ -8,9 +8,7 @@ const CheckContactOpenTickets = async (contactId: number): Promise => { }); if (ticket) { - throw new AppError( - "There's already an open or pending ticket for this contact." - ); + throw new AppError("ERR_OTHER_OPEN_TICKET"); } }; diff --git a/backend/src/helpers/GetDefaultWhatsApp.ts b/backend/src/helpers/GetDefaultWhatsApp.ts index cffddde..e000b4e 100644 --- a/backend/src/helpers/GetDefaultWhatsApp.ts +++ b/backend/src/helpers/GetDefaultWhatsApp.ts @@ -7,7 +7,7 @@ const GetDefaultWhatsApp = async (): Promise => { }); if (!defaultWhatsapp) { - throw new AppError("No default WhatsApp found. Check Connection page."); + throw new AppError("ERR_NO_WAPP_FOUND"); } return defaultWhatsapp; diff --git a/backend/src/helpers/GetTicketWbot.ts b/backend/src/helpers/GetTicketWbot.ts index 50f6422..0caa6b0 100644 --- a/backend/src/helpers/GetTicketWbot.ts +++ b/backend/src/helpers/GetTicketWbot.ts @@ -1,6 +1,5 @@ import { Client as Session } from "whatsapp-web.js"; import { getWbot } from "../libs/wbot"; -import AppError from "../errors/AppError"; import GetDefaultWhatsApp from "./GetDefaultWhatsApp"; import Ticket from "../models/Ticket"; @@ -8,9 +7,6 @@ const GetTicketWbot = async (ticket: Ticket): Promise => { if (!ticket.whatsappId) { const defaultWhatsapp = await GetDefaultWhatsApp(); - if (!defaultWhatsapp) { - throw new AppError("No default WhatsApp found. Check Connection page."); - } await ticket.$set("whatsapp", defaultWhatsapp); } diff --git a/backend/src/services/TicketServices/CreateTicketService.ts b/backend/src/services/TicketServices/CreateTicketService.ts index 93477ab..15abaf8 100644 --- a/backend/src/services/TicketServices/CreateTicketService.ts +++ b/backend/src/services/TicketServices/CreateTicketService.ts @@ -17,10 +17,6 @@ const CreateTicketService = async ({ }: Request): Promise => { const defaultWhatsapp = await GetDefaultWhatsApp(); - if (!defaultWhatsapp) { - throw new AppError("No default WhatsApp found. Check Connection page."); - } - await CheckContactOpenTickets(contactId); const { isGroup } = await ShowContactService(contactId); diff --git a/backend/src/services/UserServices/AuthUserSerice.ts b/backend/src/services/UserServices/AuthUserSerice.ts index a1e21dc..38d18dc 100644 --- a/backend/src/services/UserServices/AuthUserSerice.ts +++ b/backend/src/services/UserServices/AuthUserSerice.ts @@ -25,11 +25,11 @@ const AuthUserService = async ({ }); if (!user) { - throw new AppError("Incorrect user/password combination.", 401); + throw new AppError("ERR_INVALID_CREDENTIALS", 401); } if (!(await user.checkPassword(password))) { - throw new AppError("Incorrect user/password combination.", 401); + throw new AppError("ERR_INVALID_CREDENTIALS", 401); } const token = createAccessToken(user); diff --git a/backend/src/services/WbotServices/DeleteWhatsAppMessage.ts b/backend/src/services/WbotServices/DeleteWhatsAppMessage.ts index 862967f..b9b3b17 100644 --- a/backend/src/services/WbotServices/DeleteWhatsAppMessage.ts +++ b/backend/src/services/WbotServices/DeleteWhatsAppMessage.ts @@ -25,9 +25,7 @@ const DeleteWhatsAppMessage = async (messageId: string): Promise => { try { await messageToDelete.delete(true); } catch (err) { - throw new AppError( - "Couldn't delete message from WhatsApp. Check connections page." - ); + throw new AppError("ERR_DELETE_WAPP_MSG"); } await message.update({ isDeleted: true }); diff --git a/backend/src/services/WbotServices/SendWhatsAppMedia.ts b/backend/src/services/WbotServices/SendWhatsAppMedia.ts index 37ddeaf..907cd2b 100644 --- a/backend/src/services/WbotServices/SendWhatsAppMedia.ts +++ b/backend/src/services/WbotServices/SendWhatsAppMedia.ts @@ -31,9 +31,7 @@ const SendWhatsAppMedia = async ({ return sentMessage; } catch (err) { console.log(err); - throw new AppError( - "Could not send whatsapp message. Check connections page." - ); + throw new AppError("ERR_SENDING_WAPP_MSG"); } }; diff --git a/backend/src/services/WbotServices/SendWhatsAppMessage.ts b/backend/src/services/WbotServices/SendWhatsAppMessage.ts index dfa340b..f14e96b 100644 --- a/backend/src/services/WbotServices/SendWhatsAppMessage.ts +++ b/backend/src/services/WbotServices/SendWhatsAppMessage.ts @@ -24,9 +24,7 @@ const SendWhatsAppMessage = async ({ return sentMessage; } catch (err) { console.log(err); - throw new AppError( - "Could not send whatsapp message. Check connections page." - ); + throw new AppError("ERR_SENDING_WAPP_MSG"); } }; diff --git a/frontend/src/components/MessageInput/index.js b/frontend/src/components/MessageInput/index.js index 97647a8..32b2942 100644 --- a/frontend/src/components/MessageInput/index.js +++ b/frontend/src/components/MessageInput/index.js @@ -156,6 +156,7 @@ const MessageInput = ({ ticketStatus }) => { const handleUploadMedia = async e => { setLoading(true); e.preventDefault(); + const formData = new FormData(); formData.append("media", media.raw); formData.append("fromMe", true); @@ -164,11 +165,14 @@ const MessageInput = ({ ticketStatus }) => { try { await api.post(`/messages/${ticketId}`, formData); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { + const errorMsg = err.response?.data?.error; + if (errorMsg === "ERR_SENDING_WAPP_MSG") { + toast.error(i18n.t("messagesInput.toasts.error")); + } else { toast.error(err.response.data.error); } } + setLoading(false); setMedia(mediaInitialState); }; @@ -176,6 +180,7 @@ const MessageInput = ({ ticketStatus }) => { const handleSendMessage = async () => { if (inputMessage.trim() === "") return; setLoading(true); + const message = { read: 1, fromMe: true, @@ -185,11 +190,18 @@ const MessageInput = ({ ticketStatus }) => { try { await api.post(`/messages/${ticketId}`, message); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } + setInputMessage(""); setShowEmoji(false); setLoading(false); @@ -225,15 +237,21 @@ const MessageInput = ({ ticketStatus }) => { formData.append("fromMe", true); await api.post(`/messages/${ticketId}`, formData); - - setRecording(false); - setLoading(false); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + 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 () => { diff --git a/frontend/src/components/MessageOptionsMenu/index.js b/frontend/src/components/MessageOptionsMenu/index.js index 086698a..fd312e2 100644 --- a/frontend/src/components/MessageOptionsMenu/index.js +++ b/frontend/src/components/MessageOptionsMenu/index.js @@ -16,9 +16,15 @@ const MessageOptionsMenu = ({ messageId, menuOpen, handleClose, anchorEl }) => { try { await api.delete(`/messages/${messageId}`); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + if (i18n.exists(`backendErrors.${errorMsg}`)) { + toast.error(i18n.t(`backendErrors.${errorMsg}`)); + } else { + toast.error(err.response.data.error); + } + } else { + toast.error("Unknown error"); } } }; diff --git a/frontend/src/components/NewTicketModal/index.js b/frontend/src/components/NewTicketModal/index.js index 6bb2c09..9061b6e 100644 --- a/frontend/src/components/NewTicketModal/index.js +++ b/frontend/src/components/NewTicketModal/index.js @@ -25,12 +25,6 @@ const useStyles = makeStyles(theme => ({ display: "flex", flexWrap: "wrap", }, - - // btnWrapper: { - // // margin: theme.spacing(1), - // // position: "relative", - // display: "flex", - // }, })); const filterOptions = createFilterOptions({ @@ -89,9 +83,15 @@ const NewTicketModal = ({ modalOpen, onClose }) => { }); history.push(`/tickets/${ticket.id}`); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + 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); diff --git a/frontend/src/context/Auth/useAuth.js b/frontend/src/context/Auth/useAuth.js index 5647003..3c568ee 100644 --- a/frontend/src/context/Auth/useAuth.js +++ b/frontend/src/context/Auth/useAuth.js @@ -72,6 +72,7 @@ const useAuth = () => { const handleLogin = async (e, user) => { setLoading(true); e.preventDefault(); + try { const { data } = await api.post("/auth/login", user); localStorage.setItem("token", JSON.stringify(data.token)); @@ -79,17 +80,24 @@ const useAuth = () => { localStorage.setItem("profile", data.profile); localStorage.setItem("userId", data.userId); api.defaults.headers.Authorization = `Bearer ${data.token}`; + setIsAuth(true); toast.success(i18n.t("auth.toasts.success")); - setLoading(false); history.push("/tickets"); } catch (err) { - console.log(err); - if (err.response && err.response.data && err.response.data.error) { - toast.error(err.response.data.error); + const errorMsg = err.response?.data?.error; + if (errorMsg) { + 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 => { diff --git a/frontend/src/translate/languages/en.js b/frontend/src/translate/languages/en.js index 2de8f31..b7ac739 100644 --- a/frontend/src/translate/languages/en.js +++ b/frontend/src/translate/languages/en.js @@ -31,7 +31,6 @@ const messages = { auth: { toasts: { success: "Login successfully!", - fail: "Authentication error. Please log in again", }, }, dashboard: { @@ -287,6 +286,16 @@ const messages = { 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.", + }, }, }, }; diff --git a/frontend/src/translate/languages/es.js b/frontend/src/translate/languages/es.js index 1872c8a..c99d2b5 100644 --- a/frontend/src/translate/languages/es.js +++ b/frontend/src/translate/languages/es.js @@ -32,7 +32,6 @@ const messages = { auth: { toasts: { success: "¡Inicio de sesión exitoso!", - fail: "Error de autenticación. Por favor intenta de nuevo.", }, }, dashboard: { @@ -292,6 +291,17 @@ const messages = { 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.", + }, }, }, }; diff --git a/frontend/src/translate/languages/pt.js b/frontend/src/translate/languages/pt.js index a5a96cf..5900a2b 100644 --- a/frontend/src/translate/languages/pt.js +++ b/frontend/src/translate/languages/pt.js @@ -31,7 +31,6 @@ const messages = { auth: { toasts: { success: "Login efetuado com sucesso!", - fail: "Erro de autenticação. Por favor, faça login novamente", }, }, dashboard: { @@ -290,6 +289,18 @@ const messages = { 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.", + }, }, }, };