import { useParams } from 'common' import { AnalyticsBucket as AnalyticsBucketIcon } from 'icons' import { ChevronRight, Search } from 'lucide-react' import { useRouter } from 'next/navigation' import { parseAsBoolean, useQueryState } from 'nuqs' import { useState } from 'react' import { Card, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Tooltip, TooltipContent, TooltipTrigger, } from 'ui' import { TimestampInfo } from 'ui-patterns' import { Input } from 'ui-patterns/DataInputs/Input' import { PageContainer } from 'ui-patterns/PageContainer' import { PageSection, PageSectionContent, PageSectionTitle } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' import { EmptyBucketState } from '../EmptyBucketState' import { CreateBucketButton } from '../NewBucketButton' import { CreateAnalyticsBucketModal } from './CreateAnalyticsBucketModal' import AlertError from '@/components/ui/AlertError' import { AlphaNotice } from '@/components/ui/AlphaNotice' import { useProjectStorageConfigQuery } from '@/data/config/project-storage-config-query' import { useAnalyticsBucketsQuery } from '@/data/storage/analytics-buckets-query' import { createNavigationHandler } from '@/lib/navigation' export const AnalyticsBuckets = () => { const { ref } = useParams() const router = useRouter() const [filterString, setFilterString] = useState('') const [visible, setVisible] = useQueryState( 'new', parseAsBoolean.withDefault(false).withOptions({ history: 'push', clearOnDefault: true }) ) const { data: config } = useProjectStorageConfigQuery({ projectRef: ref }) const maxAnalyticsBuckets = config?.features.icebergCatalog.maxCatalogs ?? 2 const { data: buckets = [], error: bucketsError, isError: isErrorBuckets, isPending: isLoadingBuckets, isSuccess: isSuccessBuckets, } = useAnalyticsBucketsQuery({ projectRef: ref, }) const analyticsBuckets = buckets.filter((bucket) => filterString.length === 0 ? true : bucket.name.toLowerCase().includes(filterString.toLowerCase()) ) const hasNoBuckets = buckets.length === 0 return ( <> {isLoadingBuckets && } {isErrorBuckets && ( )} {isSuccessBuckets && ( <> {hasNoBuckets ? ( setVisible(true)} /> ) : (
Buckets {analyticsBuckets.length > 0 && ( {analyticsBuckets.length}/{maxAnalyticsBuckets} Each project can only have up to {maxAnalyticsBuckets} buckets while analytics buckets are in alpha{' '} )}
setFilterString(e.target.value)} icon={} /> setVisible(true)} />
{isLoadingBuckets ? ( ) : ( {analyticsBuckets.length > 0 && ( Icon )} Name Created at Actions {analyticsBuckets.length === 0 && filterString.length > 0 && (

No results found

Your search for "{filterString}" did not return any results

)} {analyticsBuckets.map((bucket) => { const handleBucketNavigation = createNavigationHandler( `/project/${ref}/storage/analytics/buckets/${encodeURIComponent(bucket.name)}`, router ) return (

{bucket.name}

) })}
)}
)} )}
) }