import { PermissionAction } from '@supabase/shared-types/out/constants' import { ArrowUpRight, Edit } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { useState } from 'react' import { useParams } from 'common' import CreateBucketModal from 'components/interfaces/Storage/CreateBucketModal' import EditBucketModal from 'components/interfaces/Storage/EditBucketModal' import type { StorageBucket } from 'components/interfaces/Storage/Storage.types' import { DeleteBucketModal } from 'components/to-be-cleaned/Storage' import { EmptyBucketModal } from 'components/to-be-cleaned/Storage/EmptyBucketModal' import { ButtonTooltip } from 'components/ui/ButtonTooltip' import ShimmeringLoader from 'components/ui/ShimmeringLoader' import { useBucketsQuery } from 'data/storage/buckets-query' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { useSelectedProject } from 'hooks/misc/useSelectedProject' import { AlertDescription_Shadcn_, AlertTitle_Shadcn_, Alert_Shadcn_, Menu } from 'ui' import BucketRow from './BucketRow' const StorageMenu = () => { const router = useRouter() const { ref, bucketId } = useParams() const projectDetails = useSelectedProject() const isBranch = projectDetails?.parent_project_ref !== undefined const [showCreateBucketModal, setShowCreateBucketModal] = useState(false) const [selectedBucketToEdit, setSelectedBucketToEdit] = useState() const [selectedBucketToEmpty, setSelectedBucketToEmpty] = useState() const [selectedBucketToDelete, setSelectedBucketToDelete] = useState() const canCreateBuckets = useCheckPermissions(PermissionAction.STORAGE_ADMIN_WRITE, '*') const page = router.pathname.split('/')[4] as | undefined | 'policies' | 'settings' | 'usage' | 'logs' const { data, error, isLoading, isError, isSuccess } = useBucketsQuery({ projectRef: ref }) const buckets = data ?? [] const tempNotSupported = error?.message.includes('Tenant config') && isBranch return ( <>
} disabled={!canCreateBuckets} style={{ justifyContent: 'start' }} onClick={() => setShowCreateBucketModal(true)} tooltip={{ content: { side: 'bottom', text: 'You need additional permissions to create buckets', }, }} > New bucket
All buckets} /> {isLoading && (
)} {isError && (
{tempNotSupported ? 'Storage is not available on preview branches for now' : 'Failed to fetch buckets'} {tempNotSupported ? "We're actively looking into making this available on preview branches" : 'Please refresh to try again'}
)} {isSuccess && ( <> {buckets.length === 0 && (
No buckets available Buckets that you create will appear here
)} {buckets.map((bucket, idx: number) => { const isSelected = bucketId === bucket.id return ( setSelectedBucketToEmpty(bucket)} onSelectDeleteBucket={() => setSelectedBucketToDelete(bucket)} onSelectEditBucket={() => setSelectedBucketToEdit(bucket)} /> ) })} )}
Configuration} />

Policies

Settings

setShowCreateBucketModal(false)} /> setSelectedBucketToEdit(undefined)} /> setSelectedBucketToEmpty(undefined)} /> setSelectedBucketToDelete(undefined)} /> ) } export default StorageMenu