feat: add column visibility toggle to Kanban and Swimlanes boards
- Integrated `useColumnVisibility` hook for managing column visibility states. - Added `ColumnVisibilityToggle` component to both `KanbanBoard` and `SwimlanesBoard` for user control over visible columns. - Updated rendering logic to filter and display only visible columns, enhancing user experience and task organization.
This commit is contained in:
@@ -6,6 +6,8 @@ import { Button } from '@/components/ui/Button';
|
||||
import { CreateTaskForm } from '@/components/forms/CreateTaskForm';
|
||||
import { CreateTaskData } from '@/clients/tasks-client';
|
||||
import { useMemo, useState } from 'react';
|
||||
import { useColumnVisibility } from '@/hooks/useColumnVisibility';
|
||||
import { ColumnVisibilityToggle } from './ColumnVisibilityToggle';
|
||||
import {
|
||||
DndContext,
|
||||
DragEndEvent,
|
||||
@@ -31,6 +33,9 @@ interface KanbanBoardProps {
|
||||
export function KanbanBoard({ tasks, onCreateTask, onDeleteTask, onEditTask, onUpdateTitle, onUpdateStatus, loading = false, compactView = false }: KanbanBoardProps) {
|
||||
const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);
|
||||
const [activeTask, setActiveTask] = useState<Task | null>(null);
|
||||
|
||||
// Gestion de la visibilité des colonnes
|
||||
const { hiddenStatuses, toggleStatusVisibility, getVisibleStatuses } = useColumnVisibility();
|
||||
|
||||
// Configuration des capteurs pour le drag & drop
|
||||
const sensors = useSensors(
|
||||
@@ -54,7 +59,7 @@ export function KanbanBoard({ tasks, onCreateTask, onDeleteTask, onEditTask, onU
|
||||
}, [tasks]);
|
||||
|
||||
// Configuration des colonnes
|
||||
const columns: Array<{
|
||||
const allColumns: Array<{
|
||||
id: TaskStatus;
|
||||
title: string;
|
||||
color: string;
|
||||
@@ -86,6 +91,9 @@ export function KanbanBoard({ tasks, onCreateTask, onDeleteTask, onEditTask, onU
|
||||
}
|
||||
];
|
||||
|
||||
// Filtrer les colonnes visibles
|
||||
const visibleColumns = getVisibleStatuses(allColumns);
|
||||
|
||||
const handleCreateTask = async (data: CreateTaskData) => {
|
||||
if (onCreateTask) {
|
||||
await onCreateTask(data);
|
||||
@@ -145,9 +153,18 @@ export function KanbanBoard({ tasks, onCreateTask, onDeleteTask, onEditTask, onU
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Toggle de visibilité des colonnes */}
|
||||
<div className="px-6 pb-4">
|
||||
<ColumnVisibilityToggle
|
||||
statuses={allColumns}
|
||||
hiddenStatuses={hiddenStatuses}
|
||||
onToggleStatus={toggleStatusVisibility}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Board tech dark */}
|
||||
<div className="flex-1 flex gap-6 overflow-x-auto p-6">
|
||||
{columns.map((column) => (
|
||||
{visibleColumns.map((column) => (
|
||||
<KanbanColumn
|
||||
key={column.id}
|
||||
id={column.id}
|
||||
|
||||
Reference in New Issue
Block a user