Prefer complete Mol analysis workspaces
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-13 18:20:23 +02:00
parent 2c16ff2bc0
commit 598380661d
2 changed files with 25 additions and 1 deletions
@@ -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
+21 -1
View File
@@ -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<ProjectRead[]>([])
const [selectedProjectId, setSelectedProjectId] = useState<string | null>(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,
)