@gravity-ui/chartkit 2.8.1 → 2.10.0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.10.0](https://github.com/gravity-ui/chartkit/compare/v2.9.0...v2.10.0) (2023-06-05)
4
+
5
+
6
+ ### Features
7
+
8
+ * **Yagr:** update to v2.2.5 ([#173](https://github.com/gravity-ui/chartkit/issues/173)) ([c0e57b6](https://github.com/gravity-ui/chartkit/commit/c0e57b6e939d46984dff7835d503b509d9448200))
9
+
10
+ ## [2.9.0](https://github.com/gravity-ui/chartkit/compare/v2.8.1...v2.9.0) (2023-05-31)
11
+
12
+
13
+ ### Features
14
+
15
+ * **Highcharts plugin:** add `tooltip.sort` configuration ([#170](https://github.com/gravity-ui/chartkit/issues/170)) ([0825a91](https://github.com/gravity-ui/chartkit/commit/0825a91155592d9e06dbdd452547a0c31b71c07a))
16
+
3
17
  ## [2.8.1](https://github.com/gravity-ui/chartkit/compare/v2.8.0...v2.8.1) (2023-05-30)
4
18
 
5
19
 
@@ -381,7 +381,7 @@ function validateCellManipulationConfig(tooltipOptions, property, item) {
381
381
  }
382
382
  }
383
383
  function getTooltip(tooltip, options, comments, holidays) {
384
- var _a, _b, _c, _d, _e, _f, _g, _h;
384
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
385
385
  const serieType = (this.series && this.series.type) || tooltip.chart.options.chart.type;
386
386
  const chart = tooltip.chart;
387
387
  const xAxis = chart.xAxis[0];
@@ -411,6 +411,8 @@ function getTooltip(tooltip, options, comments, holidays) {
411
411
  ],
412
412
  count: 1,
413
413
  shared: true,
414
+ unsafe: Boolean(options.unsafe),
415
+ sort: (_b = options === null || options === void 0 ? void 0 : options.tooltip) === null || _b === void 0 ? void 0 : _b.sort,
414
416
  };
415
417
  if (typeof options.manageTooltipConfig === 'function') {
416
418
  json = callManageTooltipConfig(options, json, chart);
@@ -457,6 +459,7 @@ function getTooltip(tooltip, options, comments, holidays) {
457
459
  withPercent: false,
458
460
  tooltipHeader: null,
459
461
  unsafe: Boolean(options.unsafe),
462
+ sort: (_c = options === null || options === void 0 ? void 0 : options.tooltip) === null || _c === void 0 ? void 0 : _c.sort,
460
463
  };
461
464
  if (isDatetimeXAxis) {
462
465
  const items = this.points || Highcharts.splat(this);
@@ -473,9 +476,9 @@ function getTooltip(tooltip, options, comments, holidays) {
473
476
  }
474
477
  json.tooltipHeader = chart.time.dateFormat(xDateFormat, this.x);
475
478
  }
476
- else if ((_d = (_c = (_b = extendedPoint.point) === null || _b === void 0 ? void 0 : _b.options) === null || _c === void 0 ? void 0 : _c.xFormatted) !== null && _d !== void 0 ? _d : (extendedPoint.x || extendedPoint.x === 0)) {
477
- const customTooltipHeaderFormatter = (_e = options === null || options === void 0 ? void 0 : options.highcharts) === null || _e === void 0 ? void 0 : _e.tooltipHeaderFormatter;
478
- const tooltipHeaderStringValue = String((_h = (_g = (_f = extendedPoint.point) === null || _f === void 0 ? void 0 : _f.options) === null || _g === void 0 ? void 0 : _g.xFormatted) !== null && _h !== void 0 ? _h : extendedPoint.x);
479
+ else if ((_f = (_e = (_d = extendedPoint.point) === null || _d === void 0 ? void 0 : _d.options) === null || _e === void 0 ? void 0 : _e.xFormatted) !== null && _f !== void 0 ? _f : (extendedPoint.x || extendedPoint.x === 0)) {
480
+ const customTooltipHeaderFormatter = (_g = options === null || options === void 0 ? void 0 : options.highcharts) === null || _g === void 0 ? void 0 : _g.tooltipHeaderFormatter;
481
+ const tooltipHeaderStringValue = String((_k = (_j = (_h = extendedPoint.point) === null || _h === void 0 ? void 0 : _h.options) === null || _j === void 0 ? void 0 : _j.xFormatted) !== null && _k !== void 0 ? _k : extendedPoint.x);
479
482
  json.tooltipHeader = customTooltipHeaderFormatter
480
483
  ? customTooltipHeaderFormatter(tooltipHeaderStringValue)
481
484
  : tooltipHeaderStringValue;
@@ -1 +1,3 @@
1
+ import type { TooltipData, TooltipLine } from './types';
1
2
  export declare const escapeHTML: (html?: string) => string;
3
+ export declare const getSortedLines: (lines: TooltipLine[], sort?: TooltipData['sort']) => TooltipLine[];
@@ -1,5 +1,14 @@
1
+ import orderBy from 'lodash/orderBy';
1
2
  export const escapeHTML = (html = '') => {
2
3
  const elem = document.createElement('span');
3
4
  elem.innerText = html;
4
5
  return elem.innerHTML;
5
6
  };
7
+ export const getSortedLines = (lines, sort = {}) => {
8
+ // set eneabled to true after https://github.com/gravity-ui/chartkit/issues/171
9
+ const { enabled = false, order = 'desc', iteratee = 'originalValue' } = sort;
10
+ if (!enabled) {
11
+ return [...lines];
12
+ }
13
+ return orderBy(lines, iteratee, order);
14
+ };
@@ -2,7 +2,7 @@
2
2
  import _escape from 'lodash/escape';
3
3
  import { i18n } from '../../../../../i18n';
4
4
  import { renderShapeIcon } from './render-shape-icon';
5
- import { escapeHTML } from './helpers';
5
+ import { escapeHTML, getSortedLines } from './helpers';
6
6
  import './tooltip.css';
7
7
  export const SERIES_NAME_DATA_ATTRIBUTE = 'data-series-name';
8
8
  export const SERIES_IDX_DATA_ATTRIBUTE = 'data-series-idx';
@@ -128,9 +128,10 @@ const renderRow = (line, { isSelectedLine, cellsRenderers, isSingleLine, allowCo
128
128
  export const formatTooltip = (data, tooltip, isMobile) => {
129
129
  var _a, _b, _c;
130
130
  const { splitTooltip, activeRowAlwaysFirstInTooltip } = data;
131
- const selectedLineIndex = data.lines.findIndex(({ selectedSeries }) => selectedSeries);
132
- const selectedLine = data.lines[selectedLineIndex];
133
131
  const lines = data.lines.slice(0, (tooltip.lastVisibleRowIndex || data.lines.length) + 1);
132
+ const sortedLines = getSortedLines(lines, data.sort);
133
+ const selectedLineIndex = sortedLines.findIndex(({ selectedSeries }) => selectedSeries);
134
+ const selectedLine = sortedLines[selectedLineIndex];
134
135
  const withShapes = lines.every((line) => line.seriesShape);
135
136
  const unsafe = data.unsafe;
136
137
  const tooltipHeaderRaw = (_a = data.tooltipHeader) === null || _a === void 0 ? void 0 : _a.trim();
@@ -212,7 +213,7 @@ export const formatTooltip = (data, tooltip, isMobile) => {
212
213
  .join('')}</tr>
213
214
  </thead>`}
214
215
  <tbody class="${TOOLTIP_LIST_CLASS_NAME}">
215
- ${lines
216
+ ${sortedLines
216
217
  .map((line, index) => renderRow(line, getRowRenderConfig(index)))
217
218
  .join('')}
218
219
  </tbody>
@@ -38,6 +38,15 @@ export declare type TooltipData = {
38
38
  /** Sum of the values of the hidden ("not fit" in the tooltip) rows */
39
39
  hiddenRowsSum?: number | string;
40
40
  unsafe?: boolean;
41
+ /** Used to manage tooltip lines sorting */
42
+ sort?: {
43
+ /** Enable tooltip lines sorting. `false` by default */
44
+ enabled?: boolean;
45
+ /** The sort orders. `'desc'` by default */
46
+ order?: 'asc' | 'desc';
47
+ /** The iteratees to sort by key(s) from `TooltipLine`. `'originalValue'` by default */
48
+ iteratee?: keyof TooltipLine | keyof TooltipLine[] | ((line: TooltipLine) => TooltipLine[keyof TooltipLine] | TooltipLine[keyof TooltipLine][]);
49
+ };
41
50
  };
42
51
  export declare type TooltipLine = {
43
52
  /** Color displayed in a separate cell */
@@ -93,6 +93,8 @@ export declare type HighchartsWidgetData = {
93
93
  /** Pin tooltip with pressed meta key */
94
94
  metaKey?: boolean;
95
95
  };
96
+ /** Used to manage tooltip lines sorting */
97
+ sort?: TooltipData['sort'];
96
98
  };
97
99
  /**
98
100
  * Used to modify tooltip data
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/chartkit",
3
- "version": "2.8.1",
3
+ "version": "2.10.0",
4
4
  "description": "React component used to render charts based on any sources you need",
5
5
  "license": "MIT",
6
6
  "repository": "git@github.com:gravity-ui/ChartKit.git",
@@ -13,7 +13,7 @@
13
13
  "access": "public"
14
14
  },
15
15
  "dependencies": {
16
- "@gravity-ui/yagr": "^2.2.4",
16
+ "@gravity-ui/yagr": "^2.2.5",
17
17
  "bem-cn-lite": "^4.1.0",
18
18
  "highcharts": "^8.2.2",
19
19
  "highcharts-react-official": "^3.0.0",