- Replaced direct imports of `KanbanFilters` with type imports from `@/lib/types` across multiple components for consistency. - Simplified `KanbanPageClient` by integrating `DesktopControls` for better organization and readability, removing redundant desktop control code. - Ensured `compactView` is explicitly typed as boolean in relevant components to enhance type safety.
126 lines
4.3 KiB
TypeScript
126 lines
4.3 KiB
TypeScript
'use client';
|
|
|
|
import { useState } from 'react';
|
|
import { useSearchParams } from 'next/navigation';
|
|
import { KanbanBoardContainer } from '@/components/kanban/BoardContainer';
|
|
import { Header } from '@/components/ui/Header';
|
|
import { TasksProvider, useTasksContext } from '@/contexts/TasksContext';
|
|
import { useUserPreferences } from '@/contexts/UserPreferencesContext';
|
|
import { Task, Tag } from '@/lib/types';
|
|
import { CreateTaskData } from '@/clients/tasks-client';
|
|
import { CreateTaskForm } from '@/components/forms/CreateTaskForm';
|
|
import { MobileControls } from '@/components/kanban/MobileControls';
|
|
import { DesktopControls } from '@/components/kanban/DesktopControls';
|
|
import { useIsMobile } from '@/hooks/useIsMobile';
|
|
|
|
interface KanbanPageClientProps {
|
|
initialTasks: Task[];
|
|
initialTags: (Tag & { usage: number })[];
|
|
}
|
|
|
|
function KanbanPageContent() {
|
|
const { syncing, createTask, activeFiltersCount, kanbanFilters, setKanbanFilters } = useTasksContext();
|
|
const { preferences, updateViewPreferences } = useUserPreferences();
|
|
const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);
|
|
const isMobile = useIsMobile(768); // Tailwind md breakpoint
|
|
const searchParams = useSearchParams();
|
|
const taskIdFromUrl = searchParams.get('taskId');
|
|
|
|
// Extraire les préférences du context
|
|
const showFilters = preferences.viewPreferences.showFilters;
|
|
const showObjectives = preferences.viewPreferences.showObjectives;
|
|
const compactView = preferences.viewPreferences.compactView;
|
|
const swimlanesByTags = preferences.viewPreferences.swimlanesByTags;
|
|
|
|
// Handlers pour les toggles (sauvegarde automatique via le context)
|
|
const handleToggleFilters = () => {
|
|
updateViewPreferences({ showFilters: !showFilters });
|
|
};
|
|
|
|
const handleToggleObjectives = () => {
|
|
updateViewPreferences({ showObjectives: !showObjectives });
|
|
};
|
|
|
|
const handleToggleCompactView = () => {
|
|
updateViewPreferences({ compactView: !compactView });
|
|
};
|
|
|
|
const handleToggleSwimlanes = () => {
|
|
updateViewPreferences({ swimlanesByTags: !swimlanesByTags });
|
|
};
|
|
|
|
// Handler pour la création de tâche depuis la barre de contrôles
|
|
const handleCreateTask = async (data: CreateTaskData) => {
|
|
await createTask(data);
|
|
setIsCreateModalOpen(false);
|
|
};
|
|
|
|
return (
|
|
<div className="min-h-screen bg-[var(--background)]">
|
|
<Header
|
|
title="Kanban Board"
|
|
subtitle="Gestionnaire de tâches"
|
|
syncing={syncing}
|
|
/>
|
|
|
|
{/* Barre de contrôles responsive */}
|
|
{isMobile ? (
|
|
<MobileControls
|
|
showFilters={showFilters}
|
|
showObjectives={showObjectives}
|
|
compactView={compactView}
|
|
activeFiltersCount={activeFiltersCount}
|
|
kanbanFilters={kanbanFilters}
|
|
onToggleFilters={handleToggleFilters}
|
|
onToggleObjectives={handleToggleObjectives}
|
|
onToggleCompactView={handleToggleCompactView}
|
|
onFiltersChange={setKanbanFilters}
|
|
onCreateTask={() => setIsCreateModalOpen(true)}
|
|
/>
|
|
) : (
|
|
<DesktopControls
|
|
showFilters={showFilters}
|
|
showObjectives={showObjectives}
|
|
compactView={compactView}
|
|
swimlanesByTags={swimlanesByTags}
|
|
activeFiltersCount={activeFiltersCount}
|
|
kanbanFilters={kanbanFilters}
|
|
onToggleFilters={handleToggleFilters}
|
|
onToggleObjectives={handleToggleObjectives}
|
|
onToggleCompactView={handleToggleCompactView}
|
|
onToggleSwimlanes={handleToggleSwimlanes}
|
|
onFiltersChange={setKanbanFilters}
|
|
onCreateTask={() => setIsCreateModalOpen(true)}
|
|
/>
|
|
)}
|
|
|
|
<main className="h-[calc(100vh-160px)]">
|
|
<KanbanBoardContainer
|
|
showFilters={showFilters}
|
|
showObjectives={showObjectives}
|
|
initialTaskIdToEdit={taskIdFromUrl}
|
|
/>
|
|
</main>
|
|
|
|
{/* Modal de création de tâche */}
|
|
<CreateTaskForm
|
|
isOpen={isCreateModalOpen}
|
|
onClose={() => setIsCreateModalOpen(false)}
|
|
onSubmit={handleCreateTask}
|
|
loading={false}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export function KanbanPageClient({ initialTasks, initialTags }: KanbanPageClientProps) {
|
|
return (
|
|
<TasksProvider
|
|
initialTasks={initialTasks}
|
|
initialTags={initialTags}
|
|
>
|
|
<KanbanPageContent />
|
|
</TasksProvider>
|
|
);
|
|
}
|