import { useParams } from 'common'
import { Code, Github, Play, 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,
cn,
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogSection,
DialogTitle,
DialogTrigger,
Separator,
} from 'ui'
import { CodeBlock } from 'ui-patterns/CodeBlock'
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 { useSendEventMutation } from '@/data/telemetry/send-event-mutation'
import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization'
import { DOCS_URL } from '@/lib/constants'
import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state'
import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state'
export const FunctionsEmptyState = () => {
const { ref } = useParams()
const router = useRouter()
const aiSnap = useAiAssistantStateSnapshot()
const { openSidebar } = useSidebarManagerSnapshot()
const { mutate: sendEvent } = useSendEventMutation()
const { data: org } = useSelectedOrganizationQuery()
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])
return (
<>
Create and edit functions directly in the browser. Download to local at any time.
Let our AI assistant help you create functions. Perfect for kickstarting a function.
Create and deploy functions using the Supabase CLI. Ideal for local development and
version control.
{template.name} {template.description}
Via Editor
AI Assistant
Via CLI
Create a new edge function called hello-world in your project via the
Supabase CLI.
You can run your Edge Function locally using supabase functions serve.
While serving your local Edge Functions, you can invoke it using cURL or one of the client libraries.
Supabase Edge Runtime consists of a web server based on the Deno runtime, capable of running Javascript, Typescript, and WASM services. You may self-host edge functions on providers like Fly.io, Digital Ocean, or AWS.
Local secrets and environment variables can be loaded in either of the following two ways
.env file placed at supabase/functions/.env,
which is automatically loaded on supabase start
--env-file option for supabase functions serve
, for example: supabase functions serve --env-file ./path/to/.env-file
Change settings in
.env file
and
docker-compose.yml
at
functions
service
Secrets can also be loaded at runtime by injecting them into main/index.ts file