import { useForm } from '@inertiajs/react'; import { useRef } from 'react'; import { Panel, controlClass } from '@/components/procurement'; import { Button } from '@/components/ui/button'; import { date } from '@/types/procurement'; export type ReceiptDocument = { id: number; document_type: string; original_name: string; size: number; sha256: string; uploaded_by: number; created_at: string; }; export default function ReceiptDocuments({ receiptId, ready, canAdd, documents, }: { receiptId: number; ready: boolean; canAdd: boolean; documents: ReceiptDocument[]; }) { const input = useRef(null); const form = useForm<{ operation_key: string; document_type: string; file: File | null; }>({ operation_key: crypto.randomUUID(), document_type: 'delivery_note', file: null, }); const labels: Record = { delivery_note: 'Guia de remessa', quality: 'Evidência de qualidade', other: 'Outro documento', }; return (
{!ready ? (

Anexos ainda indisponíveis nesta instalação.

) : ( <> {documents.length === 0 && (

Sem anexos nesta recepção.

)}
    {documents.map((document) => (
  • {document.original_name}

    {labels[document.document_type]} ·{' '} {Math.ceil(document.size / 1024)} KB · Registado por #{document.uploaded_by} ·{' '} {date(document.created_at)}

    Identificação do ficheiro preservado SHA-256 {document.sha256}
  • ))}
{canAdd && (
Acrescentar evidência
{ event.preventDefault(); form.post( `/recepcoes/${receiptId}/documentos`, { preserveScroll: true, onSuccess: () => { form.setData({ operation_key: crypto.randomUUID(), document_type: 'delivery_note', file: null, }); if (input.current) input.current.value = ''; }, }, ); }} >

Ficheiros idênticos do mesmo tipo são reutilizados. Os documentos anteriores permanecem preservados.

{Object.entries(form.errors).map( ([key, error]) => (

{error}

), )}
)} )} ); }