Skip to content

SPA parametrica sul pericolo, selettore invisibile con un solo hazard (Fase 1e di #57) - #94

Merged
gzileni merged 1 commit into
mainfrom
feat/hazard-spa
Sep 5, 2026
Merged

SPA parametrica sul pericolo, selettore invisibile con un solo hazard (Fase 1e di #57)#94
gzileni merged 1 commit into
mainfrom
feat/hazard-spa

Conversation

@gzileni

@gzileni gzileni commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Chiude #87. Ultima delle sei sotto-issue di #57.

Cosa cambia

HazardProvider risolve il pericolo da GET /api/hazards — la lista di ciò
che questo deployment sa davvero valutare (motore registrato + soglie) —
e ogni componente che interroga il backend passa il parametro.

Il selettore non rende nulla con meno di due pericoli disponibili. È il
requisito che tiene la Fase 1 invisibile all'utente: oggi il deployment ne
valuta uno solo.

I tre pannelli che non possono seguire il selettore

Mappa, rollup comunale e quadro nazionale leggono viste SQL fissate sul
pericolo di default (migrazione 028: una sorgente di tile deve dare una
geometria per cella; mv_comune_risk classifica per esposizione con una
chiave che solo il breakdown delle frane ha). Restare fermi in silenzio
sarebbe peggio che non cambiare: sembrerebbero numeri del pericolo scelto.
Mostrano LandslideOnlyBadge, invisibile finché il pericolo scelto è quello
su cui la vista è fissata. La superficie multi-pericolo di quelle viste è #58.

Legenda dal backend

I cutoff arrivano da /api/legend?hazard=... invece che da RISK_CLASSES:
le soglie sono per pericolo da #84, e quelle statiche etichetterebbero male
i colori di un altro pericolo — oltre a essere costanti di scoring nel
codice, contro l'invariante di progetto. Restano solo come ripiego a backend
irraggiungibile.

Revisione

Otto difetti, una sola radice: un effetto che guadagna hazard fra le
dipendenze senza azzerare lo stato che possiede lascia in pagina i dati del
pericolo precedente durante la nuova fetch (RegionAccordion, ForecastList,
LegendPanel, l'analisi regionale). La cache di CellTrendSparkline è ora
indicizzata per ${cellId}|${hazard} — prima due pericoli sulla stessa cella
si sovrascrivevano. Rimosso un flag ready calcolato e mai consumato.

Gate

  • tsc -b, ESLint, npm run build: puliti
  • Vitest: 55 test in 19 file (6 nuovi su selettore, marchio e legenda)
  • ruff check + ruff format --check, mypy --strict: puliti
  • pytest tests/unit: 624 passati

Refs #57

…#57)

La SPA smette di dare per scontato che il rischio mostrato sia quello delle
frane. Un contesto `HazardProvider` risolve il pericolo da `/api/hazards` —
la lista dei pericoli che *questo* deployment sa davvero valutare — e ogni
componente che interroga il backend gli passa il parametro.

Il selettore **non rende nulla con meno di due pericoli disponibili**: in
Fase 1 il deployment ne valuta uno solo, e un controllo con una scelta sola
sarebbe rumore. La Fase 1 resta invisibile all'utente.

Tre pannelli non possono seguire il selettore, perché leggono viste SQL
fissate sul pericolo di default (migrazione 028: una sorgente di tile deve
dare una geometria per cella; `mv_comune_risk` classifica per esposizione
con una chiave che solo il breakdown delle frane ha). Invece di restare
fermi facendo credere di aver cambiato, mostrano `LandslideOnlyBadge`. La
superficie multi-pericolo di quelle viste è #58.

La legenda prende i cutoff da `/api/legend?hazard=...` invece che dalle
costanti statiche: le soglie sono per pericolo da #84, e quelle in
`RISK_CLASSES` etichetterebbero male i colori di un altro pericolo (oltre
a essere costanti di scoring nel codice, contro l'invariante di progetto).
Restano solo come ripiego a backend irraggiungibile.

Otto difetti trovati in revisione, tutti la stessa radice: un effetto che
guadagna `hazard` fra le dipendenze senza azzerare lo stato che possiede
lascia in pagina i dati del pericolo precedente durante la nuova fetch. La
cache di `CellTrendSparkline` è ora indicizzata per `${cellId}|${hazard}`.

Refs #57, #87
@gzileni
gzileni merged commit 52df75e into main Sep 5, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant