diff --git a/clients/tasks-client.ts b/clients/tasks-client.ts
index 8978e25..f3dfebe 100644
--- a/clients/tasks-client.ts
+++ b/clients/tasks-client.ts
@@ -1,5 +1,5 @@
import { httpClient } from './base/http-client';
-import { Task, TaskStatus, TaskPriority } from '@/lib/types';
+import { Task, TaskStatus, TaskPriority, TaskStats } from '@/lib/types';
export interface TaskFilters {
status?: TaskStatus[];
@@ -12,15 +12,7 @@ export interface TaskFilters {
export interface TasksResponse {
success: boolean;
data: Task[];
- stats: {
- total: number;
- completed: number;
- inProgress: number;
- todo: number;
- cancelled: number;
- freeze: number;
- completionRate: number;
- };
+ stats: TaskStats;
count: number;
}
diff --git a/components/HomePageClient.tsx b/components/HomePageClient.tsx
index eb35fc4..8db3acf 100644
--- a/components/HomePageClient.tsx
+++ b/components/HomePageClient.tsx
@@ -3,19 +3,11 @@
import { KanbanBoardContainer } from '@/components/kanban/BoardContainer';
import { Header } from '@/components/ui/Header';
import { TasksProvider, useTasksContext } from '@/contexts/TasksContext';
-import { Task, Tag } from '@/lib/types';
+import { Task, Tag, TaskStats } from '@/lib/types';
interface HomePageClientProps {
initialTasks: Task[];
- initialStats: {
- total: number;
- completed: number;
- inProgress: number;
- todo: number;
- cancelled: number;
- freeze: number;
- completionRate: number;
- };
+ initialStats: TaskStats;
initialTags: (Tag & { usage: number })[];
}
diff --git a/components/ui/Header.tsx b/components/ui/Header.tsx
index 4e0b813..bdbfe0f 100644
--- a/components/ui/Header.tsx
+++ b/components/ui/Header.tsx
@@ -1,18 +1,11 @@
import { Card, CardContent } from '@/components/ui/Card';
+import { TaskStats } from '@/lib/types';
import Link from 'next/link';
interface HeaderProps {
title: string;
subtitle: string;
- stats: {
- total: number;
- completed: number;
- inProgress: number;
- todo: number;
- cancelled: number;
- freeze: number;
- completionRate: number;
- };
+ stats: TaskStats;
syncing?: boolean;
}
@@ -98,6 +91,13 @@ export function Header({ title, subtitle, stats, syncing = false }: HeaderProps)
color="gray"
/>
)}
+ {stats.archived > 0 && (
+
+ )}
({
tasks: initialData?.tasks || [],
@@ -45,6 +37,7 @@ export function useTasks(
todo: 0,
cancelled: 0,
freeze: 0,
+ archived: 0,
completionRate: 0
},
loading: false,
@@ -153,6 +146,7 @@ export function useTasks(
todo: updatedTasks.filter(t => t.status === 'todo').length,
cancelled: updatedTasks.filter(t => t.status === 'cancelled').length,
freeze: updatedTasks.filter(t => t.status === 'freeze').length,
+ archived: updatedTasks.filter(t => t.status === 'archived').length,
completionRate: updatedTasks.length > 0
? Math.round((updatedTasks.filter(t => t.status === 'done').length / updatedTasks.length) * 100)
: 0
@@ -196,6 +190,7 @@ export function useTasks(
todo: currentTasks.filter(t => t.status === 'todo').length,
cancelled: currentTasks.filter(t => t.status === 'cancelled').length,
freeze: currentTasks.filter(t => t.status === 'freeze').length,
+ archived: currentTasks.filter(t => t.status === 'archived').length,
completionRate: currentTasks.length > 0
? Math.round((currentTasks.filter(t => t.status === 'done').length / currentTasks.length) * 100)
: 0
diff --git a/lib/status-config.ts b/lib/status-config.ts
index ef6f0e9..b495e6e 100644
--- a/lib/status-config.ts
+++ b/lib/status-config.ts
@@ -43,6 +43,13 @@ export const STATUS_CONFIG: Record = {
icon: '✕',
color: 'red',
order: 5
+ },
+ archived: {
+ key: 'archived',
+ label: 'Archivé',
+ icon: '📦',
+ color: 'gray',
+ order: 6
}
} as const;
diff --git a/lib/types.ts b/lib/types.ts
index a877cfa..e179384 100644
--- a/lib/types.ts
+++ b/lib/types.ts
@@ -1,9 +1,21 @@
// Types de base pour les tâches
// Note: TaskStatus et TaskPriority sont maintenant gérés par la configuration centralisée dans lib/status-config.ts
-export type TaskStatus = 'todo' | 'in_progress' | 'done' | 'cancelled' | 'freeze';
+export type TaskStatus = 'todo' | 'in_progress' | 'done' | 'cancelled' | 'freeze' | 'archived';
export type TaskPriority = 'low' | 'medium' | 'high' | 'urgent';
export type TaskSource = 'reminders' | 'jira' | 'manual';
+// Interface centralisée pour les statistiques
+export interface TaskStats {
+ total: number;
+ completed: number;
+ inProgress: number;
+ todo: number;
+ cancelled: number;
+ freeze: number;
+ archived: number;
+ completionRate: number;
+}
+
// Interface principale pour les tâches
export interface Task {
id: string;
diff --git a/src/contexts/TasksContext.tsx b/src/contexts/TasksContext.tsx
index 016773e..f521c3f 100644
--- a/src/contexts/TasksContext.tsx
+++ b/src/contexts/TasksContext.tsx
@@ -4,7 +4,7 @@ import { createContext, useContext, ReactNode, useState, useMemo, useEffect } fr
import { useTasks } from '@/hooks/useTasks';
import { useTags } from '@/hooks/useTags';
import { userPreferencesService } from '@/services/user-preferences';
-import { Task, Tag } from '@/lib/types';
+import { Task, Tag, TaskStats } from '@/lib/types';
import { CreateTaskData, UpdateTaskData, TaskFilters } from '@/clients/tasks-client';
import { KanbanFilters } from '@/components/kanban/KanbanFilters';
import { sortTasks, getSortOption, DEFAULT_SORT, createSortKey } from '@/lib/sort-config';
@@ -12,15 +12,7 @@ import { sortTasks, getSortOption, DEFAULT_SORT, createSortKey } from '@/lib/sor
interface TasksContextType {
tasks: Task[]; // Toutes les tâches
regularTasks: Task[]; // Tâches sans les épinglées (pour Kanban)
- stats: {
- total: number;
- completed: number;
- inProgress: number;
- todo: number;
- cancelled: number;
- freeze: number;
- completionRate: number;
- };
+ stats: TaskStats;
loading: boolean;
syncing: boolean;
error: string | null;
@@ -46,7 +38,7 @@ const TasksContext = createContext(null);
interface TasksProviderProps {
children: ReactNode;
initialTasks: Task[];
- initialStats: TasksContextType['stats'];
+ initialStats: TaskStats;
initialTags?: (Tag & { usage: number })[];
}