import { useParams } from 'common' import { VectorBucket as VectorBucketIcon } from 'icons' import { ChevronRight, Search } from 'lucide-react' import { useRouter } from 'next/navigation' import { parseAsBoolean, useQueryState } from 'nuqs' import { useState } from 'react' import { Card, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from 'ui' import { Input } from 'ui-patterns/DataInputs/Input' import { PageContainer } from 'ui-patterns/PageContainer' import { PageSection, PageSectionContent, PageSectionTitle } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' import { TimestampInfo } from 'ui-patterns/TimestampInfo' import { EmptyBucketState } from '../EmptyBucketState' import { CreateBucketButton } from '../NewBucketButton' import { CreateVectorBucketDialog } from './CreateVectorBucketDialog' import AlertError from '@/components/ui/AlertError' import { AlphaNotice } from '@/components/ui/AlphaNotice' import { useVectorBucketsQuery } from '@/data/storage/vector-buckets-query' import { createNavigationHandler } from '@/lib/navigation' /** * [Joshen] Low-priority refactor: We should use a virtualized table here as per how we do it * for the files buckets for consistency. Not pressing, just an optimization area. */ export const VectorsBuckets = () => { const { ref: projectRef } = useParams() const router = useRouter() const [filterString, setFilterString] = useState('') const [visible, setVisible] = useQueryState( 'new', parseAsBoolean.withDefault(false).withOptions({ history: 'push', clearOnDefault: true }) ) const { data, error: bucketsError, isError: isErrorBuckets, isPending: isLoadingBuckets, isSuccess: isSuccessBuckets, } = useVectorBucketsQuery({ projectRef }) const bucketsList = data?.vectorBuckets ?? [] const filteredBuckets = filterString.length === 0 ? bucketsList : bucketsList.filter((bucket) => bucket.vectorBucketName.toLowerCase().includes(filterString.toLowerCase()) ) return ( <> {isLoadingBuckets && } {isErrorBuckets && ( )} {isSuccessBuckets && ( <> {bucketsList.length === 0 ? ( setVisible(true)} /> ) : (
Buckets
setFilterString(e.target.value)} icon={} /> setVisible(true)} />
{isLoadingBuckets ? ( ) : ( {filteredBuckets.length > 0 && ( Icon )} Name Created at Actions {filteredBuckets.length === 0 && filterString.length > 0 && (

No results found

Your search for "{filterString}" did not return any results

)} {filteredBuckets.map((bucket, idx: number) => { const id = `bucket-${idx}` const name = bucket.vectorBucketName // the creation time is in seconds, convert it to milliseconds const created = +bucket.creationTime * 1000 const handleBucketNavigation = createNavigationHandler( `/project/${projectRef}/storage/vectors/buckets/${encodeURIComponent(name)}`, router ) return (

{name}

) })}
)}
)} )}
) }