refactor: switch from filteredTasks to regularTasks in filter components

- Updated `JiraFilters`, `PriorityFilters`, `TagFilters`, and `TfsFilters` to use `regularTasks` instead of `filteredTasks` for task counts and available options.
- This change ensures that all tasks are considered, improving the accuracy of project and type availability across filters.
- Adjusted related logic and comments for clarity and consistency.
This commit is contained in:
Julien Froidefond
2025-09-26 11:19:07 +02:00
parent 908f39bc5f
commit 31541a11d4
4 changed files with 37 additions and 27 deletions

View File

@@ -11,53 +11,53 @@ interface JiraFiltersProps {
} }
export function JiraFilters({ filters, onFiltersChange }: JiraFiltersProps) { export function JiraFilters({ filters, onFiltersChange }: JiraFiltersProps) {
const { regularTasks, filteredTasks } = useTasksContext(); const { regularTasks } = useTasksContext();
// 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');
// Récupérer les projets et types Jira disponibles dans les tâches filtrées // Récupérer les projets et types Jira disponibles dans toutes les tâches
const availableJiraProjects = useMemo(() => { const availableJiraProjects = useMemo(() => {
const projects = new Set<string>(); const projects = new Set<string>();
filteredTasks.forEach(task => { regularTasks.forEach(task => {
if (task.source === 'jira' && task.jiraProject) { if (task.source === 'jira' && task.jiraProject) {
projects.add(task.jiraProject); projects.add(task.jiraProject);
} }
}); });
return Array.from(projects).sort(); return Array.from(projects).sort();
}, [filteredTasks]); }, [regularTasks]);
const availableJiraTypes = useMemo(() => { const availableJiraTypes = useMemo(() => {
const types = new Set<string>(); const types = new Set<string>();
filteredTasks.forEach(task => { regularTasks.forEach(task => {
if (task.source === 'jira' && task.jiraType) { if (task.source === 'jira' && task.jiraType) {
types.add(task.jiraType); types.add(task.jiraType);
} }
}); });
return Array.from(types).sort(); return Array.from(types).sort();
}, [filteredTasks]); }, [regularTasks]);
// Calculer les compteurs pour les projets Jira // Calculer les compteurs pour les projets Jira
const jiraProjectCounts = useMemo(() => { const jiraProjectCounts = useMemo(() => {
const counts: Record<string, number> = {}; const counts: Record<string, number> = {};
availableJiraProjects.forEach(project => { availableJiraProjects.forEach(project => {
counts[project] = filteredTasks.filter(task => counts[project] = regularTasks.filter(task =>
task.source === 'jira' && task.jiraProject === project task.source === 'jira' && task.jiraProject === project
).length; ).length;
}); });
return counts; return counts;
}, [filteredTasks, availableJiraProjects]); }, [regularTasks, availableJiraProjects]);
// Calculer les compteurs pour les types Jira // Calculer les compteurs pour les types Jira
const jiraTypeCounts = useMemo(() => { const jiraTypeCounts = useMemo(() => {
const counts: Record<string, number> = {}; const counts: Record<string, number> = {};
availableJiraTypes.forEach(type => { availableJiraTypes.forEach(type => {
counts[type] = filteredTasks.filter(task => counts[type] = regularTasks.filter(task =>
task.source === 'jira' && task.jiraType === type task.source === 'jira' && task.jiraType === type
).length; ).length;
}); });
return counts; return counts;
}, [filteredTasks, availableJiraTypes]); }, [regularTasks, availableJiraTypes]);
const handleJiraToggle = (mode: 'show' | 'hide' | 'all') => { const handleJiraToggle = (mode: 'show' | 'hide' | 'all') => {
const updates: Partial<KanbanFilters> = {}; const updates: Partial<KanbanFilters> = {};
@@ -66,14 +66,19 @@ export function JiraFilters({ filters, onFiltersChange }: JiraFiltersProps) {
case 'show': case 'show':
updates.showJiraOnly = true; updates.showJiraOnly = true;
updates.hideJiraTasks = false; updates.hideJiraTasks = false;
// Désactiver les filtres TFS conflictuels
updates.showTfsOnly = false;
break; break;
case 'hide': case 'hide':
updates.showJiraOnly = false; updates.showJiraOnly = false;
updates.hideJiraTasks = true; updates.hideJiraTasks = true;
// Désactiver les filtres TFS conflictuels
updates.hideTfsTasks = false;
break; break;
case 'all': case 'all':
updates.showJiraOnly = false; updates.showJiraOnly = false;
updates.hideJiraTasks = false; updates.hideJiraTasks = false;
// Ne pas toucher aux filtres TFS
break; break;
} }

View File

@@ -11,16 +11,16 @@ interface PriorityFiltersProps {
} }
export function PriorityFilters({ selectedPriorities = [], onPriorityToggle }: PriorityFiltersProps) { export function PriorityFilters({ selectedPriorities = [], onPriorityToggle }: PriorityFiltersProps) {
const { filteredTasks } = useTasksContext(); const { regularTasks } = useTasksContext();
// Calculer les compteurs pour les priorités basés sur les tâches filtrées // Calculer les compteurs pour les priorités basés sur toutes les tâches
const priorityCounts = useMemo(() => { const priorityCounts = useMemo(() => {
const counts: Record<string, number> = {}; const counts: Record<string, number> = {};
getAllPriorities().forEach(priority => { getAllPriorities().forEach(priority => {
counts[priority.key] = filteredTasks.filter(task => task.priority === priority.key).length; counts[priority.key] = regularTasks.filter(task => task.priority === priority.key).length;
}); });
return counts; return counts;
}, [filteredTasks]); }, [regularTasks]);
const priorityOptions = getAllPriorities().map(priorityConfig => ({ const priorityOptions = getAllPriorities().map(priorityConfig => ({
value: priorityConfig.key, value: priorityConfig.key,

View File

@@ -9,16 +9,16 @@ interface TagFiltersProps {
} }
export function TagFilters({ selectedTags = [], onTagToggle }: TagFiltersProps) { export function TagFilters({ selectedTags = [], onTagToggle }: TagFiltersProps) {
const { tags: availableTags, filteredTasks } = useTasksContext(); const { tags: availableTags, regularTasks } = useTasksContext();
// Calculer les compteurs pour les tags basés sur les tâches filtrées // Calculer les compteurs pour les tags basés sur toutes les tâches
const tagCounts = useMemo(() => { const tagCounts = useMemo(() => {
const counts: Record<string, number> = {}; const counts: Record<string, number> = {};
availableTags.forEach(tag => { availableTags.forEach(tag => {
counts[tag.name] = filteredTasks.filter(task => task.tags?.includes(tag.name)).length; counts[tag.name] = regularTasks.filter(task => task.tags?.includes(tag.name)).length;
}); });
return counts; return counts;
}, [filteredTasks, availableTags]); }, [regularTasks, availableTags]);
// Trier les tags par nombre d'utilisation (décroissant) // Trier les tags par nombre d'utilisation (décroissant)
const sortedTags = useMemo(() => { const sortedTags = useMemo(() => {
@@ -29,8 +29,8 @@ export function TagFilters({ selectedTags = [], onTagToggle }: TagFiltersProps)
}); });
}, [availableTags, tagCounts]); }, [availableTags, tagCounts]);
// Filtrer les tags qui ont des tâches visibles // Montrer tous les tags disponibles (pas seulement ceux avec des tâches visibles)
const visibleTags = sortedTags.filter(tag => (tagCounts[tag.name] || 0) > 0); const visibleTags = sortedTags;
if (availableTags.length === 0) { if (availableTags.length === 0) {
return null; return null;
@@ -43,7 +43,7 @@ export function TagFilters({ selectedTags = [], onTagToggle }: TagFiltersProps)
</label> </label>
{visibleTags.length === 0 ? ( {visibleTags.length === 0 ? (
<div className="text-xs text-[var(--muted-foreground)] italic"> <div className="text-xs text-[var(--muted-foreground)] italic">
Aucun tag disponible dans les tâches filtrées Aucun tag disponible
</div> </div>
) : ( ) : (
<div className="flex flex-wrap gap-1 max-h-32 overflow-y-auto"> <div className="flex flex-wrap gap-1 max-h-32 overflow-y-auto">

View File

@@ -11,32 +11,32 @@ interface TfsFiltersProps {
} }
export function TfsFilters({ filters, onFiltersChange }: TfsFiltersProps) { export function TfsFilters({ filters, onFiltersChange }: TfsFiltersProps) {
const { regularTasks, filteredTasks } = useTasksContext(); const { regularTasks } = useTasksContext();
// Vérifier s'il y a des tâches TFS dans le système (même masquées) // Vérifier s'il y a des tâches TFS dans le système (même masquées)
const hasTfsTasks = regularTasks.some(task => task.source === 'tfs'); const hasTfsTasks = regularTasks.some(task => task.source === 'tfs');
// Récupérer les projets TFS disponibles dans les tâches filtrées // Récupérer les projets TFS disponibles dans toutes les tâches
const availableTfsProjects = useMemo(() => { const availableTfsProjects = useMemo(() => {
const projects = new Set<string>(); const projects = new Set<string>();
filteredTasks.forEach(task => { regularTasks.forEach(task => {
if (task.source === 'tfs' && task.tfsProject) { if (task.source === 'tfs' && task.tfsProject) {
projects.add(task.tfsProject); projects.add(task.tfsProject);
} }
}); });
return Array.from(projects).sort(); return Array.from(projects).sort();
}, [filteredTasks]); }, [regularTasks]);
// Calculer les compteurs pour les projets TFS // Calculer les compteurs pour les projets TFS
const tfsProjectCounts = useMemo(() => { const tfsProjectCounts = useMemo(() => {
const counts: Record<string, number> = {}; const counts: Record<string, number> = {};
availableTfsProjects.forEach(project => { availableTfsProjects.forEach(project => {
counts[project] = filteredTasks.filter(task => counts[project] = regularTasks.filter(task =>
task.source === 'tfs' && task.tfsProject === project task.source === 'tfs' && task.tfsProject === project
).length; ).length;
}); });
return counts; return counts;
}, [filteredTasks, availableTfsProjects]); }, [regularTasks, availableTfsProjects]);
const handleTfsToggle = (mode: 'show' | 'hide' | 'all') => { const handleTfsToggle = (mode: 'show' | 'hide' | 'all') => {
const updates: Partial<KanbanFilters> = {}; const updates: Partial<KanbanFilters> = {};
@@ -45,14 +45,19 @@ export function TfsFilters({ filters, onFiltersChange }: TfsFiltersProps) {
case 'show': case 'show':
updates.showTfsOnly = true; updates.showTfsOnly = true;
updates.hideTfsTasks = false; updates.hideTfsTasks = false;
// Désactiver les filtres Jira conflictuels
updates.showJiraOnly = false;
break; break;
case 'hide': case 'hide':
updates.showTfsOnly = false; updates.showTfsOnly = false;
updates.hideTfsTasks = true; updates.hideTfsTasks = true;
// Désactiver les filtres Jira conflictuels
updates.hideJiraTasks = false;
break; break;
case 'all': case 'all':
updates.showTfsOnly = false; updates.showTfsOnly = false;
updates.hideTfsTasks = false; updates.hideTfsTasks = false;
// Ne pas toucher aux filtres Jira
break; break;
} }