Add QA evidence map overlay
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled

This commit is contained in:
Codex
2026-06-25 03:17:49 +02:00
parent 7a54d01993
commit b9674a0e42
16 changed files with 778 additions and 4 deletions
@@ -17,6 +17,9 @@ interface QualityResultsPanelProps {
candidateDatasets: DatasetCreateResponse[]
referenceDatasets: DatasetCreateResponse[]
onRefresh: () => void
onOpenEvidenceMap?: (qualityCheckId: string) => void
evidenceLoading?: boolean
evidenceError?: string | null
}
function qualityMetricLabel(metricKey: string): string {
@@ -95,6 +98,9 @@ export function QualityResultsPanel({
candidateDatasets,
referenceDatasets,
onRefresh,
onOpenEvidenceMap,
evidenceLoading = false,
evidenceError = null,
}: QualityResultsPanelProps): JSX.Element {
const [showAllQualityChecks, setShowAllQualityChecks] = useState(false)
const [qualityStatusFilter, setQualityStatusFilter] = useState('all')
@@ -204,7 +210,21 @@ export function QualityResultsPanel({
>
Inspect latest check
</button>
<button
type="button"
className="secondary-action"
onClick={() => latestCheck?.id && onOpenEvidenceMap?.(latestCheck.id)}
disabled={!latestCheck || evidenceLoading || !onOpenEvidenceMap}
>
{evidenceLoading ? 'Loading map evidence...' : 'Show latest on map'}
</button>
</div>
{evidenceError ? (
<div className="result-state result-state-error">
<strong>QA/QC evidence overlay could not be loaded.</strong>
<p>{evidenceError}</p>
</div>
) : null}
{selectedQualityCheck ? (
<>
<div className="quality-drilldown-grid">
@@ -254,6 +274,14 @@ export function QualityResultsPanel({
<span>Map evidence handoff</span>
<strong>{selectedCandidateName} / {selectedReferenceName}</strong>
<p>Use the candidate and reference datasets as map layers for spatial review.</p>
<button
type="button"
className="secondary-action"
onClick={() => onOpenEvidenceMap?.(selectedQualityCheck.id)}
disabled={evidenceLoading || !onOpenEvidenceMap}
>
{evidenceLoading ? 'Loading overlay...' : 'Show evidence overlay'}
</button>
</div>
</div>
<div className="quality-feature-evidence-grid" aria-label="Feature-level QA/QC evidence">
@@ -440,6 +468,14 @@ export function QualityResultsPanel({
<button type="button" className="secondary-action" onClick={() => setSelectedQualityCheckId(check.id)}>
Inspect check
</button>
<button
type="button"
className="secondary-action"
onClick={() => onOpenEvidenceMap?.(check.id)}
disabled={evidenceLoading || !onOpenEvidenceMap}
>
Show evidence on map
</button>
</div>
<div className="quality-score-row">
<div>