From 16084c414d8867418452b5611df2206d60c00ccf Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 3 Oct 2025 12:01:29 +0000 Subject: [PATCH] refactor: Unify all settings into single Save Preferences button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Simplified the settings page by consolidating all save buttons into one global "Save Preferences" button at the bottom of the page. ## Changes Made ### Unified Save Handler - Merged `handleSaveProfile` and `handleSavePreferences` into single `handleSaveAll` function - Single save handler now updates: * Profile name * Timezone * Time format (12h/24h) * Notification preferences - One API call to save all settings at once ### Removed Individual Save Buttons - Removed "Save Profile" button from Profile Information section - Removed "Save Preferences" button from Preferences section - Removed "Save Notification Settings" button from Notifications section ### Added Global Save Button - Centered "Save Preferences" button at bottom of settings - Positioned above Account Actions (Logout) section - Large, prominent button (minWidth: 200px) - Single source of truth for all settings changes ### User Experience Benefits - **Simpler**: One clear action to save all changes - **Fewer clicks**: No need to save each section separately - **Clear feedback**: Single success/error message for all updates - **Better UX**: Users can make multiple changes and save once - **Consistent**: All settings treated as unified preferences Files changed: 1 file (settings page) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- maternal-web/app/settings/page.tsx | 89 ++++++++++-------------------- 1 file changed, 30 insertions(+), 59 deletions(-) diff --git a/maternal-web/app/settings/page.tsx b/maternal-web/app/settings/page.tsx index faf8cfa..561cb85 100644 --- a/maternal-web/app/settings/page.tsx +++ b/maternal-web/app/settings/page.tsx @@ -56,34 +56,7 @@ export default function SettingsPage() { } }, [user]); - const handleSavePreferences = async () => { - setIsLoading(true); - setError(null); - - try { - const response = await usersApi.updateProfile({ - timezone, - preferences: { - ...settings, - timeFormat, - } - }); - console.log('✅ Preferences updated successfully:', response); - - // Refresh user to get latest data from server - await refreshUser(); - - setSuccessMessage('Preferences saved successfully!'); - } catch (err: any) { - console.error('❌ Failed to update preferences:', err); - console.error('Error response:', err.response); - setError(err.response?.data?.message || err.message || 'Failed to save preferences. Please try again.'); - } finally { - setIsLoading(false); - } - }; - - const handleSaveProfile = async () => { + const handleSaveAll = async () => { // Validate name if (!name || name.trim() === '') { setNameError('Name cannot be empty'); @@ -97,17 +70,22 @@ export default function SettingsPage() { try { const response = await usersApi.updateProfile({ name: name.trim(), + timezone, + preferences: { + ...settings, + timeFormat, + } }); - console.log('✅ Profile updated successfully:', response); + console.log('✅ All settings saved successfully:', response); // Refresh user to get latest data from server await refreshUser(); - setSuccessMessage('Profile updated successfully!'); + setSuccessMessage('Settings saved successfully!'); } catch (err: any) { - console.error('❌ Failed to update profile:', err); + console.error('❌ Failed to save settings:', err); console.error('Error response:', err.response); - setError(err.response?.data?.message || err.message || 'Failed to update profile. Please try again.'); + setError(err.response?.data?.message || err.message || 'Failed to save settings. Please try again.'); } finally { setIsLoading(false); } @@ -172,15 +150,6 @@ export default function SettingsPage() { disabled helperText="Email cannot be changed" /> - @@ -206,15 +175,6 @@ export default function SettingsPage() { - @@ -252,15 +212,6 @@ export default function SettingsPage() { label="Email Updates" /> - @@ -358,6 +309,26 @@ export default function SettingsPage() { + {/* Global Save Button */} + + + + + + {/* Account Actions */}