feat: simplify regional end user workbench
This commit is contained in:
@@ -28,21 +28,21 @@ function countReferenceDatasets(datasets: DatasetCreateResponse[]): number {
|
||||
|
||||
function nextAction(items: StatusItem[]): string {
|
||||
if (!items.some((item) => item.key === 'project' && item.state === 'ready')) {
|
||||
return 'Create or open a project.'
|
||||
return 'De regionale werkruimte kon niet worden geopend.'
|
||||
}
|
||||
if (!items.some((item) => item.key === 'area' && item.state === 'ready')) {
|
||||
return 'Create an AOI or select an area with geometry.'
|
||||
return 'Kies een gemeente of de volledige regio.'
|
||||
}
|
||||
if (!items.some((item) => item.key === 'datasets' && item.state === 'ready')) {
|
||||
return 'Upload a vector or raster dataset, or load the offline demo workflow.'
|
||||
return 'Laad een kaartlaag of luchtbeeld in.'
|
||||
}
|
||||
if (!items.some((item) => item.key === 'qa' && item.state === 'ready')) {
|
||||
return 'Run QA/QC against a reference dataset when candidate and reference data are available.'
|
||||
return 'Kaart en bronnen zijn klaar. Kwaliteitscontrole is beschikbaar zodra er een analyseresultaat is.'
|
||||
}
|
||||
if (!items.some((item) => item.key === 'exports' && item.state === 'ready')) {
|
||||
return 'Create a metadata, report or GeoJSON export for handoff.'
|
||||
return 'De analyse is klaar; maak eventueel een rapport of download.'
|
||||
}
|
||||
return 'Workbench has the core V1 loop populated.'
|
||||
return 'Alle onderdelen van de werkruimte bevatten bewaarde resultaten.'
|
||||
}
|
||||
|
||||
export function WorkbenchStatusStrip({
|
||||
@@ -64,63 +64,64 @@ export function WorkbenchStatusStrip({
|
||||
const items: StatusItem[] = [
|
||||
{
|
||||
key: 'project',
|
||||
label: 'Project',
|
||||
value: selectedProject ? selectedProject.name : 'No project',
|
||||
detail: selectedProject ? selectedProject.region : 'Open or create a project',
|
||||
label: 'Werkruimte',
|
||||
value: selectedProject ? selectedProject.name : 'Geen werkruimte',
|
||||
detail: selectedProject ? selectedProject.region : 'Niet geladen',
|
||||
state: selectedProject ? 'ready' : 'waiting',
|
||||
},
|
||||
{
|
||||
key: 'area',
|
||||
label: 'AOI',
|
||||
value: `${areas.length} area${areas.length === 1 ? '' : 's'}`,
|
||||
detail: selectedAreaHasGeometry ? 'selected area has map geometry' : 'no selected map geometry',
|
||||
label: 'Gebieden',
|
||||
value: `${areas.length} beschikbaar`,
|
||||
detail: selectedAreaHasGeometry ? 'Kaartgrens beschikbaar' : 'Geen kaartgrens geselecteerd',
|
||||
state: selectedAreaHasGeometry ? 'ready' : areas.length > 0 ? 'warning' : 'waiting',
|
||||
},
|
||||
{
|
||||
key: 'datasets',
|
||||
label: 'Datasets',
|
||||
value: `${readyDatasets}/${datasets.length} ready`,
|
||||
detail: `${vectorDatasets} vector, ${rasterDatasets} raster, ${referenceDatasets} reference`,
|
||||
label: 'Bronnen',
|
||||
value: `${readyDatasets}/${datasets.length} beschikbaar`,
|
||||
detail: `${vectorDatasets} kaartlagen, ${rasterDatasets} luchtbeelden, ${referenceDatasets} officiële referenties`,
|
||||
state: datasets.length === 0 ? 'waiting' : readyDatasets === datasets.length ? 'ready' : 'warning',
|
||||
},
|
||||
{
|
||||
key: 'map',
|
||||
label: 'Map',
|
||||
value: `${activeLayerFeatureCount} feature${activeLayerFeatureCount === 1 ? '' : 's'}`,
|
||||
detail: selectedAreaHasGeometry ? 'AOI overlay available' : 'AOI overlay missing',
|
||||
label: 'Kaart',
|
||||
value: `${activeLayerFeatureCount} zichtbare objecten`,
|
||||
detail: selectedAreaHasGeometry ? 'Gebiedsgrens beschikbaar' : 'Gebiedsgrens ontbreekt',
|
||||
state: selectedAreaHasGeometry || activeLayerFeatureCount > 0 ? 'ready' : 'waiting',
|
||||
},
|
||||
{
|
||||
key: 'qa',
|
||||
label: 'QA/QC',
|
||||
value: `${qualityChecks.length} check${qualityChecks.length === 1 ? '' : 's'}`,
|
||||
detail: latestQualityCheck ? `${latestQualityCheck.check_type}: ${latestQualityCheck.status}` : 'no persisted QA/QC result',
|
||||
label: 'Kwaliteit',
|
||||
value: `${qualityChecks.length} controles`,
|
||||
detail: latestQualityCheck ? `${latestQualityCheck.check_type}: ${latestQualityCheck.status}` : 'Nog geen controle uitgevoerd',
|
||||
state: qualityChecks.length > 0 ? 'ready' : 'waiting',
|
||||
},
|
||||
{
|
||||
key: 'exports',
|
||||
label: 'Exports',
|
||||
value: `${exports.length} export${exports.length === 1 ? '' : 's'}`,
|
||||
detail: latestExport ? `${latestExport.export_type}: ${latestExport.status}` : 'no handoff artifact yet',
|
||||
label: 'Downloads',
|
||||
value: `${exports.length} bestanden`,
|
||||
detail: latestExport ? `${latestExport.export_type}: ${latestExport.status}` : 'Nog geen bestand gemaakt',
|
||||
state: exports.length > 0 ? 'ready' : 'waiting',
|
||||
},
|
||||
]
|
||||
const readyCount = items.filter((item) => item.state === 'ready').length
|
||||
const coreReady = items.slice(0, 4).every((item) => item.state === 'ready')
|
||||
|
||||
return (
|
||||
<section className="workbench-status-strip" aria-label="Workbench readiness">
|
||||
<div className="status-strip-header">
|
||||
<div>
|
||||
<p className="eyebrow">V1 readiness</p>
|
||||
<p className="eyebrow">Platformstatus</p>
|
||||
<h2>
|
||||
<span className="sr-only">Workbench status: </span>
|
||||
{readyCount === items.length ? 'Mol workbench is ready' : 'Mol workbench needs attention'}
|
||||
{coreReady ? 'Kaartwerkruimte is gebruiksklaar' : 'Kaartwerkruimte vraagt aandacht'}
|
||||
</h2>
|
||||
<p className="status-next-action">{nextAction(items)}</p>
|
||||
</div>
|
||||
<div className="status-readiness" aria-label={`${readyCount} of ${items.length} workbench stages ready`}>
|
||||
<strong>{readyCount}/{items.length}</strong>
|
||||
<span>stages ready</span>
|
||||
<span>onderdelen gereed</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="status-strip-grid">
|
||||
|
||||
Reference in New Issue
Block a user