Files
towercontrol/src/app/kanban/KanbanPageClient.tsx
Julien Froidefond a5199a8302 refactor: update Kanban component imports and streamline filters
- 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.
2025-09-26 08:32:07 +02:00

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>
);
}