Add official source edition probes
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-16 17:33:40 +02:00
parent fd05c46e2a
commit 595967f892
27 changed files with 1513 additions and 18 deletions
+48 -2
View File
@@ -1,13 +1,17 @@
import { useCallback, useEffect, useRef, useState } from 'react'
import { datasetsApi } from '../services/api'
import type { SourceFreshnessReport } from '../types'
import type { SourceCatalogProbeReport, SourceFreshnessReport } from '../types'
export function useSourceFreshness(selectedProjectId: string | null) {
const [report, setReport] = useState<SourceFreshnessReport | null>(null)
const [loading, setLoading] = useState(false)
const [error, setError] = useState<string | null>(null)
const requestSequence = useRef(0)
const catalogRequestSequence = useRef(0)
const [catalogReport, setCatalogReport] = useState<SourceCatalogProbeReport | null>(null)
const [catalogLoading, setCatalogLoading] = useState(false)
const [catalogError, setCatalogError] = useState<string | null>(null)
const refresh = useCallback(async () => {
const requestId = ++requestSequence.current
@@ -35,6 +39,32 @@ export function useSourceFreshness(selectedProjectId: string | null) {
}
}, [selectedProjectId])
const probeCatalogs = useCallback(async (force = false) => {
const requestId = ++catalogRequestSequence.current
if (!selectedProjectId) {
setCatalogReport(null)
setCatalogError(null)
setCatalogLoading(false)
return
}
setCatalogLoading(true)
setCatalogError(null)
try {
const nextReport = await datasetsApi.sourceCatalogProbes(selectedProjectId, force)
if (catalogRequestSequence.current === requestId) {
setCatalogReport(nextReport)
}
} catch (caught) {
if (catalogRequestSequence.current === requestId) {
setCatalogError(caught instanceof Error ? caught.message : 'De officiële broncatalogi konden niet worden gecontroleerd.')
}
} finally {
if (catalogRequestSequence.current === requestId) {
setCatalogLoading(false)
}
}
}, [selectedProjectId])
useEffect(() => {
void refresh()
return () => {
@@ -42,5 +72,21 @@ export function useSourceFreshness(selectedProjectId: string | null) {
}
}, [refresh])
return { report, loading, error, refresh }
useEffect(() => {
catalogRequestSequence.current += 1
setCatalogReport(null)
setCatalogError(null)
setCatalogLoading(false)
}, [selectedProjectId])
return {
report,
loading,
error,
refresh,
catalogReport,
catalogLoading,
catalogError,
probeCatalogs,
}
}