Files
breakpilot-core/pitch-deck/app/pitch-preview/[versionId]/page.tsx
Benjamin Admin 084d09e9bd
All checks were successful
Build pitch-deck / build-push-deploy (push) Successful in 13s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-consent (push) Successful in 32s
CI / test-python-voice (push) Successful in 31s
CI / test-bqas (push) Successful in 31s
fix(pitch-deck): revert banner test text back to Draft
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 15:32:46 +02:00

80 lines
2.7 KiB
TypeScript

'use client'
import { useEffect, useState, useCallback } from 'react'
import { useParams } from 'next/navigation'
import { Language, PitchData } from '@/lib/types'
import PitchDeck from '@/components/PitchDeck'
export default function PreviewPage() {
const { versionId } = useParams<{ versionId: string }>()
const [data, setData] = useState<PitchData | null>(null)
const [versionMeta, setVersionMeta] = useState<{ name: string; status: string } | null>(null)
const [loading, setLoading] = useState(true)
const [error, setError] = useState<string | null>(null)
const [lang, setLang] = useState<Language>('de')
const toggleLanguage = useCallback(() => {
setLang(prev => prev === 'de' ? 'en' : 'de')
}, [])
useEffect(() => {
if (!versionId) return
setLoading(true)
fetch(`/api/preview-data/${versionId}`)
.then(async r => {
if (!r.ok) throw new Error((await r.json().catch(() => ({}))).error || 'Failed to load')
return r.json()
})
.then(d => {
if (d._version) {
setVersionMeta(d._version)
delete d._version
}
setData(d)
})
.catch(e => setError(e.message))
.finally(() => setLoading(false))
}, [versionId])
if (loading) {
return (
<div className="h-screen flex items-center justify-center bg-[#0a0a1a]">
<div className="text-center">
<div className="w-12 h-12 border-2 border-indigo-500 border-t-transparent rounded-full animate-spin mx-auto mb-4" />
<p className="text-white/40 text-sm">Loading preview...</p>
</div>
</div>
)
}
if (error || !data) {
return (
<div className="h-screen flex items-center justify-center bg-[#0a0a1a]">
<div className="text-center max-w-md px-6">
<p className="text-rose-400 mb-2">Preview Error</p>
<p className="text-white/40 text-sm">{error || 'No data found for this version'}</p>
<p className="text-white/30 text-xs mt-4">Make sure you are logged in as an admin.</p>
</div>
</div>
)
}
// Render PitchDeck with no investor (no watermark, no audit) — admin preview only
// The banner at the top indicates this is a preview
return (
<div className="relative">
{/* Preview banner */}
<div className="fixed top-0 left-0 right-0 z-[100] bg-amber-500/90 text-black text-center py-1.5 text-xs font-semibold tracking-wide">
PREVIEW: {versionMeta?.name ?? 'Loading...'} {versionMeta?.status === 'draft' ? 'Draft' : 'Committed'}
</div>
<PitchDeck
lang={lang}
onToggleLanguage={toggleLanguage}
investor={null}
onLogout={() => {}}
previewData={data}
/>
</div>
)
}