import { useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { AlertTriangle, Info } from 'lucide-react'; import { useBuckets, useDeleteBucket } from '@/hooks/useApi'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { EmptyState } from '@/components/ui/empty-state'; import { DangerousConfirmDialog } from '@/components/ui/dangerous-confirm-dialog'; import { formatBytes } from '@/lib/file-utils'; import { formatDate as formatDateUtil } from '@/lib/utils'; const formatBytesOrDash = (n?: number) => (n == null ? '—' : formatBytes(n)); const formatDateOrDash = (iso?: string) => (iso ? formatDateUtil(iso) : '—'); export function BucketSettings() { const { bucketName = '' } = useParams<{ bucketName: string }>(); const navigate = useNavigate(); const { data: buckets = [], isLoading } = useBuckets(); const bucket = buckets.find((b) => b.name === bucketName); const deleteMutation = useDeleteBucket(); const [deleteOpen, setDeleteOpen] = useState(false); const [deleting, setDeleting] = useState(false); if (isLoading) { return
Loading…
; } if (!bucket) { return (
} tone="neutral" title="Bucket not found" description="The bucket you're looking for doesn't exist or you don't have access." />
); } const confirmDelete = async () => { setDeleting(true); try { await deleteMutation.mutateAsync(bucket.name); navigate('/buckets'); } catch { setDeleting(false); } }; return (
{/* Info */}

Bucket info

{bucket.name}} /> {bucket.websiteAccess ? 'Enabled' : 'Disabled'} } />
{/* Danger zone */}

Danger zone

Destructive actions for this bucket.

Delete bucket
All objects in this bucket will be permanently removed.
{ if (!o && !deleting) setDeleteOpen(false); }} title={`Delete bucket "${bucket.name}"?`} description="This action cannot be undone." confirmationText={bucket.name} confirmLabel="Delete bucket" loading={deleting} onConfirm={confirmDelete} />
); } function Field({ label, value }: { label: string; value: React.ReactNode }) { return (
{label}
{value}
); }