// components/DocumentView.tsx (client)
'use client';
import { OkraProvider, useDocument, useChat, useStructuredOutput } from '@okrapdf/react';
import { Invoice } from '@okrapdf/schemas';
function DocumentView({ id }: { id: string }) {
const { status, pages } = useDocument(id);
const { messages, send, isStreaming } = useChat(id);
const { data, extract, isLoading } = useStructuredOutput(id, Invoice);
return (
<div className="grid grid-cols-2 gap-4">
{/* Left: pages */}
<div>
<p>{status.phase} — {status.pagesCompleted} pages</p>
{pages.map((p) => <pre key={p.page}>{p.content}</pre>)}
</div>
{/* Right: chat + extraction */}
<div>
<div>
{messages.map((m, i) => <p key={i}><b>{m.role}:</b> {m.content}</p>)}
<input
onKeyDown={(e) => e.key === 'Enter' && send(e.currentTarget.value)}
placeholder="Ask..."
disabled={isStreaming}
/>
</div>
<button onClick={() => extract('Extract invoice fields')} disabled={isLoading}>
Extract Invoice
</button>
{data && <pre>{JSON.stringify(data, null, 2)}</pre>}
</div>
</div>
);
}
export default function Wrapper({ id }: { id: string }) {
return (
<OkraProvider apiKey={process.env.NEXT_PUBLIC_OKRA_API_KEY!}>
<DocumentView id={id} />
</OkraProvider>
);
}