feat: Adds drill to detail context menu to World Map (#21150)

This commit is contained in:
Michael S. Molina
2022-08-23 10:24:55 -03:00
committed by GitHub
parent 51e567ffef
commit 4ca4a5c7cb
2 changed files with 37 additions and 6 deletions

View File

@@ -50,6 +50,7 @@ const formatter = getNumberFormatter();
function WorldMap(element, props) {
const {
entity,
data,
width,
height,
@@ -61,6 +62,8 @@ function WorldMap(element, props) {
colorScheme,
sliceId,
theme,
onContextMenu,
inContextMenu,
} = props;
const div = d3.select(element);
div.classed('superset-legacy-chart-world-map', true);
@@ -102,6 +105,22 @@ function WorldMap(element, props) {
mapData[d.country] = d;
});
const handleContextMenu = source => {
const pointerEvent = d3.event;
pointerEvent.preventDefault();
const val = source.id || source.country;
const formattedVal = mapData[val].name;
const filters = [
{
col: entity,
op: '==',
val,
formattedVal,
},
];
onContextMenu(filters, pointerEvent.offsetX, pointerEvent.offsetY);
};
const map = new Datamap({
element,
width,
@@ -111,8 +130,8 @@ function WorldMap(element, props) {
defaultFill: theme.colors.grayscale.light2,
},
geographyConfig: {
popupOnHover: true,
highlightOnHover: true,
popupOnHover: !inContextMenu,
highlightOnHover: !inContextMenu,
borderWidth: 1,
borderColor: theme.colors.grayscale.light5,
highlightBorderColor: theme.colors.grayscale.light5,
@@ -127,7 +146,7 @@ function WorldMap(element, props) {
borderWidth: 1,
borderOpacity: 1,
borderColor: color,
popupOnHover: true,
popupOnHover: !inContextMenu,
radius: null,
popupTemplate: (geo, d) =>
`<div class="hoverinfo"><strong>${d.name}</strong><br>${formatter(
@@ -135,7 +154,7 @@ function WorldMap(element, props) {
)}</div>`,
fillOpacity: 0.5,
animate: true,
highlightOnHover: true,
highlightOnHover: !inContextMenu,
highlightFillColor: color,
highlightBorderColor: theme.colors.grayscale.dark2,
highlightBorderWidth: 2,
@@ -144,6 +163,11 @@ function WorldMap(element, props) {
exitDelay: 100,
key: JSON.stringify,
},
done: datamap => {
datamap.svg
.selectAll('.datamaps-subunit')
.on('contextmenu', handleContextMenu);
},
});
map.updateChoropleth(mapData);
@@ -153,7 +177,8 @@ function WorldMap(element, props) {
div
.selectAll('circle.datamaps-bubble')
.style('fill', color)
.style('stroke', color);
.style('stroke', color)
.on('contextmenu', handleContextMenu);
}
}