- Added task creation modal in HomePageClient with state management for visibility. - Implemented `handleCreateTask` function to handle task submissions. - Updated Kanban components to accept `onCreateTask` prop for task creation, ensuring consistent task management across the application. - Removed unused task creation UI elements from Kanban components to streamline the interface.
77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
'use client';
|
|
|
|
import { Task, TaskStatus } from '@/lib/types';
|
|
import { CreateTaskData } from '@/clients/tasks-client';
|
|
import { useMemo } from 'react';
|
|
import { getAllPriorities } from '@/lib/status-config';
|
|
import { SwimlanesBase, SwimlaneData } from './SwimlanesBase';
|
|
|
|
interface PrioritySwimlanesoardProps {
|
|
tasks: Task[];
|
|
onCreateTask?: (data: CreateTaskData) => Promise<void>;
|
|
onDeleteTask?: (taskId: string) => Promise<void>;
|
|
onEditTask?: (task: Task) => void;
|
|
onUpdateTitle?: (taskId: string, newTitle: string) => Promise<void>;
|
|
onUpdateStatus?: (taskId: string, newStatus: TaskStatus) => Promise<void>;
|
|
compactView?: boolean;
|
|
visibleStatuses?: TaskStatus[];
|
|
loading?: boolean;
|
|
}
|
|
|
|
export function PrioritySwimlanesBoard({
|
|
tasks,
|
|
onCreateTask,
|
|
onDeleteTask,
|
|
onEditTask,
|
|
onUpdateTitle,
|
|
onUpdateStatus,
|
|
compactView = false,
|
|
visibleStatuses,
|
|
loading = false
|
|
}: PrioritySwimlanesoardProps) {
|
|
|
|
// Grouper les tâches par priorités et créer les données de swimlanes
|
|
const swimlanesData = useMemo((): SwimlaneData[] => {
|
|
const grouped: { [priorityKey: string]: Task[] } = {};
|
|
|
|
// Initialiser avec toutes les priorités
|
|
getAllPriorities().forEach(priority => {
|
|
grouped[priority.key] = [];
|
|
});
|
|
|
|
tasks.forEach(task => {
|
|
if (grouped[task.priority]) {
|
|
grouped[task.priority].push(task);
|
|
}
|
|
});
|
|
|
|
// Convertir en format SwimlaneData en respectant l'ordre de priorité
|
|
return getAllPriorities()
|
|
.sort((a, b) => b.order - a.order) // Ordre décroissant - plus importantes en haut
|
|
.map(priority => ({
|
|
key: priority.key,
|
|
label: priority.label,
|
|
icon: priority.icon,
|
|
color: priority.color,
|
|
tasks: grouped[priority.key] || [],
|
|
context: {
|
|
type: 'priority' as const,
|
|
value: priority.key
|
|
}
|
|
}));
|
|
}, [tasks]);
|
|
|
|
return (
|
|
<SwimlanesBase
|
|
tasks={tasks}
|
|
swimlanes={swimlanesData}
|
|
onCreateTask={onCreateTask}
|
|
onDeleteTask={onDeleteTask}
|
|
onEditTask={onEditTask}
|
|
onUpdateTitle={onUpdateTitle}
|
|
onUpdateStatus={onUpdateStatus}
|
|
compactView={compactView}
|
|
visibleStatuses={visibleStatuses}
|
|
/>
|
|
);
|
|
} |