Complete GeoIntel visual system and portfolio case study
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s

This commit is contained in:
Jens
2026-07-28 11:10:35 +02:00
parent 61e2505940
commit 0cd84fa5c5
19 changed files with 784 additions and 6 deletions
@@ -116,6 +116,9 @@ export function OverviewWorkspace({
target: 'exports',
},
]
const readyStepCount = steps.filter((step) => step.ready).length
const latestQualityCheck = qualityChecks[0] ?? null
const latestExport = exports[0] ?? null
return (
<div className="workspace-stack">
@@ -128,6 +131,40 @@ export function OverviewWorkspace({
exportCount={exports.length}
onOpenWorkspace={onOpenWorkspace}
/>
<section className="overview-command-center" aria-labelledby="overview-command-title">
<div className="overview-command-heading">
<div>
<p className="eyebrow">Projectbriefing</p>
<h2 id="overview-command-title">Wat vraagt nu aandacht?</h2>
</div>
<button type="button" className="secondary-action" onClick={() => onOpenWorkspace(recommendedTarget)}>
Volgende stap openen
</button>
</div>
<div className="overview-command-grid">
<article className="overview-command-card overview-command-card-progress">
<span>Voortgang</span>
<strong>{readyStepCount} / {steps.length}</strong>
<p>{workflowComplete ? 'De volledige keten is afgerond.' : steps.find((step) => !step.ready)?.detail}</p>
<div aria-hidden="true"><i style={{ width: `${(readyStepCount / steps.length) * 100}%` }} /></div>
</article>
<button type="button" className="overview-command-card" onClick={() => onOpenWorkspace('analysis')}>
<span>Laatste kwaliteitsbewijs</span>
<strong>{latestQualityCheck?.score != null ? latestQualityCheck.score.toFixed(3) : 'Nog geen score'}</strong>
<p>{latestQualityCheck ? `${latestQualityCheck.check_type.replace(/_/g, ' ')} · ${latestQualityCheck.status}` : 'Voer een controle uit wanneer kandidaat- en referentiedata klaarstaan.'}</p>
</button>
<button type="button" className="overview-command-card" onClick={() => onOpenWorkspace('data')}>
<span>Brondekking</span>
<strong>{datasets.length} bronnen</strong>
<p>{areas.length > 0 ? `Beschikbaar voor ${areas.length} ${areas.length === 1 ? 'gebied' : 'gebieden'}.` : 'Definieer eerst een werkgebied.'}</p>
</button>
<button type="button" className="overview-command-card" onClick={() => onOpenWorkspace('exports')}>
<span>Laatste resultaat</span>
<strong>{latestExport ? latestExport.status : 'Nog niet bewaard'}</strong>
<p>{latestExport ? latestExport.export_type.replace(/_/g, ' ') : 'Een gecontroleerde export verschijnt hier als volgende overdraagbare versie.'}</p>
</button>
</div>
</section>
<WorkbenchStatusStrip
selectedProject={selectedProject}
areas={areas}