Refactor prompt display and versioning

This commit is contained in:
gpt-engineer-app[bot]
2025-10-29 14:49:29 +00:00
parent f379ce17c9
commit fe55c74fc1
+47 -7
View File
@@ -9,7 +9,9 @@ import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge"; import { Badge } from "@/components/ui/badge";
import { ScrollArea } from "@/components/ui/scroll-area"; import { ScrollArea } from "@/components/ui/scroll-area";
import { Separator } from "@/components/ui/separator"; import { Separator } from "@/components/ui/separator";
import { GitBranch, Clock, User, FileText } from "lucide-react"; import { GitBranch, Clock, User, FileText, Copy, Check } from "lucide-react";
import { useState } from "react";
import { useToast } from "@/hooks/use-toast";
interface PromptVersion { interface PromptVersion {
version: string; version: string;
@@ -31,6 +33,27 @@ interface PromptHistoryDialogProps {
} }
export function PromptHistoryDialog({ open, onOpenChange, prompt }: PromptHistoryDialogProps) { export function PromptHistoryDialog({ open, onOpenChange, prompt }: PromptHistoryDialogProps) {
const { toast } = useToast();
const [copiedVersion, setCopiedVersion] = useState<string | null>(null);
const handleCopyPrompt = async (content: string, version: string) => {
try {
await navigator.clipboard.writeText(content);
setCopiedVersion(version);
toast({
title: "Conteúdo copiado!",
description: `Prompt da versão ${version} copiado para a área de transferência.`,
});
setTimeout(() => setCopiedVersion(null), 2000);
} catch (err) {
toast({
title: "Erro ao copiar",
description: "Não foi possível copiar o conteúdo.",
variant: "destructive",
});
}
};
// Mock data - substituir por dados reais do backend // Mock data - substituir por dados reais do backend
const versions: PromptVersion[] = [ const versions: PromptVersion[] = [
{ {
@@ -129,9 +152,6 @@ export function PromptHistoryDialog({ open, onOpenChange, prompt }: PromptHistor
<code className="text-sm font-mono font-semibold"> <code className="text-sm font-mono font-semibold">
v{version.version} v{version.version}
</code> </code>
<Badge variant={getVersionTypeColor(version.type)}>
{getVersionTypeLabel(version.type)}
</Badge>
{version.version === prompt.currentVersion && ( {version.version === prompt.currentVersion && (
<Badge variant="outline" className="bg-primary/10"> <Badge variant="outline" className="bg-primary/10">
Atual Atual
@@ -157,9 +177,29 @@ export function PromptHistoryDialog({ open, onOpenChange, prompt }: PromptHistor
</div> </div>
<div className="space-y-2"> <div className="space-y-2">
<p className="text-xs font-medium text-muted-foreground uppercase"> <div className="flex items-center justify-between">
Conteúdo do Prompt <p className="text-xs font-medium text-muted-foreground uppercase">
</p> Conteúdo do Prompt
</p>
<Button
size="sm"
variant="outline"
onClick={() => handleCopyPrompt(version.systemPrompt, version.version)}
className="h-7"
>
{copiedVersion === version.version ? (
<>
<Check className="h-3 w-3 mr-1" />
Copiado
</>
) : (
<>
<Copy className="h-3 w-3 mr-1" />
Copiar
</>
)}
</Button>
</div>
<ScrollArea className="h-[200px] w-full rounded-md border bg-muted/30"> <ScrollArea className="h-[200px] w-full rounded-md border bg-muted/30">
<div className="p-4"> <div className="p-4">
<p className="text-sm whitespace-pre-wrap leading-relaxed"> <p className="text-sm whitespace-pre-wrap leading-relaxed">