import { PermissionAction } from '@supabase/shared-types/out/constants' import Link from 'next/link' import { useEffect, type PropsWithChildren } from 'react' import { useParams } from 'common' import { useIsAPIDocsSidePanelEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import APIDocsButton from 'components/ui/APIDocsButton' import { DocsButton } from 'components/ui/DocsButton' 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 } from 'lucide-react' import { useRouter } from 'next/router' import { toast } from 'sonner' import { Button, cn } from 'ui' import FunctionsNav from '../../interfaces/Functions/FunctionsNav' import ProjectLayout from '../ProjectLayout/ProjectLayout' interface FunctionsLayoutProps { title?: string } const FunctionsLayout = ({ title, children }: PropsWithChildren) => { const router = useRouter() const { functionSlug, ref } = useParams() const isNewAPIDocsEnabled = useIsAPIDocsSidePanelEnabled() const { data: functions, isLoading } = useEdgeFunctionsQuery({ projectRef: ref }) const { data: selectedFunction, error, isError, } = useEdgeFunctionQuery({ projectRef: ref, slug: functionSlug }) const canReadFunctions = useCheckPermissions(PermissionAction.FUNCTIONS_READ, '*') const name = selectedFunction?.name || '' const hasFunctions = (functions ?? []).length > 0 const centered = !hasFunctions useEffect(() => { let cancel = false if (!!functionSlug && isError && error.code === 404 && !cancel) { toast('Edge function cannot be found in your project') router.push(`/project/${ref}/functions`) } return () => { cancel = true } }, [isError]) if (!canReadFunctions) { return ( ) } return ( {centered ? ( <>

Edge Functions

{children}
) : (

Edge Functions

{name && (

{name}

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