import { FilesBucket as FilesBucketIcon } from 'icons' import { ChevronRight } from 'lucide-react' import { useRouter } from 'next/navigation' import { Badge, TableCell, TableHead, TableHeader, TableRow, Tooltip, TooltipContent, TooltipTrigger, } from 'ui' import { PUBLIC_BUCKET_TOOLTIP } from '@/components/interfaces/Storage/Storage.constants' import { useBucketPolicyCount } from '@/components/interfaces/Storage/useBucketPolicyCount' import { VirtualizedTableCell, VirtualizedTableHead, VirtualizedTableHeader, VirtualizedTableRow, } from '@/components/ui/VirtualizedTable' import { Bucket } from '@/data/storage/buckets-query' import { formatBytes } from '@/lib/helpers' import { createNavigationHandler } from '@/lib/navigation' 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 {PUBLIC_BUCKET_TOOLTIP} )}

{getPolicyCount(bucket.id)}

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

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

) }