import { useParams } from 'common' import { FileCode, Sparkles, Terminal, type LucideIcon } from 'lucide-react' import { useState } from 'react' import { cn } from 'ui' import { buildComputeInstanceSnippets, type ComputeInstanceSnippetInput, } from './computeInstanceSnippets' import CopyButton from '@/components/ui/CopyButton' import { useProjectSettingsV2Query } from '@/data/config/project-settings-v2-query' export type ComputeInstanceSnippetTab = 'ai' | 'config' | 'cli' | 'curl' | 'js' | 'python' export const COMPUTE_INSTANCE_CALL_TABS = [ 'curl', 'js', 'python', ] as const satisfies readonly ComputeInstanceSnippetTab[] const TAB_LABEL: Record = { ai: 'AI Prompt', config: 'config.toml', cli: 'CLI', curl: 'cURL', js: 'JavaScript', python: 'Python', } const TAB_ICON: Record = { ai: Sparkles, config: FileCode, cli: Terminal, curl: Terminal, js: FileCode, python: FileCode, } interface ComputeInstanceSnippetTabsProps { input: Omit tabs?: readonly [ComputeInstanceSnippetTab, ...ComputeInstanceSnippetTab[]] className?: string } export const ComputeInstanceSnippetTabs = ({ input, tabs = ['cli'], className, }: ComputeInstanceSnippetTabsProps) => { const { ref } = useParams() const [active, setActive] = useState(tabs[0]) const { data: settings } = useProjectSettingsV2Query({ projectRef: ref }, { enabled: !!ref }) const snippets = buildComputeInstanceSnippets({ ...input, endpoint: settings?.app_config?.endpoint, protocol: settings?.app_config?.protocol, }) const snippetByTab: Record = { ai: snippets.aiPrompt, config: snippets.configToml, cli: snippets.cli, curl: snippets.curl, js: snippets.javascript, python: snippets.python, } const activeTab = tabs.includes(active) ? active : tabs[0] const value = snippetByTab[activeTab] return (
{tabs.map((tab) => { const Icon = TAB_ICON[tab] return ( ) })}
{activeTab === 'ai' ? (

{value}

) : (
            {value}
          
)}
) }