156 lines
5.9 KiB
TypeScript
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>
|
|
);
|
|
}
|