@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
111 lines • 4.97 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
// (C) 2020 GoodData Corporation
var get = require("lodash/get");
var isEmpty = require("lodash/isEmpty");
var isFinite = require("lodash/isFinite");
var escape = require("lodash/escape");
var tooltip_1 = require("../../visualizations/chart/tooltip");
var geoChart_1 = require("../../../constants/geoChart");
var data_1 = require("../../../helpers/geoChart/data");
function isTooltipItemValid(item) {
if (!item) {
return false;
}
var title = item.title;
return Boolean(title);
}
function escapeAttributeValue(value) {
return isFinite(value) ? value : escape(String(value));
}
function formatMeasure(item, separators) {
var title = item.title, value = item.value, format = item.format;
return {
title: title,
value: isFinite(value) ? tooltip_1.formatValueForTooltip(value, format, separators) : geoChart_1.NULL_TOOLTIP_VALUE,
};
}
function formatAttribute(item) {
var value = item.value;
return __assign({}, item, { value: Boolean(value) ? escapeAttributeValue(value) : geoChart_1.NULL_TOOLTIP_VALUE });
}
function shouldShowTooltip(geoProperties) {
if (isEmpty(geoProperties)) {
return false;
}
var locationName = geoProperties.locationName, color = geoProperties.color, size = geoProperties.size, segment = geoProperties.segment;
return (isTooltipItemValid(locationName) ||
isTooltipItemValid(size) ||
isTooltipItemValid(color) ||
isTooltipItemValid(segment));
}
exports.shouldShowTooltip = shouldShowTooltip;
function getTooltipHtml(geoProperties, tooltipStroke, maxWidth, separators) {
var _a = geoProperties.locationName, locationName = _a === void 0 ? {} : _a, _b = geoProperties.size, size = _b === void 0 ? {} : _b, _c = geoProperties.color, color = _c === void 0 ? {} : _c, _d = geoProperties.segment, segment = _d === void 0 ? {} : _d;
var tooltipItems = [
formatAttribute(locationName),
formatMeasure(size, separators),
formatMeasure(color, separators),
formatAttribute(segment),
]
.map(getTooltipItemHtml)
.join("");
return "<div class=\"gd-viz-tooltip\" style=\"max-width:" + maxWidth + "px\">\n <span class=\"stroke gd-viz-tooltip-stroke\" style=\"border-top-color: " + tooltipStroke + "\"></span>\n <div class=\"content gd-viz-tooltip-content\">" + tooltipItems + "</div>\n </div>";
}
exports.getTooltipHtml = getTooltipHtml;
function getTooltipItemHtml(item) {
if (!isTooltipItemValid(item)) {
return "";
}
// value is escaped in formatAttribute or formatMeasure function
var title = item.title, value = item.value;
return "<div class=\"gd-viz-tooltip-item\">\n <span class=\"gd-viz-tooltip-title\">" + escape(title) + "</span>\n <div class=\"gd-viz-tooltip-value-wraper\">\n <span class=\"gd-viz-tooltip-value\">" + value + "</span>\n </div>\n </div>";
}
exports.handlePushpinMouseEnter = function (e, chart, tooltip, config) {
if (isTooltipDisabled(config)) {
return;
}
var separators = config.separators;
var feature = e.features[0];
var properties = feature.properties;
var parsedProps = data_1.parseGeoProperties(properties);
if (!shouldShowTooltip(parsedProps)) {
return;
}
chart.getCanvas().style.cursor = "pointer";
var coordinates = feature.geometry.coordinates.slice();
var tooltipStroke = get(parsedProps, "color.background", geoChart_1.DEFAULT_PUSHPIN_COLOR_VALUE);
var isFullScreenTooltip = tooltip_1.isTooltipShownInFullScreen();
var chartWidth = chart.getCanvas().clientWidth;
var maxTooltipContentWidth = tooltip_1.getTooltipContentWidth(isFullScreenTooltip, chartWidth, tooltip_1.TOOLTIP_MAX_WIDTH);
var tooltipHtml = getTooltipHtml(parsedProps, tooltipStroke, maxTooltipContentWidth, separators);
tooltip
.setLngLat(coordinates)
.setHTML(tooltipHtml)
.setMaxWidth(maxTooltipContentWidth + "px")
.addTo(chart);
};
exports.handlePushpinMouseLeave = function (_e, chart, tooltip, config) {
if (isTooltipDisabled(config)) {
return;
}
chart.getCanvas().style.cursor = "";
tooltip.remove();
};
// Tooltips are now switched off in edit/export mode
function isTooltipDisabled(config) {
var _a = config.viewport, viewport = _a === void 0 ? {} : _a;
return Boolean(viewport.frozen);
}
//# sourceMappingURL=geoChartTooltip.js.map