mirror of
https://github.com/apache/superset.git
synced 2026-04-22 01:24:43 +00:00
* WIP * WIP * WIP * WIP * Fix color bucketing * Fixed colors * Fix no num categories selected * Colors working * Fix no metric selected * Visual cues for selection * Add unit tests * Remove jest from deps * Rename category to bucket * Small fixes * Fix lint * Fix unit tests * Remove duplicate hexToRGB * Fix import * Change order of arguments in getBuckets * Refactor function signature
76 lines
1.8 KiB
JavaScript
76 lines
1.8 KiB
JavaScript
import React from 'react';
|
|
import { fitBounds } from 'viewport-mercator-project';
|
|
import d3 from 'd3';
|
|
import sandboxedEval from '../../../modules/sandbox';
|
|
|
|
export function getBounds(points) {
|
|
const latExt = d3.extent(points, d => d[1]);
|
|
const lngExt = d3.extent(points, d => d[0]);
|
|
return [
|
|
[lngExt[0], latExt[0]],
|
|
[lngExt[1], latExt[1]],
|
|
];
|
|
}
|
|
|
|
export function fitViewport(viewport, points, padding = 10) {
|
|
try {
|
|
const bounds = getBounds(points);
|
|
return {
|
|
...viewport,
|
|
...fitBounds({
|
|
height: viewport.height,
|
|
width: viewport.width,
|
|
padding,
|
|
bounds,
|
|
}),
|
|
};
|
|
} catch (e) {
|
|
/* eslint no-console: 0 */
|
|
console.error('Could not auto zoom', e);
|
|
return viewport;
|
|
}
|
|
}
|
|
|
|
export function commonLayerProps(formData, setTooltip, onSelect) {
|
|
const fd = formData;
|
|
let onHover;
|
|
let tooltipContentGenerator;
|
|
if (fd.js_tooltip) {
|
|
tooltipContentGenerator = sandboxedEval(fd.js_tooltip);
|
|
} else if (fd.line_column && fd.line_type === 'geohash') {
|
|
tooltipContentGenerator = o => (
|
|
<div>
|
|
<div>{fd.line_column}: <strong>{o.object[fd.line_column]}</strong></div>
|
|
{fd.metric &&
|
|
<div>{fd.metric}: <strong>{o.object[fd.metric]}</strong></div>}
|
|
</div>);
|
|
}
|
|
if (tooltipContentGenerator) {
|
|
onHover = (o) => {
|
|
if (o.picked) {
|
|
setTooltip({
|
|
content: tooltipContentGenerator(o),
|
|
x: o.x,
|
|
y: o.y,
|
|
});
|
|
} else {
|
|
setTooltip(null);
|
|
}
|
|
};
|
|
}
|
|
let onClick;
|
|
if (fd.js_onclick_href) {
|
|
onClick = (o) => {
|
|
const href = sandboxedEval(fd.js_onclick_href)(o);
|
|
window.open(href);
|
|
};
|
|
} else if (fd.table_filter && onSelect !== undefined) {
|
|
onClick = o => onSelect(o.object[fd.line_column]);
|
|
}
|
|
return {
|
|
onClick,
|
|
onHover,
|
|
pickable: Boolean(onHover),
|
|
};
|
|
}
|