Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 3x 20x 20x 9x 28x 20x 1x 4x 7x 4x 20x 2x 9x 8x 8x 8x 8x 8x 20x 6x 20x 4x 22x 22x 11x 11x 11x 22x 20x | import {Epreuve, EpreuveCardType, EpreuveFilters} from "@/type/evenement/epreuve";
/**
* Filtre une liste d'épreuves selon les critères spécifiés
* @param epreuves - Liste des épreuves au format carte à filtrer
* @param filters - Critères de filtrage à appliquer
* @param fullEpreuves - Liste complète des épreuves avec toutes les données (optionnel, nécessaire pour filtrer par disciplineId)
* @returns Liste filtrée des épreuves
* @example
* const filteredEpreuves = filterEpreuves(epreuves, {
* libelle: 'natation',
* date: '2024-07-26'
* });
*/
export function filterEpreuves(
epreuves: EpreuveCardType[],
filters: EpreuveFilters,
fullEpreuves?: Epreuve[] // ton tableau complet avec discipline.id
): EpreuveCardType[] {
let filtered = [...epreuves];
if (filters.libelle) {
filtered = filtered.filter(epreuve =>
epreuve.libelle.toLowerCase().includes(filters.libelle!.toLowerCase()) ||
epreuve.discipline.toLowerCase().includes(filters.libelle!.toLowerCase())
);
}
if (filters.disciplineId) {
filtered = filtered.filter(epreuve => {
const epreuveComplete = fullEpreuves?.find(e =>
e.libelle === epreuve.libelle &&
e.discipline.nom === epreuve.discipline
);
return epreuveComplete ? epreuveComplete.discipline.id === filters.disciplineId : false;
});
}
if (filters.date) {
filtered = filtered.filter(epreuve => {
if (!epreuve.dateRaw) return false;
const epreuveDate = new Date(epreuve.dateRaw);
const filterDate = new Date(filters.date!);
const epreuveDateOnly = new Date(epreuveDate.getFullYear(), epreuveDate.getMonth(), epreuveDate.getDate());
const filterDateOnly = new Date(filterDate.getFullYear(), filterDate.getMonth(), filterDate.getDate());
return epreuveDateOnly >= filterDateOnly;
});
}
if (filters.tour) {
filtered = filtered.filter(epreuve => epreuve.tour === filters.tour);
}
if (filters.sortBy) {
filtered.sort((a, b) => {
let comparison = 0;
if (filters.sortBy === 'date') {
comparison = new Date(a.dateRaw).getTime() - new Date(b.dateRaw).getTime();
} else if (filters.sortBy === 'libelle') {
comparison = a.libelle.localeCompare(b.libelle);
}
return filters.sortOrder === 'desc' ? -comparison : comparison;
});
}
return filtered;
} |