import React, { useState, useEffect } from 'react'; import { useStorage } from '@/features/storage/hooks/useStorage'; import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, Input, Label, Switch, } from '@/components'; interface BucketFormDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onSuccess: (bucketName?: string) => void; mode: 'create' | 'edit'; initialBucketName?: string; initialIsPublic?: boolean; } export function BucketFormDialog({ open, onOpenChange, onSuccess, mode, initialBucketName = '', initialIsPublic = true, }: BucketFormDialogProps) { const [bucketName, setBucketName] = useState(initialBucketName); const [isPublic, setIsPublic] = useState(initialIsPublic); const [error, setError] = useState(''); const { createBucket, editBucket, isCreatingBucket, isEditingBucket } = useStorage(); useEffect(() => { if (open) { if (mode === 'edit') { setBucketName(initialBucketName); setIsPublic(initialIsPublic); } else { setBucketName(''); setIsPublic(true); } setError(''); } }, [open, mode, initialBucketName, initialIsPublic]); const handleSubmit = async (e: React.FormEvent): Promise => { e.preventDefault(); if (mode === 'create') { if (!bucketName.trim()) { setError('Bucket name is required'); return; } try { await createBucket({ bucketName: bucketName.trim(), isPublic }); onSuccess(bucketName); handleClose(); } catch (error) { setError(error instanceof Error ? error.message : 'Failed to create bucket'); } } else { try { await editBucket({ bucketName, config: { isPublic } }); onSuccess(); handleClose(); } catch (error) { setError(error instanceof Error ? error.message : 'Failed to update bucket'); } } }; const handleClose = () => { onOpenChange(false); }; const isLoading = mode === 'create' ? isCreatingBucket : isEditingBucket; const submitButtonText = mode === 'create' ? isLoading ? 'Creating...' : 'Create Bucket' : isLoading ? 'Saving...' : 'Save Changes'; return (
void handleSubmit(e)} className="flex flex-col"> {mode === 'create' ? 'Create New Bucket' : 'Edit Bucket'} {mode === 'create' && ( Create a new storage bucket to organize your files. )}
{ if (mode === 'create') { setBucketName(e.target.value); setError(''); } }} placeholder={mode === 'create' ? 'Enter a name' : ''} disabled={mode === 'edit'} className={`w-full h-9 px-3 py-2 bg-transparent dark:bg-neutral-900 ${mode === 'edit' ? 'cursor-not-allowed' : ''} dark:text-white dark:placeholder:text-neutral-400 dark:border-neutral-700`} autoFocus={mode === 'create'} /> {error &&

{error}

}

{mode === 'create' ? 'Use lowercase letters, numbers, hyphens, and underscores only.' : 'Bucket name cannot be changed.'}

If enabled, files in this bucket can be accessed without authentication.

); }