import { Head, router, usePage } from '@inertiajs/react'; import { Check, CircleHelp, Search, X } from 'lucide-react'; import type { FormEvent } from 'react'; import { useState } from 'react'; import InputError from '@/components/input-error'; import { PageHeading } from '@/components/page-heading'; import { ReservationStatus } from '@/components/reservation-status'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import type { Paginated, Reservation } from '@/types'; type ApprovalReservation = Reservation & { requester: { name: string; email: string; department: string | null; }; }; export default function ApprovalsIndex({ reservations, filters, }: { reservations: Paginated; filters: { search?: string }; }) { const [search, setSearch] = useState(filters.search ?? ''); const [comments, setComments] = useState>({}); const { errors } = usePage().props; function submitSearch(event: FormEvent) { event.preventDefault(); router.get('/aprovacoes', { search: search || undefined }); } function decide(reservation: ApprovalReservation, action: string) { router.post( `/aprovacoes/${reservation.uuid}/${action}`, { comment: comments[reservation.id] ?? '' }, { preserveScroll: true }, ); } return ( <>
setSearch(event.target.value)} placeholder="Referência ou requisitante…" className="pl-9" />
{reservations.data.map((reservation) => (
{reservation.reference}

{reservation.requester.name} ·{' '} {reservation.requester.department ?? reservation.requester.email}

Equipamentos

{reservation.items .map((item) => item.asset.name) .join(', ')}

Período

{formatPeriod(reservation)}

{reservation.purpose}

{reservation.status === 'pending_approval' ? ( <>