73 lines
2.7 KiB
TypeScript
73 lines
2.7 KiB
TypeScript
import { forceLabels, forces } from '@/lib/cluster-competitiveness';
|
|
import type { CompetitivenessDraft } from '@/lib/cluster-competitiveness';
|
|
|
|
export type ApprovedCompetitiveness = {
|
|
draft: CompetitivenessDraft;
|
|
version: number;
|
|
at: string;
|
|
};
|
|
const pressures = {
|
|
low: 'Baixa',
|
|
medium: 'Média',
|
|
high: 'Alta',
|
|
'': 'Indeterminada',
|
|
};
|
|
|
|
export default function ClusterCompetitivenessPublic({
|
|
analysis,
|
|
}: {
|
|
analysis: ApprovedCompetitiveness;
|
|
}) {
|
|
return (
|
|
<section
|
|
className="space-y-3 rounded border p-4"
|
|
aria-label="Competitividade aprovada"
|
|
>
|
|
<h2 className="text-xl font-semibold">
|
|
Competitividade — cinco forças de Porter
|
|
</h2>
|
|
<p>
|
|
{analysis.draft.sector} · {analysis.draft.region} · Versão
|
|
aprovada {analysis.version} · {analysis.at}
|
|
</p>
|
|
<p>
|
|
Apreciação qualitativa fundamentada nas fontes e períodos
|
|
indicados. Não representa garantia de procura ou viabilidade.
|
|
</p>
|
|
{forces.map((force) => {
|
|
const row = analysis.draft.forces[force];
|
|
return (
|
|
<details key={force} className="rounded border p-3">
|
|
<summary>
|
|
{forceLabels[force]} · Pressão{' '}
|
|
{pressures[row.pressure]}
|
|
</summary>
|
|
<dl className="space-y-2">
|
|
{(
|
|
[
|
|
['evidence', 'Evidências'],
|
|
['source', 'Fonte e referência'],
|
|
['period', 'Período'],
|
|
['rationale', 'Justificação'],
|
|
['limitations', 'Limitações'],
|
|
[
|
|
'opportunity',
|
|
'Oportunidade e fundamento',
|
|
],
|
|
] as const
|
|
).map(([field, label]) => (
|
|
<div key={field}>
|
|
<dt className="font-semibold">{label}</dt>
|
|
<dd className="whitespace-pre-wrap">
|
|
{row[field]}
|
|
</dd>
|
|
</div>
|
|
))}
|
|
</dl>
|
|
</details>
|
|
);
|
|
})}
|
|
</section>
|
|
);
|
|
}
|