revert(maps): deshacer el arreglo del mapa gris — empeoraba staging
All checks were successful
build-image / test (push) Successful in 3m17s
build-image / build (push) Successful in 13m23s

Desplegado en staging, el "montar el control de capas una sola vez" resultó
peor que el bug que arreglaba: /fires seguía en gris Y además la portada y
/zones —que sí pintaban— se quedaron también sin teselas. Con la clave real, el
control acaba montándose después de que el mapa ya esté montado, y entonces no
se le añade ninguna capa base. O sea que la carrera no se arregla retrasando el
montaje: solo cambia de sitio.

Staging revertido a la imagen anterior y comprobado que vuelve a estar como
estaba (portada 36 teselas, /zones 18, /fires 0).

Se conserva todo lo aprendido, que es lo que vale: el bug se reproduce en local
poniendo una clave de Google en settings-ci.json (15 teselas sin clave, 0 con
ella), NO es cosa del navegador sin pantalla, y e2e/tests/fires-map.spec.js lo
deja como test.fixme para que aparezca en cada ejecución. El arreglo bueno pasa
por decidir el conjunto de capas base ANTES de montar el mapa.
This commit is contained in:
vjrj 2026-08-02 00:27:58 +02:00
parent 82d0399c86
commit 1153556f47
2 changed files with 36 additions and 42 deletions

View file

@ -13,45 +13,23 @@ const { BaseLayer } = LayersControl;
const defOpacity = 0.7;
// Cuánto se espera a que Google conteste antes de montar el control solo con
// OpenStreetMap. Si el script de Google no llega (sin red hacia Google, una
// extensión que lo bloquea, un despliegue sin clave), el mapa tiene que salir
// igual: las capas de Google son un extra.
const GMAPS_WAIT_MS = 5000;
class DefMapLayers extends Component {
constructor(props) {
super(props);
this.state = {
gkey: null,
// El control de capas se monta UNA vez, con la lista de capas ya cerrada.
// Añadirle capas después —que es lo que pasaba al resolverse la clave de
// Google— hacía que react-leaflet se dejara por el camino la capa base
// marcada, y el mapa se quedaba en gris: sin teselas, sin fuegos y con el
// "Actualizando…" eterno. Solo se veía en despliegues CON clave de Google
// (staging y producción), nunca en desarrollo, que no la tiene.
ready: false
gkey: null
};
}
componentDidMount() {
this.mounted = true;
const settle = (key) => {
if (!this.mounted || this.state.ready) return;
this.setState({ gkey: key || null, ready: true });
};
Gkeys.load((err, key) => settle(key));
this.waitTimer = setTimeout(() => settle(null), GMAPS_WAIT_MS);
}
componentWillUnmount() {
this.mounted = false;
clearTimeout(this.waitTimer);
const self = this;
Gkeys.load((err, key) => {
self.setState({ gkey: key });
});
}
render() {
const { t } = this.props;
if (!this.state.ready) return null;
const osmgraylayer = (
<BaseLayer checked={this.props.gray} name={t('Mapa gris de OpenStreetMap')}>
<TileLayer