UNPKG

@alicloud/cloud-charts

Version:

![](https://img.shields.io/npm/v/@alicloud/cloud-charts?color=%23ff8200)

231 lines (195 loc) 9.76 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); exports.__esModule = true; exports["default"] = TableLegend; var _react = _interopRequireWildcard(require("react")); var _themes = _interopRequireDefault(require("../../../themes")); var _constants = require("../../../constants"); var _chartRefs = require("../../../common/chartRefs"); var _Tooltip = _interopRequireDefault(require("../../../common/Tooltip")); var _LegendMarker = _interopRequireDefault(require("../../../common/LegendMarker")); var _ChartProvider = require("../../../ChartProvider"); require("./index.css"); var prefix = _constants.PrefixName + "-table-legend"; function TableLegend(_ref) { var config = _ref.config, chart = _ref.chart, _ref$legendItems = _ref.legendItems, legendItems = _ref$legendItems === void 0 ? [] : _ref$legendItems; // @ts-ignore var widgetsCtx = chart.widgetsCtx; var _useState = (0, _react.useState)(''), activedItem = _useState[0], setActivedItem = _useState[1]; var _useState2 = (0, _react.useState)([]), filteredItems = _useState2[0], setFilteredItems = _useState2[1]; var legendField = (widgetsCtx === null || widgetsCtx === void 0 ? void 0 : widgetsCtx.legendField) || 'type'; var position = config.position.split('-')[0]; var containerWidth = widgetsCtx === null || widgetsCtx === void 0 ? void 0 : widgetsCtx.size[0]; var containerHeight = (widgetsCtx === null || widgetsCtx === void 0 ? void 0 : widgetsCtx.size[1]) || 200; var statistics = (0, _react.useMemo)(function () { var _config$table; return (config === null || config === void 0 ? void 0 : (_config$table = config.table) === null || _config$table === void 0 ? void 0 : _config$table.statistics) || []; }, [config === null || config === void 0 ? void 0 : config.table]); var statisticsRes = (0, _react.useMemo)(function () { return (0, _chartRefs.getStatistics)(chart, statistics, legendField); }, [chart, statistics, config]); // 计算legend宽高 var height = (0, _react.useMemo)(function () { return Math.min(containerHeight * (position === 'right' ? 1 : 0.3), 20 * legendItems.length + ((statistics === null || statistics === void 0 ? void 0 : statistics.length) > 0 ? 20 : 0)); }, [containerHeight, position, legendItems, statistics]); var width = (0, _react.useMemo)(function () { return containerWidth * (position === 'right' ? 0.5 : 1); }, [containerWidth, position]); // 修改图表宽高 (0, _react.useEffect)(function () { var chartHeight = position === 'right' ? containerHeight : containerHeight - height; var chartWidth = position === 'right' ? containerWidth - width : containerWidth; var chartDom = widgetsCtx === null || widgetsCtx === void 0 ? void 0 : widgetsCtx.chartDom; // @ts-ignore chartDom.style.width = chartWidth + "px"; // @ts-ignore chartDom.style.height = chartHeight + "px"; chart.changeSize(chartWidth, chartHeight); }, [containerHeight, containerWidth, position, height, width, config]); (0, _react.useEffect)(function () { setFilteredItems([]); }, [config]); (0, _react.useEffect)(function () { (0, _chartRefs.filterLegend)(chart, function (value) { return !filteredItems.includes(value); }, legendField); }, [filteredItems]); var activeItem = function activeItem(itemName) { (0, _chartRefs.highlightLegend)(chart, function (value) { return value === itemName; }, legendField); }; var clearActive = function clearActive() { (0, _chartRefs.clearHighlight)(chart); }; (0, _react.useEffect)(function () { clearActive(); if (activedItem) { activeItem(activedItem); } }, [activedItem]); return /*#__PURE__*/_react["default"].createElement("table", { className: prefix + "-container", style: { maxWidth: width, maxHeight: height, // marginTop: position === 'right' ? 0 : 10, marginLeft: position === 'right' ? 10 : 0 } }, (statistics === null || statistics === void 0 ? void 0 : statistics.length) > 0 && /*#__PURE__*/_react["default"].createElement("thead", { className: prefix + "-thead" }, /*#__PURE__*/_react["default"].createElement("tr", { className: prefix + "-tr " + prefix + "-legend-title", style: { gridTemplateColumns: "8px minmax(80px, 100%) repeat(" + (statistics === null || statistics === void 0 ? void 0 : statistics.length) + ", 100px)" } }, /*#__PURE__*/_react["default"].createElement("th", null), /*#__PURE__*/_react["default"].createElement("th", null), statistics === null || statistics === void 0 ? void 0 : statistics.map(function (statistic) { var _widgetsCtx$context; return /*#__PURE__*/_react["default"].createElement("th", { key: statistic }, (0, _ChartProvider.getText)(statistic, widgetsCtx === null || widgetsCtx === void 0 ? void 0 : widgetsCtx.language, widgetsCtx === null || widgetsCtx === void 0 ? void 0 : (_widgetsCtx$context = widgetsCtx.context) === null || _widgetsCtx$context === void 0 ? void 0 : _widgetsCtx$context.locale)); }))), /*#__PURE__*/_react["default"].createElement("tbody", { className: prefix + "-tbody", style: { maxHeight: height - ((statistics === null || statistics === void 0 ? void 0 : statistics.length) > 0 ? 20 : 0) } }, legendItems.map(function (legendItem) { var _legendItem$id; var name = legendItem.name, marker = legendItem.marker; var id = (_legendItem$id = legendItem.id) !== null && _legendItem$id !== void 0 ? _legendItem$id : name; return /*#__PURE__*/_react["default"].createElement("tr", { key: id, className: prefix + "-tr " + prefix + "-legend-item", style: { gridTemplateColumns: (statistics === null || statistics === void 0 ? void 0 : statistics.length) > 0 ? "8px minmax(80px, 100%) repeat(" + (statistics === null || statistics === void 0 ? void 0 : statistics.length) + ", 100px)" : '8px minmax(80px, 100%)', color: !filteredItems.includes(id) ? activedItem === id ? _themes["default"]['widgets-legend-text-highlight'] : _themes["default"]['widgets-legend-text-normal'] : _themes["default"]['widgets-color-disable'] }, onMouseEnter: function onMouseEnter() { if (!filteredItems.includes(id)) { setActivedItem(id); } }, onMouseLeave: function onMouseLeave() { if (!filteredItems.includes(id)) { setActivedItem(''); } }, onClick: function onClick() { if ((filteredItems === null || filteredItems === void 0 ? void 0 : filteredItems.length) === (legendItems === null || legendItems === void 0 ? void 0 : legendItems.length) - 1 && !filteredItems.includes(id)) { setFilteredItems([]); } else { setFilteredItems(legendItems.map(function (item) { return item.id || item.name; }).filter(function (legendName) { return legendName !== id; })); } } }, /*#__PURE__*/_react["default"].createElement("td", { className: prefix + "-marker", onClick: function onClick(event) { if (filteredItems.includes(id)) { setFilteredItems(function (pre) { return pre.filter(function (filteredItem) { return filteredItem !== id; }); }); } else if (filteredItems.length !== legendItems.length - 1) { setFilteredItems(function (pre) { return [].concat(pre, [id]); }); clearActive(); } else { setFilteredItems([]); } event.stopPropagation(); } }, /*#__PURE__*/_react["default"].createElement(_LegendMarker["default"], { marker: marker, disable: filteredItems.includes(id) })), /*#__PURE__*/_react["default"].createElement("td", null, /*#__PURE__*/_react["default"].createElement(LegendName, { name: name })), statistics === null || statistics === void 0 ? void 0 : statistics.map(function (statistic) { var _statisticsRes$id; var value = (_statisticsRes$id = statisticsRes[id]) === null || _statisticsRes$id === void 0 ? void 0 : _statisticsRes$id[statistic]; if (value || value === 0) { if (config !== null && config !== void 0 && config.valueFormatter && typeof (config === null || config === void 0 ? void 0 : config.valueFormatter) === 'function') { value = config === null || config === void 0 ? void 0 : config.valueFormatter(value); } else { var _config$table2; value = formatValue(value, config === null || config === void 0 ? void 0 : (_config$table2 = config.table) === null || _config$table2 === void 0 ? void 0 : _config$table2.decimal); } } else { value = '-'; } return /*#__PURE__*/_react["default"].createElement("td", { className: prefix + "-statistics", key: statistic }, value); })); }))); } function LegendName(_ref2) { var _ref2$name = _ref2.name, name = _ref2$name === void 0 ? '' : _ref2$name; var ref = (0, _react.useRef)(null); return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", { ref: ref, className: prefix + "-name" }, name), /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], { ref: ref, content: name })); } /** 格式化数字 */ function formatValue(value, digits) { if (digits === void 0) { digits = 3; } return typeof value === 'number' ? value.toFixed(digits) : value.slice(0, digits + 2); }