import { useEffect } from 'react' type AsyncAction = () => Promise type ProjectAction = (projectId: string) => Promise 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]) }