Add governed source freshness audit
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
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 }
|
||||
}
|
||||
Reference in New Issue
Block a user