feat: implement optimistic updates for column visibility toggle

- Enhanced `toggleColumnVisibility` function to optimistically update the UI by modifying `hiddenStatuses` before awaiting server response.
- Added error handling to revert to original visibility state if the server action fails, improving user experience.
- Updated dependencies in the `useCallback` hook to include `preferences.columnVisibility` for accurate state management.
This commit is contained in:
Julien Froidefond
2025-09-18 15:44:14 +02:00
parent 523a7f00cc
commit 6161653611

View File

@@ -183,9 +183,36 @@ export function UserPreferencesProvider({ children, initialPreferences }: UserPr
const toggleColumnVisibility = useCallback((status: TaskStatus) => {
startTransition(async () => {
await toggleColumnVisibilityAction(status);
const originalVisibility = preferences.columnVisibility;
const hiddenStatuses = [...preferences.columnVisibility.hiddenStatuses];
// Optimistic update
if (hiddenStatuses.includes(status)) {
// Remove from hidden
const index = hiddenStatuses.indexOf(status);
hiddenStatuses.splice(index, 1);
} else {
// Add to hidden
hiddenStatuses.push(status);
}
setPreferences(prev => ({
...prev,
columnVisibility: { ...prev.columnVisibility, hiddenStatuses }
}));
try {
const result = await toggleColumnVisibilityAction(status);
if (!result.success) {
console.error('Erreur server action:', result.error);
setPreferences(prev => ({ ...prev, columnVisibility: originalVisibility }));
}
} catch (error) {
console.error('Erreur lors du toggle de la visibilité des colonnes:', error);
setPreferences(prev => ({ ...prev, columnVisibility: originalVisibility }));
}
});
}, []);
}, [preferences.columnVisibility]);
const isColumnVisible = useCallback((status: TaskStatus) => {
return !preferences.columnVisibility.hiddenStatuses.includes(status);