Files
geointel/frontend/src/hooks/useSourceFreshness.ts
T
Codex 1e0e7b6499
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s
Add governed source freshness audit
2026-07-16 15:05:42 +02:00

47 lines
1.3 KiB
TypeScript

import { useCallback, useEffect, useRef, useState } from 'react'
import { datasetsApi } from '../services/api'
import type { 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 refresh = useCallback(async () => {
const requestId = ++requestSequence.current
if (!selectedProjectId) {
setReport(null)
setError(null)
setLoading(false)
return
}
setLoading(true)
setError(null)
try {
const nextReport = await datasetsApi.sourceFreshness(selectedProjectId)
if (requestSequence.current === requestId) {
setReport(nextReport)
}
} catch (caught) {
if (requestSequence.current === requestId) {
setError(caught instanceof Error ? caught.message : 'De broncontrole kon niet worden geladen.')
}
} finally {
if (requestSequence.current === requestId) {
setLoading(false)
}
}
}, [selectedProjectId])
useEffect(() => {
void refresh()
return () => {
requestSequence.current += 1
}
}, [refresh])
return { report, loading, error, refresh }
}