Extract demo workflow hook
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
import { useState } from 'react'
|
||||
import { demoApi } from '../services/api'
|
||||
import type { DatasetCreateResponse, QualityCheckRead } from '../types'
|
||||
import { formatError } from '../lib/formatError'
|
||||
|
||||
interface DemoWorkflowOptions {
|
||||
loadProjects: () => Promise<void>
|
||||
loadProjectData: (projectId: string) => Promise<{ datasets: DatasetCreateResponse[] } | null>
|
||||
loadDatasetDetails: (projectId: string, dataset: DatasetCreateResponse) => Promise<void>
|
||||
loadDetectionRuns: (projectId?: string | null) => Promise<void>
|
||||
loadSegmentationRuns: (projectId?: string | null) => Promise<void>
|
||||
loadQualityChecks: (projectId?: string | null) => Promise<QualityCheckRead[] | void>
|
||||
loadExports: (projectId?: string | null) => Promise<void>
|
||||
setSelectedProjectId: (projectId: string) => void
|
||||
setSelectedDatasetId: (datasetId: string | null) => void
|
||||
setSelectedMapAreaId: (areaId: string) => void
|
||||
setQaCandidateDatasetId: (datasetId: string) => void
|
||||
setQaReferenceDatasetId: (datasetId: string) => void
|
||||
setQaAreaId: (areaId: string) => void
|
||||
setDetectionReferenceDatasetId: (datasetId: string) => void
|
||||
setSegmentationReferenceDatasetId: (datasetId: string) => void
|
||||
setErrorMessage: (message: string | null) => void
|
||||
}
|
||||
|
||||
export function useDemoWorkflow({
|
||||
loadProjects,
|
||||
loadProjectData,
|
||||
loadDatasetDetails,
|
||||
loadDetectionRuns,
|
||||
loadSegmentationRuns,
|
||||
loadQualityChecks,
|
||||
loadExports,
|
||||
setSelectedProjectId,
|
||||
setSelectedDatasetId,
|
||||
setSelectedMapAreaId,
|
||||
setQaCandidateDatasetId,
|
||||
setQaReferenceDatasetId,
|
||||
setQaAreaId,
|
||||
setDetectionReferenceDatasetId,
|
||||
setSegmentationReferenceDatasetId,
|
||||
setErrorMessage,
|
||||
}: DemoWorkflowOptions) {
|
||||
const [loadingDemoWorkflow, setLoadingDemoWorkflow] = useState(false)
|
||||
const [demoWorkflowMessage, setDemoWorkflowMessage] = useState<string | null>(null)
|
||||
|
||||
const loadDemoWorkflow = async () => {
|
||||
setLoadingDemoWorkflow(true)
|
||||
setDemoWorkflowMessage(null)
|
||||
setErrorMessage(null)
|
||||
try {
|
||||
const result = await demoApi.seedWorkflow()
|
||||
setSelectedProjectId(result.project_id)
|
||||
setSelectedDatasetId(result.candidate_dataset_id)
|
||||
setSelectedMapAreaId(result.area_id)
|
||||
setQaCandidateDatasetId(result.candidate_dataset_id)
|
||||
setQaReferenceDatasetId(result.reference_dataset_id)
|
||||
setQaAreaId(result.area_id)
|
||||
setDetectionReferenceDatasetId(result.reference_dataset_id)
|
||||
setSegmentationReferenceDatasetId(result.reference_dataset_id)
|
||||
setDemoWorkflowMessage(result.message)
|
||||
await loadProjects()
|
||||
const [projectData] = await Promise.all([
|
||||
loadProjectData(result.project_id),
|
||||
loadDetectionRuns(result.project_id),
|
||||
loadSegmentationRuns(result.project_id),
|
||||
loadQualityChecks(result.project_id),
|
||||
loadExports(result.project_id),
|
||||
])
|
||||
const candidateDataset = projectData?.datasets.find((dataset) => dataset.id === result.candidate_dataset_id)
|
||||
if (candidateDataset) {
|
||||
await loadDatasetDetails(result.project_id, candidateDataset)
|
||||
}
|
||||
} catch (error) {
|
||||
setErrorMessage(formatError(error, 'Failed to load demo workflow'))
|
||||
} finally {
|
||||
setLoadingDemoWorkflow(false)
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
loadingDemoWorkflow,
|
||||
demoWorkflowMessage,
|
||||
loadDemoWorkflow,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user