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:
@@ -19,7 +19,7 @@ interface HomePageClientProps {
|
|||||||
|
|
||||||
|
|
||||||
function HomePageContent() {
|
function HomePageContent() {
|
||||||
const { stats, syncing, createTask } = useTasksContext();
|
const { stats, syncing, createTask, activeFiltersCount } = useTasksContext();
|
||||||
const { preferences, updateViewPreferences } = useUserPreferences();
|
const { preferences, updateViewPreferences } = useUserPreferences();
|
||||||
const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);
|
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">
|
<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" />
|
<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>
|
</svg>
|
||||||
Filtres
|
Filtres{activeFiltersCount > 0 && ` (${activeFiltersCount})`}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ interface KanbanFiltersProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function KanbanFilters({ filters, onFiltersChange, hiddenStatuses: propsHiddenStatuses, onToggleStatusVisibility }: 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();
|
const { preferences, toggleColumnVisibility } = useUserPreferences();
|
||||||
|
|
||||||
// Utiliser les props si disponibles, sinon utiliser le context
|
// 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)
|
// 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 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
|
// Calculer les compteurs pour les priorités
|
||||||
const priorityCounts = useMemo(() => {
|
const priorityCounts = useMemo(() => {
|
||||||
const counts: Record<string, number> = {};
|
const counts: Record<string, number> = {};
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ interface TasksContextType {
|
|||||||
setKanbanFilters: (filters: KanbanFilters) => void;
|
setKanbanFilters: (filters: KanbanFilters) => void;
|
||||||
filteredTasks: Task[];
|
filteredTasks: Task[];
|
||||||
pinnedTasks: Task[]; // Tâches avec tags épinglés (objectifs)
|
pinnedTasks: Task[]; // Tâches avec tags épinglés (objectifs)
|
||||||
|
activeFiltersCount: number; // Nombre de filtres actifs
|
||||||
// Tags
|
// Tags
|
||||||
tags: Tag[];
|
tags: Tag[];
|
||||||
tagsLoading: boolean;
|
tagsLoading: boolean;
|
||||||
@@ -126,6 +127,17 @@ export function TasksProvider({ children, initialTasks, initialStats, initialTag
|
|||||||
return { pinnedTasks: sortedPinned, regularTasks: regular };
|
return { pinnedTasks: sortedPinned, regularTasks: regular };
|
||||||
}, [tasksState.tasks, tags, kanbanFilters.sortBy]);
|
}, [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)
|
// Filtrage et tri des tâches régulières (pas les épinglées)
|
||||||
const filteredTasks = useMemo(() => {
|
const filteredTasks = useMemo(() => {
|
||||||
let filtered = regularTasks;
|
let filtered = regularTasks;
|
||||||
@@ -203,7 +215,8 @@ export function TasksProvider({ children, initialTasks, initialStats, initialTag
|
|||||||
kanbanFilters,
|
kanbanFilters,
|
||||||
setKanbanFilters,
|
setKanbanFilters,
|
||||||
filteredTasks,
|
filteredTasks,
|
||||||
pinnedTasks
|
pinnedTasks,
|
||||||
|
activeFiltersCount
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user