| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import { useParams } from 'common'
- import { useRouter } from 'next/router'
- import { ReactElement } from 'react'
- import { ProjectLayout } from '../ProjectLayout'
- import { generateDocsMenu, getActivePage } from './DocsLayout.utils'
- import Error from '@/components/ui/Error'
- import { ProductMenu } from '@/components/ui/ProductMenu'
- import { useOpenAPISpecQuery } from '@/data/open-api/api-spec-query'
- import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
- import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
- import { withAuth } from '@/hooks/misc/withAuth'
- import { PROJECT_STATUS } from '@/lib/constants'
- function DocsLayout({ title, children }: { title: string; children: ReactElement }) {
- const router = useRouter()
- const { ref } = useParams()
- const { data: selectedProject } = useSelectedProjectQuery()
- const isPaused = selectedProject?.status === PROJECT_STATUS.INACTIVE
- const {
- data,
- isPending: isLoading,
- error,
- } = useOpenAPISpecQuery({ projectRef: ref }, { enabled: !isPaused })
- const hideMenu = router.pathname.endsWith('/graphiql')
- const { projectAuthAll: authEnabled } = useIsFeatureEnabled(['project_auth:all'])
- const getPage = () => {
- if (router.pathname.endsWith('graphiql')) return 'graphiql'
- const { page, rpc, resource } = router.query
- return getActivePage({
- page: page as string | undefined,
- resource: resource as string | undefined,
- rpc: rpc as string | undefined,
- })
- }
- if (error) {
- return (
- <ProjectLayout product="API Docs">
- <Error error={error} />
- </ProjectLayout>
- )
- }
- const projectRef = selectedProject?.ref ?? 'default'
- const tableNames = (data?.tables ?? []).map((table: any) => table.name)
- const functionNames = (data?.functions ?? []).map((fn: any) => fn.name)
- return (
- <ProjectLayout
- isLoading={isLoading}
- product="API Docs"
- browserTitle={{ section: title || 'API Docs' }}
- productMenu={
- !hideMenu && (
- <ProductMenu
- page={getPage()}
- menu={generateDocsMenu(projectRef, tableNames, functionNames, { authEnabled })}
- />
- )
- }
- >
- {children}
- </ProjectLayout>
- )
- }
- export default withAuth(DocsLayout)
|