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
+33 -1
View File
@@ -1,6 +1,6 @@
import { useState } from 'react'
import { qaApi } from '../services/api'
import type { JobRead, QaComparisonRequest, QaComparisonResult, QualityCheckRead } from '../types'
import type { JobRead, QaComparisonRequest, QaComparisonResult, QualityCheckRead, QualityEvidenceGeoJsonResponse } from '../types'
import { formatError } from '../lib/formatError'
interface QualityWorkflowOptions {
@@ -18,6 +18,9 @@ export function useQualityWorkflow({ selectedProjectId, loadProjectData }: Quali
const [qaError, setQaError] = useState<string | null>(null)
const [qualityChecks, setQualityChecks] = useState<QualityCheckRead[]>([])
const [qualityChecksError, setQualityChecksError] = useState<string | null>(null)
const [qualityEvidenceGeoJson, setQualityEvidenceGeoJson] = useState<QualityEvidenceGeoJsonResponse | null>(null)
const [qualityEvidenceLoading, setQualityEvidenceLoading] = useState(false)
const [qualityEvidenceError, setQualityEvidenceError] = useState<string | null>(null)
const loadQualityChecks = async (projectId = selectedProjectId): Promise<QualityCheckRead[] | void> => {
if (!projectId) {
@@ -34,6 +37,30 @@ export function useQualityWorkflow({ selectedProjectId, loadProjectData }: Quali
}
}
const loadQualityEvidenceGeoJson = async (qualityCheckId: string, projectId = selectedProjectId): Promise<QualityEvidenceGeoJsonResponse | null> => {
if (!projectId) {
setQualityEvidenceError('Select a project first')
return null
}
setQualityEvidenceLoading(true)
setQualityEvidenceError(null)
try {
const response = await qaApi.getQualityEvidenceGeoJson(projectId, qualityCheckId)
setQualityEvidenceGeoJson(response)
return response
} catch (error) {
setQualityEvidenceError(formatError(error, 'Failed to load QA/QC evidence overlay'))
return null
} finally {
setQualityEvidenceLoading(false)
}
}
const clearQualityEvidenceGeoJson = () => {
setQualityEvidenceGeoJson(null)
setQualityEvidenceError(null)
}
const runQaComparison = async () => {
if (!selectedProjectId) {
setQaError('Select a project first')
@@ -102,7 +129,12 @@ export function useQualityWorkflow({ selectedProjectId, loadProjectData }: Quali
qaError,
qualityChecks,
qualityChecksError,
qualityEvidenceGeoJson,
qualityEvidenceLoading,
qualityEvidenceError,
loadQualityChecks,
loadQualityEvidenceGeoJson,
clearQualityEvidenceGeoJson,
runQaComparison,
setQaCandidateDatasetId,
setQaReferenceDatasetId,