diff --git a/backend/tests/test_sprint177_mol_primary_focus.py b/backend/tests/test_sprint177_mol_primary_focus.py index 1efeb59b..f3c4d0f1 100644 --- a/backend/tests/test_sprint177_mol_primary_focus.py +++ b/backend/tests/test_sprint177_mol_primary_focus.py @@ -21,6 +21,10 @@ def test_frontend_declares_mol_as_primary_operating_focus() -> None: assert "[5.1167, 51.1919]" in focus assert "isPrimaryFocusProjectData" in focus assert "isPrimaryFocusProjectData(project, data.datasets)" in project_hook + assert "hasMappedAnalysisContext(data)" in project_hook + assert "dataset.dataset_type === 'raster'" in project_hook + assert "dataset.dataset_type === 'vector' || dataset.dataset_type === 'geojson'" in project_hook + assert "const primaryContext = inspectedCandidates.find" in project_hook assert "PRIMARY_FOCUS_AREA_NAME" in project_hook assert "PRIMARY_FOCUS_AREA_GEOJSON" in project_hook assert "4.35,51.28" not in project_hook diff --git a/frontend/src/hooks/useProjectWorkspace.ts b/frontend/src/hooks/useProjectWorkspace.ts index 2ff34bd8..f1ce8707 100644 --- a/frontend/src/hooks/useProjectWorkspace.ts +++ b/frontend/src/hooks/useProjectWorkspace.ts @@ -25,6 +25,16 @@ function isDemoProject(project: ProjectRead): boolean { return project.name === DEMO_PROJECT_NAME } +function hasMappedAnalysisContext( + data: { areas: AreaRead[]; datasets: DatasetCreateResponse[] }, +): boolean { + const hasRasterDataset = data.datasets.some((dataset) => dataset.dataset_type === 'raster') + const hasVectorDataset = data.datasets.some( + (dataset) => dataset.dataset_type === 'vector' || dataset.dataset_type === 'geojson', + ) + return data.areas.length > 0 && hasRasterDataset && hasVectorDataset +} + export function useProjectWorkspace() { const [projects, setProjects] = useState([]) const [selectedProjectId, setSelectedProjectId] = useState(null) @@ -81,13 +91,23 @@ export function useProjectWorkspace() { try { const data = await fetchProjectData(project.id) inspectedCandidates.push({ project, data }) - if (data.datasets.length > 0 && isPrimaryFocusProjectData(project, data.datasets)) { + if ( + isPrimaryFocusProjectData(project, data.datasets) && + hasMappedAnalysisContext(data) + ) { return project.id } } catch { // Project list should still render if a candidate's detail endpoints are temporarily unavailable. } } + const primaryContext = inspectedCandidates.find( + ({ project, data }) => + data.datasets.length > 0 && isPrimaryFocusProjectData(project, data.datasets), + ) + if (primaryContext) { + return primaryContext.project.id + } const completeContext = inspectedCandidates.find( ({ data }) => data.areas.length > 0 && data.datasets.length > 0, )