From 82bbf04de43e5e544099a660e24b39fb0feafdec Mon Sep 17 00:00:00 2001 From: xile611 Date: Thu, 22 May 2025 16:46:12 +0800 Subject: [PATCH 1/3] fix: fix data-zoom domain when the label of band size is number-like string, fix #3982 --- packages/vchart/src/component/data-zoom/util.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/vchart/src/component/data-zoom/util.ts b/packages/vchart/src/component/data-zoom/util.ts index 622dda27c6..753b7dd2a9 100644 --- a/packages/vchart/src/component/data-zoom/util.ts +++ b/packages/vchart/src/component/data-zoom/util.ts @@ -104,8 +104,9 @@ export interface IDataFilterComputeDomainOption { export const dataFilterComputeDomain = (data: Array, op: IDataFilterComputeDomainOption) => { const { stateFields, valueFields, dataCollection } = op.input; const { stateField, valueField } = op.output; - const resultObj = {}; + const resultObj: any = {}; const resultData: any[] = []; + const stateValues: any[] = []; dataCollection.forEach((dv: DataView, i) => { if (isNil(stateFields[i])) { @@ -115,7 +116,10 @@ export const dataFilterComputeDomain = (data: Array, op: IDataFilterCompute const stateFieldInfo = dv.getFields()?.[stateFields[i]]; if (stateFieldInfo && stateFieldInfo.lockStatisticsByDomain) { stateFieldInfo.domain.forEach((d: any) => { - resultObj[d] = 0; + if (isNil(resultObj[d])) { + stateValues.push(d); + resultObj[d] = 0; + } }); } dv.latestData.forEach((d: any) => { @@ -123,6 +127,7 @@ export const dataFilterComputeDomain = (data: Array, op: IDataFilterCompute array(stateFields[i]).forEach(state => { if (!isNil(d[state])) { if (isNil(resultObj[d[state]])) { + stateValues.push(d[state]); resultObj[d[state]] = 0; } if (!isNil(valueFields[i])) { @@ -134,11 +139,12 @@ export const dataFilterComputeDomain = (data: Array, op: IDataFilterCompute }); }); }); - Object.keys(resultObj).forEach((d, i) => { - const res = { [stateField]: d }; + + stateValues.forEach(state => { + const res = { [stateField]: state }; if (valueField) { - res[valueField] = resultObj[d]; + res[valueField] = resultObj[state]; } resultData.push(res); From 9ced3e3f472078c3b883196487f21c533ad3b5c9 Mon Sep 17 00:00:00 2001 From: xile611 Date: Thu, 22 May 2025 16:47:41 +0800 Subject: [PATCH 2/3] docs: update changlog of rush --- ...a-zoom-of-lock-number-domain_2025-05-22-08-47.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 common/changes/@visactor/vchart/fix-data-zoom-of-lock-number-domain_2025-05-22-08-47.json diff --git a/common/changes/@visactor/vchart/fix-data-zoom-of-lock-number-domain_2025-05-22-08-47.json b/common/changes/@visactor/vchart/fix-data-zoom-of-lock-number-domain_2025-05-22-08-47.json new file mode 100644 index 0000000000..a20b64b7ee --- /dev/null +++ b/common/changes/@visactor/vchart/fix-data-zoom-of-lock-number-domain_2025-05-22-08-47.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "fix: fix data-zoom domain when the label of band size is number-like string, fix #3982\n\n", + "type": "none", + "packageName": "@visactor/vchart" + } + ], + "packageName": "@visactor/vchart", + "email": "dingling112@gmail.com" +} \ No newline at end of file From 5d7c804e84403f749e591130f7092fb4c3206807 Mon Sep 17 00:00:00 2001 From: xile611 Date: Thu, 22 May 2025 18:03:48 +0800 Subject: [PATCH 3/3] fix: fix domain order of datazoom when axis is linear --- .../data-zoom/data-filter-base-component.ts | 11 ++++++----- packages/vchart/src/component/data-zoom/util.ts | 13 +++++++++++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/packages/vchart/src/component/data-zoom/data-filter-base-component.ts b/packages/vchart/src/component/data-zoom/data-filter-base-component.ts index 50b375835e..5dcdd47abe 100644 --- a/packages/vchart/src/component/data-zoom/data-filter-base-component.ts +++ b/packages/vchart/src/component/data-zoom/data-filter-base-component.ts @@ -436,6 +436,7 @@ export abstract class DataFilterBaseComponent, op: IDataFilterComputeDomainOption) => { - const { stateFields, valueFields, dataCollection } = op.input; + const { stateFields, valueFields, dataCollection, isCategoryState } = op.input; const { stateField, valueField } = op.output; const resultObj: any = {}; const resultData: any[] = []; const stateValues: any[] = []; + let hasLockDomain = false; dataCollection.forEach((dv: DataView, i) => { if (isNil(stateFields[i])) { @@ -115,6 +117,7 @@ export const dataFilterComputeDomain = (data: Array, op: IDataFilterCompute // 按照用户指定的domain进行排序(这里不通过getRawDataStatistics来取是因为时机不对,此时getRawDataStatistics还没有正确结果) const stateFieldInfo = dv.getFields()?.[stateFields[i]]; if (stateFieldInfo && stateFieldInfo.lockStatisticsByDomain) { + hasLockDomain = true; stateFieldInfo.domain.forEach((d: any) => { if (isNil(resultObj[d])) { stateValues.push(d); @@ -140,7 +143,13 @@ export const dataFilterComputeDomain = (data: Array, op: IDataFilterCompute }); }); - stateValues.forEach(state => { + const sortedStateValues = hasLockDomain + ? stateValues + : isCategoryState === false + ? stateValues.sort((a, b) => a - b) + : Object.keys(resultObj); + + sortedStateValues.forEach(state => { const res = { [stateField]: state }; if (valueField) {