Files
Investidor-V2/resources/js/components/organization-country-reuse.tsx
T

156 lines
5.9 KiB
TypeScript

import { button } from '@/pages/investment/shared';
import { useOrganizationCountryReuse } from '@/lib/organization-country-reuse';
import type {
useInvestmentProfileEditor,
OrganizationRecord,
} from '@/lib/investment-profile-editor';
export default function OrganizationCountryReuse({
companyId,
actorId,
organizations,
editor,
reportDirty,
}: {
companyId: string;
actorId: number;
organizations: OrganizationRecord[];
editor: ReturnType<typeof useInvestmentProfileEditor>;
reportDirty: (id: string, dirty: boolean) => void;
}) {
const reuse = useOrganizationCountryReuse(
companyId,
actorId,
editor,
reportDirty,
organizations,
);
const preview = reuse.preview;
const sources = organizations.filter((source) => source.country);
if (
!organizations.length &&
!preview &&
!reuse.uncertain &&
!reuse.error &&
!reuse.notice
)
return null;
return (
<section
aria-label="Reutilizar país de uma organização"
className="mt-4 space-y-3 rounded border p-3"
>
<h4 className="font-bold">Reutilizar o país de constituição</h4>
<p>
Escolha uma organização representada para consultar o país
guardado. A confirmação altera esta declaração; manifestações
anteriores conservam os seus valores.
</p>
{editor.dirty && !editor.externalBusy && (
<p>
Guarde ou confirme a preparação da declaração antes de
reutilizar o país.
</p>
)}
{!reuse.uncertain && (
<div className="flex flex-wrap gap-3">
{sources.map((source) => (
<button
key={source.id}
type="button"
className={button}
disabled={
reuse.busy ||
reuse.reading ||
editor.dirty ||
editor.blocked ||
editor.stale
}
onClick={() => void reuse.inspect(source.id)}
>
Consultar país de {source.name}
</button>
))}
</div>
)}
{!sources.length && !reuse.uncertain && (
<p>
Sem país guardado nas organizações representadas nesta
página.
</p>
)}
{reuse.error && <p role="alert">{reuse.error}</p>}
{reuse.notice && <p role="status">{reuse.notice}</p>}
{reuse.sourceChanged && (
<p role="alert">
A organização foi alterada. Consulte novamente o país antes
de confirmar.
</p>
)}
{preview && (
<section
aria-label="Confirmar reutilização do país"
className="space-y-3"
>
<p>
Declaração: versão {preview.companyVersion}; país
actual: {preview.companyCountry || 'Não informado'}.
</p>
<p>
País a reutilizar: {preview.country}, de{' '}
{preview.organizationName}, versão{' '}
{preview.organizationVersion}.
</p>
<p>
Fonte ou referência:{' '}
{preview.reference ||
'Não informada no registo guardado'}
.
</p>
<div className="flex flex-wrap gap-3">
<button
type="button"
className={button}
disabled={
reuse.busy ||
reuse.reading ||
reuse.blocked ||
reuse.sourceChanged
}
onClick={() => void reuse.confirm()}
>
{reuse.uncertain
? 'Repetir a mesma reutilização'
: 'Confirmar reutilização do país'}
</button>
{reuse.uncertain ? (
<button
type="button"
className={button}
disabled={reuse.busy || reuse.reading}
onClick={() =>
void reuse.inspect(
reuse.pendingOrganizationId ??
preview.organizationId,
)
}
>
Consultar estado da reutilização
</button>
) : (
<button
type="button"
className={button}
disabled={reuse.busy || reuse.reading}
onClick={reuse.cancel}
>
Cancelar preparação da reutilização
</button>
)}
</div>
</section>
)}
</section>
);
}