@easyv/charts 1.4.19 → 1.4.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -70,7 +70,9 @@ var Chart = /*#__PURE__*/(0, _react.memo)(function (_ref) {
70
70
  brush = _ref$config.brush,
71
71
  style = _ref.style,
72
72
  originData = _ref.originData,
73
- filterData = _ref.filterData;
73
+ filterData = _ref.filterData,
74
+ aiFormatter = _ref.aiFormatter,
75
+ id = _ref.id;
74
76
  var context = (0, _react.useContext)(_context.chartContext);
75
77
 
76
78
  var _useState = (0, _react.useState)(false),
@@ -89,9 +91,27 @@ var Chart = /*#__PURE__*/(0, _react.memo)(function (_ref) {
89
91
  axes: axesConfig,
90
92
  context: context
91
93
  });
94
+ var aiData = aiFormatter ? aiFormatter(originData, axes, series) : (0, _hooks.useAiData)(originData, axes, series);
92
95
  var axisX = (0, _hooks.useCarouselAxisX)(axes.get('x'), animation, isHover);
93
96
  var xLineRange = width - marginLeft - marginRight;
94
97
  var yLineRange = height - marginTop - marginBottom;
98
+ (0, _react.useEffect)(function () {
99
+ if (aiData.length) {
100
+ if (!window.aiData) {
101
+ window.aiData = {};
102
+ }
103
+
104
+ window.aiData[id] = {
105
+ getAI: function getAI() {
106
+ return aiData;
107
+ }
108
+ };
109
+ }
110
+
111
+ return function () {
112
+ delete window.aiData[id];
113
+ };
114
+ }, [JSON.stringify(aiData), id]);
95
115
 
96
116
  var _useTooltip = (0, _hooks.useTooltip)({
97
117
  svg: svg,
@@ -37,6 +37,8 @@ var _formatter = require("../formatter");
37
37
 
38
38
  var _piechartModule = _interopRequireDefault(require("../css/piechart.module.css"));
39
39
 
40
+ var _hooks = require("../hooks");
41
+
40
42
  var _excluded = ["startAngle", "endAngle", "antiClockwise"],
41
43
  _excluded2 = ["padAngle", "innerRadius", "outerRadius", "cornerRadius", "startAngle", "endAngle"],
42
44
  _excluded3 = ["formatter"],
@@ -523,6 +525,24 @@ var Component = /*#__PURE__*/(0, _react.memo)(function (_ref5) {
523
525
  animation = null;
524
526
  };
525
527
  }, [JSON.stringify(arcs), on, currentIndex, trigger, onEmit, triggerOnRelative]);
528
+ var aiData = (0, _hooks.useAiDataOfPie)(_arcs, legend);
529
+ (0, _react.useEffect)(function () {
530
+ if (aiData.length) {
531
+ if (!window.aiData) {
532
+ window.aiData = {};
533
+ }
534
+
535
+ window.aiData[id] = {
536
+ getAI: function getAI() {
537
+ return aiData;
538
+ }
539
+ };
540
+ }
541
+
542
+ return function () {
543
+ delete window.aiData[id];
544
+ };
545
+ }, [JSON.stringify(aiData), id]);
526
546
  var halfChartWidth = chartWidth / 2;
527
547
  var halfChartHeight = chartHeight / 2;
528
548
  var rotate_ = decorate2 ? -(arcs[+currentIndex].startAngle + arcs[+currentIndex].endAngle) * 90 / Math.PI + rotate : 0;
@@ -5,6 +5,18 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ Object.defineProperty(exports, "useAiData", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _useAiData.useAiData;
12
+ }
13
+ });
14
+ Object.defineProperty(exports, "useAiDataOfPie", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _useAiData.useAiDataOfPie;
18
+ }
19
+ });
8
20
  Object.defineProperty(exports, "useAnimateData", {
9
21
  enumerable: true,
10
22
  get: function get() {
@@ -60,4 +72,6 @@ var _useAnimateData = _interopRequireDefault(require("./useAnimateData"));
60
72
 
61
73
  var _useCarouselAxisX = _interopRequireDefault(require("./useCarouselAxisX"));
62
74
 
63
- var _useExtentData = _interopRequireDefault(require("./useExtentData"));
75
+ var _useExtentData = _interopRequireDefault(require("./useExtentData"));
76
+
77
+ var _useAiData = require("./useAiData");
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useAiDataOfPie = exports.useAiData = void 0;
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ //生成AI图表分析所需的数据
15
+ var useAiData = function useAiData(data, axes, series) {
16
+ try {
17
+ var xAxis = axes.get("x");
18
+ var xType = xAxis.config.label.format.type == "date" ? "时间" : "类别";
19
+ var seriesMap = new Map(series.map(function (d) {
20
+ var type = d.yOrZ;
21
+ var yAxis = axes.get(type);
22
+ var _yAxis$config$unit = yAxis.config.unit,
23
+ show = _yAxis$config$unit.show,
24
+ text = _yAxis$config$unit.text;
25
+ var unit = show ? text : "";
26
+ return [d.name, d.displayName + (unit === "" ? "" : "(".concat(unit, ")"))];
27
+ }));
28
+ var res = new Map();
29
+ data.forEach(function (d) {
30
+ var x = d.x,
31
+ y = d.y,
32
+ s = d.s;
33
+ var arr = res.get(x);
34
+ var sObj = seriesMap.get(s);
35
+
36
+ if (arr) {
37
+ arr.push((0, _defineProperty2["default"])({}, sObj, y));
38
+ } else {
39
+ res.set(x, [(0, _defineProperty2["default"])({}, sObj, y)]);
40
+ }
41
+ });
42
+ return (0, _toConsumableArray2["default"])(res).map(function (d) {
43
+ var obj = (0, _defineProperty2["default"])({}, xType, d[0]);
44
+ d[1].forEach(function (v) {
45
+ var target = Object.entries(v)[0];
46
+ obj[target[0]] = target[1];
47
+ });
48
+ return obj;
49
+ });
50
+ } catch (e) {// console.error("生成AI数据失败:",e);
51
+ }
52
+
53
+ return [];
54
+ }; //生成饼图的AI图表分析所需的数据
55
+
56
+
57
+ exports.useAiData = useAiData;
58
+
59
+ var useAiDataOfPie = function useAiDataOfPie(series, legend) {
60
+ try {
61
+ var _legend$config$value$ = legend.config.value.suffix,
62
+ show = _legend$config$value$.show,
63
+ text = _legend$config$value$.text;
64
+ return series.map(function (d) {
65
+ var _ref2;
66
+
67
+ return _ref2 = {}, (0, _defineProperty2["default"])(_ref2, d.displayName, d.value + (show ? text : "")), (0, _defineProperty2["default"])(_ref2, "占比值", d.percent + "%"), _ref2;
68
+ });
69
+ } catch (e) {// console.error("生成ai数据失败:",e);
70
+ }
71
+
72
+ return [];
73
+ };
74
+
75
+ exports.useAiDataOfPie = useAiDataOfPie;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easyv/charts",
3
- "version": "1.4.19",
3
+ "version": "1.4.21",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -8,8 +8,9 @@ import React, {
8
8
  useRef,
9
9
  useContext,
10
10
  useCallback,
11
+ useEffect
11
12
  } from 'react';
12
- import { useAxes, useTooltip, useCarouselAxisX } from '../hooks';
13
+ import { useAxes, useTooltip, useCarouselAxisX, useAiData } from '../hooks';
13
14
  import { chartContext } from '../context';
14
15
  import {
15
16
  ChartContainer,
@@ -53,12 +54,13 @@ const Chart = memo(
53
54
  config: tooltipConfig = {},
54
55
  config: { auto, manual, indicator = {} } = {},
55
56
  } = {},
56
- brush,
57
+ brush
57
58
  },
58
59
  style,
59
- //data,
60
60
  originData,
61
61
  filterData,
62
+ aiFormatter,
63
+ id
62
64
  }) => {
63
65
  const context = useContext(chartContext);
64
66
  const [isHover, setIsHover] = useState(false);
@@ -70,10 +72,26 @@ const Chart = memo(
70
72
  } = useContext(chartContext);
71
73
  const svg = useRef();
72
74
  const axes = useAxes({ axes: axesConfig, context });
73
-
75
+ const aiData = aiFormatter?aiFormatter(originData, axes, series):useAiData(originData, axes, series);
74
76
  const axisX = useCarouselAxisX(axes.get('x'), animation, isHover);
75
77
  const xLineRange = width-marginLeft-marginRight;
76
78
  const yLineRange = height-marginTop-marginBottom;
79
+
80
+ useEffect(()=>{
81
+ if(aiData.length){
82
+ if(!window.aiData){
83
+ window.aiData={};
84
+ }
85
+ window.aiData[id]={
86
+ getAI:()=>{
87
+ return aiData;
88
+ }
89
+ }
90
+ }
91
+ return ()=>{
92
+ delete window.aiData[id];
93
+ }
94
+ },[JSON.stringify(aiData),id]);
77
95
 
78
96
  const {
79
97
  x: tooltipX,
@@ -122,7 +140,7 @@ const Chart = memo(
122
140
  },
123
141
  [triggerOnRelative, onEmit]
124
142
  );
125
-
143
+
126
144
  return (
127
145
  <>
128
146
  <ChartContainer
@@ -179,7 +197,7 @@ const Chart = memo(
179
197
  />
180
198
  )
181
199
  );
182
- })}
200
+ })}
183
201
  {series.map(({ Component, yOrZ, ...config }, index) => {
184
202
  const yAxis = axes.get(yOrZ);
185
203
  return (
@@ -7,6 +7,7 @@ import React, {
7
7
  useCallback,
8
8
  useRef,
9
9
  useState,
10
+ useEffect,
10
11
  useContext,
11
12
  useLayoutEffect,
12
13
  Fragment,
@@ -24,6 +25,7 @@ import { animate, linear } from 'popmotion';
24
25
  import LinearGradient from './LinearGradient';
25
26
  import { pieLegendFormatter as legendFormatter } from '../formatter';
26
27
  import ringCss from '../css/piechart.module.css';
28
+ import { useAiDataOfPie } from '../hooks';
27
29
 
28
30
  const PI = Math.PI;
29
31
 
@@ -284,7 +286,6 @@ const Component = memo(
284
286
  triggerOnRelative,
285
287
  onEmit,
286
288
  } = useContext(chartContext);
287
-
288
289
  const [y, setY] = useState(1);
289
290
  const radius = (Math.min(chartWidth, chartHeight) / 2) * outerRadius;
290
291
 
@@ -382,7 +383,7 @@ const Component = memo(
382
383
  if(_series.length<arcs.length) console.warn("请检查数据中是否存在相同的s");
383
384
  return arcs.map((arc, index) => getArc(radius, arc, _series, index));
384
385
  }, [series, arcs, radius]);
385
-
386
+
386
387
  const onClick = useCallback(
387
388
  (e) =>
388
389
  onEvent({
@@ -448,6 +449,22 @@ const Component = memo(
448
449
  onEmit,
449
450
  triggerOnRelative,
450
451
  ]);
452
+ const aiData = useAiDataOfPie(_arcs, legend);
453
+ useEffect(()=>{
454
+ if(aiData.length){
455
+ if(!window.aiData){
456
+ window.aiData={};
457
+ }
458
+ window.aiData[id]={
459
+ getAI:()=>{
460
+ return aiData;
461
+ }
462
+ }
463
+ }
464
+ return ()=>{
465
+ delete window.aiData[id];
466
+ }
467
+ },[JSON.stringify(aiData),id]);
451
468
 
452
469
  const halfChartWidth = chartWidth / 2;
453
470
  const halfChartHeight = chartHeight / 2;
@@ -5,6 +5,7 @@ import useTooltip from './useTooltip';
5
5
  import useAnimateData from './useAnimateData';
6
6
  import useCarouselAxisX from './useCarouselAxisX';
7
7
  import useExtentData from './useExtentData';
8
+ import { useAiData, useAiDataOfPie } from './useAiData';
8
9
 
9
10
  export {
10
11
  useFilterData,
@@ -14,4 +15,6 @@ export {
14
15
  useAnimateData,
15
16
  useCarouselAxisX,
16
17
  useExtentData,
18
+ useAiData,
19
+ useAiDataOfPie
17
20
  };
@@ -0,0 +1,58 @@
1
+ //生成AI图表分析所需的数据
2
+ export const useAiData = (data, axes, series)=>{
3
+ try{
4
+ const xAxis = axes.get("x");
5
+ const xType = xAxis.config.label.format.type=="date"?"时间":"类别";
6
+ const seriesMap = new Map(series.map(d=>{
7
+ const type = d.yOrZ;
8
+ const yAxis = axes.get(type);
9
+ const { show, text } = yAxis.config.unit;
10
+ const unit = show?text:"";
11
+ return [d.name, d.displayName+(unit===""?"":`(${unit})`)];
12
+ }));
13
+ const res = new Map();
14
+ data.forEach(d=>{
15
+ const { x, y, s } = d;
16
+ const arr = res.get(x);
17
+ const sObj = seriesMap.get(s);
18
+ if(arr){
19
+ arr.push({
20
+ [sObj]:y
21
+ });
22
+ }else{
23
+ res.set(x,[{
24
+ [sObj]:y
25
+ }]);
26
+ }
27
+ });
28
+ return [...res].map(d=>{
29
+ const obj = {
30
+ [xType]:d[0]
31
+ }
32
+ d[1].forEach(v=>{
33
+ const target = Object.entries(v)[0];
34
+ obj[target[0]] = target[1];
35
+ });
36
+ return obj;
37
+ });
38
+ }catch(e){
39
+ // console.error("生成AI数据失败:",e);
40
+ }
41
+ return [];
42
+ }
43
+
44
+ //生成饼图的AI图表分析所需的数据
45
+ export const useAiDataOfPie = (series, legend)=>{
46
+ try{
47
+ const { show, text } = legend.config.value.suffix;
48
+ return series.map(d=>{
49
+ return {
50
+ [d.displayName]:d.value+(show?text:""),
51
+ "占比值":d.percent+"%"
52
+ }
53
+ })
54
+ }catch(e){
55
+ // console.error("生成ai数据失败:",e);
56
+ }
57
+ return [];
58
+ }