From 122860d230acd7137242799cdac6675c02871838 Mon Sep 17 00:00:00 2001 From: LordMathis Date: Fri, 27 Sep 2024 23:28:19 +0200 Subject: [PATCH] Fix settings not closing on submit bug --- backend/internal/api/handlers.go | 9 +++++++++ frontend/src/App.js | 6 +++--- frontend/src/components/Settings.js | 13 +++++++++---- frontend/src/services/api.js | 8 ++++++-- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/backend/internal/api/handlers.go b/backend/internal/api/handlers.go index 008e5de..57ce19c 100644 --- a/backend/internal/api/handlers.go +++ b/backend/internal/api/handlers.go @@ -120,6 +120,15 @@ func UpdateSettings(db *db.DB) http.HandlerFunc { return } + // Fetch the saved settings to return + savedSettings, err := db.GetSettings(settings.UserID) + if err != nil { + http.Error(w, "Settings saved but could not be retrieved", http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(savedSettings) } } diff --git a/frontend/src/App.js b/frontend/src/App.js index eb580f5..772aeaf 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -34,15 +34,15 @@ function App() { loadUserSettings(); }, [userId]); - const toggleTheme = () => { - setThemeType(prevTheme => prevTheme === 'light' ? 'dark' : 'light'); + const setTheme = (newTheme) => { + setThemeType(newTheme); }; return ( -
+
{ const theme = useTheme(); const [autoSave, setAutoSave] = useState(false); const userId = 1; + const { setToast } = useToasts(); const handleSubmit = async () => { try { - await saveUserSettings({ + const savedSettings = await saveUserSettings({ userId: userId, settings: { theme: currentTheme, autoSave: autoSave } }); + setToast({ text: 'Settings saved successfully', type: 'success' }); + // Update local state with saved settings + setAutoSave(savedSettings.settings.autoSave); + onThemeChange(savedSettings.settings.theme); onClose(); } catch (error) { console.error('Failed to save settings:', error); - // You might want to show an error message to the user here + setToast({ text: 'Failed to save settings: ' + error.message, type: 'error' }); } }; const handleThemeChange = () => { - onThemeChange(); + onThemeChange(currentTheme === 'light' ? 'dark' : 'light'); }; const disabledMessage = "This feature is not yet implemented"; diff --git a/frontend/src/services/api.js b/frontend/src/services/api.js index e1155b3..2f2b50b 100644 --- a/frontend/src/services/api.js +++ b/frontend/src/services/api.js @@ -64,10 +64,14 @@ export const saveUserSettings = async (settings) => { }, body: JSON.stringify(settings), }); + if (!response.ok) { - throw new Error('Failed to save user settings'); + const errorData = await response.json().catch(() => null); + throw new Error(errorData?.message || `HTTP error! status: ${response.status}`); } - return await response.json(); + + const savedSettings = await response.json(); + return savedSettings; } catch (error) { console.error('Error saving user settings:', error); throw error;