import { useMemo } from 'react' import { useOpenAPISpecQuery } from '@/data/open-api/api-spec-query' import { partitionExposedDocsEntities } from '@/data/privileges/exposed-docs-entities' import { useExposedFunctionsQuery } from '@/data/privileges/exposed-functions-query' import { useExposedTablesQuery } from '@/data/privileges/exposed-tables-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' const OPEN_API_SPEC_STALE_TIME = 1000 * 60 * 10 /** * Tables shown in the autogenerated Data API docs, with unexposed (revoked) * tables filtered out and counted. */ export const useApiDocsTables = () => { const { data: project } = useSelectedProjectQuery() const projectRef = project?.ref const { data: spec, isLoading } = useOpenAPISpecQuery( { projectRef }, { staleTime: OPEN_API_SPEC_STALE_TIME } ) const { data: exposedTables } = useExposedTablesQuery({ projectRef, connectionString: project?.connectionString, }) return useMemo( () => ({ ...partitionExposedDocsEntities(spec?.tables ?? [], exposedTables), isLoading, }), [spec?.tables, exposedTables, isLoading] ) } /** * Database functions shown in the autogenerated Data API docs, with unexposed * (revoked) functions filtered out and counted. */ export const useApiDocsFunctions = () => { const { data: project } = useSelectedProjectQuery() const projectRef = project?.ref const { data: spec, isLoading } = useOpenAPISpecQuery( { projectRef }, { staleTime: OPEN_API_SPEC_STALE_TIME } ) const { data: exposedFunctions } = useExposedFunctionsQuery({ projectRef, connectionString: project?.connectionString, }) return useMemo( () => ({ ...partitionExposedDocsEntities(spec?.functions ?? [], exposedFunctions), isLoading, }), [spec?.functions, exposedFunctions, isLoading] ) }