import { useMemo, useState } from 'react' import useAppStore from '../store/appStore' import { useProcesses } from '../hooks/useProcesses' import PreviewFrame from './PreviewFrame' import LogsPanel from './LogsPanel' import DbBrowserPanel from './DbBrowserPanel' import TerminalPanel from './TerminalPanel' export default function PreviewPanel() { const { runtime, project, templates } = useAppStore() const { status } = useProcesses() const [tab, setTab] = useState('preview') // 'preview' | 'logs' | 'db' const isRunning = status === 'running' // Resolve template's preview config (kind: frontend|backend, path). // Default to frontend:/ for templates that pre-date the preview block. const tplEntry = useMemo( () => templates.find((t) => t.id === project.template), [templates, project.template], ) const preview = tplEntry?.preview ?? { kind: 'frontend', path: '/' } const targetPort = preview.kind === 'backend' ? runtime.backendPort : runtime.frontendPort const iframeUrl = isRunning && targetPort ? `http://localhost:${targetPort}${preview.path || '/'}` : null return (