import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Badge } from '@/components/ui/badge'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { FolderIcon, Globe, Loader2, MoreVertical, Search, Settings, Trash2 } from 'lucide-react'; import { formatBytes } from '@/lib/file-utils'; import { formatDate } from '@/lib/utils'; import { useBucketCan } from '@/hooks/usePermissions'; import type { Bucket } from '@/types'; interface BucketListViewProps { buckets: Bucket[]; searchQuery: string; isLoading?: boolean; onSearchChange: (query: string) => void; onViewBucket: (bucketName: string) => void; onOpenSettings: (bucket: Bucket) => void; onDeleteBucket: (bucket: Bucket) => void; onWebsiteSettings: (bucket: Bucket) => void; } export function BucketListView({ buckets, searchQuery, isLoading = false, onSearchChange, onViewBucket, onOpenSettings, onDeleteBucket, onWebsiteSettings, }: BucketListViewProps) { const canBucket = useBucketCan(); const filteredBuckets = buckets.filter((bucket) => bucket.name.toLowerCase().includes(searchQuery.toLowerCase()) ); return (
{/* Toolbar */}
onSearchChange(e.target.value)} className="pl-8" />
{/* Buckets Table */}
Name Region Objects Size Created {isLoading ? (
Loading buckets...
) : filteredBuckets.length === 0 ? ( {searchQuery ? 'No buckets found matching your search' : 'No buckets yet'} ) : ( filteredBuckets.map((bucket) => ( onViewBucket(bucket.name)} > {bucket.name} {bucket.websiteAccess && ( Website )} {bucket.region || 'default'} {bucket.objectCount?.toLocaleString() || 0} {bucket.size ? formatBytes(bucket.size) : '0 B'} {formatDate(bucket.creationDate)} e.stopPropagation()}> { e.stopPropagation(); onViewBucket(bucket.name); }}> View Objects {canBucket(bucket, 'bucket.update') && ( <> { e.stopPropagation(); onOpenSettings(bucket); }}> Settings { e.stopPropagation(); onWebsiteSettings(bucket); }}> Website Settings )} {canBucket(bucket, 'bucket.delete') && ( <> { e.stopPropagation(); onDeleteBucket(bucket); }} > Delete )} )) )}
); }