215 lines
9.9 KiB
TypeScript
215 lines
9.9 KiB
TypeScript
import { Link } from '@inertiajs/react';
|
|
import { Frame, card, button } from '@/pages/investment/shared';
|
|
import { states } from './shared';
|
|
|
|
type Access = {
|
|
procurement?: { index: string; create: string };
|
|
opportunities?: {
|
|
index: string;
|
|
create: string | null;
|
|
profileWorkflow: boolean;
|
|
};
|
|
documents?: { index: string; edit: boolean };
|
|
};
|
|
export default function ContentHub({
|
|
access,
|
|
counts,
|
|
}: {
|
|
access: Access;
|
|
counts: Record<string, Record<string, number>>;
|
|
}) {
|
|
return (
|
|
<Frame title="Gestão de conteúdos e oportunidades">
|
|
<p>
|
|
Use os cadastros e a biblioteca existentes. Guardar um rascunho,
|
|
analisar um ficheiro e publicar são operações distintas. Cada
|
|
acção respeita a sua autorização actual.
|
|
</p>
|
|
<div className="grid gap-4 md:grid-cols-2">
|
|
{access.procurement && (
|
|
<section className={card}>
|
|
<h2 className="text-xl font-semibold">
|
|
Concursos e anúncios
|
|
</h2>
|
|
<p>
|
|
Cadastre o procedimento e os lotes, guarde e
|
|
recupere a preparação, reveja a prévia e publique os
|
|
actos autorizados. Esclarecimentos, prorrogações,
|
|
resultados e cancelamentos conservam versões e
|
|
histórico. Divulgação de oportunidade e abertura de
|
|
concurso são operações distintas.
|
|
</p>
|
|
<Link
|
|
className={button}
|
|
href={access.procurement.create}
|
|
>
|
|
Novo concurso/anúncio
|
|
</Link>
|
|
<Link
|
|
className="block underline"
|
|
href={access.procurement.index}
|
|
>
|
|
Gerir concursos e anúncios
|
|
</Link>
|
|
<Link className="block underline" href="/concursos">
|
|
Catálogo público
|
|
</Link>
|
|
</section>
|
|
)}
|
|
{access.opportunities && (
|
|
<section className={card}>
|
|
<h2 className="text-xl font-semibold">Oportunidades</h2>
|
|
<p>
|
|
Escolha a modalidade, o sector e a localização;
|
|
preencha, guarde o rascunho e siga as acções de
|
|
submissão, revisão e publicação disponíveis no seu
|
|
perfil.
|
|
</p>
|
|
<p>
|
|
Sector económico e modalidade são escolhas
|
|
distintas. Pode guardar preparação incompleta; o
|
|
editor identifica os campos e variantes ainda sem
|
|
suporte de submissão.
|
|
</p>
|
|
{access.opportunities.create && (
|
|
<Link
|
|
className={button}
|
|
href={access.opportunities.create}
|
|
>
|
|
Nova oportunidade
|
|
</Link>
|
|
)}
|
|
<Link
|
|
className="block underline"
|
|
href={access.opportunities.index}
|
|
>
|
|
Gerir oportunidades e histórico
|
|
</Link>
|
|
{access.opportunities.profileWorkflow && (
|
|
<Link
|
|
className="block underline"
|
|
href="/minhas-oportunidades/lotes/agronegocio"
|
|
>
|
|
Rever o lote das 34 oportunidades de Agronegócio
|
|
</Link>
|
|
)}
|
|
<p>
|
|
Para divulgar um resumo ainda em preparação, abra a
|
|
ficha e escolha{' '}
|
|
<strong>Divulgação promocional</strong>: prepare o
|
|
texto público, reveja a prévia e confirme divulgar,
|
|
actualizar ou retirar. Esta operação não conclui a
|
|
validação do investimento.
|
|
</p>
|
|
<ul>
|
|
{Object.entries(counts.opportunities ?? {}).map(
|
|
([state, total]) => (
|
|
<li key={state}>
|
|
<Link
|
|
className="underline"
|
|
href={`${access.opportunities!.index}?status=${state}`}
|
|
>
|
|
{states[state] ?? state}: {total}
|
|
</Link>
|
|
</li>
|
|
),
|
|
)}
|
|
</ul>
|
|
<p className="text-sm">
|
|
As etapas e a independência já definidas para
|
|
oportunidades mantêm-se. Esta entrada não atribui
|
|
autorização para rever ou publicar.
|
|
</p>
|
|
{!access.opportunities.profileWorkflow && (
|
|
<p>
|
|
O seu acesso actual abre o cadastro legado de
|
|
rascunhos. A submissão, revisão e publicação de
|
|
novas oportunidades utilizam os perfis
|
|
operacionais já existentes; a administração de
|
|
conteúdos não substitui essa designação. Esta
|
|
entrada não apresenta o rascunho legado como
|
|
percurso completo de publicação.
|
|
</p>
|
|
)}
|
|
</section>
|
|
)}
|
|
{access.documents && (
|
|
<section className={card}>
|
|
<h2 className="text-xl font-semibold">
|
|
Documentos e legislação
|
|
</h2>
|
|
<p>
|
|
Carregue o original ou reutilize um ficheiro
|
|
existente; acompanhe a análise, complete os
|
|
metadados e associações e defina o acesso. Depois
|
|
publique explicitamente, se autorizado.
|
|
</p>
|
|
<div className="flex flex-wrap gap-3">
|
|
<Link
|
|
className={button}
|
|
href={`${access.documents.index}?intent=document#receber`}
|
|
>
|
|
Novo documento
|
|
</Link>
|
|
{access.documents.edit && (
|
|
<Link
|
|
className={button}
|
|
href={`${access.documents.index}?intent=legislation#receber`}
|
|
>
|
|
Nova legislação
|
|
</Link>
|
|
)}
|
|
</div>
|
|
<Link
|
|
className="block underline"
|
|
href={`${access.documents.index}#conteudos`}
|
|
>
|
|
Gerir conteúdos, versões e histórico
|
|
</Link>
|
|
{!access.documents.edit && (
|
|
<p>
|
|
O seu acesso permite carregar e analisar
|
|
ficheiros próprios; não inclui cadastro
|
|
editorial nem publicação.
|
|
</p>
|
|
)}
|
|
<p>
|
|
Publicados: {counts.documents?.published ?? 0} · Não
|
|
publicados: {counts.documents?.unpublished ?? 0}. A
|
|
lista distingue rascunhos de conteúdos retirados
|
|
através do histórico.
|
|
</p>
|
|
<p className="text-sm">
|
|
Publicar legislação permite consultá-la. Não a
|
|
activa como regra executável no simulador.
|
|
</p>
|
|
</section>
|
|
)}
|
|
</div>
|
|
<section className={card}>
|
|
<h2 className="font-semibold">
|
|
Como concluir sem apoio técnico
|
|
</h2>
|
|
<ol className="list-decimal space-y-2 pl-5">
|
|
<li>
|
|
Abra a acção pretendida e use os campos do editor
|
|
existente.
|
|
</li>
|
|
<li>
|
|
Guarde a preparação. As mensagens indicam o estado e o
|
|
que precisa de corrigir.
|
|
</li>
|
|
<li>
|
|
Reabra pela gestão, pesquise o título e consulte o
|
|
histórico.
|
|
</li>
|
|
<li>
|
|
Use as acções autorizadas de publicação ou retirada. Os
|
|
originais e as revisões são preservados.
|
|
</li>
|
|
</ol>
|
|
</section>
|
|
</Frame>
|
|
);
|
|
}
|