@gambito-corp/mbs-library
Version:
Librería de componentes React reutilizables - Sistema de diseño modular y escalable
69 lines (62 loc) • 2.46 kB
JSX
import React from 'react';
import Label from '../atoms/Label';
import ToggleButton from '../atoms/ToggleButton';
const CategorySelector = ({
categories = [],
selectedCategories = [],
onChange,
className = ''
}) => {
// ✅ FILTRAR CATEGORÍAS VÁLIDAS
const validCategories = categories.filter(category =>
category &&
category.id !== undefined &&
category.nombre !== undefined
);
const handleCategoryToggle = (categoryId) => {
const newSelected = selectedCategories.includes(categoryId)
? selectedCategories.filter(id => id !== categoryId)
: [...selectedCategories, categoryId];
onChange(newSelected);
};
if (validCategories.length === 0) {
return (
<div className={`mb-4 ${className}`}>
<Label>Categorías (opcional)</Label>
<p className="text-gray-500 text-sm mt-2">
No tienes categorías creadas. Crea una categoría primero.
</p>
</div>
);
}
return (
<div className={`mb-4 ${className}`}>
<Label>Categorías (opcional)</Label>
<div
className="mt-2 flex flex-wrap gap-2"
role="group"
aria-label="Seleccionar categorías"
>
{validCategories.map((category) => (
<ToggleButton
key={category.id}
id={`category-${category.id}`}
value={category.id}
checked={selectedCategories.includes(category.id)}
onChange={handleCategoryToggle}
className="text-sm"
>
{category.nombre}
</ToggleButton>
))}
</div>
{/* Mostrar categorías seleccionadas */}
{selectedCategories.length > 0 && (
<div className="mt-2 text-sm text-gray-600">
Seleccionadas: {selectedCategories.length} categoría{selectedCategories.length !== 1 ? 's' : ''}
</div>
)}
</div>
);
};
export default CategorySelector;