"use client" import { useQuery } from "convex/react" import { IconMoodSmile, IconStars, IconMessageCircle2 } from "@tabler/icons-react" // @ts-expect-error Convex runtime API lacks TypeScript declarations import { api } from "@/convex/_generated/api" import type { Id } from "@/convex/_generated/dataModel" import { useAuth } from "@/lib/auth-client" import { DEFAULT_TENANT_ID } from "@/lib/constants" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Skeleton } from "@/components/ui/skeleton" import { Badge } from "@/components/ui/badge" function formatScore(value: number | null) { if (value === null) return "—" return value.toFixed(2) } export function CsatReport() { const { session, convexUserId } = useAuth() const tenantId = session?.user.tenantId ?? DEFAULT_TENANT_ID const data = useQuery( api.reports.csatOverview, convexUserId ? { tenantId, viewerId: convexUserId as Id<"users"> } : "skip" ) if (!data) { return (
{Array.from({ length: 3 }).map((_, index) => ( ))}
) } return (
CSAT médio Média das respostas recebidas. {formatScore(data.averageScore)} Total de respostas Avaliações coletadas nos tickets. {data.totalSurveys} Últimas avaliações Até 10 registros mais recentes. {data.recent.length === 0 ? (

Ainda não coletamos nenhuma avaliação.

) : ( data.recent.map((item) => (
#{item.reference} Nota {item.score}
)) )}
Distribuição das notas Frequência de respostas para cada valor na escala de 1 a 5.
    {data.distribution.map((entry) => (
  • Nota {entry.score} {entry.total} respostas
    {data.totalSurveys === 0 ? "0%" : `${((entry.total / data.totalSurveys) * 100).toFixed(0)}%`}
  • ))}
) }