import type { Route } from './+types/route' import { AlertCircleIcon, CheckCircle2Icon, ClockIcon, CalendarIcon, UserIcon, BanIcon, PlusIcon, EllipsisIcon, RotateCcw } from 'lucide-react' import { Link, useParams } from 'react-router' import { Suspense } from 'react' import { DateTime as LuxonDateTime } from 'luxon' import { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from '@repo/ui/components/ui/empty' import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@repo/ui/components/ui/card' import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@repo/ui/components/ui/breadcrumb' import { Alert, AlertDescription, AlertTitle } from '@repo/ui/components/ui/alert' import { request as req } from '@repo/util/request' import { Skeleton } from '@repo/ui/components/skeleton' import { Await } from 'react-router' import { Abbr } from '@repo/ui/components/abbr' import { Button } from '@repo/ui/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@repo/ui/components/ui/dropdown-menu' import { DateTime } from '@repo/ui/components/datetime' export function meta({}: Route.MetaArgs) { return [{ title: 'Relatório de matrículas' }] } export async function loader({ context, request, params }: Route.LoaderArgs) { const { orgid, id } = params const submission = req({ url: `/orgs/${orgid}/enrollments/submissions/${id}`, context, request }).then((r) => r.json()) return { submission } } export default function Route({ loaderData: { submission } }: Route.ComponentProps) { const { id } = useParams() return ( }>
Matrículas Adicionar matrículas Relatório de matrículas }> {({ enrolled, scheduled, sk, created_by }) => { const succeed = enrolled?.filter( ({ status }) => status === 'success' ) const failed = enrolled?.filter(({ status }) => status === 'fail') return (
Relatório de matrículas Resumo detalhado do processamento das matrículas enviadas. <> {succeed?.length > 0 && ( Matrículas adicionadas com sucesso.
    {succeed.map(({ output }, index) => (
  • {output.user.name} {output.course.name}
  • ))}
)} {failed?.length > 0 && ( Matrículas não processadas.
    {failed.map(({ input_record }, index) => (
  • {input_record.user.name} {input_record.course.name}
  • ))}
Restaurar dados
)} {scheduled?.length && ( Matrículas agendadas. Serão processadas na data definida.
    {scheduled.map( ({ output, input_record, status }, index) => status === 'success' ? (
  • Agendado para{' '} {LuxonDateTime.fromISO( output.scheduled_for, { zone: 'America/Sao_Paulo' } ).toJSDate()} {} {output.user.name} {output.course.name}
  • ) : (
  • Agendado anteriormente {input_record.user.name} {input_record.course.name}
  • ) )}
)}
  • {sk}
  • {created_by.name}
) }}
) } function NotFound() { return ( <> Nenhum relatório aqui Matricule colaboradores de forma rápida e acompanhe seu progresso. ) }