Files
geointel/frontend/src/hooks/useWorkbenchBootstrap.ts
T
Jens dfcc11b0d5
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
Expand scoped demo analysis access
2026-08-01 16:00:13 +02:00

95 lines
2.9 KiB
TypeScript

import { useEffect } from 'react'
type AsyncAction = () => Promise<unknown>
type ProjectAction = (projectId: string) => Promise<unknown>
interface WorkbenchBootstrapOptions {
restrictedMode?: boolean
selectedProjectId: string | null
selectedDetectionRunId: string
detectionClassFilter: string
detectionMinConfidenceFilter: number
selectedSegmentationRunId: string
segmentationClassFilter: string
segmentationMinConfidenceFilter: number
loadProjects: AsyncAction
loadCapabilities: AsyncAction
loadDetectionModels: AsyncAction
loadSegmentationModels: AsyncAction
loadProjectData: ProjectAction
loadDetectionRuns: ProjectAction
loadSegmentationRuns: ProjectAction
loadQualityChecks: ProjectAction
loadExports: ProjectAction
loadDetectionResults: AsyncAction
loadSegmentationResults: AsyncAction
resetProjectData: () => void
resetDatasetForProject: () => void
resetDetectionForProject: () => void
resetSegmentationForProject: () => void
resetExportsForProject: () => void
}
export function useWorkbenchBootstrap({
restrictedMode = false,
selectedProjectId,
selectedDetectionRunId,
detectionClassFilter,
detectionMinConfidenceFilter,
selectedSegmentationRunId,
segmentationClassFilter,
segmentationMinConfidenceFilter,
loadProjects,
loadCapabilities,
loadDetectionModels,
loadSegmentationModels,
loadProjectData,
loadDetectionRuns,
loadSegmentationRuns,
loadQualityChecks,
loadExports,
loadDetectionResults,
loadSegmentationResults,
resetProjectData,
resetDatasetForProject,
resetDetectionForProject,
resetSegmentationForProject,
resetExportsForProject,
}: WorkbenchBootstrapOptions): void {
useEffect(() => {
loadProjects().catch(() => null)
loadCapabilities().catch(() => null)
loadDetectionModels().catch(() => null)
loadSegmentationModels().catch(() => null)
}, [restrictedMode])
useEffect(() => {
if (!selectedProjectId) {
resetProjectData()
resetDatasetForProject()
resetDetectionForProject()
resetSegmentationForProject()
resetExportsForProject()
return
}
resetProjectData()
resetDatasetForProject()
resetDetectionForProject()
resetSegmentationForProject()
resetExportsForProject()
loadProjectData(selectedProjectId).catch(() => null)
loadQualityChecks(selectedProjectId).catch(() => null)
loadDetectionRuns(selectedProjectId).catch(() => null)
loadSegmentationRuns(selectedProjectId).catch(() => null)
loadExports(selectedProjectId).catch(() => null)
}, [restrictedMode, selectedProjectId])
useEffect(() => {
loadDetectionResults().catch(() => null)
}, [restrictedMode, selectedDetectionRunId, detectionClassFilter, detectionMinConfidenceFilter])
useEffect(() => {
loadSegmentationResults().catch(() => null)
}, [restrictedMode, selectedSegmentationRunId, segmentationClassFilter, segmentationMinConfidenceFilter])
}