refactor: userpreferences are now in the DB

This commit is contained in:
Julien Froidefond
2025-09-17 08:30:36 +02:00
parent 4f137455f4
commit 14d300c682
24 changed files with 763 additions and 404 deletions

View File

@@ -4,16 +4,14 @@ import { Task, TaskStatus } from '@/lib/types';
import { KanbanColumn } from './Column';
import { CreateTaskData } from '@/clients/tasks-client';
import { useMemo, useState } from 'react';
import { useColumnVisibility } from '@/hooks/useColumnVisibility';
import { useUserPreferences } from '@/contexts/UserPreferencesContext';
import { useDragAndDrop } from '@/hooks/useDragAndDrop';
import { getAllStatuses } from '@/lib/status-config';
import {
DndContext,
DragEndEvent,
DragOverlay,
DragStartEvent,
PointerSensor,
useSensor,
useSensors,
DragStartEvent
} from '@dnd-kit/core';
import { TaskCard } from './TaskCard';
@@ -30,18 +28,8 @@ interface KanbanBoardProps {
export function KanbanBoard({ tasks, onCreateTask, onDeleteTask, onEditTask, onUpdateTitle, onUpdateStatus, compactView = false, visibleStatuses }: KanbanBoardProps) {
const [activeTask, setActiveTask] = useState<Task | null>(null);
// Gestion de la visibilité des colonnes (utilise les props si disponibles)
const { getVisibleStatuses } = useColumnVisibility();
// Configuration des capteurs pour le drag & drop
const sensors = useSensors(
useSensor(PointerSensor, {
activationConstraint: {
distance: 8, // Évite les clics accidentels
},
})
);
const { isColumnVisible } = useUserPreferences();
const { isMounted, sensors } = useDragAndDrop();
// Organiser les tâches par statut
const tasksByStatus = useMemo(() => {
const grouped = tasks.reduce((acc, task) => {
@@ -66,7 +54,7 @@ export function KanbanBoard({ tasks, onCreateTask, onDeleteTask, onEditTask, onU
// Filtrer les colonnes visibles
const visibleColumns = visibleStatuses ?
allColumns.filter(column => visibleStatuses.includes(column.id)) :
getVisibleStatuses(allColumns);
allColumns.filter(column => isColumnVisible(column.id));
// Gestion du début du drag
@@ -94,17 +82,10 @@ export function KanbanBoard({ tasks, onCreateTask, onDeleteTask, onEditTask, onU
await onUpdateStatus(taskId, newStatus);
};
return (
<DndContext
id="kanban-board"
sensors={sensors}
onDragStart={handleDragStart}
onDragEnd={handleDragEnd}
>
<div className="h-full flex flex-col bg-[var(--background)]">
{/* Espacement supérieur */}
<div className="pt-4"></div>
const content = (
<div className="h-full flex flex-col bg-[var(--background)]">
{/* Espacement supérieur */}
<div className="pt-4"></div>
{/* Board tech dark */}
<div className="flex-1 flex gap-6 overflow-x-auto p-6">
@@ -121,9 +102,22 @@ export function KanbanBoard({ tasks, onCreateTask, onDeleteTask, onEditTask, onU
/>
))}
</div>
</div>
);
</div>
if (!isMounted) {
return content;
}
return (
<DndContext
id="kanban-board"
sensors={sensors}
onDragStart={handleDragStart}
onDragEnd={handleDragEnd}
>
{content}
{/* Overlay pour le drag & drop */}
<DragOverlay>
{activeTask ? (