mirror of
https://github.com/apache/superset.git
synced 2026-04-22 09:35:23 +00:00
* Simplifying the viz interface (#2005) * Working on dashes * Making this a collaborative branch * Fixing some bugs * Fixing bugs * More improvements * Add datasource back in bootstrap data * Decent state * Linting * Moving forward * Some more linting * Fix the timer * Triggering events through state * Lingint * Put filters in an array instead of flt strings (#2090) * Put filters in an array instead of flt strings * Remove query_filter(), put opChoices into Filter * Update version_info.json * Fix migrations * More renderTrigger=true * Fixing bugs * Working on standalone * getting standalone to work * Fixed forcedHeight for standalone =view * Linting * Get save slice working in v2 (#2106) * Filter bugfix * Fixing empty series limit bug * Fixed dashboard view * Fixing short urls * Only allow owners to overwrite slice (#2142) * Raise exception when date range is wrong * Only allow owner to overwrite a slice * Fix tests for deprecate v1 (#2140) * Fixed tests for control panels container and filters * Fixed python tests for explorev2 * Fix linting errors * Add in stop button during slice querying/rendering (#2121) * Add in stop button during slice querying/rendering * Abort ajax request on stop * Adding missing legacy module * Removing select2.sortable.js because of license * Allow query to display while slice is loading (#2100) * Allow query to display while slice is loading * Put latestQueryFormData in store * Reorganized query function, got rid of tu[le return values * Merging migrations * Wrapping up shortner migration * Fixing tests * Add folder creation to syncBackend * Fixing edit URL in explore view * Fix look of Stop button * Adding syntax highlighting to query modal * Fix cast_form_data and flase checkbox on dash * Bugfix * Going deeper * Fix filtering * Deleing invalid filters when changing datasource * Minor adjustments * Fixing calendar heatmap examples * Moving edit datasource button to header's right side * Fixing mapbox example * Show stack trace when clicking alert * Adding npm sync-backend command to build instruction * Bumping up JS dependencies * rm dep on select2 * Fix py3 urlparse * rm superset-select2.js * Improving migration scripts * Bugfixes on staging * Fixing Markup viz
95 lines
2.3 KiB
JavaScript
95 lines
2.3 KiB
JavaScript
// JS
|
|
const d3 = require('d3');
|
|
const Datamap = require('datamaps');
|
|
|
|
// CSS
|
|
require('./world_map.css');
|
|
|
|
function worldMapChart(slice, payload) {
|
|
const container = slice.container;
|
|
const div = d3.select(slice.selector);
|
|
|
|
container.css('height', slice.height());
|
|
div.selectAll('*').remove();
|
|
const fd = slice.formData;
|
|
// Ignore XXX's to get better normalization
|
|
let data = payload.data.filter((d) => (d.country && d.country !== 'XXX'));
|
|
|
|
const ext = d3.extent(data, function (d) {
|
|
return d.m1;
|
|
});
|
|
const extRadius = d3.extent(data, function (d) {
|
|
return d.m2;
|
|
});
|
|
const radiusScale = d3.scale.linear()
|
|
.domain([extRadius[0], extRadius[1]])
|
|
.range([1, fd.max_bubble_size]);
|
|
|
|
const colorScale = d3.scale.linear()
|
|
.domain([ext[0], ext[1]])
|
|
.range(['#FFF', 'black']);
|
|
|
|
data = data.map((d) => Object.assign({}, d, {
|
|
radius: radiusScale(d.m2),
|
|
fillColor: colorScale(d.m1),
|
|
}));
|
|
|
|
const mapData = {};
|
|
data.forEach((d) => {
|
|
mapData[d.country] = d;
|
|
});
|
|
|
|
const f = d3.format('.3s');
|
|
|
|
container.show();
|
|
|
|
const map = new Datamap({
|
|
element: slice.container.get(0),
|
|
data,
|
|
fills: {
|
|
defaultFill: '#ddd',
|
|
},
|
|
geographyConfig: {
|
|
popupOnHover: true,
|
|
highlightOnHover: true,
|
|
borderWidth: 1,
|
|
borderColor: '#fff',
|
|
highlightBorderColor: '#fff',
|
|
highlightFillColor: '#005a63',
|
|
highlightBorderWidth: 1,
|
|
popupTemplate: (geo, d) => (
|
|
`<div class="hoverinfo"><strong>${d.name}</strong><br>${f(d.m1)}</div>`
|
|
),
|
|
},
|
|
bubblesConfig: {
|
|
borderWidth: 1,
|
|
borderOpacity: 1,
|
|
borderColor: '#005a63',
|
|
popupOnHover: true,
|
|
radius: null,
|
|
popupTemplate: (geo, d) => (
|
|
`<div class="hoverinfo"><strong>${d.name}</strong><br>${f(d.m2)}</div>`
|
|
),
|
|
fillOpacity: 0.5,
|
|
animate: true,
|
|
highlightOnHover: true,
|
|
highlightFillColor: '#005a63',
|
|
highlightBorderColor: 'black',
|
|
highlightBorderWidth: 2,
|
|
highlightBorderOpacity: 1,
|
|
highlightFillOpacity: 0.85,
|
|
exitDelay: 100,
|
|
key: JSON.stringify,
|
|
},
|
|
});
|
|
|
|
map.updateChoropleth(mapData);
|
|
|
|
if (fd.show_bubbles) {
|
|
map.bubbles(data);
|
|
div.selectAll('circle.datamaps-bubble').style('fill', '#005a63');
|
|
}
|
|
}
|
|
|
|
module.exports = worldMapChart;
|