// @ts-nocheck
import { useParams } from 'common'
import { Code, Play, 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 Briven 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
Briven CLI.
You can run your Edge Function locally using briven functions serve.
While serving your local Edge Functions, you can invoke it using cURL or one of the client libraries.
Edge Functions are available in self-hosted Briven via Briven Edge Runtime.
Unlike the platform, functions must be added manually — place each function at{' '}
volumes/functions/<function-name>/index.ts
{' '}
and restart the functions service to pick
up changes. See the guide to learn more about configuration, secrets, and routing.
Secrets can be loaded in two ways:
.env file at{' '}
briven/functions/.env — picked up
automatically on briven start.
--env-file to{' '}
briven functions serve, e.g.{' '}
briven functions serve --env-file ./path/to/.env-file
Configure secrets in your .env file and{' '}
docker-compose.yml under the{' '}
functions service.