onesight-charts 0.7.2 → 0.7.3

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.
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import BrushLine from "../index";
3
3
  function App() {
4
- var xData = ['2025.10.29', '2025.10.30', '2025.10.31', '2025.11.01', '2025.11.02', '2025.11.03', '2025.11.04', '2025.11.05', '2025.11.06', '2025.11.07', '2025.11.08', '2025.11.09', '2025.11.10'];
4
+ var xData = ['2025-10-14 08:00:00', '2025-10-15 08:00:00', '2025-10-16 08:00:00', '2025-10-17 08:00:00', '2025-10-18 08:00:00', '2025-10-19 08:00:00', '2025-10-20 08:00:00', '2025-10-21 08:00:00', '2025-10-22 08:00:00', '2025-10-23 08:00:00', '2025-10-24 08:00:00', '2025-10-25 08:00:00', '2025-10-26 08:00:00'];
5
5
  var yData = [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300];
6
6
 
7
7
  // type: 'dataPointType' | 'tooltipType'
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1
7
  import * as echarts from 'echarts';
2
8
  import React, { useEffect, useRef } from 'react';
3
9
  import { numberFormat } from "../../utils/chartUtils";
@@ -16,9 +22,40 @@ function BrushLine(props) {
16
22
  _props$handleClick = props.handleClick,
17
23
  handleClick = _props$handleClick === void 0 ? function () {} : _props$handleClick;
18
24
  var chartRef = useRef(null);
25
+
26
+ // 创建别名映射(目前为空,如果将来需要支持别名可以扩展)
27
+ var aliasMap = {};
19
28
  useEffect(function () {
20
29
  init();
30
+ bindClickEvents();
31
+ return function () {
32
+ unbindClickEvents();
33
+ };
21
34
  }, []);
35
+ var onChartClick = function onChartClick(event) {
36
+ var seriesNameElement = event.target.closest('.item');
37
+ if (seriesNameElement) {
38
+ var seriesItem = seriesNameElement.getAttribute('data-series-item');
39
+ var seriesData = JSON.parse(seriesItem);
40
+ // 使用 dataIndex 从原始 xData 获取原始日期
41
+ if (seriesData.dataIndex !== undefined && xData && Array.isArray(xData) && xData[seriesData.dataIndex]) {
42
+ seriesData.date = xData[seriesData.dataIndex];
43
+ }
44
+ // 添加 alias 到 seriesData
45
+ if (seriesData.seriesName && aliasMap[seriesData.seriesName]) {
46
+ seriesData.alias = aliasMap[seriesData.seriesName];
47
+ }
48
+ handleClick && handleClick('tooltipType', seriesData);
49
+ }
50
+ };
51
+ var bindClickEvents = function bindClickEvents() {
52
+ var chartElement = chartRef.current;
53
+ chartElement && chartElement.addEventListener('click', onChartClick);
54
+ };
55
+ var unbindClickEvents = function unbindClickEvents() {
56
+ var chartElement = chartRef.current;
57
+ chartElement && chartElement.removeEventListener('click', onChartClick);
58
+ };
22
59
  function formatNum(d) {
23
60
  if (isNaN(d) || d === null) {
24
61
  return '-';
@@ -26,6 +63,48 @@ function BrushLine(props) {
26
63
  return numberFormat(d);
27
64
  }
28
65
  }
66
+ function formatDateTime(dateTimeStr) {
67
+ // 将 "2025-10-14 08:00:00" 格式转换为 "10/14\n08:00" (两行显示)
68
+ if (typeof dateTimeStr === 'string' && dateTimeStr.includes('-')) {
69
+ var dateTime = dateTimeStr.split(' ');
70
+ if (dateTime.length === 2) {
71
+ var datePart = dateTime[0]; // "2025-10-14"
72
+ var timePart = dateTime[1]; // "08:00:00"
73
+ var _datePart$split = datePart.split('-'),
74
+ _datePart$split2 = _slicedToArray(_datePart$split, 3),
75
+ year = _datePart$split2[0],
76
+ month = _datePart$split2[1],
77
+ day = _datePart$split2[2];
78
+ var _timePart$split = timePart.split(':'),
79
+ _timePart$split2 = _slicedToArray(_timePart$split, 2),
80
+ hour = _timePart$split2[0],
81
+ minute = _timePart$split2[1];
82
+ return "".concat(month, "/").concat(day, "\n").concat(hour, ":").concat(minute);
83
+ }
84
+ }
85
+ return dateTimeStr;
86
+ }
87
+ function formatDateTimeForTooltip(dateTimeStr) {
88
+ // 将 "2025-10-14 08:00:00" 格式转换为 "10/14 08:00" (tooltip 中单行显示)
89
+ if (typeof dateTimeStr === 'string' && dateTimeStr.includes('-')) {
90
+ var dateTime = dateTimeStr.split(' ');
91
+ if (dateTime.length === 2) {
92
+ var datePart = dateTime[0]; // "2025-10-14"
93
+ var timePart = dateTime[1]; // "08:00:00"
94
+ var _datePart$split3 = datePart.split('-'),
95
+ _datePart$split4 = _slicedToArray(_datePart$split3, 3),
96
+ year = _datePart$split4[0],
97
+ month = _datePart$split4[1],
98
+ day = _datePart$split4[2];
99
+ var _timePart$split3 = timePart.split(':'),
100
+ _timePart$split4 = _slicedToArray(_timePart$split3, 2),
101
+ hour = _timePart$split4[0],
102
+ minute = _timePart$split4[1];
103
+ return "".concat(month, "/").concat(day, " ").concat(hour, ":").concat(minute);
104
+ }
105
+ }
106
+ return dateTimeStr;
107
+ }
29
108
  var init = function init() {
30
109
  var myChart = null;
31
110
  var myDom = chartRef.current;
@@ -49,8 +128,17 @@ function BrushLine(props) {
49
128
  formatter: function formatter(res) {
50
129
  var _res$ = res[0],
51
130
  axisValue = _res$.axisValue,
52
- data = _res$.data;
53
- return "<div class=\"brush-line-tooltip-wrap\">\n <div class='brush-line-tooltip-title'>".concat(axisValue, "</div>\n <div class=\"brush-line-tooltip-content\">\n <span class=\"brush-line-tooltip-item\">\n <i class=\"brush-line-tooltip-icon\" style=\"background:#1DA9A0\"></i>\n ").concat(tooltipItemName, "\n </span>\n <span class=\"brush-line-tooltip-item-value\">").concat(formatNum(data), "</span>\n </div>\n </div>");
131
+ data = _res$.data,
132
+ dataIndex = _res$.dataIndex;
133
+ // 构建 seriesData 对象,用于点击事件
134
+ var seriesData = {
135
+ seriesName: tooltipItemName,
136
+ value: data,
137
+ date: axisValue,
138
+ dataIndex: dataIndex,
139
+ color: '#1DA9A0'
140
+ };
141
+ return "<div class=\"brush-line-tooltip-wrap\">\n <div class='brush-line-tooltip-title'>".concat(formatDateTimeForTooltip(axisValue), "</div>\n <div class=\"brush-line-tooltip-content\">\n <span class=\"brush-line-tooltip-item item\" data-series-item='").concat(JSON.stringify(seriesData), "'>\n <i class=\"brush-line-tooltip-icon\" style=\"background:#1DA9A0\"></i>\n ").concat(tooltipItemName, "\n </span>\n <span class=\"brush-line-tooltip-item-value\">").concat(formatNum(data), "</span>\n </div>\n </div>");
54
142
  }
55
143
  },
56
144
  grid: {
@@ -80,7 +168,7 @@ function BrushLine(props) {
80
168
  fontSize: 12,
81
169
  lineHeight: 15,
82
170
  formatter: function formatter(v) {
83
- return '2025.10.29';
171
+ return formatDateTime(v);
84
172
  }
85
173
  },
86
174
  axisPointer: {
@@ -36,19 +36,19 @@ var import_react = __toESM(require("react"));
36
36
  var import__ = __toESM(require("../index"));
37
37
  function App() {
38
38
  const xData = [
39
- "2025.10.29",
40
- "2025.10.30",
41
- "2025.10.31",
42
- "2025.11.01",
43
- "2025.11.02",
44
- "2025.11.03",
45
- "2025.11.04",
46
- "2025.11.05",
47
- "2025.11.06",
48
- "2025.11.07",
49
- "2025.11.08",
50
- "2025.11.09",
51
- "2025.11.10"
39
+ "2025-10-14 08:00:00",
40
+ "2025-10-15 08:00:00",
41
+ "2025-10-16 08:00:00",
42
+ "2025-10-17 08:00:00",
43
+ "2025-10-18 08:00:00",
44
+ "2025-10-19 08:00:00",
45
+ "2025-10-20 08:00:00",
46
+ "2025-10-21 08:00:00",
47
+ "2025-10-22 08:00:00",
48
+ "2025-10-23 08:00:00",
49
+ "2025-10-24 08:00:00",
50
+ "2025-10-25 08:00:00",
51
+ "2025-10-26 08:00:00"
52
52
  ];
53
53
  const yData = [
54
54
  100,
@@ -47,9 +47,36 @@ function BrushLine(props) {
47
47
  }
48
48
  } = props;
49
49
  const chartRef = (0, import_react.useRef)(null);
50
+ const aliasMap = {};
50
51
  (0, import_react.useEffect)(() => {
51
52
  init2();
53
+ bindClickEvents();
54
+ return () => {
55
+ unbindClickEvents();
56
+ };
52
57
  }, []);
58
+ const onChartClick = (event) => {
59
+ const seriesNameElement = event.target.closest(".item");
60
+ if (seriesNameElement) {
61
+ const seriesItem = seriesNameElement.getAttribute("data-series-item");
62
+ const seriesData = JSON.parse(seriesItem);
63
+ if (seriesData.dataIndex !== void 0 && xData && Array.isArray(xData) && xData[seriesData.dataIndex]) {
64
+ seriesData.date = xData[seriesData.dataIndex];
65
+ }
66
+ if (seriesData.seriesName && aliasMap[seriesData.seriesName]) {
67
+ seriesData.alias = aliasMap[seriesData.seriesName];
68
+ }
69
+ handleClick && handleClick("tooltipType", seriesData);
70
+ }
71
+ };
72
+ const bindClickEvents = () => {
73
+ const chartElement = chartRef.current;
74
+ chartElement && chartElement.addEventListener("click", onChartClick);
75
+ };
76
+ const unbindClickEvents = () => {
77
+ const chartElement = chartRef.current;
78
+ chartElement && chartElement.removeEventListener("click", onChartClick);
79
+ };
53
80
  function formatNum(d) {
54
81
  if (isNaN(d) || d === null) {
55
82
  return "-";
@@ -57,6 +84,33 @@ function BrushLine(props) {
57
84
  return (0, import_chartUtils.numberFormat)(d);
58
85
  }
59
86
  }
87
+ function formatDateTime(dateTimeStr) {
88
+ if (typeof dateTimeStr === "string" && dateTimeStr.includes("-")) {
89
+ const dateTime = dateTimeStr.split(" ");
90
+ if (dateTime.length === 2) {
91
+ const datePart = dateTime[0];
92
+ const timePart = dateTime[1];
93
+ const [year, month, day] = datePart.split("-");
94
+ const [hour, minute] = timePart.split(":");
95
+ return `${month}/${day}
96
+ ${hour}:${minute}`;
97
+ }
98
+ }
99
+ return dateTimeStr;
100
+ }
101
+ function formatDateTimeForTooltip(dateTimeStr) {
102
+ if (typeof dateTimeStr === "string" && dateTimeStr.includes("-")) {
103
+ const dateTime = dateTimeStr.split(" ");
104
+ if (dateTime.length === 2) {
105
+ const datePart = dateTime[0];
106
+ const timePart = dateTime[1];
107
+ const [year, month, day] = datePart.split("-");
108
+ const [hour, minute] = timePart.split(":");
109
+ return `${month}/${day} ${hour}:${minute}`;
110
+ }
111
+ }
112
+ return dateTimeStr;
113
+ }
60
114
  const init2 = () => {
61
115
  let myChart = null;
62
116
  const myDom = chartRef.current;
@@ -78,11 +132,22 @@ function BrushLine(props) {
78
132
  // alwaysShowContent: true,
79
133
  // hideDelay: 1000000000,
80
134
  formatter: function(res) {
81
- const { axisValue, data } = res[0];
135
+ const { axisValue, data, dataIndex } = res[0];
136
+ const seriesData = {
137
+ seriesName: tooltipItemName,
138
+ value: data,
139
+ date: axisValue,
140
+ dataIndex,
141
+ color: "#1DA9A0"
142
+ };
82
143
  return `<div class="brush-line-tooltip-wrap">
83
- <div class='brush-line-tooltip-title'>${axisValue}</div>
144
+ <div class='brush-line-tooltip-title'>${formatDateTimeForTooltip(
145
+ axisValue
146
+ )}</div>
84
147
  <div class="brush-line-tooltip-content">
85
- <span class="brush-line-tooltip-item">
148
+ <span class="brush-line-tooltip-item item" data-series-item='${JSON.stringify(
149
+ seriesData
150
+ )}'>
86
151
  <i class="brush-line-tooltip-icon" style="background:#1DA9A0"></i>
87
152
  ${tooltipItemName}
88
153
  </span>
@@ -120,7 +185,7 @@ function BrushLine(props) {
120
185
  fontSize: 12,
121
186
  lineHeight: 15,
122
187
  formatter: function(v) {
123
- return "2025.10.29";
188
+ return formatDateTime(v);
124
189
  }
125
190
  },
126
191
  axisPointer: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "onesight-charts",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "private": false,
5
5
  "description": "OneSight前端图表公共组件库",
6
6
  "license": "MIT",