- Added `KeyboardShortcutsProvider` to `RootLayout` for centralized keyboard shortcut management. - Implemented `useGlobalKeyboardShortcuts` in `DailyPageClient`, `KanbanPageClient`, and `HomePageClient` to enhance navigation and task management with keyboard shortcuts. - Updated `KeyboardShortcuts` component to render a modal for displaying available shortcuts, improving user accessibility. - Enhanced `Header` component with buttons to open the keyboard shortcuts modal, streamlining user interaction.
97 lines
2.9 KiB
TypeScript
97 lines
2.9 KiB
TypeScript
'use client';
|
|
|
|
import { Header } from '@/components/ui/Header';
|
|
import { TasksProvider, useTasksContext } from '@/contexts/TasksContext';
|
|
import { Task, Tag, TaskStats } from '@/lib/types';
|
|
import { CreateTaskData } from '@/clients/tasks-client';
|
|
import { DashboardStats } from '@/components/dashboard/DashboardStats';
|
|
import { QuickActions } from '@/components/dashboard/QuickActions';
|
|
import { RecentTasks } from '@/components/dashboard/RecentTasks';
|
|
import { ProductivityAnalytics } from '@/components/dashboard/ProductivityAnalytics';
|
|
import { ProductivityMetrics } from '@/services/analytics/analytics';
|
|
import { DeadlineMetrics } from '@/services/analytics/deadline-analytics';
|
|
import { useGlobalKeyboardShortcuts } from '@/hooks/useGlobalKeyboardShortcuts';
|
|
|
|
interface HomePageClientProps {
|
|
initialTasks: Task[];
|
|
initialTags: (Tag & { usage: number })[];
|
|
initialStats: TaskStats;
|
|
productivityMetrics: ProductivityMetrics;
|
|
deadlineMetrics: DeadlineMetrics;
|
|
}
|
|
|
|
|
|
function HomePageContent({ productivityMetrics, deadlineMetrics }: {
|
|
productivityMetrics: ProductivityMetrics;
|
|
deadlineMetrics: DeadlineMetrics;
|
|
}) {
|
|
const { stats, syncing, createTask, tasks } = useTasksContext();
|
|
|
|
// Handler pour la création de tâche
|
|
const handleCreateTask = async (data: CreateTaskData) => {
|
|
await createTask(data);
|
|
};
|
|
|
|
// Raccourcis clavier globaux pour la page Dashboard
|
|
useGlobalKeyboardShortcuts({
|
|
onOpenSearch: () => {
|
|
// Focus sur le champ de recherche s'il existe, sinon naviguer vers Kanban
|
|
const searchInput = document.querySelector('input[placeholder*="Rechercher"]') as HTMLInputElement;
|
|
if (searchInput) {
|
|
searchInput.focus();
|
|
} else {
|
|
// Naviguer vers Kanban où il y a une recherche
|
|
window.location.href = '/kanban';
|
|
}
|
|
}
|
|
});
|
|
|
|
return (
|
|
<div className="min-h-screen bg-[var(--background)]">
|
|
<Header
|
|
title="TowerControl"
|
|
subtitle="Dashboard - Vue d'ensemble"
|
|
syncing={syncing}
|
|
/>
|
|
|
|
<main className="container mx-auto px-6 py-8">
|
|
{/* Statistiques */}
|
|
<DashboardStats stats={stats} />
|
|
|
|
{/* Actions rapides */}
|
|
<QuickActions onCreateTask={handleCreateTask} />
|
|
|
|
{/* Analytics et métriques */}
|
|
<ProductivityAnalytics
|
|
metrics={productivityMetrics}
|
|
deadlineMetrics={deadlineMetrics}
|
|
/>
|
|
|
|
{/* Tâches récentes */}
|
|
<RecentTasks tasks={tasks} />
|
|
</main>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export function HomePageClient({
|
|
initialTasks,
|
|
initialTags,
|
|
initialStats,
|
|
productivityMetrics,
|
|
deadlineMetrics
|
|
}: HomePageClientProps) {
|
|
return (
|
|
<TasksProvider
|
|
initialTasks={initialTasks}
|
|
initialTags={initialTags}
|
|
initialStats={initialStats}
|
|
>
|
|
<HomePageContent
|
|
productivityMetrics={productivityMetrics}
|
|
deadlineMetrics={deadlineMetrics}
|
|
/>
|
|
</TasksProvider>
|
|
);
|
|
}
|