UNPKG

ze-react-component-library

Version:
181 lines (153 loc) 7.07 kB
import "antd/es/result/style"; import _Result from "antd/es/result"; 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); }; /** * */ import React, { memo, useMemo } from "react"; import ReactECharts from "echarts-for-react"; import merge from "deepmerge"; import genCommonOption from "./common-option"; import { ErrorBoundary } from "react-error-boundary"; import { useTheme } from "../../hooks/useTheme"; import { useEChartsSetting } from "../../hooks/useFrontConfig"; import { formatWithProperty } from "../../util"; var Chart = /*#__PURE__*/memo(function (_a) { var result = _a.result, _b = _a.chartOption, chartOption = _b === void 0 ? {} : _b, _c = _a.userOption, userOption = _c === void 0 ? {} : _c, _d = _a.style, style = _d === void 0 ? {} : _d, _e = _a.eventsDict, eventsDict = _e === void 0 ? {} : _e, isMobile = _a.isMobile, useNameAsDimension = _a.useNameAsDimension, height = _a.height, title = _a.title; var theme = useTheme().theme; var echartsSetting = useEChartsSetting(); // console.log("commonOption", commonOption); // console.log("chartOption", chartOption); // console.log("userOption", userOption); // console.log("finalOption", finalOption); var content = useMemo(function () { var commonOption = genCommonOption(result, isMobile, useNameAsDimension, theme, title); var finalOption = merge.all([commonOption, chartOption, userOption]); // 统一根据用户的图表设置来展示label、平均线 if (finalOption.series instanceof Array && result) { finalOption.series = finalOption.series.map(function (d, i) { var _a; var _b, _c, _d, _e, _f, _g, _h, _j; var name = // @ts-ignore (_b = d.name) !== null && _b !== void 0 ? _b : (_d = (_c = finalOption.dataset) === null || _c === void 0 ? void 0 : _c.dimensions) === null || _d === void 0 ? void 0 : _d[i + 1]; var property = (_e = result === null || result === void 0 ? void 0 : result.columnProperties) === null || _e === void 0 ? void 0 : _e.find(function (f) { return f.name === name; }); var s = __assign(__assign({}, d), { label: __assign(__assign({ formatter: function formatter(v) { var _a; return formatWithProperty(property, (_a = v === null || v === void 0 ? void 0 : v.value) === null || _a === void 0 ? void 0 : _a[name]); } }, d.label), echartsSetting === null || echartsSetting === void 0 ? void 0 : echartsSetting.seriesLabel), labelLayout: { hideOverlap: true } }); // 是否展示平均线 if (!["pie", "map", "treemap", "funnel", "guage"].includes(s.type) && ((_f = echartsSetting === null || echartsSetting === void 0 ? void 0 : echartsSetting.averageLine) === null || _f === void 0 ? void 0 : _f.show) && !(finalOption.dataset instanceof Array) && ((_g = finalOption.dataset) === null || _g === void 0 ? void 0 : _g.source) instanceof Array) { var sum_1 = 0; (_h = finalOption.dataset) === null || _h === void 0 ? void 0 : _h.source.forEach(function (m) { var _a; sum_1 = sum_1 + ((_a = m[name]) !== null && _a !== void 0 ? _a : 0); }); var average_1 = Number((sum_1 / finalOption.dataset.source.length).toFixed(2)); var key = "yAxis"; if (finalOption.xAxis instanceof Array) { if (finalOption.xAxis.some(function (d) { return d.type === "value"; })) { key = "xAxis"; } } else if (((_j = finalOption.xAxis) === null || _j === void 0 ? void 0 : _j.type) === "value") { key = "xAxis"; } s.markLine = { data: [(_a = {}, _a[key] = average_1, _a.label = { position: "middle", color: "red", formatter: function formatter(v) { return formatWithProperty(property, average_1); } }, _a.lineStyle = { color: "red" }, _a)], symbol: "none", silent: true }; } return s; }); } // fix: echarts的dblclick同时会触发click,而且移动端dblclick不起作用,这里自己模拟一个 var clickTimer; var echartEventDict = __assign(__assign({}, eventsDict), { dblclick: undefined, click: function click(params) { var _a, _b, _c, _d, _e; // 找到未格式化的原始数据 var originData = ((_b = (_a = params === null || params === void 0 ? void 0 : params.data) === null || _a === void 0 ? void 0 : _a["@rawData"]) === null || _b === void 0 ? void 0 : _b.origin) || []; var seriesIndex = params.seriesIndex; var seriesName = ((_c = result.columnProperties[seriesIndex]) === null || _c === void 0 ? void 0 : _c.name) || ''; var item = originData.find(function (f) { return seriesName.includes(f === null || f === void 0 ? void 0 : f.key); }); if (item) { item.groupby = (_d = result.logicform) === null || _d === void 0 ? void 0 : _d.groupby; } if (clickTimer) { // console.log("dbl click"); clearTimeout(clickTimer); clickTimer = undefined; (_e = eventsDict.dblclick) === null || _e === void 0 ? void 0 : _e.call(eventsDict, params, item); } else { clickTimer = setTimeout(function () { var _a; // console.log("click"); clickTimer = undefined; (_a = eventsDict.click) === null || _a === void 0 ? void 0 : _a.call(eventsDict, params, item); }, 200); } } }); return /*#__PURE__*/React.createElement(ReactECharts, { style: __assign({ height: height !== null && height !== void 0 ? height : "100%", minHeight: 100 }, style), option: finalOption, notMerge: true, lazyUpdate: true, onEvents: echartEventDict, theme: "my_theme" }); }, [theme, echartsSetting, result, JSON.stringify(chartOption), JSON.stringify(userOption), JSON.stringify(style), eventsDict, isMobile, height, useNameAsDimension, title]); return /*#__PURE__*/React.createElement(ErrorBoundary, { fallbackRender: function fallbackRender(errorProps) { return /*#__PURE__*/React.createElement(_Result, { status: "error", title: "\u56FE\u8868\u914D\u7F6E\u6709\u8BEF\uFF0C\u8BF7\u8054\u7CFB\u6280\u672F\u652F\u6301\u68C0\u67E5\u4EE3\u7801", subTitle: errorProps.error }); } }, content); }); export { getChartDataset, tooltipFormatter } from "./common-option"; export default Chart;