* Apply current filters to task list
(tasks: TaskInfo[])
| 425 | * Apply current filters to task list |
| 426 | */ |
| 427 | private applyTaskFilters(tasks: TaskInfo[]): TaskInfo[] { |
| 428 | let filteredTasks = tasks; |
| 429 | |
| 430 | // Apply date range filter |
| 431 | const dateRange = this.getFilterDateRange(); |
| 432 | if (dateRange.start || dateRange.end) { |
| 433 | filteredTasks = filteredTasks.filter((task) => { |
| 434 | // Check if task has activity in the range based on time entries |
| 435 | if (task.timeEntries && task.timeEntries.length > 0) { |
| 436 | return task.timeEntries.some((entry) => { |
| 437 | if (!entry.startTime) return false; |
| 438 | const entryDate = new Date(entry.startTime); |
| 439 | |
| 440 | if (dateRange.start && entryDate < dateRange.start) return false; |
| 441 | if (dateRange.end && entryDate > dateRange.end) return false; |
| 442 | |
| 443 | return true; |
| 444 | }); |
| 445 | } |
| 446 | |
| 447 | // Also check completion date |
| 448 | if (task.completedDate) { |
| 449 | const completedDate = new Date(task.completedDate); |
| 450 | if (dateRange.start && completedDate < dateRange.start) return false; |
| 451 | if (dateRange.end && completedDate > dateRange.end) return false; |
| 452 | return true; |
| 453 | } |
| 454 | |
| 455 | // Check creation date as fallback |
| 456 | if (task.dateCreated) { |
| 457 | const createdDate = new Date(task.dateCreated); |
| 458 | if (dateRange.start && createdDate < dateRange.start) return false; |
| 459 | if (dateRange.end && createdDate > dateRange.end) return false; |
| 460 | return true; |
| 461 | } |
| 462 | |
| 463 | // If no date information and we have date filters, exclude |
| 464 | return !(dateRange.start || dateRange.end); |
| 465 | }); |
| 466 | } |
| 467 | |
| 468 | // Apply minimum time filter |
| 469 | if (this.currentFilters.minTimeSpent > 0) { |
| 470 | filteredTasks = filteredTasks.filter((task) => { |
| 471 | const totalTime = calculateTotalTimeSpent(task.timeEntries || []); |
| 472 | return totalTime >= this.currentFilters.minTimeSpent; |
| 473 | }); |
| 474 | } |
| 475 | |
| 476 | return filteredTasks; |
| 477 | } |
| 478 | |
| 479 | private async updateOverviewStats() { |
| 480 | if (!this.overviewStatsEl) return; |
no test coverage detected