useAnalyticsBucketWrapperInstance.tsx45 lines · main
1import { useMemo } from 'react'
2
3import { getAnalyticsBucketFDWName } from './AnalyticsBucketDetails.utils'
4import { WRAPPER_HANDLERS } from '@/components/interfaces/Integrations/Wrappers/Wrappers.constants'
5import {
6 getWrapperMetaForWrapper,
7 wrapperMetaComparator,
8} from '@/components/interfaces/Integrations/Wrappers/Wrappers.utils'
9import { useFDWsQuery } from '@/data/fdw/fdws-query'
10import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
11
12export const useAnalyticsBucketWrapperInstance = (
13 { bucketId }: { bucketId?: string },
14 options?: { enabled?: boolean }
15) => {
16 const { data: project, isPending: isLoadingProject } = useSelectedProjectQuery()
17
18 const defaultEnabled = options?.enabled ?? true
19 const { data, isPending: isLoadingFDWs } = useFDWsQuery(
20 {
21 projectRef: project?.ref,
22 connectionString: project?.connectionString,
23 },
24 { enabled: defaultEnabled && !!bucketId }
25 )
26
27 const icebergWrapper = useMemo(() => {
28 return data
29 ?.filter((wrapper) =>
30 wrapperMetaComparator(
31 { handlerName: WRAPPER_HANDLERS.ICEBERG, server: { options: [] } },
32 wrapper
33 )
34 )
35 .find((w) => w.name === getAnalyticsBucketFDWName(bucketId ?? ''))
36 }, [data, bucketId])
37
38 const icebergWrapperMeta = getWrapperMetaForWrapper(icebergWrapper)
39
40 return {
41 data: icebergWrapper,
42 meta: icebergWrapperMeta,
43 isLoading: isLoadingProject || isLoadingFDWs || !bucketId,
44 }
45}