fix(map): report selected theme scale honestly
This commit is contained in:
@@ -20,7 +20,8 @@ def test_map_first_explorer_is_the_default_product_flow() -> None:
|
|||||||
assert "<h3>Inzichten</h3>" in workspace
|
assert "<h3>Inzichten</h3>" in workspace
|
||||||
assert "Teken rechthoek" in workspace
|
assert "Teken rechthoek" in workspace
|
||||||
assert "Volledig werkgebied" in workspace
|
assert "Volledig werkgebied" in workspace
|
||||||
assert "Alle relevante thema" in workspace
|
assert "Gekozen thema" in workspace
|
||||||
|
assert "Kies kleiner gebied" in workspace
|
||||||
assert "Bron nog niet ingeladen" in workspace
|
assert "Bron nog niet ingeladen" in workspace
|
||||||
assert "useMapThemeSelectionInsights" in workspace
|
assert "useMapThemeSelectionInsights" in workspace
|
||||||
assert "datasetsApi.selectVectorFeatures" in read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
|
assert "datasetsApi.selectVectorFeatures" in read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
|
||||||
|
|||||||
@@ -1166,7 +1166,7 @@ export function MapWorkspace({
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
}, [coverage, mapSelectionBbox, mapSelectionScale, onDemandProductsForZones, themeDatasetMap])
|
}, [coverage, mapSelectionBbox, mapSelectionScale, onDemandProductsForZones, themeDatasetMap])
|
||||||
const unavailableSelectionThemeCount = Math.max(DATA_THEMES.length - selectionRelevantThemes.length, 0)
|
const activeThemeSupportsCurrentSelection = selectionRelevantThemes.some((theme) => theme.id === activeTheme.id)
|
||||||
const activeOnDemandMapProduct = mapSelectionScale === 'overview' || themeDatasetMap[activeTheme.id]
|
const activeOnDemandMapProduct = mapSelectionScale === 'overview' || themeDatasetMap[activeTheme.id]
|
||||||
? null
|
? null
|
||||||
: onDemandProductMap.get(activeTheme.id) ?? null
|
: onDemandProductMap.get(activeTheme.id) ?? null
|
||||||
@@ -1369,17 +1369,6 @@ export function MapWorkspace({
|
|||||||
}),
|
}),
|
||||||
[themeInsights],
|
[themeInsights],
|
||||||
)
|
)
|
||||||
const readSelectionThemeCount = useMemo(
|
|
||||||
() => {
|
|
||||||
const relevantThemeIds = new Set(selectionRelevantThemes.map((theme) => theme.id))
|
|
||||||
return new Set(
|
|
||||||
themeResults
|
|
||||||
.filter((result) => relevantThemeIds.has(result.theme.id))
|
|
||||||
.map((result) => result.theme.id),
|
|
||||||
).size
|
|
||||||
},
|
|
||||||
[selectionRelevantThemes, themeResults],
|
|
||||||
)
|
|
||||||
const activeThemeInsight = themeResults.find((item) => item.theme.id === activeThemeId)
|
const activeThemeInsight = themeResults.find((item) => item.theme.id === activeThemeId)
|
||||||
const activeResultDataset = activeThemeInsight?.dataset ?? activeThemeDataset
|
const activeResultDataset = activeThemeInsight?.dataset ?? activeThemeDataset
|
||||||
const activeSelectionResult = activeThemeInsight?.result
|
const activeSelectionResult = activeThemeInsight?.result
|
||||||
@@ -1425,10 +1414,10 @@ export function MapWorkspace({
|
|||||||
const heightKm = dimensions.heightMetres / 1000
|
const heightKm = dimensions.heightMetres / 1000
|
||||||
if (mapSelectionScale === 'regional') {
|
if (mapSelectionScale === 'regional') {
|
||||||
const partitionCount = splitSelectionBbox(mapSelectionBbox).length
|
const partitionCount = splitSelectionBbox(mapSelectionBbox).length
|
||||||
return `Regionale analyse van ${widthKm.toLocaleString('nl-BE', { maximumFractionDigits: 1 })} × ${heightKm.toLocaleString('nl-BE', { maximumFractionDigits: 1 })} km. Geschikte detailbronnen worden automatisch over ${partitionCount} begrensde bronpartities verwerkt; 5 m-rasters worden alleen meegenomen wanneer het veilige pixelbudget volstaat.`
|
return `Regionale selectie van ${widthKm.toLocaleString('nl-BE', { maximumFractionDigits: 1 })} x ${heightKm.toLocaleString('nl-BE', { maximumFractionDigits: 1 })} km. Het gekozen thema kan over maximaal ${partitionCount} begrensde bronpartities worden verwerkt; teken een kleiner gebied wanneer een fijnmazige rasterbron buiten het veilige pixelbudget valt.`
|
||||||
}
|
}
|
||||||
if (mapSelectionScale === 'overview') {
|
if (mapSelectionScale === 'overview') {
|
||||||
return `Overzichtsanalyse van ${widthKm.toLocaleString('nl-BE', { maximumFractionDigits: 1 })} × ${heightKm.toLocaleString('nl-BE', { maximumFractionDigits: 1 })} km. Alleen landelijke en vooraf ingeladen bronnen die deze schaal betrouwbaar ondersteunen worden bevraagd. Teken maximaal 50 × 50 km voor regionale thema's of 20 × 20 km voor alle detailbronnen.`
|
return `Overzichtsselectie van ${widthKm.toLocaleString('nl-BE', { maximumFractionDigits: 1 })} x ${heightKm.toLocaleString('nl-BE', { maximumFractionDigits: 1 })} km. Het gekozen detailthema wordt niet automatisch op deze schaal bevraagd. Teken maximaal 50 x 50 km voor regionale thema's en ongeveer 16 x 16 km voor 5 m-rasters.`
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}, [mapSelectionBbox, mapSelectionScale])
|
}, [mapSelectionBbox, mapSelectionScale])
|
||||||
@@ -2685,24 +2674,31 @@ export function MapWorkspace({
|
|||||||
|
|
||||||
<div className="geo-theme-results">
|
<div className="geo-theme-results">
|
||||||
<div className="geo-results-title-row">
|
<div className="geo-results-title-row">
|
||||||
<h4>Alle relevante thema’s</h4>
|
<h4>Gekozen thema</h4>
|
||||||
<span>{readSelectionThemeCount} van {selectionRelevantThemes.length} uitgelezen</span>
|
<span>{activeSelectionResult ? 'Uitgelezen' : 'Geen meting'}</span>
|
||||||
</div>
|
</div>
|
||||||
{selectionRelevantThemes.flatMap((theme) => {
|
{[activeTheme].flatMap((theme) => {
|
||||||
const dataset = themeDatasetMap[theme.id]
|
const dataset = themeDatasetMap[theme.id]
|
||||||
const items = themeResults.filter((result) => result.theme.id === theme.id)
|
const items = themeResults.filter((result) => result.theme.id === theme.id)
|
||||||
const rows = items.length > 0 ? items : [null]
|
const rows = items.length > 0 ? items : [null]
|
||||||
return rows.map((item, index) => {
|
return rows.map((item, index) => {
|
||||||
const resultDataset = item?.dataset ?? dataset
|
const resultDataset = item?.dataset ?? (activeThemeSupportsCurrentSelection ? dataset : undefined)
|
||||||
|
const unavailableAtScale = !activeThemeSupportsCurrentSelection
|
||||||
return (
|
return (
|
||||||
<div className="geo-theme-result-row" key={`${theme.id}:${resultDataset?.id ?? index}`}>
|
<div className="geo-theme-result-row" key={`${theme.id}:${resultDataset?.id ?? index}`}>
|
||||||
<span className={`geo-theme-symbol geo-theme-symbol-${theme.id}`} aria-hidden="true" />
|
<span className={`geo-theme-symbol geo-theme-symbol-${theme.id}`} aria-hidden="true" />
|
||||||
<span>
|
<span>
|
||||||
<strong>{theme.label}</strong>
|
<strong>{theme.label}</strong>
|
||||||
<small>{resultDataset ? getDatasetSourceDisplayName(resultDataset) : 'Officiële bron kon niet worden geladen'}</small>
|
<small>
|
||||||
|
{resultDataset
|
||||||
|
? getDatasetSourceDisplayName(resultDataset)
|
||||||
|
: unavailableAtScale
|
||||||
|
? 'Niet geschikt voor deze selectieschaal of zone'
|
||||||
|
: 'Bronanalyse niet voltooid'}
|
||||||
|
</small>
|
||||||
</span>
|
</span>
|
||||||
<span className="geo-theme-result-value">
|
<span className="geo-theme-result-value">
|
||||||
<b>{item ? resultMetricLabel(item.result) : 'Inladen mislukt'}</b>
|
<b>{item ? resultMetricLabel(item.result) : unavailableAtScale ? 'Kies kleiner gebied' : 'Geen meting'}</b>
|
||||||
{item?.result.summary ? <small>{item.result.summary.metric_label}</small> : null}
|
{item?.result.summary ? <small>{item.result.summary.metric_label}</small> : null}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -2712,13 +2708,6 @@ export function MapWorkspace({
|
|||||||
{selectionScaleNotice ? (
|
{selectionScaleNotice ? (
|
||||||
<p className="geo-data-notice">{selectionScaleNotice}</p>
|
<p className="geo-data-notice">{selectionScaleNotice}</p>
|
||||||
) : null}
|
) : null}
|
||||||
{unavailableSelectionThemeCount > 0 ? (
|
|
||||||
<p className="geo-data-notice">
|
|
||||||
{mapSelectionScale === 'overview'
|
|
||||||
? `${unavailableSelectionThemeCount} detailthema's zijn op deze overzichtsschaal bewust niet bevraagd.`
|
|
||||||
: `${unavailableSelectionThemeCount} thema's zijn voor deze zone niet van toepassing, niet operationeel gekoppeld of te fijnmazig voor deze selectieschaal.`}
|
|
||||||
</p>
|
|
||||||
) : null}
|
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user