import { useParams } from 'common' import { Code, Server, Terminal } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { parseAsString, useQueryState } from 'nuqs' import { useMemo } from 'react' import { AiIconAnimation, Button, Card, CardContent, CardHeader, CardTitle } from 'ui' import { EDGE_FUNCTION_TEMPLATES } from './Functions.templates' import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' import { ScaffoldSectionTitle } from '@/components/layouts/Scaffold' import { DocsButton } from '@/components/ui/DocsButton' import { ResourceItem } from '@/components/ui/Resource/ResourceItem' import { ResourceList } from '@/components/ui/Resource/ResourceList' import { useDeploymentMode } from '@/hooks/misc/useDeploymentMode' import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' import { DOCS_URL, IS_PLATFORM } from '@/lib/constants' import { useTrack } from '@/lib/telemetry/track' import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state' export const FunctionsEmptyState = () => { const { ref } = useParams() const router = useRouter() const { isCli, isSelfHosted } = useDeploymentMode() const aiSnap = useAiAssistantStateSnapshot() const { openSidebar } = useSidebarManagerSnapshot() const track = useTrack() const [, setCreateMethod] = useQueryState('create', parseAsString) const showStripeExample = useIsFeatureEnabled('edge_functions:show_stripe_example') const templates = useMemo(() => { if (showStripeExample) { return EDGE_FUNCTION_TEMPLATES } // Filter out Stripe template return EDGE_FUNCTION_TEMPLATES.filter((template) => template.value !== 'stripe-webhook') }, [showStripeExample]) const emptyStateTitle = IS_PLATFORM ? 'Deploy your first edge function' : 'Add your first edge function' return ( <> {emptyStateTitle} {/* Editor Option */} {IS_PLATFORM && ( <>

Via Editor

Create and edit functions directly in the browser. Download to local at any time.

{/* AI Assistant Option */}

AI Assistant

Let our AI assistant help you create functions. Perfect for kickstarting a function.

)} {/* CLI Option */} {(IS_PLATFORM || isCli) && (

Via CLI

Create and deploy functions using the Supabase CLI. Ideal for local development and version control.

)} {isSelfHosted && }
{IS_PLATFORM && ( <> Start with a template {templates.map((template) => ( } onClick={() => { track('edge_function_template_clicked', { templateName: template.name, origin: 'functions_page', }) }} >

{template.name}

{template.description}

))}
)} ) } const SelfHostedManualFunctionContent = () => (

Self-Hosted

Place each function at{' '} volumes/functions/<function-name>/index.ts and restart the functions service to pick up changes.

)