import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { Select, SelectOption } from '@/components/ui/select'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { accessApi } from '@/lib/api'; import type { AccessKey, Bucket } from '@/types'; import { toast } from 'sonner'; interface BucketSettingsDialogProps { open: boolean; onOpenChange: (open: boolean) => void; bucket: Bucket | null; onGrantPermission: (bucketName: string, accessKeyId: string, permissions: { read: boolean; write: boolean; owner: boolean }) => Promise; } export function BucketSettingsDialog({ open, onOpenChange, bucket, onGrantPermission }: BucketSettingsDialogProps) { const [availableKeys, setAvailableKeys] = useState([]); const [selectedAccessKey, setSelectedAccessKey] = useState(''); const [permissionRead, setPermissionRead] = useState(false); const [permissionWrite, setPermissionWrite] = useState(false); const [permissionOwner, setPermissionOwner] = useState(false); useEffect(() => { if (open && bucket) { loadAccessKeys(); resetForm(); } }, [open, bucket]); const loadAccessKeys = async () => { try { const keys = await accessApi.listKeys(); setAvailableKeys(keys); } catch (error) { console.error('Failed to load access keys:', error); } }; const resetForm = () => { setSelectedAccessKey(''); setPermissionRead(false); setPermissionWrite(false); setPermissionOwner(false); }; const handleAccessKeyChange = (accessKeyId: string) => { setSelectedAccessKey(accessKeyId); if (!accessKeyId) { setPermissionRead(false); setPermissionWrite(false); setPermissionOwner(false); return; } const selectedKey = availableKeys.find(key => key.accessKeyId === accessKeyId); if (selectedKey && bucket) { const bucketPermission = selectedKey.permissions.find( perm => perm.bucketName === bucket.name || perm.bucketId === bucket.name ); if (bucketPermission) { setPermissionRead(bucketPermission.read); setPermissionWrite(bucketPermission.write); setPermissionOwner(bucketPermission.owner); } else { setPermissionRead(false); setPermissionWrite(false); setPermissionOwner(false); } } }; const handleGrantPermission = async () => { if (!bucket || !selectedAccessKey) { toast.error('Please select an access key'); return; } if (!permissionRead && !permissionWrite && !permissionOwner) { toast.error('Please select at least one permission'); return; } const success = await onGrantPermission(bucket.name, selectedAccessKey, { read: permissionRead, write: permissionWrite, owner: permissionOwner, }); if (success) { resetForm(); onOpenChange(false); } }; return ( Bucket Settings - {bucket?.name} Grant access key permissions for this bucket

Choose which access key should have permissions on this bucket. Current permissions will be displayed when selected.

setPermissionRead(checked as boolean)} />

Allows reading objects from the bucket (GetObject, HeadObject, ListObjects)

setPermissionWrite(checked as boolean)} />

Allows writing and deleting objects in the bucket (PutObject, DeleteObject)

setPermissionOwner(checked as boolean)} />

Allows managing bucket settings and policies (DeleteBucket, PutBucketPolicy)

); }