pdf-to-structured-data / components /ResultDisplay.tsx
philschmid's picture
init
3bb377e unverified
"use client";
import { Button } from "@/components/ui/button";
import { Braces, Copy, RotateCcw } from "lucide-react";
import { useState } from "react";
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover";
interface ResultDisplayProps {
result: string;
schema: string;
onReset: () => void;
}
export function ResultDisplay({ result, schema, onReset }: ResultDisplayProps) {
const [copied, setCopied] = useState(false);
const [schemaCopied, setSchemaCopied] = useState(false);
const handleCopy = () => {
navigator.clipboard.writeText(JSON.stringify(result, null, 2));
setCopied(true);
setTimeout(() => setCopied(false), 2000);
};
const handleSchemaCopy = () => {
navigator.clipboard.writeText(JSON.stringify(schema, null, 2));
setSchemaCopied(true);
setTimeout(() => setSchemaCopied(false), 2000);
};
return (
<div className="space-y-4">
<div className="flex items-center justify-between">
<h2 className="text-xl font-semibold">Extracted Data</h2>
<div className="space-x-2">
<Popover>
<PopoverTrigger>
<Button variant="outline" size="sm">
<Braces className="w-4 h-4 mr-2" />
Schema
</Button>
</PopoverTrigger>
<PopoverContent className="max-h-[500px] max-w-[700px] w-full overflow-y-auto">
<div className="relative p-4 rounded-lg bg-muted">
<Button
variant="secondary"
size="sm"
onClick={handleSchemaCopy}
className="absolute top-2 right-2"
>
<Copy className="w-4 h-4 mr-2" />
{schemaCopied ? "Copied!" : "Copy"}
</Button>
<pre className="overflow-auto">
<code className="text-xs">
{JSON.stringify(schema, null, 2)}
</code>
</pre>
</div>
</PopoverContent>
</Popover>
<Button variant="outline" size="sm" onClick={handleCopy}>
<Copy className="w-4 h-4 mr-2" />
{copied ? "Copied!" : "Copy"}
</Button>
<Button variant="outline" size="sm" onClick={onReset}>
<RotateCcw className="w-4 h-4 mr-2" />
Process Another PDF
</Button>
</div>
</div>
<pre className="p-4 rounded-lg bg-muted overflow-auto">
<code className="text-sm">{JSON.stringify(result, null, 2)}</code>
</pre>
</div>
);
}