diff --git a/src/app/kanban/KanbanPageClient.tsx b/src/app/kanban/KanbanPageClient.tsx
index 151f7a3..f7432c0 100644
--- a/src/app/kanban/KanbanPageClient.tsx
+++ b/src/app/kanban/KanbanPageClient.tsx
@@ -9,11 +9,8 @@ import { useUserPreferences } from '@/contexts/UserPreferencesContext';
import { Task, Tag } from '@/lib/types';
import { CreateTaskData } from '@/clients/tasks-client';
import { CreateTaskForm } from '@/components/forms/CreateTaskForm';
-import { Button } from '@/components/ui/Button';
-import { JiraQuickFilter } from '@/components/kanban/JiraQuickFilter';
-import { TfsQuickFilter } from '@/components/kanban/TfsQuickFilter';
-import { FontSizeToggle } from '@/components/ui/FontSizeToggle';
import { MobileControls } from '@/components/kanban/MobileControls';
+import { DesktopControls } from '@/components/kanban/DesktopControls';
import { useIsMobile } from '@/hooks/useIsMobile';
interface KanbanPageClientProps {
@@ -81,112 +78,20 @@ function KanbanPageContent() {
onCreateTask={() => setIsCreateModalOpen(true)}
/>
) : (
- /* Barre de contrôles desktop */
-
-
-
-
-
-
-
-
-
-
-
- {/* Raccourcis Jira */}
-
-
- {/* Raccourcis TFS */}
-
-
-
-
-
-
- {/* Font Size Toggle */}
-
-
-
-
-
- {/* Bouton d'ajout de tâche */}
-
-
-
-
+ setIsCreateModalOpen(true)}
+ />
)}
diff --git a/src/components/kanban/BoardRouter.tsx b/src/components/kanban/BoardRouter.tsx
index ddd1898..a4a9b35 100644
--- a/src/components/kanban/BoardRouter.tsx
+++ b/src/components/kanban/BoardRouter.tsx
@@ -5,7 +5,7 @@ import { SwimlanesBoard } from './SwimlanesBoard';
import { PrioritySwimlanesBoard } from './PrioritySwimlanesBoard';
import { Task, TaskStatus } from '@/lib/types';
import { CreateTaskData } from '@/clients/tasks-client';
-import { KanbanFilters } from './KanbanFilters';
+import type { KanbanFilters } from '@/lib/types';
import { useIsMobile } from '@/hooks/useIsMobile';
interface BoardRouterProps {
@@ -41,7 +41,7 @@ export function BoardRouter({
onCreateTask={onCreateTask}
onEditTask={onEditTask}
onUpdateStatus={onUpdateStatus}
- compactView={kanbanFilters.compactView}
+ compactView={kanbanFilters.compactView as boolean}
visibleStatuses={visibleStatuses}
loading={loading}
/>
@@ -53,7 +53,7 @@ export function BoardRouter({
onCreateTask={onCreateTask}
onEditTask={onEditTask}
onUpdateStatus={onUpdateStatus}
- compactView={kanbanFilters.compactView}
+ compactView={kanbanFilters.compactView as boolean}
visibleStatuses={visibleStatuses}
loading={loading}
/>
@@ -68,7 +68,7 @@ export function BoardRouter({
onCreateTask={onCreateTask}
onEditTask={onEditTask}
onUpdateStatus={onUpdateStatus}
- compactView={kanbanFilters.compactView}
+ compactView={kanbanFilters.compactView as boolean}
visibleStatuses={visibleStatuses}
/>
);
diff --git a/src/components/kanban/DesktopControls.tsx b/src/components/kanban/DesktopControls.tsx
new file mode 100644
index 0000000..047d3ec
--- /dev/null
+++ b/src/components/kanban/DesktopControls.tsx
@@ -0,0 +1,145 @@
+'use client';
+
+import { Button } from '@/components/ui/Button';
+import { JiraQuickFilter } from '@/components/kanban/JiraQuickFilter';
+import { TfsQuickFilter } from '@/components/kanban/TfsQuickFilter';
+import { FontSizeToggle } from '@/components/ui/FontSizeToggle';
+import type { KanbanFilters } from '@/lib/types';
+
+interface DesktopControlsProps {
+ showFilters: boolean;
+ showObjectives: boolean;
+ compactView: boolean;
+ swimlanesByTags: boolean;
+ activeFiltersCount: number;
+ kanbanFilters: KanbanFilters;
+ onToggleFilters: () => void;
+ onToggleObjectives: () => void;
+ onToggleCompactView: () => void;
+ onToggleSwimlanes: () => void;
+ onFiltersChange: (filters: KanbanFilters) => void;
+ onCreateTask: () => void;
+}
+
+export function DesktopControls({
+ showFilters,
+ showObjectives,
+ compactView,
+ swimlanesByTags,
+ activeFiltersCount,
+ kanbanFilters,
+ onToggleFilters,
+ onToggleObjectives,
+ onToggleCompactView,
+ onToggleSwimlanes,
+ onFiltersChange,
+ onCreateTask,
+}: DesktopControlsProps) {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ {/* Raccourcis Jira */}
+
+
+ {/* Raccourcis TFS */}
+
+
+
+
+
+
+ {/* Font Size Toggle */}
+
+
+
+
+
+ {/* Bouton d'ajout de tâche */}
+
+
+
+
+ );
+}
diff --git a/src/components/kanban/JiraQuickFilter.tsx b/src/components/kanban/JiraQuickFilter.tsx
index bc7a89e..9770f08 100644
--- a/src/components/kanban/JiraQuickFilter.tsx
+++ b/src/components/kanban/JiraQuickFilter.tsx
@@ -2,7 +2,7 @@
import { useMemo } from 'react';
import { useTasksContext } from '@/contexts/TasksContext';
-import { KanbanFilters } from './KanbanFilters';
+import type { KanbanFilters } from '@/lib/types';
interface JiraQuickFilterProps {
filters: KanbanFilters;
diff --git a/src/components/kanban/KanbanFilters.tsx b/src/components/kanban/KanbanFilters.tsx
index 72ff8b7..0942563 100644
--- a/src/components/kanban/KanbanFilters.tsx
+++ b/src/components/kanban/KanbanFilters.tsx
@@ -16,27 +16,7 @@ import { TagFilters } from './filters/TagFilters';
import { GeneralFilters } from './filters/GeneralFilters';
import { ColumnFilters } from './filters/ColumnFilters';
-export interface KanbanFilters {
- search?: string;
- tags?: string[];
- priorities?: TaskPriority[];
- showCompleted?: boolean;
- compactView?: boolean;
- swimlanesByTags?: boolean;
- swimlanesMode?: 'tags' | 'priority'; // Mode des swimlanes
- pinnedTag?: string; // Tag pour les objectifs principaux
- sortBy?: string; // Clé de l'option de tri sélectionnée
- showWithDueDate?: boolean; // Afficher seulement les tâches avec une date de fin
- // Filtres spécifiques Jira
- showJiraOnly?: boolean; // Afficher seulement les tâches Jira
- hideJiraTasks?: boolean; // Masquer toutes les tâches Jira
- jiraProjects?: string[]; // Filtrer par projet Jira
- jiraTypes?: string[]; // Filtrer par type Jira (Story, Task, Bug, etc.)
- // Filtres spécifiques TFS
- showTfsOnly?: boolean; // Afficher seulement les tâches TFS
- hideTfsTasks?: boolean; // Masquer toutes les tâches TFS
- tfsProjects?: string[]; // Filtrer par projet TFS
-}
+import type { KanbanFilters } from '@/lib/types';
interface KanbanFiltersProps {
filters: KanbanFilters;
diff --git a/src/components/kanban/KanbanHeader.tsx b/src/components/kanban/KanbanHeader.tsx
index 8873f9b..67c4a7c 100644
--- a/src/components/kanban/KanbanHeader.tsx
+++ b/src/components/kanban/KanbanHeader.tsx
@@ -1,10 +1,10 @@
'use client';
-import { KanbanFilters } from './KanbanFilters';
+import type { KanbanFilters as KanbanFiltersType } from '@/lib/types';
import { ObjectivesBoard } from './ObjectivesBoard';
import { Task, TaskStatus } from '@/lib/types';
-import { KanbanFilters as KanbanFiltersType } from './KanbanFilters';
import { UserPreferences } from '@/lib/types';
+import { KanbanFilters } from './KanbanFilters';
interface KanbanHeaderProps {
showFilters: boolean;
@@ -49,7 +49,7 @@ export function KanbanHeader({
tasks={pinnedTasks}
onEditTask={onEditTask}
onUpdateStatus={onUpdateStatus}
- compactView={kanbanFilters.compactView}
+ compactView={kanbanFilters.compactView as boolean}
pinnedTagName={pinnedTagName}
/>
)}
diff --git a/src/components/kanban/MobileControls.tsx b/src/components/kanban/MobileControls.tsx
index 6437ce2..198d634 100644
--- a/src/components/kanban/MobileControls.tsx
+++ b/src/components/kanban/MobileControls.tsx
@@ -5,7 +5,7 @@ import { Button } from '@/components/ui/Button';
import { JiraQuickFilter } from '@/components/kanban/JiraQuickFilter';
import { TfsQuickFilter } from '@/components/kanban/TfsQuickFilter';
import { FontSizeToggle } from '@/components/ui/FontSizeToggle';
-import { KanbanFilters } from '@/components/kanban/KanbanFilters';
+import type { KanbanFilters } from '@/lib/types';
interface MobileControlsProps {
showFilters: boolean;
diff --git a/src/components/kanban/TfsQuickFilter.tsx b/src/components/kanban/TfsQuickFilter.tsx
index 1fbeae2..692374f 100644
--- a/src/components/kanban/TfsQuickFilter.tsx
+++ b/src/components/kanban/TfsQuickFilter.tsx
@@ -2,7 +2,7 @@
import { useMemo } from 'react';
import { useTasksContext } from '@/contexts/TasksContext';
-import { KanbanFilters } from './KanbanFilters';
+import type { KanbanFilters } from '@/lib/types';
interface TfsQuickFilterProps {
filters: KanbanFilters;
diff --git a/src/components/kanban/filters/JiraFilters.tsx b/src/components/kanban/filters/JiraFilters.tsx
index 11831ee..71a0e68 100644
--- a/src/components/kanban/filters/JiraFilters.tsx
+++ b/src/components/kanban/filters/JiraFilters.tsx
@@ -3,7 +3,7 @@
import { useMemo } from 'react';
import { Button } from '@/components/ui/Button';
import { useTasksContext } from '@/contexts/TasksContext';
-import { KanbanFilters } from '../KanbanFilters';
+import type { KanbanFilters } from '@/lib/types';
interface JiraFiltersProps {
filters: KanbanFilters;
diff --git a/src/components/kanban/filters/TfsFilters.tsx b/src/components/kanban/filters/TfsFilters.tsx
index 8cc7411..6447604 100644
--- a/src/components/kanban/filters/TfsFilters.tsx
+++ b/src/components/kanban/filters/TfsFilters.tsx
@@ -3,7 +3,7 @@
import { useMemo } from 'react';
import { Button } from '@/components/ui/Button';
import { useTasksContext } from '@/contexts/TasksContext';
-import { KanbanFilters } from '../KanbanFilters';
+import type { KanbanFilters } from '@/lib/types';
interface TfsFiltersProps {
filters: KanbanFilters;
diff --git a/src/contexts/TasksContext.tsx b/src/contexts/TasksContext.tsx
index f7eec76..0433be2 100644
--- a/src/contexts/TasksContext.tsx
+++ b/src/contexts/TasksContext.tsx
@@ -6,7 +6,7 @@ import { useTags } from '@/hooks/useTags';
import { useUserPreferences } from './UserPreferencesContext';
import { Task, Tag, TaskStats, TaskStatus } from '@/lib/types';
import { CreateTaskData, TaskFilters } from '@/clients/tasks-client';
-import { KanbanFilters } from '@/components/kanban/KanbanFilters';
+import type { KanbanFilters } from '@/lib/types';
import { sortTasks, getSortOption, DEFAULT_SORT, createSortKey } from '@/lib/sort-config';
interface TasksContextType {
@@ -94,9 +94,9 @@ export function TasksProvider({ children, initialTasks, initialTags, initialStat
};
const viewPreferenceUpdates = {
- compactView: newFilters.compactView,
- swimlanesByTags: newFilters.swimlanesByTags,
- swimlanesMode: newFilters.swimlanesMode
+ compactView: newFilters.compactView as boolean,
+ swimlanesByTags: newFilters.swimlanesByTags as boolean,
+ swimlanesMode: newFilters.swimlanesMode as 'tags' | 'priority'
};
// Mettre à jour via UserPreferencesContext