Atualizacoes: Novo modo leitura de Parecer, campo instrucao agora é opcional, campo do agente do parecer pode ser recolhido, ajuste na cor do botão de agente de prompt

This commit is contained in:
Vitex Tecnologia
2026-04-14 14:42:33 -03:00
parent 8f2e4f1d21
commit 7a01c6f97b
8 changed files with 608 additions and 39 deletions
+26 -4
View File
@@ -11,10 +11,19 @@ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent,
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { usePrompts } from "@/contexts/PromptsContext";
import type { Prompt } from "@/contexts/PromptsContext";
import { promptsService } from "@/services/promptsApi";
import { promptsService, type PromptItem } from "@/services/promptsApi";
import { toast } from "sonner";
function apiItemToPrompt(item: { id: string; titulo: string; area_nome: string; area_id: string; descricao?: string; conteudo?: string }): Prompt {
function formatarDataCriacao(iso: string | undefined): string {
if (!iso?.trim()) return "—";
try {
return new Date(iso.replace(" ", "T")).toLocaleDateString("pt-BR");
} catch {
return iso;
}
}
function apiItemToPrompt(item: PromptItem): Prompt {
return {
id: item.id,
titulo: item.titulo,
@@ -22,6 +31,7 @@ function apiItemToPrompt(item: { id: string; titulo: string; area_nome: string;
area_id: item.area_id,
descricao: item.descricao ?? undefined,
conteudo: item.conteudo ?? "",
created_at: item.created_at,
};
}
@@ -234,6 +244,9 @@ export const PromptsView = () => {
<Table>
<TableHeader>
<TableRow>
<TableHead className="min-w-[140px] whitespace-nowrap font-semibold text-xs md:text-sm">
Data de criação
</TableHead>
<TableHead className="min-w-[200px] font-semibold text-xs md:text-sm">Título</TableHead>
<TableHead className="min-w-[120px] font-semibold text-xs md:text-sm">Área</TableHead>
<TableHead className="text-center text-xs md:text-sm">Ações</TableHead>
@@ -242,19 +255,22 @@ export const PromptsView = () => {
<TableBody>
{loadingList ? (
<TableRow>
<TableCell colSpan={3} className="text-center text-muted-foreground py-8">
<TableCell colSpan={4} className="text-center text-muted-foreground py-8">
Carregando...
</TableCell>
</TableRow>
) : totalRegistros === 0 ? (
<TableRow>
<TableCell colSpan={3} className="text-center text-muted-foreground py-10 text-base">
<TableCell colSpan={4} className="text-center text-muted-foreground py-10 text-base">
{hasActiveFilters ? "Nenhum prompt encontrado para os filtros selecionados." : "Não há resultados."}
</TableCell>
</TableRow>
) : (
promptsList.map((prompt) => (
<TableRow key={prompt.id}>
<TableCell className="text-xs md:text-sm whitespace-nowrap tabular-nums">
{formatarDataCriacao(prompt.created_at)}
</TableCell>
<TableCell className="font-medium text-xs md:text-sm">{prompt.titulo}</TableCell>
<TableCell className="text-xs md:text-sm">{prompt.area}</TableCell>
<TableCell>
@@ -364,6 +380,12 @@ export const PromptsView = () => {
</DialogHeader>
{selectedPrompt && (
<div className="space-y-4 overflow-y-auto flex-1 min-h-0 p-3">
{selectedPrompt.created_at?.trim() ? (
<div>
<Label className="text-muted-foreground">Data de criação</Label>
<p className="mt-1 text-sm font-medium tabular-nums">{formatarDataCriacao(selectedPrompt.created_at)}</p>
</div>
) : null}
<div>
<Label className="text-muted-foreground">Título</Label>
<p className="font-medium mt-1">{selectedPrompt.titulo}</p>