UNPKG

@gooddata/react-components

Version:

GoodData.UI - A powerful JavaScript library for building analytical applications

111 lines 4.97 kB
"use strict"; 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