{
const svg = d3
.create("svg")
.attr("width", renderData.width)
.attr("height", renderData.height);
const clippedWidth = renderData.width - renderData.margin * 2;
const clippedHeight = renderData.height - renderData.margin * 2;
const geoMercator = d3
.geoMercator()
.center([128, 36])
.fitSize([clippedWidth, clippedHeight], geoJson);
const pathGen = d3.geoPath(geoMercator);
const stage = svg
.append("g")
.attr("transform", `translate(${renderData.margin},${renderData.margin})`);
const textX = 10;
const textY = 10;
const infoText = stage
.append("g")
.attr("transform", `translate(${textX},${textY})`)
.append("text")
.style("font", "20px sans-serif");
infoText.text("Philippines Region");
const onMouseHover = (d) => {
stage
.selectAll(".geopath")
.filter((td) => td.properties.ADM1_EN === d.properties.ADM1_EN)
.attr("fill", "pink");
infoText.text(d.properties.ADM1_EN);
};
const color = "#69b3a2"
const onMouseLeave = (d) => {
stage
.selectAll(".geopath")
.filter((td) => td.properties.ADM1_EN === d.properties.ADM1_EN)
.attr("fill", "color");
infoText.text("Hover on a region");
};
const tEnter = (enter) =>
enter
.append("path")
.attr("d", pathGen)
.attr("stroke", "white")
.attr("fill", color)
.classed("geopath", true)
.on("mouseenter", onMouseHover)
.on("mouseleave", onMouseLeave);
const tUpdate = null;
const tExit = null;
stage
.selectAll(".geopath")
.data(geoJson.features)
.join(tEnter, tUpdate, tExit);
return svg.node();
}