Files
towercontrol/hooks/useColumnVisibility.ts
Julien Froidefond da64221407 feat: refactor ObjectivesBoard and enhance column visibility management
- Replaced local state management in `ObjectivesBoard` with `useObjectivesCollapse` hook for better state handling.
- Updated collapse button logic to use the new hook's toggle function, improving code clarity.
- Refactored `useColumnVisibility` to load user preferences on mount and persist visibility changes, enhancing user experience.
- Integrated user preferences for Kanban filters in `TasksContext`, allowing for persistent filter settings across sessions.
2025-09-14 22:42:22 +02:00

47 lines
1.3 KiB
TypeScript

import { useState, useEffect } from 'react';
import { TaskStatus } from '@/lib/types';
import { userPreferencesService } from '@/services/user-preferences';
export function useColumnVisibility() {
const [hiddenStatuses, setHiddenStatuses] = useState<Set<TaskStatus>>(new Set());
// Charger les préférences au montage
useEffect(() => {
const saved = userPreferencesService.getColumnVisibility();
setHiddenStatuses(new Set(saved.hiddenStatuses));
}, []);
const toggleStatusVisibility = (status: TaskStatus) => {
setHiddenStatuses(prev => {
const newSet = new Set(prev);
if (newSet.has(status)) {
newSet.delete(status);
} else {
newSet.add(status);
}
// Sauvegarder dans localStorage
userPreferencesService.saveColumnVisibility({
hiddenStatuses: Array.from(newSet)
});
return newSet;
});
};
const getVisibleStatuses = <T extends { id: TaskStatus }>(statuses: T[]): T[] => {
return statuses.filter(status => !hiddenStatuses.has(status.id));
};
const isStatusVisible = (status: TaskStatus): boolean => {
return !hiddenStatuses.has(status);
};
return {
hiddenStatuses,
toggleStatusVisibility,
getVisibleStatuses,
isStatusVisible
};
}