import { PermissionAction } from '@supabase/shared-types/out/constants' import Link from 'next/link' import type { PropsWithChildren } from 'react' import { useParams } from 'common' import { useIsAPIDocsSidePanelEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import APIDocsButton from 'components/ui/APIDocsButton' import NoPermission from 'components/ui/NoPermission' import { useEdgeFunctionQuery } from 'data/edge-functions/edge-function-query' import { useEdgeFunctionsQuery } from 'data/edge-functions/edge-functions-query' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { withAuth } from 'hooks/misc/withAuth' import { Code, ExternalLink } from 'lucide-react' import { Button } from 'ui' import FunctionsNav from '../../interfaces/Functions/FunctionsNav' import ProjectLayout from '../ProjectLayout/ProjectLayout' import { DocsButton } from 'components/ui/DocsButton' interface FunctionsLayoutProps { title?: string } const FunctionsLayout = ({ title, children }: PropsWithChildren) => { const { functionSlug, ref } = useParams() const isNewAPIDocsEnabled = useIsAPIDocsSidePanelEnabled() const { data: functions, isLoading } = useEdgeFunctionsQuery({ projectRef: ref }) const { data: selectedFunction } = useEdgeFunctionQuery({ projectRef: ref, slug: functionSlug }) const canReadFunctions = useCheckPermissions(PermissionAction.FUNCTIONS_READ, '*') if (!canReadFunctions) { return ( ) } const name = selectedFunction?.name || '' const hasFunctions = (functions ?? []).length > 0 const centered = !hasFunctions return ( {centered ? ( <>

Edge Functions

{children}
) : (

Edge Functions

{name && (

{name}

)}
{isNewAPIDocsEnabled && ( )}
{functionSlug !== undefined && }
{children}
)}
) } export default withAuth(FunctionsLayout)