'use client' import type { DevModeLifecycleHookExample, DevModeLifecycleHookPhase, DevModeSnippetIcon } 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 LifecycleHooksTabProps { lifecycleHooks: DevModeLifecycleHookExample[] } const LIFECYCLE_HOOK_ICONS = { eye: Eye, 'file-code': FileCode2, inbox: Inbox, list: List, pencil: Pencil, plus: Plus, save: Save, send: Send, trash: Trash2 } satisfies Record const LIFECYCLE_HOOK_PHASE_LABELS = { before: 'Before', after: 'After' } satisfies Record export function LifecycleHooksTab({ lifecycleHooks }: LifecycleHooksTabProps) { const firstHook = lifecycleHooks[0] if (!firstHook) { return (
Lifecycle hook examples are generated for entity and form schemas.
) } return ( {lifecycleHooks.map((hook) => { const HookIcon = LIFECYCLE_HOOK_ICONS[hook.icon] const phaseLabel = LIFECYCLE_HOOK_PHASE_LABELS[hook.phase] return (
) })}
) }