'use client' import type { DevModeSnippet, DevModeSnippetIcon, DevModeSnippetKind } from './dev-mode-types' import type { LucideIcon } from 'lucide-react' import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@admin/components/ui/accordion' import { Badge } from '@admin/components/ui/badge' import { getDevModeCodeBlockHeight } from '@admin/utils/dev-mode/code-block-height' import { Eye, FileCode2, Inbox, List, Pencil, Plus, Save, Send, Trash2 } from 'lucide-react' import { CopyableCodeBlock } from './copyable-code-block' interface SnippetsTabProps { snippets: DevModeSnippet[] } const SNIPPET_ICONS = { eye: Eye, 'file-code': FileCode2, inbox: Inbox, list: List, pencil: Pencil, plus: Plus, save: Save, send: Send, trash: Trash2 } satisfies Record const SNIPPET_KIND_LABELS = { jsx: 'JSX', query: 'Query', mutation: 'Mutation' } satisfies Record function getSnippetCodes(snippet: DevModeSnippet): string[] { return snippet.codeTabs?.map((tab) => tab.code) ?? [snippet.code] } export function SnippetsTab({ snippets }: SnippetsTabProps) { const firstSnippet = snippets[0] if (!firstSnippet) { return null } return ( {snippets.map((snippet) => { const SnippetIcon = SNIPPET_ICONS[snippet.icon] const snippetKindLabel = SNIPPET_KIND_LABELS[snippet.kind] return (
1 ) }} >
{[snippet.payloadExample, snippet.responseExample].flatMap((example) => example ? (
) : ( [] ) )}
) })}
) }