import { useVirtualizer } from '@tanstack/react-virtual'
import { ChevronUp, Search, X } from 'lucide-react'
import { forwardRef, useEffect, useState, type HTMLAttributes, type ReactNode } from 'react'
import { Button, cn, Collapsible, CollapsibleContent, CollapsibleTrigger } from 'ui'
import { ShimmeringLoader } from 'ui-patterns'
import { Input } from 'ui-patterns/DataInputs/Input'
import {
PageSection,
PageSectionContent,
PageSectionDescription,
PageSectionMeta,
PageSectionSummary,
PageSectionTitle,
} from 'ui-patterns/PageSection'
import { StoragePoliciesBucketRow } from './StoragePoliciesBucketRow'
import StoragePoliciesPlaceholder from './StoragePoliciesPlaceholder'
import type { Policy } from '@/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRow.utils'
import { useMainScrollContainer } from '@/components/layouts/MainScrollContainerContext'
import { NoSearchResults } from '@/components/ui/NoSearchResults'
import { type Bucket } from '@/data/storage/buckets-query'
import { useStaticEffectEvent } from '@/hooks/useStaticEffectEvent'
export type SelectBucketPolicyForAction = {
addPolicy: (bucketName?: string, table?: string) => void
editPolicy: (policy: Policy, bucketName?: string, table?: string) => void
deletePolicy: (policy: Policy) => void
}
type BucketsPoliciesProps = {
buckets: { bucket: Bucket; policies: Policy[] }[]
search?: string
debouncedSearch?: string
setSearch: (search: string) => void
actions: SelectBucketPolicyForAction
pagination: {
hasNextPage: boolean
isFetchingNextPage: boolean
fetchNextPage: () => void
}
}
export const BucketsPolicies = ({
buckets,
search,
debouncedSearch,
setSearch,
actions,
pagination,
}: BucketsPoliciesProps): ReactNode => {
const [expanded, setExpanded] = useState(true)
const showEmptyState = buckets.length === 0 && (!debouncedSearch || debouncedSearch.length === 0)
return (
Loading more...