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:
@@ -43,7 +43,7 @@ export class AnalyticsService {
|
||||
/**
|
||||
* Calcule les métriques de productivité pour une période donnée
|
||||
*/
|
||||
static async getProductivityMetrics(timeRange?: TimeRange): Promise<ProductivityMetrics> {
|
||||
static async getProductivityMetrics(timeRange?: TimeRange, sources?: string[]): Promise<ProductivityMetrics> {
|
||||
try {
|
||||
const now = getToday();
|
||||
const defaultStart = subtractDays(now, 30); // 30 jours
|
||||
@@ -63,7 +63,7 @@ export class AnalyticsService {
|
||||
});
|
||||
|
||||
// Convertir en format Task
|
||||
const tasks: Task[] = dbTasks.map(task => ({
|
||||
let tasks: Task[] = dbTasks.map(task => ({
|
||||
id: task.id,
|
||||
title: task.title,
|
||||
description: task.description || undefined,
|
||||
@@ -82,6 +82,11 @@ export class AnalyticsService {
|
||||
assignee: task.assignee || undefined
|
||||
}));
|
||||
|
||||
// Filtrer par sources si spécifié
|
||||
if (sources && sources.length > 0) {
|
||||
tasks = tasks.filter(task => sources.includes(task.source));
|
||||
}
|
||||
|
||||
return {
|
||||
completionTrend: this.calculateCompletionTrend(tasks, start, end),
|
||||
velocityData: this.calculateVelocity(tasks, start, end),
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user