fix: add active filters count to context and components

- Integrated activeFiltersCount into useTasksContext for HomePageContent and KanbanFilters.
- Removed redundant activeFiltersCount calculation from KanbanFilters, leveraging the context instead for better performance and consistency.
This commit is contained in:
Julien Froidefond
2025-09-17 14:46:27 +02:00
parent 8394f78fc7
commit b0dc1bec11
3 changed files with 17 additions and 13 deletions

View File

@@ -19,7 +19,7 @@ interface HomePageClientProps {
function HomePageContent() {
const { stats, syncing, createTask } = useTasksContext();
const { stats, syncing, createTask, activeFiltersCount } = useTasksContext();
const { preferences, updateViewPreferences } = useUserPreferences();
const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);
@@ -78,7 +78,7 @@ function HomePageContent() {
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4" />
</svg>
Filtres
Filtres{activeFiltersCount > 0 && ` (${activeFiltersCount})`}
</button>
<button

View File

@@ -36,7 +36,7 @@ interface KanbanFiltersProps {
}
export function KanbanFilters({ filters, onFiltersChange, hiddenStatuses: propsHiddenStatuses, onToggleStatusVisibility }: KanbanFiltersProps) {
const { tags: availableTags, regularTasks } = useTasksContext();
const { tags: availableTags, regularTasks, activeFiltersCount } = useTasksContext();
const { preferences, toggleColumnVisibility } = useUserPreferences();
// Utiliser les props si disponibles, sinon utiliser le context
@@ -214,15 +214,6 @@ export function KanbanFilters({ filters, onFiltersChange, hiddenStatuses: propsH
// Vérifier s'il y a des tâches Jira dans le système (même masquées)
const hasJiraTasks = regularTasks.some(task => task.source === 'jira');
const activeFiltersCount =
(filters.tags?.filter(Boolean).length || 0) +
(filters.priorities?.filter(Boolean).length || 0) +
(filters.search ? 1 : 0) +
(filters.jiraProjects?.filter(Boolean).length || 0) +
(filters.jiraTypes?.filter(Boolean).length || 0) +
(filters.showJiraOnly ? 1 : 0) +
(filters.hideJiraTasks ? 1 : 0);
// Calculer les compteurs pour les priorités
const priorityCounts = useMemo(() => {
const counts: Record<string, number> = {};

View File

@@ -27,6 +27,7 @@ interface TasksContextType {
setKanbanFilters: (filters: KanbanFilters) => void;
filteredTasks: Task[];
pinnedTasks: Task[]; // Tâches avec tags épinglés (objectifs)
activeFiltersCount: number; // Nombre de filtres actifs
// Tags
tags: Tag[];
tagsLoading: boolean;
@@ -126,6 +127,17 @@ export function TasksProvider({ children, initialTasks, initialStats, initialTag
return { pinnedTasks: sortedPinned, regularTasks: regular };
}, [tasksState.tasks, tags, kanbanFilters.sortBy]);
// Calcul du nombre de filtres actifs
const activeFiltersCount = useMemo(() => {
return (kanbanFilters.tags?.filter(Boolean).length || 0) +
(kanbanFilters.priorities?.filter(Boolean).length || 0) +
(kanbanFilters.search ? 1 : 0) +
(kanbanFilters.jiraProjects?.filter(Boolean).length || 0) +
(kanbanFilters.jiraTypes?.filter(Boolean).length || 0) +
(kanbanFilters.showJiraOnly ? 1 : 0) +
(kanbanFilters.hideJiraTasks ? 1 : 0);
}, [kanbanFilters]);
// Filtrage et tri des tâches régulières (pas les épinglées)
const filteredTasks = useMemo(() => {
let filtered = regularTasks;
@@ -203,7 +215,8 @@ export function TasksProvider({ children, initialTasks, initialStats, initialTag
kanbanFilters,
setKanbanFilters,
filteredTasks,
pinnedTasks
pinnedTasks,
activeFiltersCount
};
return (