Extract workbench bootstrap hook
This commit is contained in:
+27
-31
@@ -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])
|
||||
}
|
||||
Reference in New Issue
Block a user