'use client'; import { Box } from '@/ui/primitives/Box'; import { Text } from '@/ui/Text'; import { useState } from 'react'; import { MediaCard } from './MediaCard'; import { MediaFiltersBar } from './MediaFiltersBar'; import { MediaGrid } from './MediaGrid'; import { MediaViewerModal } from './MediaViewerModal'; export interface MediaAsset { id: string; src: string; title: string; category: string; date?: string; dimensions?: string; } export interface MediaGalleryProps { assets: MediaAsset[]; categories: { label: string; value: string }[]; title?: string; description?: string; } export function MediaGallery({ assets, categories, title = 'Media Gallery', description, }: MediaGalleryProps) { const [searchQuery, setSearchQuery] = useState(''); const [selectedCategory, setSelectedCategory] = useState('all'); const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid'); const [viewerAsset, setViewerAsset] = useState(null); const filteredAssets = assets.filter((asset) => { const matchesSearch = asset.title.toLowerCase().includes(searchQuery.toLowerCase()); const matchesCategory = selectedCategory === 'all' || asset.category === selectedCategory; return matchesSearch && matchesCategory; }); const handleNext = () => { if (!viewerAsset) return; const currentIndex = filteredAssets.findIndex((a) => a.id === viewerAsset.id); if (currentIndex < filteredAssets.length - 1) { const nextAsset = filteredAssets[currentIndex + 1]; if (nextAsset) setViewerAsset(nextAsset); } }; const handlePrev = () => { if (!viewerAsset) return; const currentIndex = filteredAssets.findIndex((a) => a.id === viewerAsset.id); if (currentIndex > 0) { const prevAsset = filteredAssets[currentIndex - 1]; if (prevAsset) setViewerAsset(prevAsset); } }; return ( {title} {description && ( {description} )} {filteredAssets.length > 0 ? ( {filteredAssets.map((asset) => ( setViewerAsset(asset)} /> ))} ) : ( No media assets found matching your criteria. )} setViewerAsset(null)} src={viewerAsset?.src} alt={viewerAsset?.title} title={viewerAsset?.title} onNext={handleNext} onPrev={handlePrev} /> ); }