diff --git a/package.json b/package.json index b7bd831..d884a40 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "elo", - "version": "1.43.0", + "version": "1.43.1", "private": true, "type": "module", "scripts": { diff --git a/src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx b/src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx index 81b5767..092fcd9 100644 --- a/src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx +++ b/src/app/(authenticated)/forms/[id]/responses/[responseId]/page.tsx @@ -4,13 +4,14 @@ import { formatDistanceToNow, format } from "date-fns" import { ptBR } from "date-fns/locale" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Badge } from "@/components/ui/badge" -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { StatusUpdateButton } from "@/components/forms/status-update-button" import { ResponseDetails } from "@/components/forms/response-details" import { EditResponseButton } from "@/components/forms/edit-response-button" import { type Field } from "@/lib/form-types" import { DashboardShell } from "@/components/ui/dashboard-shell" -import { FormsSubPageShell } from "@/components/forms/v2/forms-sub-page-shell" +import { FormsSubPageShell, FormsPanel } from "@/components/forms/v2/forms-sub-page-shell" +import { FormSectionCard } from "@/components/forms/v2/form-section-card" +import { FileText } from "lucide-react" import { canAccessForm } from "@/lib/access-control" import { formatFormResponseNumber } from "@/lib/utils/form-response-number" @@ -112,51 +113,47 @@ export default async function ResponseDetailsPage({ params }: ResponseDetailsPag } description={`Formulário: ${response.form.title}`} > -
- - -
-
- - - - {response.user.firstName?.charAt(0) ?? response.user.email.charAt(0).toUpperCase()} - - -
- - {response.user.firstName - ? `${response.user.firstName} ${response.user.lastName ?? ""}` - : response.user.email} - - {response.user.email} -
-
-
- {getStatusBadge(response.status)} - {response.statusComment && ( -

{response.statusComment}

- )} +
+ +
+
+ + + + {response.user.firstName?.charAt(0) ?? response.user.email.charAt(0).toUpperCase()} + + +
+

+ {response.user.firstName + ? `${response.user.firstName} ${response.user.lastName ?? ""}` + : response.user.email} +

+

{response.user.email}

- - -
-
-

Data de envio:

-

- {format(new Date(response.createdAt), "dd/MM/yyyy 'às' HH:mm", { locale: ptBR })} -

-
-
-

Última atualização:

-

- {formatDistanceToNow(new Date(response.updatedAt), { addSuffix: true, locale: ptBR })} -

-
+
+ {getStatusBadge(response.status)} + {response.statusComment && ( +

{response.statusComment}

+ )} +
+
+
+
+

Data de envio:

+

+ {format(new Date(response.createdAt), "dd/MM/yyyy 'às' HH:mm", { locale: ptBR })} +

- - +
+

Última atualização:

+

+ {formatDistanceToNow(new Date(response.updatedAt), { addSuffix: true, locale: ptBR })} +

+
+
+
- - - Respostas - Detalhes das respostas enviadas pelo usuário - - - []} - formFields={response.form.fields as unknown as Field[]} - /> - - + + []} + formFields={response.form.fields as unknown as Field[]} + /> +
diff --git a/src/components/forms/form-response.tsx b/src/components/forms/form-response.tsx index 660af94..02a4d85 100644 --- a/src/components/forms/form-response.tsx +++ b/src/components/forms/form-response.tsx @@ -15,7 +15,7 @@ import { z } from "zod" import { api } from "@/trpc/react" import { useRouter } from "next/navigation" import { toast } from "sonner" -import { CheckCircle2, Send } from "lucide-react" +import { CheckCircle2, Send, Lock } from "lucide-react" import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" // Email de criação de solicitação agora é enviado no router (form-response.ts) import ReactMarkdown from "react-markdown" @@ -356,16 +356,22 @@ export function FormResponseComponent({ )} {field.type === "dynamic" && ( -
-

- {watch(field.name) ? ( - watch(field.name) - ) : ( - - Coletando seu {field.dynamicType === "user_name" ? "nome" : "setor"}... - - )} -

+
+
+

+ {watch(field.name) ? ( + watch(field.name) + ) : ( + + Coletando seu {field.dynamicType === "user_name" ? "nome" : "setor"}... + + )} +

+ + + Preenchido automaticamente + +
)} diff --git a/src/components/forms/responses-list.tsx b/src/components/forms/responses-list.tsx index 250afd1..cb71289 100644 --- a/src/components/forms/responses-list.tsx +++ b/src/components/forms/responses-list.tsx @@ -2,7 +2,7 @@ import { useState } from "react" import { api } from "@/trpc/react" -import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" +import { FormsPanel } from "@/components/forms/v2/forms-sub-page-shell" import { Button } from "@/components/ui/button" import { ChevronLeft, ChevronRight, Eye, FileText, Loader2, MessageSquare } from "lucide-react" import Link from "next/link" @@ -196,8 +196,8 @@ export function ResponsesList({ formId }: { formId: string }) {
{responses.map((response) => ( - - + +
@@ -207,12 +207,12 @@ export function ResponsesList({ formId }: { formId: string }) {
- +

{response.user.firstName ? `${response.user.firstName} ${response.user.lastName ?? ""}` : response.user.email} - - +

+
Enviado {formatDistanceToNow(new Date(response.createdAt), { addSuffix: true, locale: ptBR })}
{/* Campos personalizados selecionados */} {(form?.fields as unknown as Field[] | undefined)?.filter(f => f.showInList).map(field => ( @@ -220,8 +220,8 @@ export function ResponsesList({ formId }: { formId: string }) { {field.label}: {formatResponseValue(response.responses[0]?.[field.name])}
))} - - +
+
{!!(response.FormResponseChat || response.formResponseChat) ? ( (response.FormResponseChat?.length ?? 0) > 0 || (response.formResponseChat?.length ?? 0) > 0 ? (
@@ -264,7 +264,7 @@ export function ResponsesList({ formId }: { formId: string }) {

Carregando mensagens...

)} - +
@@ -274,8 +274,8 @@ export function ResponsesList({ formId }: { formId: string }) { )}
-
- < CardFooter className="flex flex-col md:flex-row gap-y-2 items-end justify-between pt-3 border-t" > +
+
+ )) }