mirror of
https://github.com/supabase/supabase.git
synced 2026-05-08 01:40:13 -04:00
4a0bb36ca8
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import { useCallback, useMemo } from 'react'
|
|
|
|
import { extractBucketNameFromDefinition } from '@/components/interfaces/Storage/Storage.utils'
|
|
import { useDatabasePoliciesQuery } from '@/data/database-policies/database-policies-query'
|
|
import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
|
|
|
|
export function useBucketPolicyCount() {
|
|
const { data: project, isPending: isProjectPending } = useSelectedProjectQuery()
|
|
const { data: policiesData = [], isPending: isPoliciesPending } = useDatabasePoliciesQuery({
|
|
projectRef: project?.ref,
|
|
connectionString: project?.connectionString,
|
|
schema: 'storage',
|
|
})
|
|
|
|
const policyCountByBucket = useMemo(() => {
|
|
const countMap = new Map<string, number>()
|
|
for (const policy of policiesData) {
|
|
if (policy.table !== 'objects') continue
|
|
const bucketName =
|
|
extractBucketNameFromDefinition(policy.definition) ??
|
|
extractBucketNameFromDefinition(policy.check)
|
|
if (bucketName) {
|
|
countMap.set(bucketName, (countMap.get(bucketName) ?? 0) + 1)
|
|
}
|
|
}
|
|
return countMap
|
|
}, [policiesData])
|
|
|
|
const getPolicyCount = useCallback(
|
|
(bucketName: string) => policyCountByBucket.get(bucketName) ?? 0,
|
|
[policyCountByBucket]
|
|
)
|
|
|
|
return { getPolicyCount, isLoading: isProjectPending || isPoliciesPending }
|
|
}
|