import Link from 'next/link' import { useRouter } from 'next/router' import { useState } from 'react' import { useFlag, useParams } from 'common' import { CreateBucketModal } from 'components/interfaces/Storage/CreateBucketModal' import ShimmeringLoader from 'components/ui/ShimmeringLoader' import { useProjectStorageConfigQuery } from 'data/config/project-storage-config-query' import { useBucketsQuery } from 'data/storage/buckets-query' import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import { IS_PLATFORM } from 'lib/constants' import { useStorageExplorerStateSnapshot } from 'state/storage-explorer' import { Alert_Shadcn_, AlertDescription_Shadcn_, AlertTitle_Shadcn_, Menu } from 'ui' import { InfoTooltip } from 'ui-patterns/info-tooltip' import { InnerSideBarEmptyPanel, InnerSideBarFilters, InnerSideBarFilterSearchInput, InnerSideBarFilterSortDropdown, InnerSideBarFilterSortDropdownItem, } from 'ui-patterns/InnerSideMenu' import { BucketRow } from './BucketRow' export const StorageMenu = () => { const router = useRouter() const { ref, bucketId } = useParams() const { data: projectDetails } = useSelectedProjectQuery() const snap = useStorageExplorerStateSnapshot() const showMigrationCallout = useFlag('storageMigrationCallout') const { data: config } = useProjectStorageConfigQuery( { projectRef: ref }, { enabled: showMigrationCallout } ) const isListV2UpgradeAvailable = !!config && !config.capabilities.list_v2 && config.external.upstreamTarget === 'main' const isBranch = projectDetails?.parent_project_ref !== undefined const [searchText, setSearchText] = useState('') const page = router.pathname.split('/')[4] as | undefined | 'policies' | 'settings' | 'usage' | 'logs' const { data: buckets = [], error, isLoading, isError, isSuccess, } = useBucketsQuery({ projectRef: ref }) const sortedBuckets = snap.sortBucket === 'alphabetical' ? buckets.sort((a, b) => a.name.toLowerCase().trim().localeCompare(b.name.toLowerCase().trim()) ) : buckets.sort((a, b) => (new Date(b.created_at) > new Date(a.created_at) ? -1 : 1)) const filteredBuckets = searchText.length > 1 ? sortedBuckets.filter((bucket) => bucket.name.includes(searchText.trim())) : sortedBuckets const tempNotSupported = error?.message.includes('Tenant config') && isBranch return ( <>
{ setSearchText(e.target.value) }} > snap.setSortBucket(value)} > Alphabetical Created at
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 && ( )} {searchText.length > 0 && filteredBuckets.length === 0 && ( )} {filteredBuckets.map((bucket, idx: number) => { const isSelected = bucketId === bucket.id return ( ) })} )}
Configuration} />

Policies

{IS_PLATFORM && (

Settings

{isListV2UpgradeAvailable && ( Upgrade available )}
)}
) }