import { useBucketPolicyCount } from 'components/interfaces/Storage/useBucketPolicyCount' import { VirtualizedTableCell, VirtualizedTableHead, VirtualizedTableHeader, VirtualizedTableRow, } from 'components/ui/VirtualizedTable' import { Bucket } from 'data/storage/buckets-query' import { FilesBucket as FilesBucketIcon } from 'icons' import { formatBytes } from 'lib/helpers' import { createNavigationHandler } from 'lib/navigation' import { ChevronRight } from 'lucide-react' import { useRouter } from 'next/navigation' import { Badge, TableCell, TableHead, TableHeader, TableRow } from 'ui' type BucketTableMode = 'standard' | 'virtualized' type BucketTableHeaderProps = { mode: BucketTableMode hasBuckets?: boolean } export const BucketTableHeader = ({ mode, hasBuckets = true }: BucketTableHeaderProps) => { const BucketTableHeader = mode === 'standard' ? TableHeader : VirtualizedTableHeader const BucketTableRow = mode === 'standard' ? TableRow : VirtualizedTableRow const BucketTableHead = mode === 'standard' ? TableHead : VirtualizedTableHead const stickyClasses = 'sticky top-0 z-10 bg-200' return ( {hasBuckets && ( Icon )} Name Policies File size limit Allowed MIME types Actions ) } type BucketTableEmptyStateProps = { mode: BucketTableMode filterString: string } export const BucketTableEmptyState = ({ mode, filterString }: BucketTableEmptyStateProps) => { const BucketTableRow = mode === 'standard' ? TableRow : VirtualizedTableRow const BucketTableCell = mode === 'standard' ? TableCell : VirtualizedTableCell return (

No results found

Your search for “{filterString}” did not return any results

) } type BucketTableRowProps = { mode: BucketTableMode bucket: Bucket projectRef: string formattedGlobalUploadLimit: string } export const BucketTableRow = ({ mode, bucket, projectRef, formattedGlobalUploadLimit, }: BucketTableRowProps) => { const router = useRouter() const { getPolicyCount } = useBucketPolicyCount() const BucketTableRow = mode === 'standard' ? TableRow : VirtualizedTableRow const BucketTableCell = mode === 'standard' ? TableCell : VirtualizedTableCell const handleBucketNavigation = createNavigationHandler( `/project/${projectRef}/storage/files/buckets/${encodeURIComponent(bucket.id)}`, router ) return (

{bucket.id}

{bucket.public && Public}

{getPolicyCount(bucket.id)}

{bucket.file_size_limit ? formatBytes(bucket.file_size_limit) : `Unset (${formattedGlobalUploadLimit})`}

{bucket.allowed_mime_types ? bucket.allowed_mime_types.join(', ') : 'Any'}

) }