Skip to content

Commit 5d7c804

Browse files
committed
fix: fix domain order of datazoom when axis is linear
1 parent 9ced3e3 commit 5d7c804

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

packages/vchart/src/component/data-zoom/data-filter-base-component.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,7 @@ export abstract class DataFilterBaseComponent<T extends IDataFilterComponentSpec
436436
const dataCollection: any[] = [];
437437
const stateFields: string[] = [];
438438
const valueFields: string[] = [];
439+
let isCategoryState: boolean;
439440

440441
if (this._relatedAxisComponent) {
441442
const originalStateFields = {};
@@ -467,8 +468,6 @@ export abstract class DataFilterBaseComponent<T extends IDataFilterComponentSpec
467468
? xAxisHelper
468469
: yAxisHelper;
469470
const valueAxisHelper = stateAxisHelper === xAxisHelper ? yAxisHelper : xAxisHelper;
470-
const isValidateValueAxis = isContinuous(valueAxisHelper.getScale(0).type);
471-
const isValidateStateAxis = isContinuous(stateAxisHelper.getScale(0).type);
472471

473472
dataCollection.push(s.getRawData());
474473
// 这里获取原始的spec中的xField和yField,而非经过stack处理后的fieldX和fieldY,原因如下:
@@ -488,15 +487,16 @@ export abstract class DataFilterBaseComponent<T extends IDataFilterComponentSpec
488487
originalStateFields[s.id] =
489488
s.type === 'link' ? ['from_xField'] : stateAxisHelper === xAxisHelper ? xField : yField;
490489

491-
if (isValidateStateAxis) {
490+
if (isContinuous(stateAxisHelper.getScale(0).type)) {
491+
isCategoryState = false;
492492
stateFields.push(originalStateFields[s.id]);
493493
} else {
494494
stateFields.push(originalStateFields[s.id][0]);
495495
}
496496

497497
if (this._valueField) {
498498
const valueField = s.type === 'link' ? ['from_yField'] : valueAxisHelper === xAxisHelper ? xField : yField;
499-
if (isValidateValueAxis) {
499+
if (isContinuous(valueAxisHelper.getScale(0).type)) {
500500
valueFields.push(...valueField);
501501
}
502502
}
@@ -536,7 +536,8 @@ export abstract class DataFilterBaseComponent<T extends IDataFilterComponentSpec
536536
input: {
537537
dataCollection: dataCollection,
538538
stateFields,
539-
valueFields
539+
valueFields,
540+
isCategoryState
540541
},
541542
output: {
542543
stateField: this._stateField,

packages/vchart/src/component/data-zoom/util.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ export interface IDataFilterComputeDomainOption {
9393
dataCollection: any[];
9494
stateFields: string[];
9595
valueFields: string[];
96+
isCategoryState?: boolean;
9697
method: 'sum'; // todo: 也许可以提供多种数据统计方法 @chensiji
9798
};
9899
output: {
@@ -102,11 +103,12 @@ export interface IDataFilterComputeDomainOption {
102103
}
103104

104105
export const dataFilterComputeDomain = (data: Array<any>, op: IDataFilterComputeDomainOption) => {
105-
const { stateFields, valueFields, dataCollection } = op.input;
106+
const { stateFields, valueFields, dataCollection, isCategoryState } = op.input;
106107
const { stateField, valueField } = op.output;
107108
const resultObj: any = {};
108109
const resultData: any[] = [];
109110
const stateValues: any[] = [];
111+
let hasLockDomain = false;
110112

111113
dataCollection.forEach((dv: DataView, i) => {
112114
if (isNil(stateFields[i])) {
@@ -115,6 +117,7 @@ export const dataFilterComputeDomain = (data: Array<any>, op: IDataFilterCompute
115117
// 按照用户指定的domain进行排序(这里不通过getRawDataStatistics来取是因为时机不对,此时getRawDataStatistics还没有正确结果)
116118
const stateFieldInfo = dv.getFields()?.[stateFields[i]];
117119
if (stateFieldInfo && stateFieldInfo.lockStatisticsByDomain) {
120+
hasLockDomain = true;
118121
stateFieldInfo.domain.forEach((d: any) => {
119122
if (isNil(resultObj[d])) {
120123
stateValues.push(d);
@@ -140,7 +143,13 @@ export const dataFilterComputeDomain = (data: Array<any>, op: IDataFilterCompute
140143
});
141144
});
142145

143-
stateValues.forEach(state => {
146+
const sortedStateValues = hasLockDomain
147+
? stateValues
148+
: isCategoryState === false
149+
? stateValues.sort((a, b) => a - b)
150+
: Object.keys(resultObj);
151+
152+
sortedStateValues.forEach(state => {
144153
const res = { [stateField]: state };
145154

146155
if (valueField) {

0 commit comments

Comments
 (0)