viewof map = {
let container = html`<div style='height:500px;' />`;
yield container;
let map = new mapboxgl.Map({
container,
center: [-98.35, 39.5],
zoom: 3,
style: carto.basemaps.positron
});
map.addControl(new mapboxgl.NavigationControl());
const viz = rampInterpolateViz();
const layer = new carto.Layer('counties', cartoSource, viz);
layer.addTo(map);
layer.on('loaded', () => {
mutable layerLoaded = true;
});
layer.on("updated", event => {
mutable layerUpdate = event;
});
const interactivity = new carto.Interactivity(layer);
interactivity.on('featureClick', featureEvent => {
const feature = featureEvent.features && featureEvent.features[0];
if (!feature) return;
const {
coordinates,
variables: { name, pctWithoutInternet }
} = feature;
const coords = featureEvent.coordinates;
const html = getPopupHtml(name.value, pctWithoutInternet.value.toFixed(0));
new mapboxgl.Popup()
.setLngLat([coords.lng, coords.lat])
.setHTML(html)
.addTo(map);
});
interactivity.on('featureEnter', featureEvent => {
featureEvent.features.forEach(feature => {
feature.strokeWidth.blendTo(2, 0);
});
});
interactivity.on('featureLeave', featureEvent => {
featureEvent.features.forEach(feature => {
feature.strokeWidth.reset();
});
});
invalidation.then(() => {
interactivity.disable();
layer.remove();
map.remove();
mutable layerLoaded = false;
});
container.value = { map, layer, viz };
return container;
}