Files
towercontrol/src/components/HomePageClient.tsx
Julien Froidefond 749f69680b feat: integrate global keyboard shortcuts across multiple components
- 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.
2025-09-29 17:29:11 +02:00

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