UNPKG

@gambito-corp/mbs-library

Version:

Librería de componentes React reutilizables - Sistema de diseño modular y escalable

100 lines (90 loc) 3.86 kB
import React, { useRef } from 'react'; import IconButton from '../atoms/IconButton'; import SelectFlashCard from './SelectFlashCard'; const FlashcardSlider = ({ flashcards = [], selectedIds = [], onSelectFlashcard, onEditFlashcard, onDeleteFlashcard, canEdit = false, canDelete = false, className = '', ...props }) => { const sliderRef = useRef(null); const scroll = (direction) => { if (sliderRef.current) { const scrollAmount = 300; const newScrollLeft = direction === 'left' ? sliderRef.current.scrollLeft - scrollAmount : sliderRef.current.scrollLeft + scrollAmount; sliderRef.current.scrollTo({ left: newScrollLeft, behavior: 'smooth' }); } }; if (flashcards.length === 0) { return ( <div className="flex items-center justify-center py-12 text-gray-500"> <div className="text-center"> <div className="text-4xl mb-2">📚</div> <div>No hay flashcards disponibles</div> </div> </div> ); } return ( <div className={`relative ${className}`} {...props}> {/* Botón izquierdo */} <IconButton icon={ <svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 19l-7-7 7-7" /> </svg> } onClick={() => scroll('left')} className="absolute left-0 top-1/2 -translate-y-1/2 z-10 bg-white border border-gray-300 shadow-md hover:bg-gray-50" size="large" /> {/* Contenedor deslizable */} <div ref={sliderRef} className="flex overflow-x-auto gap-6 px-12 py-4 scrollbar-hide h-48" style={{ scrollbarWidth: 'none', msOverflowStyle: 'none' }} > {flashcards.map((flashcard) => ( <SelectFlashCard key={flashcard.id} flashcard={flashcard} selected={selectedIds.includes(flashcard.id)} onSelect={() => onSelectFlashcard(flashcard.id)} onEdit={onEditFlashcard} onDelete={onDeleteFlashcard} canEdit={canEdit} canDelete={canDelete} className="flex-shrink-0" /> ))} </div> {/* Botón derecho */} <IconButton icon={ <svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5l7 7-7 7" /> </svg> } onClick={() => scroll('right')} className="absolute right-0 top-1/2 -translate-y-1/2 z-10 bg-white border border-gray-300 shadow-md hover:bg-gray-50" size="large" /> <style jsx={"true"}>{` .scrollbar-hide::-webkit-scrollbar { display: none; } `}</style> </div> ); }; export default FlashcardSlider;