WorldMap.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.default = void 0;
  4. var _d = _interopRequireDefault(require("d3"));
  5. var _propTypes = _interopRequireDefault(require("prop-types"));
  6. var _datamapsWorld = _interopRequireDefault(require("datamaps/dist/datamaps.world.min"));
  7. var _numberFormat = require("@superset-ui/number-format");
  8. require("./WorldMap.css");
  9. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  10. function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
  11. const propTypes = {
  12. data: _propTypes.default.arrayOf(_propTypes.default.shape({
  13. country: _propTypes.default.string,
  14. latitude: _propTypes.default.number,
  15. longitude: _propTypes.default.number,
  16. name: _propTypes.default.string,
  17. m1: _propTypes.default.number,
  18. m2: _propTypes.default.number
  19. })),
  20. height: _propTypes.default.number,
  21. maxBubbleSize: _propTypes.default.number,
  22. showBubbles: _propTypes.default.bool
  23. };
  24. const formatter = (0, _numberFormat.getNumberFormatter)();
  25. function WorldMap(element, props) {
  26. const {
  27. data,
  28. height,
  29. maxBubbleSize,
  30. showBubbles
  31. } = props;
  32. const div = _d.default.select(element);
  33. div.classed('superset-legacy-chart-world-map', true);
  34. const container = element;
  35. container.style.height = height + "px";
  36. div.selectAll('*').remove(); // Ignore XXX's to get better normalization
  37. const filteredData = data.filter(d => d.country && d.country !== 'XXX');
  38. const ext = _d.default.extent(filteredData, d => d.m1);
  39. const extRadius = _d.default.extent(filteredData, d => d.m2);
  40. const radiusScale = _d.default.scale.linear().domain([extRadius[0], extRadius[1]]).range([1, maxBubbleSize]); // color gradient based on http://colorbrewer2.org/#type=sequential&scheme=Greens&n=9
  41. const colorScale = _d.default.scale.linear().domain([ext[0], ext[1]]).range(['#c7e9c0', '#00441b']);
  42. const processedData = filteredData.map(d => _extends({}, d, {
  43. radius: radiusScale(d.m2),
  44. fillColor: colorScale(d.m1)
  45. }));
  46. const mapData = {};
  47. processedData.forEach(d => {
  48. mapData[d.country] = d;
  49. });
  50. const map = new _datamapsWorld.default({
  51. element,
  52. data: processedData,
  53. fills: {
  54. defaultFill: '#eee'
  55. },
  56. geographyConfig: {
  57. popupOnHover: true,
  58. highlightOnHover: true,
  59. borderWidth: 1,
  60. borderColor: '#feffff',
  61. highlightBorderColor: '#feffff',
  62. highlightFillColor: '#00749A',
  63. highlightBorderWidth: 1,
  64. popupTemplate: (geo, d) => "<div class=\"hoverinfo\"><strong>" + d.name + "</strong><br>" + formatter(d.m1) + "</div>"
  65. },
  66. bubblesConfig: {
  67. borderWidth: 1,
  68. borderOpacity: 1,
  69. borderColor: '#00749A',
  70. popupOnHover: true,
  71. radius: null,
  72. popupTemplate: (geo, d) => "<div class=\"hoverinfo\"><strong>" + d.name + "</strong><br>" + formatter(d.m2) + "</div>",
  73. fillOpacity: 0.5,
  74. animate: true,
  75. highlightOnHover: true,
  76. highlightFillColor: '#00749A',
  77. highlightBorderColor: 'black',
  78. highlightBorderWidth: 2,
  79. highlightBorderOpacity: 1,
  80. highlightFillOpacity: 0.85,
  81. exitDelay: 100,
  82. key: JSON.stringify
  83. }
  84. });
  85. map.updateChoropleth(mapData);
  86. if (showBubbles) {
  87. map.bubbles(processedData);
  88. div.selectAll('circle.datamaps-bubble').style('fill', '#00749A');
  89. }
  90. }
  91. WorldMap.displayName = 'WorldMap';
  92. WorldMap.propTypes = propTypes;
  93. var _default = WorldMap;
  94. exports.default = _default;