todos-contra-el-fuego-web/imports/ui/components
vjrj bba2ad5523
All checks were successful
build-image / test (push) Successful in 2m22s
build-image / build (push) Successful in 11m25s
fix(fires): el mapa de /fires ya no se queda en gris
Causa raíz, encontrada reproduciéndolo con el bundle de producción en local
—con el servidor de desarrollo NO se ve, y por eso llevaba semanas dándose por
un artefacto del navegador sin pantalla:

    if ((centerStored !== [0, 0] || geolocation.get()) && geoInit) {
      center.set(centerStored || geolocation.get());
      geoInit = false;
    }

`centerStored !== [0, 0]` compara contra un array recién creado: es SIEMPRE
cierto. En un navegador nuevo —sin centro en localStorage y con la
geolocalización todavía sin resolver— eso hacía `center.set(undefined)` y dejaba
`geoInit` en false, o sea para siempre. Un `<MapContainer>` sin `center` no
recibe `setView`, y un mapa de Leaflet sin vista no carga capa base ni teselas
ni dispara `whenReady`, con lo que tampoco se creaba la suscripción por
viewport. En desarrollo no pasaba porque la geolocalización llegaba a tiempo.

Y de paso el "Actualizando…" que no se quitaba nunca: las suscripciones se
creaban dentro de un `Tracker.autorun` ANIDADO en el withTracker. La computación
de fuera no dependía de `mapSize`, así que `loading` se calculaba con
`subscription` a undefined y no volvía a recalcularse; además cada pasada del
withTracker dejaba otro autorun sin parar. Ahora las suscripciones se crean en
la propia computación reactiva, que es donde Meteor sabe pararlas al invalidarse.

MapReady, además, vigila el contenedor con un ResizeObserver: su comprobación de
tamaño solo podía reintentar con el evento `resize` de Leaflet, que no se emite
si nadie llama a invalidateSize(). No era la causa de esto, pero hacía que la
comprobación no sirviera de nada.

La suite e2e deja de usar selectores por id: TestUtils.testId() los devuelve solo
en desarrollo, así que contra el bundle de producción —lo que levanta el job
nocturno— no existían y la suite entera habría fallado esta noche.

Verificado contra bundle de producción: /fires pasa de 0 teselas y 0 capas a 12
teselas, capa base y las dos suscripciones por viewport, sin "Actualizando…".
90 tests de servidor, 16 e2e y smoke REST byte-idéntico.
2026-08-03 19:59:30 +02:00
..
AccountPageFooter scss: migrate @import -> @use, lighten/darken -> color.adjust (dart-sass) 2026-07-17 18:18:04 +02:00
Authenticated deps: react-router-dom 4 -> 6 (history 5, react-router-bootstrap 0.26) 2026-07-21 13:00:15 +02:00
AuthenticatedNavigation deps: react-router-dom 4 -> 6 (history 5, react-router-bootstrap 0.26) 2026-07-21 13:00:15 +02:00
BetaRibbon deps: i18next 10 -> 23, react-i18next 7 -> 14 2026-07-18 06:28:41 +02:00
CenterInMyPosition deps: react-bootstrap 0.31 -> 2 (Bootstrap 5 CSS deferred as debt) 2026-07-21 12:44:46 +02:00
Chronos Site settings and fires fromNow Reactive 2018-01-29 11:30:17 +01:00
Col deps: react-bootstrap 0.31 -> 2 (Bootstrap 5 CSS deferred as debt) 2026-07-21 12:44:46 +02:00
Comments deps: i18next 10 -> 23, react-i18next 7 -> 14 2026-07-18 06:28:41 +02:00
Content scss: migrate @import -> @use, lighten/darken -> color.adjust (dart-sass) 2026-07-17 18:18:04 +02:00
CookieConsent meteor3: purge dead client packages — web UI renders on 3.1 2026-07-14 11:32:19 +02:00
DistanceSlider deps: i18next 10 -> 23, react-i18next 7 -> 14 2026-07-18 06:28:41 +02:00
DocumentEditor deps: react-bootstrap 0.31 -> 2 (Bootstrap 5 CSS deferred as debt) 2026-07-21 12:44:46 +02:00
ErrorBoundary Against the Fire 2018-03-05 12:04:55 +01:00
Feedback bootstrap: swap BS4 (alexwine) CSS for bootstrap@5 npm 2026-07-22 05:55:34 +02:00
Footer deps: react-bootstrap 0.31 -> 2 (Bootstrap 5 CSS deferred as debt) 2026-07-21 12:44:46 +02:00
FromNow bootstrap: swap BS4 (alexwine) CSS for bootstrap@5 npm 2026-07-22 05:55:34 +02:00
History deps: react-router-dom 4 -> 6 (history 5, react-router-bootstrap 0.26) 2026-07-21 13:00:15 +02:00
Icon add last minute tweaks found while writing docs 2017-06-13 08:12:26 -05:00
InputHint scss: migrate @import -> @use, lighten/darken -> color.adjust (dart-sass) 2026-07-17 18:18:04 +02:00
Loading refactor: LoadingBar via progressbar.js + ref (drops react-progress-bar.js findDOMNode) 2026-07-21 14:24:32 +02:00
LocationAutocomplete bootstrap: BS5 sweep follow-ups (form-group, drop popper.js@1) 2026-07-22 10:12:49 +02:00
Maps fix(fires): el mapa de /fires ya no se queda en gris 2026-08-03 19:59:30 +02:00
Navigation bootstrap: swap BS4 (alexwine) CSS for bootstrap@5 npm 2026-07-22 05:55:34 +02:00
NavItem bootstrap: navbar collapse jQuery -> React state (BS4->5 prep) 2026-07-21 23:04:02 +02:00
NotificationsObserver Mobile notifications 2018-08-02 12:42:19 +02:00
OAuthLoginButton bootstrap: swap BS4 (alexwine) CSS for bootstrap@5 npm 2026-07-22 05:55:34 +02:00
OAuthLoginButtons scss: migrate @import -> @use, lighten/darken -> color.adjust (dart-sass) 2026-07-17 18:18:04 +02:00
PageHeader cleanup: defaultProps -> JS default params on our function components 2026-07-21 13:54:02 +02:00
Prompt deps: react-bootstrap 0.31 -> 2 (Bootstrap 5 CSS deferred as debt) 2026-07-21 12:44:46 +02:00
Public deps: react-router-dom 4 -> 6 (history 5, react-router-bootstrap 0.26) 2026-07-21 13:00:15 +02:00
PublicNavigation deps: i18next 10 -> 23, react-i18next 7 -> 14 2026-07-18 06:28:41 +02:00
Reconnect refactor: Reconnect banner Blaze -> native React (drops findDOMNode) 2026-07-21 14:08:52 +02:00
ReSendEmail cleanup: defaultProps -> JS default params on our function components 2026-07-21 13:54:02 +02:00
SelectionMap deps: react-leaflet 1.8 -> 4.2 (+ leaflet 1.9) — the last legacy react-* lib 2026-07-21 18:45:15 +02:00
ShareIt deps: react-share 2 -> 5 (drops its defaultProps warnings) 2026-07-21 14:14:48 +02:00
SubscriptionEditor deps: i18next 10 -> 23, react-i18next 7 -> 14 2026-07-18 06:28:41 +02:00
Utils deps: react-router-dom 4 -> 6 (history 5, react-router-bootstrap 0.26) 2026-07-21 13:00:15 +02:00
withRouterCompat deps: react-router-dom 4 -> 6 (history 5, react-router-bootstrap 0.26) 2026-07-21 13:00:15 +02:00