From 82495ae8c7352b7d630f7a924f76011a1a7938aa Mon Sep 17 00:00:00 2001 From: timshen Date: Sat, 19 Jun 2021 21:35:56 +0800 Subject: [PATCH 1/4] fix: hovered tooltip not update when options's series data changed --- src/component/tooltip/TooltipView.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/component/tooltip/TooltipView.ts b/src/component/tooltip/TooltipView.ts index 0aa7f7cfa8..ad0098f0e6 100644 --- a/src/component/tooltip/TooltipView.ts +++ b/src/component/tooltip/TooltipView.ts @@ -47,7 +47,7 @@ import { } from '../../util/types'; import GlobalModel from '../../model/Global'; import ExtensionAPI from '../../core/ExtensionAPI'; -import TooltipModel, {TooltipOption} from './TooltipModel'; +import TooltipModel, { TooltipOption } from './TooltipModel'; import Element from 'zrender/src/Element'; import { AxisBaseModel } from '../../coord/AxisBaseModel'; // import { isDimensionStacked } from '../../data/helper/dataStackHelper'; @@ -63,7 +63,7 @@ const each = zrUtil.each; const parsePercent = numberUtil.parsePercent; const proxyRect = new graphic.Rect({ - shape: {x: -1, y: -1, width: 2, height: 2} + shape: { x: -1, y: -1, width: 2, height: 2 } }); interface DataIndex { @@ -165,6 +165,7 @@ class TooltipView extends ComponentView { private _showTimout: number; private _lastDataByCoordSys: DataByCoordSys[]; + private _cbParamsList: TooltipCallbackDataParams[]; init(ecModel: GlobalModel, api: ExtensionAPI) { if (env.node) { @@ -599,7 +600,7 @@ class TooltipView extends ComponentView { const allMarkupText = markupTextArrLegacy.join(blockBreak); this._showOrMove(singleTooltipModel, function (this: TooltipView) { - if (this._updateContentNotChangedOnAxis(dataByCoordSys)) { + if (this._updateContentNotChangedOnAxis(dataByCoordSys, cbParamsList)) { this._updatePosition( singleTooltipModel, positionExpr, @@ -882,7 +883,7 @@ class TooltipView extends ComponentView { boxLayoutPosition.width = contentSize[0]; boxLayoutPosition.height = contentSize[1]; const layoutRect = layoutUtil.getLayoutRect( - boxLayoutPosition, {width: viewWidth, height: viewHeight} + boxLayoutPosition, { width: viewWidth, height: viewHeight } ); x = layoutRect.x; y = layoutRect.y; @@ -923,11 +924,14 @@ class TooltipView extends ComponentView { // FIXME // Should we remove this but leave this to user? - private _updateContentNotChangedOnAxis(dataByCoordSys: DataByCoordSys[]) { + private _updateContentNotChangedOnAxis(dataByCoordSys: DataByCoordSys[], + cbParamsList: TooltipCallbackDataParams[]) { const lastCoordSys = this._lastDataByCoordSys; + const lastCbParamsList = this._cbParamsList; let contentNotChanged = !!lastCoordSys && lastCoordSys.length === dataByCoordSys.length; + const self = this; contentNotChanged && each(lastCoordSys, function (lastItemCoordSys, indexCoordSys) { const lastDataByAxis = lastItemCoordSys.dataByAxis || [] as DataByAxis[]; const thisItemCoordSys = dataByCoordSys[indexCoordSys] || {} as DataByCoordSys; @@ -951,10 +955,20 @@ class TooltipView extends ComponentView { && lastIdxItem.seriesIndex === newIdxItem.seriesIndex && lastIdxItem.dataIndex === newIdxItem.dataIndex; }); + + // check is cbParams data value changed + lastCbParamsList && zrUtil.each(lastItem.seriesDataIndices, (idxItem) => { + const series = self._ecModel.getSeriesByIndex(idxItem.seriesIndex); + const cbParams = series.getDataParams(idxItem.dataIndexInside) as TooltipCallbackDataParams; + if (lastCbParamsList[idxItem.seriesIndex].data !== cbParams.data) { + contentNotChanged = false; + } + }); }); }); this._lastDataByCoordSys = dataByCoordSys; + this._cbParamsList = cbParamsList; return !!contentNotChanged; } From 15f318b7351f34022f4c2fb6af7d05cac2e889c4 Mon Sep 17 00:00:00 2001 From: timshen Date: Fri, 16 Jul 2021 16:20:26 +0800 Subject: [PATCH 2/4] fix: CR suggestions --- src/component/tooltip/TooltipView.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/component/tooltip/TooltipView.ts b/src/component/tooltip/TooltipView.ts index ad0098f0e6..0652c7930f 100644 --- a/src/component/tooltip/TooltipView.ts +++ b/src/component/tooltip/TooltipView.ts @@ -931,14 +931,13 @@ class TooltipView extends ComponentView { let contentNotChanged = !!lastCoordSys && lastCoordSys.length === dataByCoordSys.length; - const self = this; - contentNotChanged && each(lastCoordSys, function (lastItemCoordSys, indexCoordSys) { + contentNotChanged && each(lastCoordSys, (lastItemCoordSys, indexCoordSys) => { const lastDataByAxis = lastItemCoordSys.dataByAxis || [] as DataByAxis[]; const thisItemCoordSys = dataByCoordSys[indexCoordSys] || {} as DataByCoordSys; const thisDataByAxis = thisItemCoordSys.dataByAxis || [] as DataByAxis[]; contentNotChanged = contentNotChanged && lastDataByAxis.length === thisDataByAxis.length; - contentNotChanged && each(lastDataByAxis, function (lastItem, indexAxis) { + contentNotChanged && each(lastDataByAxis, (lastItem, indexAxis) => { const thisItem = thisDataByAxis[indexAxis] || {} as DataByAxis; const lastIndices = lastItem.seriesDataIndices || [] as DataIndex[]; const newIndices = thisItem.seriesDataIndices || [] as DataIndex[]; @@ -949,7 +948,7 @@ class TooltipView extends ComponentView { && lastItem.axisId === thisItem.axisId && lastIndices.length === newIndices.length; - contentNotChanged && each(lastIndices, function (lastIdxItem, j) { + contentNotChanged && each(lastIndices, (lastIdxItem, j) => { const newIdxItem = newIndices[j]; contentNotChanged = contentNotChanged && lastIdxItem.seriesIndex === newIdxItem.seriesIndex @@ -958,8 +957,7 @@ class TooltipView extends ComponentView { // check is cbParams data value changed lastCbParamsList && zrUtil.each(lastItem.seriesDataIndices, (idxItem) => { - const series = self._ecModel.getSeriesByIndex(idxItem.seriesIndex); - const cbParams = series.getDataParams(idxItem.dataIndexInside) as TooltipCallbackDataParams; + const cbParams = cbParamsList[idxItem.dataIndexInside]; if (lastCbParamsList[idxItem.seriesIndex].data !== cbParams.data) { contentNotChanged = false; } From 8bfa7cca2cd580ffe99869ce925f7cdc1f6edb97 Mon Sep 17 00:00:00 2001 From: timshen Date: Fri, 16 Jul 2021 17:38:05 +0800 Subject: [PATCH 3/4] fix: array index error & NPE not handled issue --- src/component/tooltip/TooltipView.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/component/tooltip/TooltipView.ts b/src/component/tooltip/TooltipView.ts index 0652c7930f..b1a9bafbde 100644 --- a/src/component/tooltip/TooltipView.ts +++ b/src/component/tooltip/TooltipView.ts @@ -957,7 +957,10 @@ class TooltipView extends ComponentView { // check is cbParams data value changed lastCbParamsList && zrUtil.each(lastItem.seriesDataIndices, (idxItem) => { - const cbParams = cbParamsList[idxItem.dataIndexInside]; + const cbParams = cbParamsList[idxItem.seriesIndex]; + if (!cbParams) { + return; + } if (lastCbParamsList[idxItem.seriesIndex].data !== cbParams.data) { contentNotChanged = false; } From 6321470854143c2ae82f574869a68f5651106072 Mon Sep 17 00:00:00 2001 From: timshen Date: Fri, 16 Jul 2021 20:29:34 +0800 Subject: [PATCH 4/4] fix: CR suggestions --- src/component/tooltip/TooltipView.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/component/tooltip/TooltipView.ts b/src/component/tooltip/TooltipView.ts index b1a9bafbde..af16618818 100644 --- a/src/component/tooltip/TooltipView.ts +++ b/src/component/tooltip/TooltipView.ts @@ -958,10 +958,7 @@ class TooltipView extends ComponentView { // check is cbParams data value changed lastCbParamsList && zrUtil.each(lastItem.seriesDataIndices, (idxItem) => { const cbParams = cbParamsList[idxItem.seriesIndex]; - if (!cbParams) { - return; - } - if (lastCbParamsList[idxItem.seriesIndex].data !== cbParams.data) { + if (cbParams && lastCbParamsList[idxItem.seriesIndex].data !== cbParams.data) { contentNotChanged = false; } });