From 93e72013f940e0cd1152fa38588e8d546bf38d91 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Thu, 18 Sep 2025 13:39:08 +0200 Subject: [PATCH] feat: enhance font size toggle functionality in UserPreferencesContext - Implemented optimistic UI updates for font size changes, cycling through small, medium, and large options. - Added error handling to revert to original preferences if the server action fails, improving user experience. - Updated dependencies in the toggleFontSize function to include preferences.viewPreferences for better state management. --- src/contexts/UserPreferencesContext.tsx | 26 +++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/contexts/UserPreferencesContext.tsx b/src/contexts/UserPreferencesContext.tsx index 09f1183..d706e73 100644 --- a/src/contexts/UserPreferencesContext.tsx +++ b/src/contexts/UserPreferencesContext.tsx @@ -130,9 +130,31 @@ export function UserPreferencesProvider({ children, initialPreferences }: UserPr const toggleFontSize = useCallback(() => { startTransition(async () => { - await toggleFontSizeAction(); + const originalPreferences = preferences.viewPreferences; + + // Optimistic update - cycle through font sizes + const fontSizes: ('small' | 'medium' | 'large')[] = ['small', 'medium', 'large']; + const currentIndex = fontSizes.indexOf(preferences.viewPreferences.fontSize); + const nextIndex = (currentIndex + 1) % fontSizes.length; + const newFontSize = fontSizes[nextIndex]; + + setPreferences(prev => ({ + ...prev, + viewPreferences: { ...prev.viewPreferences, fontSize: newFontSize } + })); + + try { + const result = await toggleFontSizeAction(); + if (!result.success) { + console.error('Erreur server action:', result.error); + setPreferences(prev => ({ ...prev, viewPreferences: originalPreferences })); + } + } catch (error) { + console.error('Erreur lors du toggle de la taille de police:', error); + setPreferences(prev => ({ ...prev, viewPreferences: originalPreferences })); + } }); - }, []); + }, [preferences.viewPreferences]); // === COLUMN VISIBILITY ===