Files
Investidor-V2/resources/js/components/partnership-publication-summary.tsx
T

86 lines
3.7 KiB
TypeScript

import { Link } from '@inertiajs/react';
import {
publicationHistoryActions,
type PublicationHistorySummary,
} from '@/lib/partnership-history';
import { labels } from '@/pages/partnerships/shared';
const status = (value: string | null) =>
value === null
? 'Estado não registado ou reservado'
: (labels[value] ?? 'Estado não identificado no registo');
export default function PublicationSummary({
value,
}: {
value: PublicationHistorySummary;
}) {
return (
<section
className="space-y-3 rounded border p-4 break-words"
aria-label="Histórico e decisões"
>
<h2 className="text-xl font-bold">Histórico e decisões</h2>
<p>
Até {value.limit}{' '}
{value.limit === 1
? 'alteração mais recente'
: 'alterações mais recentes'}
. Os nomes são os disponíveis no cadastro actual; as decisões e
motivos são os que ficaram guardados.
</p>
{!value.entries.length ? (
<p>Ainda não existem alterações guardadas para apresentar.</p>
) : (
<ol className="space-y-4">
{value.entries.map((entry, index) => (
<li key={index} className="space-y-1 border-l-2 pl-3">
<p className="font-semibold">
Versão {entry.version ?? 'não registada'} ·{' '}
{entry.restricted
? 'Conteúdo reservado'
: (publicationHistoryActions[
entry.action ?? ''
] ?? 'Alteração registada')}
</p>
{entry.restricted ? (
<p>
Os dados desta alteração não estão
disponíveis para esta conta. Consulte o
histórico para conhecer os limites do
registo.
</p>
) : (
<>
<p>
{entry.actor_name ??
'Autor não registado'}{' '}
·{' '}
{entry.occurred_at ??
'Data não registada'}
</p>
<p>
{status(entry.status_before)} →{' '}
{status(entry.status_after)}
</p>
{entry.reason !== null && (
<p className="whitespace-pre-wrap">
Motivo:{' '}
{entry.reason || 'Não indicado'}
</p>
)}
</>
)}
</li>
))}
</ol>
)}
{value.has_more && (
<p>Existem alterações anteriores no histórico completo.</p>
)}
<Link className="inline-block underline" href={value.href}>
Consultar versões e decisões da publicação
</Link>
</section>
);
}