import Link from 'next/link' import { FC, ReactNode, useState } from 'react' import { observer } from 'mobx-react-lite' import { Button, IconExternalLink, IconCode, Modal, IconTerminal } from 'ui' import ProjectLayout from './' import { checkPermissions, withAuth } from 'hooks' import { useParams } from 'common/hooks' import FunctionsNav from '../interfaces/Functions/FunctionsNav' import NoPermission from 'components/ui/NoPermission' import { PermissionAction } from '@supabase/shared-types/out/constants' import { TerminalInstructions } from 'components/interfaces/Functions' import { useEdgeFunctionQuery } from 'data/edge-functions/edge-function-query' import { useEdgeFunctionsQuery } from 'data/edge-functions/edge-functions-query' interface Props { title?: string children?: ReactNode } const FunctionsLayout: FC = ({ title, children }) => { const { functionSlug, ref } = useParams() const [showTerminalInstructions, setShowTerminalInstructions] = useState(false) const { data: functions, isLoading } = useEdgeFunctionsQuery({ projectRef: ref }) const { data: selectedFunction } = useEdgeFunctionQuery({ projectRef: ref, slug: functionSlug }) const canReadFunctions = checkPermissions(PermissionAction.FUNCTIONS_READ, '*') if (!canReadFunctions) { return (
) } const name = selectedFunction?.name || '' const hasFunctions = (functions ?? []).length > 0 const centered = !hasFunctions return ( {centered ? ( <>

Edge Functions

Beta

{children}
) : (

Edge Functions

Beta

{name && (
{name}
)}
{selectedFunction !== undefined && }
{children}
)} setShowTerminalInstructions(false)} header={

Deploying an edge function to your project

} customFooter={
} >
) } export default withAuth(observer(FunctionsLayout))