'use client'; import React, { useMemo, useCallback } from 'react'; import { Calendar, FileImage } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useEventCatalogResourcesStore } from '@/stores/eventcatalog-resources-store'; import { useSidebarStore } from '@/stores/sidebar-store'; interface DesignListProps { searchTerm: string; } const DesignList = React.memo(({ searchTerm }) => { const { studioFilesFromEventCatalogDirectory } = useEventCatalogResourcesStore(); const router = useRouter(); const { setFloatingPanelOpen } = useSidebarStore(); const filteredDesigns = useMemo(() => { if (!studioFilesFromEventCatalogDirectory || !Array.isArray(studioFilesFromEventCatalogDirectory)) { return []; } return studioFilesFromEventCatalogDirectory .filter((design) => design.id.toLowerCase().includes(searchTerm.toLowerCase()) ) .sort((a, b) => new Date(b.creationDate).getTime() - new Date(a.creationDate).getTime()); }, [studioFilesFromEventCatalogDirectory, searchTerm]); const formatDate = useCallback((dateString: string) => { try { const date = new Date(dateString); return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' }); } catch { return 'Unknown date'; } }, []); const handleDesignClick = useCallback((designId: string) => { router.push(`/design/catalog/${designId}`); // Close the sidepanel setFloatingPanelOpen('catalog', false); }, [router]); if (filteredDesigns.length === 0) { return (
{searchTerm.trim() !== '' ? 'No designs found.' : 'No designs available.'}
); } return (
{filteredDesigns.map((design, index) => (
handleDesignClick(design.id)} className="flex items-center justify-between px-2.5 py-2 rounded-md border bg-gray-50 border-gray-200 hover:bg-gray-100 cursor-pointer transition-all" >
{design.id}
{formatDate(design.creationDate)}
))}
); }); DesignList.displayName = 'DesignList'; export default DesignList;