diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 6ad7511..4ede942 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -456,8 +456,13 @@ function AppContent() { async function saveSettings(e: React.FormEvent) { e.preventDefault(); + // Auto-disable email if no recipient is set + const effectiveEmailEnabled = settings.emailEnabled && !!settings.notificationEmail?.trim(); + // Auto-disable push if no URL is set + const effectiveShoutrrrEnabled = settings.shoutrrrEnabled && !!settings.shoutrrrUrl?.trim(); + // Validate email if email notifications are enabled - if (settings.emailEnabled && settings.notificationEmail) { + if (effectiveEmailEnabled && settings.notificationEmail) { const emailRegex = /^[a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,}$/i; if (!emailRegex.test(settings.notificationEmail)) { setTestEmailResult({ success: false, message: "Invalid email address" }); @@ -469,14 +474,14 @@ function AppContent() { setTestEmailResult(null); const payload = { - emailEnabled: settings.emailEnabled, + emailEnabled: effectiveEmailEnabled, notificationEmail: settings.notificationEmail, reminderDaysBefore: settings.reminderDaysBefore, repeatDailyReminders: settings.repeatDailyReminders, lowStockDays: settings.lowStockDays, normalStockDays: settings.normalStockDays, highStockDays: settings.highStockDays, - shoutrrrEnabled: settings.shoutrrrEnabled, + shoutrrrEnabled: effectiveShoutrrrEnabled, shoutrrrUrl: settings.shoutrrrUrl, // Granular notification settings emailStockReminders: settings.emailStockReminders, @@ -500,8 +505,15 @@ function AppContent() { body: JSON.stringify(payload), }).catch(() => null); + // Update local state with effective values + const updatedSettings = { + ...settings, + emailEnabled: effectiveEmailEnabled, + shoutrrrEnabled: effectiveShoutrrrEnabled + }; + setSettings(updatedSettings); setSettingsSaving(false); - setSavedSettings(settings); + setSavedSettings(updatedSettings); setSettingsSaved(true); } @@ -1574,7 +1586,7 @@ function AppContent() {