feat: Enhance useSendTestEmail hook to support testing without saving

- Add support for optional email configuration parameter
- Implement improved error handling with detailed messages
- Add internationalization support for all user feedback
- Return appropriate error information for better UX
- Maintain backward compatibility with existing code
This commit is contained in:
mohadeseh safari
2025-05-16 19:45:24 -04:00
parent 083c395f10
commit dbcdb24da6
4 changed files with 56 additions and 14 deletions

View File

@@ -2,27 +2,44 @@ import { useState } from "react";
import { networkService } from "../main";
import { useSelector } from "react-redux";
import { createToast } from "../Utils/toastUtils";
import { useTranslation } from "react-i18next";
const useSendTestEmail = () => {
const [isSending, setIsSending] = useState(false);
const [error, setError] = useState(null);
const user = useSelector((state) => state.auth.user);
const { t } = useTranslation();
const sendTestEmail = async () => {
/**
* Send a test email with optional email configuration
* @param {Object} emailConfig - Optional email configuration parameters
*/
const sendTestEmail = async (emailConfig = null) => {
try {
setIsSending(true);
setError(null);
const response = await networkService.sendTestEmail({ to: user.email });
// Send the test email with or without configuration
const response = await networkService.sendTestEmail({
to: user.email,
emailConfig
});
if (typeof response?.data?.data?.messageId !== "undefined") {
createToast({
body: "Test email sent successfully",
body: t("settingsTestEmailSuccess", "Test email sent successfully"),
});
} else {
throw new Error("Failed to send test email");
throw new Error(response?.data?.error || t("settingsTestEmailFailed", "Failed to send test email"));
}
} catch (error) {
setError(error);
createToast({
body: t("settingsTestEmailFailedWithReason", "Failed to send test email: {{reason}}", {
reason: error.message || t("settingsTestEmailUnknownError", "Unknown error")
}),
variant: "error"
});
} finally {
setIsSending(false);
}

View File

@@ -112,15 +112,21 @@
"settingsFailedToAddDemoMonitors": "Failed to add demo monitors",
"settingsMonitorsDeleted": "Successfully deleted all monitors",
"settingsFailedToDeleteMonitors": "Failed to delete all monitors",
"settingsEmail": "Email settings",
"settingsEmailDescription": "Configure email settings",
"settingsEmailHost": "Email host - Hostname or IP address of the SMTP server",
"settingsEmailPort": "Email port - Port to connect to",
"settingsEmailAddress": "Email address - Used for authentication",
"settingsEmailPassword": "Email password - Password for authentication",
"settingsEmailUser": "Email user - Username for authentication, overrides email address if specified",
"settingsEmail": "Email",
"settingsEmailDescription": "Configure the email settings for your system. This is used to send notifications and alerts.",
"settingsEmailHost": "Email host",
"settingsEmailPort": "Email port",
"settingsEmailUser": "Email user",
"settingsEmailAddress": "Email address",
"settingsEmailPassword": "Email password",
"settingsEmailConnectionHost": "Email connection host",
"settingsTestEmail": "Send test e-mail",
"settingsTestEmailSuccess": "Test email sent successfully",
"settingsTestEmailFailed": "Failed to send test email",
"settingsTestEmailFailedWithReason": "Failed to send test email: {{reason}}",
"settingsTestEmailUnknownError": "Unknown error",
"settingsEmailRequiredFields": "Email host and port are required",
"settingsEmailFieldResetLabel": "Password is set. Click Reset to change it.",
"settingsEmailConnectionHost": "Email connection host - Hostname to use in the HELO/EHLO greeting",
"backendUnreachable": "Server Connection Error",
"backendUnreachableMessage": "We're unable to connect to the server. Please check your internet connection or verify your deployment configuration if the problem persists.",
"backendUnreachableError": "Cannot connect to the server. Please try again later.",
@@ -522,8 +528,6 @@
"logOut": "Log out"
},
"navControls": "Controls",
"statusBreadCrumbsStatusPages": "Status Pages",
"statusBreadCrumbsDetails": "Details",
"incidentsPageTitle": "Incidents",
"passwordPanel": {
"passwordChangedSuccess": "Your password was changed successfully.",

View File

@@ -115,6 +115,21 @@
"settingsRemoveAllMonitorsDialogConfirm": "Да, удалить все мониторы",
"settingsWallet": "Кошелёк",
"settingsWalletDescription": "Подключите свой кошелек здесь. Это необходимо для того, чтобы монитор Distributed Uptime мог подключиться к нескольким узлам по всему миру.",
"settingsEmail": "Настройки электронной почты",
"settingsEmailDescription": "Настройте параметры электронной почты",
"settingsEmailHost": "Хост электронной почты - имя хоста или IP-адрес SMTP-сервера",
"settingsEmailPort": "Порт электронной почты - порт для подключения",
"settingsEmailAddress": "Адрес электронной почты - используется для аутентификации",
"settingsEmailPassword": "Пароль электронной почты - пароль для аутентификации",
"settingsEmailUser": "Пользователь электронной почты - имя пользователя для аутентификации, переопределяет адрес электронной почты, если указан",
"settingsEmailFieldResetLabel": "Пароль установлен. Нажмите «Сбросить», чтобы изменить его.",
"settingsEmailConnectionHost": "Хост подключения электронной почты - имя хоста, используемое в приветствии HELO/EHLO",
"settingsTestEmail": "Отправить тестовое письмо",
"settingsTestEmailSuccess": "Тестовое письмо успешно отправлено",
"settingsTestEmailFailed": "Не удалось отправить тестовое письмо",
"settingsTestEmailFailedWithReason": "Не удалось отправить тестовое письмо: {{reason}}",
"settingsTestEmailUnknownError": "Неизвестная ошибка",
"settingsEmailRequiredFields": "Требуются хост и порт электронной почты",
"settingsAbout": "О",
"settingsDevelopedBy": "Developed by Bluewave Labs.",
"settingsSave": "Сохранить",

View File

@@ -99,6 +99,12 @@
"settingsRemoveAllMonitorsDialogConfirm": "Evet, tüm monitörleri kaldır",
"settingsWallet": "Cüzdan",
"settingsWalletDescription": "Cüzdanınızı buradan bağlayın. Bu, Dağıtılmış Çalışma Süresi monitörünün küresel olarak birden çok düğüme bağlanması için gereklidir.",
"settingsTestEmail": "Test e-postası gönder",
"settingsTestEmailSuccess": "Test e-postası başarıyla gönderildi",
"settingsTestEmailFailed": "Test e-postası gönderilemedi",
"settingsTestEmailFailedWithReason": "Test e-postası gönderilemedi: {{reason}}",
"settingsTestEmailUnknownError": "Bilinmeyen hata",
"settingsEmailRequiredFields": "E-posta sunucusu ve port gereklidir",
"settingsAbout": "Hakkında",
"settingsDevelopedBy": "Bluewave Labs tarafından geliştirilmiştir.",
"settingsSave": "Kaydet",