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