diff --git a/apps/web/src/components/BulkModeBanner.tsx b/apps/web/src/components/BulkModeBanner.tsx new file mode 100644 index 000000000..9fb4675fd --- /dev/null +++ b/apps/web/src/components/BulkModeBanner.tsx @@ -0,0 +1,96 @@ +import { X, CheckSquare } from 'lucide-react'; +import { cn } from '@/lib/utils'; +import { Button } from '@/components/ui/button'; + +/** + * BulkModeBannerProps - Propriétés du composant BulkModeBanner + */ +export interface BulkModeBannerProps { + /** + * Si true, le banner est affiché + */ + isActive: boolean; + + /** + * Nombre d'éléments sélectionnés + */ + selectedCount: number; + + /** + * Fonction appelée lors du clic sur le bouton de fermeture + * Doit désactiver le mode bulk et réinitialiser la sélection + */ + onClose: () => void; + + /** + * Classes CSS personnalisées + */ + className?: string; +} + +/** + * BulkModeBanner - Banner pour le mode sélection multiple + * + * Affiche un banner informatif lorsque le mode bulk est actif, + * montrant le nombre d'éléments sélectionnés et permettant + * de fermer le mode bulk. + * + * @example + * ```tsx + * { + * setIsBulkMode(false); + * setSelectedTracks(new Set()); + * }} + * /> + * ``` + * + * @component + * @param {BulkModeBannerProps} props - Propriétés du composant + * @returns {JSX.Element | null} Banner ou null si isActive est false + */ +export function BulkModeBanner({ + isActive, + selectedCount, + onClose, + className, +}: BulkModeBannerProps) { + if (!isActive || selectedCount === 0) { + return null; + } + + const itemText = + selectedCount === 1 ? 'élément sélectionné' : 'éléments sélectionnés'; + + return ( +
+
+
+ +
+ ); +}