Extract workbench bootstrap hook
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled

This commit is contained in:
Codex
2026-06-17 17:58:16 +02:00
parent 701a70a343
commit 8cf2dca44f
7 changed files with 176 additions and 33 deletions
+27 -31
View File
@@ -1,4 +1,4 @@
import { useEffect, useMemo } from 'react'
import { useMemo } from 'react'
import './styles/app.css'
import { ChangeDetectionPanel } from './components/analysis/ChangeDetectionPanel'
import { DatasetDetailPanel } from './components/datasets/DatasetDetailPanel'
@@ -24,6 +24,7 @@ import { useProviderCapabilities } from './hooks/useProviderCapabilities'
import { useProjectWorkspace } from './hooks/useProjectWorkspace'
import { useQualityWorkflow } from './hooks/useQualityWorkflow'
import { useSegmentationWorkflow } from './hooks/useSegmentationWorkflow'
import { useWorkbenchBootstrap } from './hooks/useWorkbenchBootstrap'
function isVectorDatasetType(datasetType: string): boolean {
return datasetType === 'vector' || datasetType === 'geojson'
@@ -343,36 +344,31 @@ function App(): JSX.Element {
setErrorMessage,
})
useEffect(() => {
loadProjects().catch(() => null)
loadCapabilities().catch(() => null)
loadDetectionModels().catch(() => null)
loadSegmentationModels().catch(() => null)
}, [])
useEffect(() => {
if (!selectedProjectId) {
resetProjectData()
resetDatasetForProject()
resetDetectionForProject()
resetSegmentationForProject()
resetExportsForProject()
return
}
loadProjectData(selectedProjectId).catch(() => null)
loadDetectionRuns(selectedProjectId).catch(() => null)
loadSegmentationRuns(selectedProjectId).catch(() => null)
loadQualityChecks(selectedProjectId).catch(() => null)
loadExports(selectedProjectId).catch(() => null)
}, [selectedProjectId])
useEffect(() => {
loadDetectionResults().catch(() => null)
}, [selectedDetectionRunId, detectionClassFilter, detectionMinConfidenceFilter])
useEffect(() => {
loadSegmentationResults().catch(() => null)
}, [selectedSegmentationRunId, segmentationClassFilter, segmentationMinConfidenceFilter])
useWorkbenchBootstrap({
selectedProjectId,
selectedDetectionRunId,
detectionClassFilter,
detectionMinConfidenceFilter,
selectedSegmentationRunId,
segmentationClassFilter,
segmentationMinConfidenceFilter,
loadProjects,
loadCapabilities,
loadDetectionModels,
loadSegmentationModels,
loadProjectData,
loadDetectionRuns,
loadSegmentationRuns,
loadQualityChecks,
loadExports,
loadDetectionResults,
loadSegmentationResults,
resetProjectData,
resetDatasetForProject,
resetDetectionForProject,
resetSegmentationForProject,
resetExportsForProject,
})
return (
<div className="app-shell">
@@ -0,0 +1,87 @@
import { useEffect } from 'react'
type AsyncAction = () => Promise<unknown>
type ProjectAction = (projectId: string) => Promise<unknown>
interface WorkbenchBootstrapOptions {
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({
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)
}, [])
useEffect(() => {
if (!selectedProjectId) {
resetProjectData()
resetDatasetForProject()
resetDetectionForProject()
resetSegmentationForProject()
resetExportsForProject()
return
}
loadProjectData(selectedProjectId).catch(() => null)
loadDetectionRuns(selectedProjectId).catch(() => null)
loadSegmentationRuns(selectedProjectId).catch(() => null)
loadQualityChecks(selectedProjectId).catch(() => null)
loadExports(selectedProjectId).catch(() => null)
}, [selectedProjectId])
useEffect(() => {
loadDetectionResults().catch(() => null)
}, [selectedDetectionRunId, detectionClassFilter, detectionMinConfidenceFilter])
useEffect(() => {
loadSegmentationResults().catch(() => null)
}, [selectedSegmentationRunId, segmentationClassFilter, segmentationMinConfidenceFilter])
}