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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | 1x 1x 1x 1x 2x 2x 1x 1x | /**
* @module components/evenements/SearchEpreuve
* Module de composant SearchEpreuve pour la recherche et le filtrage des épreuves olympiques
*
* Ce module contient le composant SearchEpreuve qui gère l'affichage adaptatif
* des interfaces de recherche selon le type d'appareil (mobile ou desktop).
* Il sert de composant wrapper intelligent qui détermine automatiquement
* quelle interface de recherche utiliser.
*
* ## Fonctionnalités principales
* - Détection automatique du type d'appareil (mobile/desktop)
* - Rendu conditionnel de l'interface appropriée
* - Transmission des filtres et callbacks aux composants enfants
* - Interface unified pour les différentes plateformes
* - Gestion centralisée des filtres de recherche
*
* ## Composants intégrés
* - **SearchEpreuveMobile** : Interface optimisée pour appareils mobiles
* - **SearchEpreuveDesktop** : Interface optimisée pour ordinateurs de bureau
* - **useIsMobile** : Hook de détection du type d'appareil
*
* ## Gestion des filtres
* - Transmission bidirectionnelle des filtres actuels
* - Callback unifié pour les changements de filtres
* - Synchronisation automatique entre les interfaces
* - Support complet des types EpreuveFilters
*
* ## Responsive Design
* - Détection automatique de la taille d'écran
* - Basculement dynamique entre les interfaces
* - Optimisation UX pour chaque plateforme
* - Consistance des fonctionnalités entre versions
*
* ## Intégration
* - Utilisé dans les pages de liste d'épreuves
* - Compatible avec tous les systèmes de filtrage
* - Intégré avec les hooks de recherche
*
* @group Components
*/
import useIsMobile from "@/hook/useIsMobile";
import SearchEpreuveMobile from "@/components/evenements/SearchEpreuveMobile";
import SearchEpreuveDesktop from "@/components/evenements/SearchEpreuveDesktop";
import {EpreuveFilters, Epreuve} from "@/type/evenement/epreuve";
/**
* Props du composant SearchEpreuve
*/
interface SearchEpreuveProps {
/** Fonction appelée lors des changements de filtres de recherche */
onFiltersChange: (filters: EpreuveFilters) => void;
/** État actuel des filtres de recherche */
filters: EpreuveFilters;
/** Liste des épreuves disponibles pour le filtrage et l'affichage */
epreuves: Epreuve[];
}
/**
* Composant SearchEpreuve pour la recherche et le filtrage adaptatif des épreuves.
* Voir la documentation du module ci-dessus pour les détails complets.
*
* Le composant détermine automatiquement quelle interface de recherche afficher
* selon le type d'appareil détecté, offrant une expérience utilisateur optimisée
* pour chaque plateforme tout en maintenant la consistance fonctionnelle.
*
* @param props - Les propriétés du composant
* @param props.onFiltersChange - Callback pour les changements de filtres
* @param props.filters - État actuel des filtres
* @param props.epreuves - Liste des épreuves pour le contexte de recherche
*
* @returns Interface de recherche adaptée au type d'appareil détecté
*
* @example
* ```tsx
* // Utilisation avec état de filtres
* const [filters, setFilters] = useState<EpreuveFilters>({
* discipline: '',
* date: '',
* genre: '',
* lieu: ''
* });
*
* <SearchEpreuve
* onFiltersChange={setFilters}
* filters={filters}
* epreuves={epreuvesData}
* />
*
* // Avec gestion avancée des filtres
* const handleFiltersChange = useCallback((newFilters: EpreuveFilters) => {
* setFilters(newFilters);
* // Logique de filtrage additionnelle
* applyFiltersToResults(newFilters);
* }, []);
* ```
*/
export default function SearchEpreuve({ onFiltersChange, filters, epreuves }: SearchEpreuveProps){
const isMobile = useIsMobile();
if (isMobile) {
return (
<SearchEpreuveMobile
onFiltersChange={onFiltersChange}
filters={filters}
epreuves={epreuves} // ← Transmettre aux composants enfants
/>
)
}else{
return (
<SearchEpreuveDesktop
onFiltersChange={onFiltersChange}
filters={filters}
epreuves={epreuves} // ← Ajouter les épreuves pour desktop aussi
/>
)
}
} |