import { useParams } from 'common' import { useRouter } from 'next/router' import { useEffect } from 'react' import { toast } from 'sonner' import type { ShowApiKey } from '../../Docs/Docs.types' import { GeneralContent } from '@/components/interfaces/Docs/GeneralContent' import { ResourceContent } from '@/components/interfaces/Docs/ResourceContent' import { RpcContent } from '@/components/interfaces/Docs/RpcContent' import { buildEntityMaps } from '@/components/interfaces/Integrations/DataApi/DataApi.utils' import { DocViewError } from '@/components/interfaces/Integrations/DataApi/DocViewError' import { DocViewLoading } from '@/components/interfaces/Integrations/DataApi/DocViewLoading' import { useProjectSettingsV2Query } from '@/data/config/project-settings-v2-query' import { useProjectJsonSchemaQuery } from '@/data/docs/project-json-schema-query' interface DocViewProps { selectedLang: 'js' | 'bash' selectedApiKey: ShowApiKey } export const DocView = ({ selectedLang, selectedApiKey }: DocViewProps) => { const router = useRouter() const { ref: projectRef, page, resource, rpc } = useParams() const { data: settings, error: settingsError } = useProjectSettingsV2Query({ projectRef }) const { data: jsonSchema, error: jsonSchemaError, isPending: isLoading, refetch, } = useProjectJsonSchemaQuery({ projectRef }) const { paths } = jsonSchema || {} const PAGE_KEY = resource || rpc || page || 'index' const { resources, rpcs } = buildEntityMaps(paths) const resourceMissing = !!resource && !(resource in resources) const rpcMissing = !!rpc && !(rpc in rpcs) useEffect(() => { const isSchemaReady = !isLoading && !!jsonSchema && !settingsError && !jsonSchemaError if (!isSchemaReady || !projectRef) return if (resourceMissing || rpcMissing) { toast.error(`${resourceMissing ? 'table/view' : 'function'} could not be found`) router.replace(`/project/${projectRef}/integrations/data_api/docs`) } }, [ isLoading, jsonSchema, settingsError, jsonSchemaError, projectRef, resourceMissing, rpcMissing, router, ]) if (settingsError || jsonSchemaError) { return } if (isLoading || !settings || !jsonSchema) { return } return (
{resource ? ( ) : rpc ? ( ) : ( )}
) }