import type { Route } from './+types/route' import { ErrorMessage } from '@hookform/error-message' import { zodResolver } from '@hookform/resolvers/zod' import { CircleQuestionMarkIcon, CopyIcon, PlusIcon, Trash2Icon } from 'lucide-react' import { Fragment, useMemo } from 'react' import { Controller, useFieldArray, useForm } from 'react-hook-form' import { Link, redirect, useParams } from 'react-router' import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@repo/ui/components/ui/breadcrumb' import { Button } from '@repo/ui/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@repo/ui/components/ui/card' import { HoverCard, HoverCardContent, HoverCardTrigger } from '@repo/ui/components/ui/hover-card' import { Kbd } from '@repo/ui/components/ui/kbd' import { request as req } from '@repo/util/request' import { workspaceContext } from '@/middleware/workspace' import { CoursePicker } from '../_.$orgid.enrollments.add/course-picker' import { formSchema, MAX_ITEMS, type Course, type User } from '../_.$orgid.enrollments.add/data' import { Cell, DuplicateRowMultipleTimes, emptyRow } from '../_.$orgid.enrollments.add/route' import { ScheduledForInput } from '../_.$orgid.enrollments.add/scheduled-for' import { UserPicker } from '../_.$orgid.enrollments.add/user-picker' export function meta({}: Route.MetaArgs) { return [{ title: 'Adicionar matrícula' }] } type Seat = { id: string pk: string course: Course } export async function loader({ request, params, context }: Route.LoaderArgs) { const { subscription } = context.get(workspaceContext) // If there's subscription for the org, redirect it if (subscription) { throw redirect('../enrollments/add') } const seats = await req({ url: `/orgs/${params.orgid}/seats`, request, context }) .then((r) => r.json() as any) .then(({ items }) => items as Seat[]) return { seats } } export default function Route({ loaderData: { seats } }: Route.ComponentProps) { const { orgid } = useParams() const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { enrollments: [emptyRow] } }) const { formState, control, handleSubmit, getValues, setValue } = form const { fields, insert, remove, append } = useFieldArray({ control, name: 'enrollments' }) const courses = useMemo( () => Promise.resolve({ hits: Array.from( seats .reduce((map, { course }) => { const existing = map.get(course.id) if (existing) { existing.quantity += 1 } else { map.set(course.id, { ...course, metadata__unit_price: 1, quantity: 1 }) } return map }, new Map()) .values() ) }), [seats] ) console.log(seats) const onSearch = async (search: string) => { const params = new URLSearchParams({ q: search }) const r = await fetch(`/${orgid}/users.json?${params.toString()}`) const { hits } = (await r.json()) as { hits: User[] } return hits } const duplicateRow = (index: number, times: number = 1) => { if (fields.length + times > MAX_ITEMS) { return null } const { user, ...rest } = getValues(`enrollments.${index}`) Array.from({ length: times }, (_, i) => { // @ts-ignore insert(index + 1 + i, rest) }) } return (
Escolha a data em que o colaborador será matriculado no curso.
Você poderá acompanhar as matrículas em{' '} Agendamentos
{message}
)} />{message}
)} />