import { NavLink } from "@vertesia/ui/router"; import { useUserSession } from "@vertesia/ui/session"; import { FolderClosed, Search, Trash2 } from "lucide-react"; import { Button, ConfirmModal, ErrorBox, Table, TBody, TR, useToast, VTooltip, useFetch, EmptyCollection } from "@vertesia/ui/core"; import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; import { useState, useEffect } from "react"; import { CreateCollectionModal } from "./CreateCollection"; import { useUITranslation } from '../../../i18n/index.js'; dayjs.extend(relativeTime); interface CollectionsTableProps { } export function CollectionsTable({ }: CollectionsTableProps) { const { client } = useUserSession(); const toast = useToast(); const { t } = useUITranslation(); const [collectionToDelete, setCollectionToDelete] = useState(); const [isLoading, setIsLoading] = useState(true); const [isOpen, setOpen] = useState(false); const { data: collections, error, refetch } = useFetch(() => client.store.collections.search({}), []); // Update loading state when data is fetched useEffect(() => { if (collections || error) { setIsLoading(false); } }, [collections, error]); if (error) { return {error.message} } const deleteCollection = async () => { if (!collectionToDelete) return; try { await client.store.collections.delete(collectionToDelete); toast({ title: t('store.collectionDeleted'), status: 'success', duration: 3000 }); refetch(); } catch (err: any) { console.error('Failed to delete collection:', err); toast({ title: t('store.failedToDeleteCollection'), description: err.message || 'An error occurred', status: 'error', duration: 5000 }); } finally { setCollectionToDelete(undefined); } }; return ( <> { collections && (collections.length > 0 ? ( { collections.map((c) => { return }) }
{t('type.name')} {t('type.type')} {t('store.created')}
{collectionIcon(c.dynamic)} {c.name}
{c.type?.name || "-"} {dayjs(c.created_at).fromNow()}
) : setOpen(true)}> {t('store.getStartedCollections')} ) } setOpen(false)} /> setCollectionToDelete(undefined)} /> ) } export function CollectionIcon({ isDynamic }: { isDynamic: boolean }) { const { t } = useUITranslation(); const tooltipText = isDynamic ? t('store.dynamicCollection') : t('store.staticCollection'); const icon = isDynamic ? : ; return ( {icon} ); } /** @deprecated Use CollectionIcon component instead */ export function collectionIcon(isDynamic: boolean) { return ; }