ze-react-component-library
Version:
ZeroETP React Component Library
181 lines (153 loc) • 7.07 kB
JavaScript
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;