UNPKG

@gooddata/react-components

Version:

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

90 lines 4.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // (C) 2007-2018 GoodData Corporation var sortBy = require("lodash/sortBy"); var helpers_1 = require("../../helpers"); var dataLabelsHelpers_1 = require("../../dataLabelsHelpers"); var toggleStackedChartLabels = function (visiblePoints, axisRangeForAxes) { var intersectionFound = visiblePoints.filter(dataLabelsHelpers_1.hasDataLabel).some(function (point) { var dataLabel = point.dataLabel, shapeArgs = point.shapeArgs; if (dataLabel && shapeArgs) { var dataLabelAttr = dataLabelsHelpers_1.getDataLabelAttributes(point); var shapeAttr = helpers_1.getShapeAttributes(point); return dataLabelAttr.height + 2 * dataLabel.padding > shapeAttr.height; } return false; }); if (intersectionFound) { dataLabelsHelpers_1.hideDataLabels(visiblePoints); } else { visiblePoints.filter(dataLabelsHelpers_1.hasDataLabel).forEach(function (point) { var dataLabel = point.dataLabel, shapeArgs = point.shapeArgs, chart = point.series.chart; if (dataLabel && shapeArgs) { var dataLabelAttr = dataLabelsHelpers_1.getDataLabelAttributes(point); var shapeAttr = helpers_1.getShapeAttributes(point); var labelWidth = dataLabelAttr.width + 2 * dataLabel.padding; var shapeWidth = dataLabelsHelpers_1.getShapeVisiblePart(shapeArgs, chart, shapeAttr.width); var foundIntersection = labelWidth > shapeWidth; // switch axis for bar chart return foundIntersection ? dataLabelsHelpers_1.hideDataLabel(point) : dataLabelsHelpers_1.showStackLabelInAxisRange(point, axisRangeForAxes); } return null; }); } }; var toggleNonStackedChartLabels = function (points, axisRangeForAxes, shouldCheckShapeIntersection) { if (shouldCheckShapeIntersection === void 0) { shouldCheckShapeIntersection = false; } var sortedPoints = sortBy(points, function (a, b) { var firstLabelAttr = dataLabelsHelpers_1.getDataLabelAttributes(a); var nextLabelAttr = dataLabelsHelpers_1.getDataLabelAttributes(b); return firstLabelAttr.y - nextLabelAttr.y; }); var neighbors = helpers_1.toNeighbors(sortedPoints); var intersectionFound = neighbors.some(function (_a) { var firstPoint = _a[0], nextPoint = _a[1]; var firstDataLabelAttr = dataLabelsHelpers_1.getDataLabelAttributes(firstPoint); var nextDataLabelAttr = dataLabelsHelpers_1.getDataLabelAttributes(nextPoint); if (shouldCheckShapeIntersection) { var firstShapeAttr = helpers_1.getShapeAttributes(firstPoint); var nextShapeAttr = helpers_1.getShapeAttributes(nextPoint); return (helpers_1.isIntersecting(firstDataLabelAttr, nextDataLabelAttr) || helpers_1.isIntersecting(firstDataLabelAttr, nextShapeAttr) || helpers_1.isIntersecting(firstShapeAttr, nextDataLabelAttr)); } return helpers_1.isIntersecting(firstDataLabelAttr, nextDataLabelAttr); }); if (intersectionFound) { dataLabelsHelpers_1.hideDataLabels(points); } else { points.forEach(function (point) { return dataLabelsHelpers_1.showDataLabelInAxisRange(point, point.y, axisRangeForAxes); }); } }; exports.autohideBarLabels = function (chart) { var isStackedChart = helpers_1.isStacked(chart); var visiblePoints = helpers_1.getDataPointsOfVisibleSeries(chart); var axisRangeForAxes = helpers_1.getAxisRangeForAxes(chart); if (isStackedChart) { toggleStackedChartLabels(visiblePoints, axisRangeForAxes); } else { toggleNonStackedChartLabels(visiblePoints, axisRangeForAxes, true); } }; exports.handleBarLabelsOutsideChart = function (chart) { var visiblePoints = helpers_1.getDataPointsOfVisibleSeries(chart); var axisRangeForAxes = helpers_1.getAxisRangeForAxes(chart); visiblePoints.forEach(function (point) { if (!helpers_1.isStacked(chart)) { dataLabelsHelpers_1.showDataLabelInAxisRange(point, point.y, axisRangeForAxes); } else { // fix for HCH bug for negative stack labels dataLabelsHelpers_1.showStackLabelInAxisRange(point, axisRangeForAxes); } }); }; //# sourceMappingURL=autohideBarLabels.js.map