From 25da60f7b2c57dd5f08822b813031a7b35331f74 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Fri, 7 Nov 2025 19:20:49 +0000 Subject: [PATCH] Refactor agent details page Move AI model select above system prompt and add version history modal. --- .../agents/VersionHistoryDialog.tsx | 122 ++++++++++ src/pages/AgentDetails.tsx | 213 ++++++------------ 2 files changed, 191 insertions(+), 144 deletions(-) create mode 100644 src/components/agents/VersionHistoryDialog.tsx diff --git a/src/components/agents/VersionHistoryDialog.tsx b/src/components/agents/VersionHistoryDialog.tsx new file mode 100644 index 0000000..86fc848 --- /dev/null +++ b/src/components/agents/VersionHistoryDialog.tsx @@ -0,0 +1,122 @@ +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { ScrollArea } from "@/components/ui/scroll-area"; +import { Badge } from "@/components/ui/badge"; +import { Copy } from "lucide-react"; +import { useToast } from "@/hooks/use-toast"; + +interface VersionHistoryDialogProps { + open: boolean; + onOpenChange: (open: boolean) => void; + agentName: string; + versions: Array<{ + id: number; + version: string; + type: "major" | "minor" | "patch"; + description: string; + prompt: string; + createdAt: string; + author: string; + }>; +} + +export function VersionHistoryDialog({ + open, + onOpenChange, + agentName, + versions, +}: VersionHistoryDialogProps) { + const { toast } = useToast(); + + const handleCopyPrompt = async (prompt: string) => { + try { + await navigator.clipboard.writeText(prompt); + toast({ + title: "Copiado!", + description: "Prompt copiado para a área de transferência.", + }); + } catch (error) { + toast({ + title: "Erro", + description: "Não foi possível copiar o prompt.", + variant: "destructive", + }); + } + }; + + const getVersionTypeColor = (type: string) => { + switch (type) { + case "major": + return "bg-primary text-primary-foreground"; + case "minor": + return "bg-secondary text-secondary-foreground"; + case "patch": + return "bg-muted text-muted-foreground"; + default: + return "bg-muted text-muted-foreground"; + } + }; + + return ( + + ); +} diff --git a/src/pages/AgentDetails.tsx b/src/pages/AgentDetails.tsx index 08052f0..dc8c674 100644 --- a/src/pages/AgentDetails.tsx +++ b/src/pages/AgentDetails.tsx @@ -1,20 +1,19 @@ import { useState } from "react"; import { useParams, useNavigate } from "react-router-dom"; import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; -import { ScrollArea } from "@/components/ui/scroll-area"; -import { ArrowLeft, Bot, Save, Clock, Copy } from "lucide-react"; +import { ArrowLeft, Bot, Save, History } from "lucide-react"; import { useToast } from "@/hooks/use-toast"; +import { VersionHistoryDialog } from "@/components/agents/VersionHistoryDialog"; export default function AgentDetails() { const { id } = useParams(); const navigate = useNavigate(); const { toast } = useToast(); + const [isHistoryOpen, setIsHistoryOpen] = useState(false); // Mock data - substituir por dados reais do backend const [agent, setAgent] = useState({ @@ -73,35 +72,6 @@ export default function AgentDetails() { }); }; - const handleCopyPrompt = async (prompt: string) => { - try { - await navigator.clipboard.writeText(prompt); - toast({ - title: "Copiado!", - description: "Prompt copiado para a área de transferência.", - }); - } catch (error) { - toast({ - title: "Erro", - description: "Não foi possível copiar o prompt.", - variant: "destructive", - }); - } - }; - - const getVersionTypeColor = (type: string) => { - switch (type) { - case "major": - return "bg-primary text-primary-foreground"; - case "minor": - return "bg-secondary text-secondary-foreground"; - case "patch": - return "bg-muted text-muted-foreground"; - default: - return "bg-muted text-muted-foreground"; - } - }; - return (
- {version.description} -
-- {version.prompt} -
-{version.author} • {version.createdAt}
-