feat: add integration filtering to dashboard components

- Introduced `IntegrationFilter` to allow users to filter tasks by selected and hidden sources.
- Updated `DashboardStats`, `ProductivityAnalytics`, `RecentTasks`, and `HomePageContent` to utilize the new filtering logic, enhancing data presentation based on user preferences.
- Implemented filtering logic in `AnalyticsService` and `DeadlineAnalyticsService` to support source-based metrics calculations.
- Enhanced UI components to reflect filtered task data, improving user experience and data relevance.
This commit is contained in:
Julien Froidefond
2025-10-02 13:15:10 +02:00
parent 2e3e8bb222
commit 46c1c5e9a1
7 changed files with 600 additions and 39 deletions

View File

@@ -33,7 +33,7 @@ export class DeadlineAnalyticsService {
/**
* Analyse les tâches selon leurs échéances
*/
static async getDeadlineMetrics(): Promise<DeadlineMetrics> {
static async getDeadlineMetrics(sources?: string[]): Promise<DeadlineMetrics> {
try {
const now = getToday();
@@ -60,7 +60,7 @@ export class DeadlineAnalyticsService {
});
// Convertir et analyser les tâches
const deadlineTasks: DeadlineTask[] = dbTasks.map(task => {
let deadlineTasks: DeadlineTask[] = dbTasks.map(task => {
const dueDate = task.dueDate!;
const daysRemaining = Math.ceil((dueDate.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));
@@ -89,6 +89,11 @@ export class DeadlineAnalyticsService {
};
});
// Filtrer par sources si spécifié
if (sources && sources.length > 0) {
deadlineTasks = deadlineTasks.filter(task => sources.includes(task.source));
}
// Filtrer les tâches dans les 2 prochaines semaines
const relevantTasks = deadlineTasks.filter(task =>
task.daysRemaining <= 14 || task.urgencyLevel === 'overdue'
@@ -121,8 +126,8 @@ export class DeadlineAnalyticsService {
/**
* Retourne les tâches les plus critiques (en retard + échéance dans 48h)
*/
static async getCriticalDeadlines(): Promise<DeadlineTask[]> {
const metrics = await this.getDeadlineMetrics();
static async getCriticalDeadlines(sources?: string[]): Promise<DeadlineTask[]> {
const metrics = await this.getDeadlineMetrics(sources);
return [
...metrics.overdue,
...metrics.critical