Skip to content

Commit c9ac641

Browse files
authored
Merge pull request #20105 from apache/fix/k-states
fix(candlestick): add back missing support for non-normal states since v5.0.0
2 parents 89cfb36 + 89a15af commit c9ac641

File tree

6 files changed

+84
-26
lines changed

6 files changed

+84
-26
lines changed

src/chart/candlestick/CandlestickSeries.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ class CandlestickSeriesModel extends SeriesModel<CandlestickSeriesOption> {
124124
},
125125

126126
emphasis: {
127-
scale: true,
128127
itemStyle: {
129128
borderWidth: 2
130129
}

src/chart/candlestick/CandlestickView.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import * as zrUtil from 'zrender/src/core/util';
2121
import ChartView from '../../view/Chart';
2222
import * as graphic from '../../util/graphic';
23-
import { setStatesStylesFromModel } from '../../util/states';
23+
import { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states';
2424
import Path, { PathProps } from 'zrender/src/graphic/Path';
2525
import {createClipPath} from '../helper/createClipPathFromCoordSys';
2626
import CandlestickSeriesModel, { CandlestickDataItemOption } from './CandlestickSeries';
@@ -33,6 +33,7 @@ import { CoordinateSystemClipArea } from '../../coord/CoordinateSystem';
3333
import Model from '../../model/Model';
3434
import { saveOldStyle } from '../../animation/basicTransition';
3535
import Element from 'zrender/src/Element';
36+
import { getBorderColor, getColor } from './candlestickVisual';
3637

3738
const SKIP_PROPS = ['color', 'borderColor'] as const;
3839

@@ -294,6 +295,19 @@ function setBoxCommon(el: NormalBoxPath, data: SeriesData, dataIndex: number, is
294295
el.__simpleBox = isSimpleBox;
295296

296297
setStatesStylesFromModel(el, itemModel);
298+
299+
const sign = data.getItemLayout(dataIndex).sign;
300+
zrUtil.each(el.states, (state, stateName) => {
301+
const stateModel = itemModel.getModel(stateName as any);
302+
const color = getColor(sign, stateModel);
303+
const borderColor = getBorderColor(sign, stateModel) || color;
304+
const stateStyle = state.style || (state.style = {});
305+
color && (stateStyle.fill = color);
306+
borderColor && (stateStyle.stroke = borderColor);
307+
});
308+
309+
const emphasisModel = itemModel.getModel('emphasis');
310+
toggleHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));
297311
}
298312

299313
function transInit(points: number[][], itemLayout: CandlestickItemLayout) {
@@ -391,12 +405,9 @@ function createLarge(
391405

392406
function setLargeStyle(sign: number, el: LargeBoxPath, seriesModel: CandlestickSeriesModel, data: SeriesData) {
393407
// TODO put in visual?
394-
let borderColor = seriesModel.get(['itemStyle', sign > 0 ? 'borderColor' : 'borderColor0'])
408+
const borderColor = getBorderColor(sign, seriesModel)
395409
// Use color for border color by default.
396-
|| seriesModel.get(['itemStyle', sign > 0 ? 'color' : 'color0']);
397-
if (sign === 0) {
398-
borderColor = seriesModel.get(['itemStyle', 'borderColorDoji']);
399-
}
410+
|| getColor(sign, seriesModel);
400411

401412
// Color must be excluded.
402413
// Because symbol provide setColor individually to set fill and stroke

src/chart/candlestick/candlestickVisual.ts

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,21 @@ const dojiBorderColorQuery = ['itemStyle', 'borderColorDoji'] as const;
2929
const positiveColorQuery = ['itemStyle', 'color'] as const;
3030
const negativeColorQuery = ['itemStyle', 'color0'] as const;
3131

32+
export function getColor(sign: number, model: Model<Pick<CandlestickDataItemOption, 'itemStyle'>>) {
33+
return model.get(
34+
sign > 0 ? positiveColorQuery : negativeColorQuery
35+
);
36+
}
37+
38+
export function getBorderColor(sign: number, model: Model<Pick<CandlestickDataItemOption, 'itemStyle'>>) {
39+
return model.get(
40+
sign === 0 ? dojiBorderColorQuery
41+
: sign > 0
42+
? positiveBorderColorQuery
43+
: negativeBorderColorQuery
44+
);
45+
}
46+
3247
const candlestickVisual: StageHandler = {
3348

3449
seriesType: 'candlestick',
@@ -39,22 +54,6 @@ const candlestickVisual: StageHandler = {
3954
performRawSeries: true,
4055

4156
reset: function (seriesModel: CandlestickSeriesModel, ecModel) {
42-
43-
function getColor(sign: number, model: Model<Pick<CandlestickDataItemOption, 'itemStyle'>>) {
44-
return model.get(
45-
sign > 0 ? positiveColorQuery : negativeColorQuery
46-
);
47-
}
48-
49-
function getBorderColor(sign: number, model: Model<Pick<CandlestickDataItemOption, 'itemStyle'>>) {
50-
return model.get(
51-
sign === 0 ? dojiBorderColorQuery
52-
: sign > 0
53-
? positiveBorderColorQuery
54-
: negativeBorderColorQuery
55-
);
56-
}
57-
5857
// Only visible series has each data be visual encoded
5958
if (ecModel.isSeriesFiltered(seriesModel)) {
6059
return;

test/candlestick-case.html

Lines changed: 50 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/runTest/actions/__meta__.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/runTest/actions/candlestick-case.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)