From 1166f2d2634d1e672ba6a067ce2698011563d58c Mon Sep 17 00:00:00 2001 From: plainheart Date: Mon, 8 Jul 2024 18:40:53 +0800 Subject: [PATCH 1/6] fix(legend): fix legend action is not isolated from other legend components (resolves #20128) --- src/component/legend/LegendView.ts | 3 ++- src/component/legend/legendAction.ts | 26 ++++++++++++++++---------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/component/legend/LegendView.ts b/src/component/legend/LegendView.ts index 35b0779f2b..9016468240 100644 --- a/src/component/legend/LegendView.ts +++ b/src/component/legend/LegendView.ts @@ -329,7 +329,8 @@ class LegendView extends ComponentView { }, onclick() { api.dispatchAction({ - type: type === 'all' ? 'legendAllSelect' : 'legendInverseSelect' + type: type === 'all' ? 'legendAllSelect' : 'legendInverseSelect', + legendId: legendModel.id }); } }); diff --git a/src/component/legend/legendAction.ts b/src/component/legend/legendAction.ts index 04ed3723a8..2edc27dfc2 100644 --- a/src/component/legend/legendAction.ts +++ b/src/component/legend/legendAction.ts @@ -17,16 +17,22 @@ * under the License. */ -// @ts-nocheck +import {curry, each, hasOwn} from 'zrender/src/core/util'; +import { EChartsExtensionInstallRegisters } from '../../extension'; +import { Payload } from '../../util/types'; +import type GlobalModel from '../../model/Global'; +import type LegendModel from './LegendModel'; -import {curry, each} from 'zrender/src/core/util'; +type LegendSelectMethodNames = + 'select' | 'unSelect' | + 'toggleSelected' | 'toggleSelected' | + 'allSelect' | 'inverseSelect'; -function legendSelectActionHandler(methodName, payload, ecModel) { - const selectedMap = {}; +function legendSelectActionHandler(methodName: LegendSelectMethodNames, payload: Payload, ecModel: GlobalModel) { + const selectedMap: Record = {}; const isToggleSelect = methodName === 'toggleSelected'; - let isSelected; - // Update all legend components - ecModel.eachComponent('legend', function (legendModel) { + let isSelected: boolean; + ecModel.eachComponent({ mainType: 'legend', query: payload }, function (legendModel: LegendModel) { if (isToggleSelect && isSelected != null) { // Force other legend has same selected status // Or the first is toggled to true and other are toggled to false @@ -49,7 +55,7 @@ function legendSelectActionHandler(methodName, payload, ecModel) { return; } const isItemSelected = legendModel.isSelected(name); - if (selectedMap.hasOwnProperty(name)) { + if (hasOwn(selectedMap, name)) { // Unselected if any legend is unselected selectedMap[name] = selectedMap[name] && isItemSelected; } @@ -69,7 +75,7 @@ function legendSelectActionHandler(methodName, payload, ecModel) { }; } -export function installLegendAction(registers) { +export function installLegendAction(registers: EChartsExtensionInstallRegisters) { /** * @event legendToggleSelect * @type {Object} @@ -113,4 +119,4 @@ export function installLegendAction(registers) { 'legendUnSelect', 'legendunselected', curry(legendSelectActionHandler, 'unSelect') ); -} \ No newline at end of file +} From 7564282bacd79954e3c84b438d7d503aaa42e740 Mon Sep 17 00:00:00 2001 From: plainheart Date: Tue, 9 Jul 2024 10:01:03 +0800 Subject: [PATCH 2/6] test(legend): add a test case for legend action --- test/legend-action.html | 106 ++++++++++++++++++++++++ test/runTest/actions/__meta__.json | 1 + test/runTest/actions/legend-action.json | 1 + 3 files changed, 108 insertions(+) create mode 100644 test/legend-action.html create mode 100644 test/runTest/actions/legend-action.json diff --git a/test/legend-action.html b/test/legend-action.html new file mode 100644 index 0000000000..07f3688843 --- /dev/null +++ b/test/legend-action.html @@ -0,0 +1,106 @@ + + + + + + + + + + + + +
+ + + + diff --git a/test/runTest/actions/__meta__.json b/test/runTest/actions/__meta__.json index 26eac6dd21..54a683e54f 100644 --- a/test/runTest/actions/__meta__.json +++ b/test/runTest/actions/__meta__.json @@ -122,6 +122,7 @@ "label-position": 1, "largeLine-tooltip": 1, "legend": 11, + "legend-action": 1, "legend-visualMapColor": 2, "line": 1, "line-animation": 1, diff --git a/test/runTest/actions/legend-action.json b/test/runTest/actions/legend-action.json new file mode 100644 index 0000000000..31ec2f6443 --- /dev/null +++ b/test/runTest/actions/legend-action.json @@ -0,0 +1 @@ +[{"name":"Action 1","ops":[{"type":"mousemove","time":223,"x":351,"y":33},{"type":"mousemove","time":427,"x":312,"y":71},{"type":"mousemove","time":661,"x":309,"y":75},{"type":"mousedown","time":679,"x":308,"y":75},{"type":"mouseup","time":789,"x":308,"y":75},{"time":790,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":876,"x":308,"y":75},{"type":"mousemove","time":1156,"x":300,"y":68},{"type":"mousemove","time":1360,"x":279,"y":57},{"type":"mousemove","time":1573,"x":255,"y":71},{"type":"mousedown","time":1734,"x":253,"y":74},{"type":"mousemove","time":1775,"x":253,"y":74},{"type":"mouseup","time":1869,"x":253,"y":74},{"time":1870,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":2189,"x":253,"y":71},{"type":"mousemove","time":2389,"x":310,"y":49},{"type":"mousemove","time":2589,"x":492,"y":43},{"type":"mousemove","time":2789,"x":722,"y":33},{"type":"mousemove","time":2989,"x":712,"y":64},{"type":"mousemove","time":3195,"x":678,"y":81},{"type":"mousemove","time":3273,"x":680,"y":81},{"type":"mousemove","time":3476,"x":696,"y":76},{"type":"mousedown","time":3479,"x":696,"y":76},{"type":"mouseup","time":3581,"x":696,"y":76},{"time":3582,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":3706,"x":692,"y":76},{"type":"mousemove","time":3909,"x":648,"y":75},{"type":"mousedown","time":4135,"x":648,"y":75},{"type":"mouseup","time":4309,"x":648,"y":75},{"time":4310,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":4339,"x":647,"y":75},{"type":"mousemove","time":4789,"x":647,"y":74},{"type":"mousemove","time":4993,"x":652,"y":71},{"type":"mousemove","time":5226,"x":653,"y":54},{"type":"mousemove","time":5523,"x":649,"y":51},{"type":"mousemove","time":5723,"x":406,"y":53},{"type":"mousemove","time":5931,"x":329,"y":74},{"type":"mousemove","time":6139,"x":299,"y":66},{"type":"mousemove","time":6339,"x":270,"y":73},{"type":"mousedown","time":6470,"x":265,"y":75},{"type":"mousemove","time":6544,"x":265,"y":75},{"type":"mouseup","time":6597,"x":265,"y":75},{"time":6598,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":6889,"x":269,"y":75},{"type":"mousemove","time":7089,"x":289,"y":68},{"type":"mousedown","time":7270,"x":292,"y":68},{"type":"mousemove","time":7295,"x":292,"y":68},{"type":"mouseup","time":7430,"x":292,"y":68},{"time":7431,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":7790,"x":292,"y":66},{"type":"mousemove","time":7993,"x":295,"y":66},{"type":"mousemove","time":8573,"x":297,"y":67},{"type":"mousemove","time":8776,"x":312,"y":80},{"type":"mousemove","time":8989,"x":304,"y":83},{"type":"mousemove","time":9193,"x":251,"y":73},{"type":"mousedown","time":9303,"x":251,"y":73},{"type":"mouseup","time":9413,"x":251,"y":73},{"time":9414,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":9756,"x":251,"y":72},{"type":"mousemove","time":9956,"x":265,"y":68},{"type":"mousemove","time":10160,"x":379,"y":39}],"scrollY":0,"scrollX":0,"timestamp":1720490304919}] \ No newline at end of file From cc26ef3788861723e9b295172694bd69d9856f27 Mon Sep 17 00:00:00 2001 From: plainheart Date: Thu, 11 Jul 2024 13:34:12 +0800 Subject: [PATCH 3/6] fix(legend): fix legend item is selected but corresponding series may not show after dispatching `legendAllSelect` action. --- src/component/legend/legendAction.ts | 77 +++++++++++++++---------- test/legend-action.html | 38 ++++++++++-- test/runTest/actions/legend-action.json | 2 +- 3 files changed, 83 insertions(+), 34 deletions(-) diff --git a/src/component/legend/legendAction.ts b/src/component/legend/legendAction.ts index 2edc27dfc2..92e3d14d0e 100644 --- a/src/component/legend/legendAction.ts +++ b/src/component/legend/legendAction.ts @@ -17,7 +17,7 @@ * under the License. */ -import {curry, each, hasOwn} from 'zrender/src/core/util'; +import {curry, each, hasOwn, indexOf, map} from 'zrender/src/core/util'; import { EChartsExtensionInstallRegisters } from '../../extension'; import { Payload } from '../../util/types'; import type GlobalModel from '../../model/Global'; @@ -29,45 +29,44 @@ type LegendSelectMethodNames = 'allSelect' | 'inverseSelect'; function legendSelectActionHandler(methodName: LegendSelectMethodNames, payload: Payload, ecModel: GlobalModel) { + const isAllSelect = methodName === 'allSelect' || methodName === 'inverseSelect'; const selectedMap: Record = {}; - const isToggleSelect = methodName === 'toggleSelected'; - let isSelected: boolean; + + const actionLegendIndices: number[] = []; ecModel.eachComponent({ mainType: 'legend', query: payload }, function (legendModel: LegendModel) { - if (isToggleSelect && isSelected != null) { - // Force other legend has same selected status - // Or the first is toggled to true and other are toggled to false - // In the case one legend has some item unSelected in option. And if other legend - // doesn't has the item, they will assume it is selected. - legendModel[isSelected ? 'select' : 'unSelect'](payload.name); - } - else if (methodName === 'allSelect' || methodName === 'inverseSelect') { + if (isAllSelect) { legendModel[methodName](); } else { legendModel[methodName](payload.name); - isSelected = legendModel.isSelected(payload.name); } - const legendData = legendModel.getData(); - each(legendData, function (model) { - const name = model.get('name'); - // Wrap element - if (name === '\n' || name === '') { - return; - } - const isItemSelected = legendModel.isSelected(name); - if (hasOwn(selectedMap, name)) { - // Unselected if any legend is unselected - selectedMap[name] = selectedMap[name] && isItemSelected; - } - else { - selectedMap[name] = isItemSelected; - } + + makeSelectedMap(legendModel, selectedMap); + + actionLegendIndices.push(legendModel.componentIndex); + }); + + const allSelectedMap: Record = {}; + + // make selectedMap from all legend components + ecModel.eachComponent('legend', function (legendModel: LegendModel) { + each(selectedMap, function (isSelected, name) { + // Force other legend has same selected status + // Or the first is toggled to true and other are toggled to false + // In the case one legend has some item unSelected in option. And if other legend + // doesn't has the item, they will assume it is selected. + legendModel[isSelected ? 'select' : 'unSelect'](name); }); + + makeSelectedMap(legendModel, allSelectedMap); }); + // Return the event explicitly - return (methodName === 'allSelect' || methodName === 'inverseSelect') + return isAllSelect ? { - selected: selectedMap + selected: selectedMap, + // return legendIndex array to tell the developers which legends are allSelect / inverseSelect + legendIndex: actionLegendIndices } : { name: payload.name, @@ -75,6 +74,26 @@ function legendSelectActionHandler(methodName: LegendSelectMethodNames, payload: }; } +function makeSelectedMap(legendModel: LegendModel, out?: Record) { + const selectedMap: Record = out || {}; + each(legendModel.getData(), function (model) { + const name = model.get('name'); + // Wrap element + if (name === '\n' || name === '') { + return; + } + const isItemSelected = legendModel.isSelected(name); + if (hasOwn(selectedMap, name)) { + // Unselected if any legend is unselected + selectedMap[name] = selectedMap[name] && isItemSelected; + } + else { + selectedMap[name] = isItemSelected; + } + }); + return selectedMap; +} + export function installLegendAction(registers: EChartsExtensionInstallRegisters) { /** * @event legendToggleSelect diff --git a/test/legend-action.html b/test/legend-action.html index 07f3688843..90dda2e3f2 100644 --- a/test/legend-action.html +++ b/test/legend-action.html @@ -46,6 +46,7 @@ legend: [ { id: 1, + name: 'legend1', data: ['Steppe', 'Forest'], left: '10%', selector: [ @@ -59,7 +60,8 @@ }, { id: 2, - data: ['Desert', 'Wetland'], + name: 'legend2', + data: ['Desert', 'Wetland', 'Steppe' /* test for the same item in other legend */], right: '10%', selector: [ { @@ -94,12 +96,40 @@ } ] }; - var chart = testHelper.create(echarts, 'main0', { + var chart = window.myChart0 = testHelper.create(echarts, 'main0', { title: [ - 'Legend action should be isolated from other legend components' + 'Legend action should be isolated from other legend components\n(except for the items with the same name)' ], - option: option + option: option, + buttons: [ + { + text: 'Dispatch `legendAllSelect` for both legend components', + onclick() { + chart.dispatchAction({ + type: 'legendAllSelect', + legendName: ['legend1', 'legend2'], + // legendId: ['0', '1'], + // legendIndex: [0, 1] + }) + } + }, + { + text: 'Dispatch `legendInverseSelect` for both legend components', + onclick() { + chart.dispatchAction({ + type: 'legendInverseSelect', + // legendName: ['legend1', 'legend2'], + legendId: ['1', '2'], + // legendIndex: [0, 1] + }) + } + } + ] }); + var logFn = e => console.log(JSON.stringify(e, null, 2)); + chart.on('legendselectall', logFn); + chart.on('legendinverseselect', logFn); + chart.on('legendselectchanged', logFn); }); diff --git a/test/runTest/actions/legend-action.json b/test/runTest/actions/legend-action.json index 31ec2f6443..bd0b61577f 100644 --- a/test/runTest/actions/legend-action.json +++ b/test/runTest/actions/legend-action.json @@ -1 +1 @@ -[{"name":"Action 1","ops":[{"type":"mousemove","time":223,"x":351,"y":33},{"type":"mousemove","time":427,"x":312,"y":71},{"type":"mousemove","time":661,"x":309,"y":75},{"type":"mousedown","time":679,"x":308,"y":75},{"type":"mouseup","time":789,"x":308,"y":75},{"time":790,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":876,"x":308,"y":75},{"type":"mousemove","time":1156,"x":300,"y":68},{"type":"mousemove","time":1360,"x":279,"y":57},{"type":"mousemove","time":1573,"x":255,"y":71},{"type":"mousedown","time":1734,"x":253,"y":74},{"type":"mousemove","time":1775,"x":253,"y":74},{"type":"mouseup","time":1869,"x":253,"y":74},{"time":1870,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":2189,"x":253,"y":71},{"type":"mousemove","time":2389,"x":310,"y":49},{"type":"mousemove","time":2589,"x":492,"y":43},{"type":"mousemove","time":2789,"x":722,"y":33},{"type":"mousemove","time":2989,"x":712,"y":64},{"type":"mousemove","time":3195,"x":678,"y":81},{"type":"mousemove","time":3273,"x":680,"y":81},{"type":"mousemove","time":3476,"x":696,"y":76},{"type":"mousedown","time":3479,"x":696,"y":76},{"type":"mouseup","time":3581,"x":696,"y":76},{"time":3582,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":3706,"x":692,"y":76},{"type":"mousemove","time":3909,"x":648,"y":75},{"type":"mousedown","time":4135,"x":648,"y":75},{"type":"mouseup","time":4309,"x":648,"y":75},{"time":4310,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":4339,"x":647,"y":75},{"type":"mousemove","time":4789,"x":647,"y":74},{"type":"mousemove","time":4993,"x":652,"y":71},{"type":"mousemove","time":5226,"x":653,"y":54},{"type":"mousemove","time":5523,"x":649,"y":51},{"type":"mousemove","time":5723,"x":406,"y":53},{"type":"mousemove","time":5931,"x":329,"y":74},{"type":"mousemove","time":6139,"x":299,"y":66},{"type":"mousemove","time":6339,"x":270,"y":73},{"type":"mousedown","time":6470,"x":265,"y":75},{"type":"mousemove","time":6544,"x":265,"y":75},{"type":"mouseup","time":6597,"x":265,"y":75},{"time":6598,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":6889,"x":269,"y":75},{"type":"mousemove","time":7089,"x":289,"y":68},{"type":"mousedown","time":7270,"x":292,"y":68},{"type":"mousemove","time":7295,"x":292,"y":68},{"type":"mouseup","time":7430,"x":292,"y":68},{"time":7431,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":7790,"x":292,"y":66},{"type":"mousemove","time":7993,"x":295,"y":66},{"type":"mousemove","time":8573,"x":297,"y":67},{"type":"mousemove","time":8776,"x":312,"y":80},{"type":"mousemove","time":8989,"x":304,"y":83},{"type":"mousemove","time":9193,"x":251,"y":73},{"type":"mousedown","time":9303,"x":251,"y":73},{"type":"mouseup","time":9413,"x":251,"y":73},{"time":9414,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":9756,"x":251,"y":72},{"type":"mousemove","time":9956,"x":265,"y":68},{"type":"mousemove","time":10160,"x":379,"y":39}],"scrollY":0,"scrollX":0,"timestamp":1720490304919}] \ No newline at end of file +[{"name":"Action 1","ops":[{"type":"mousemove","time":301,"x":470,"y":19},{"type":"mousemove","time":500,"x":289,"y":47},{"type":"mousemove","time":700,"x":197,"y":115},{"type":"mousemove","time":903,"x":188,"y":132},{"type":"mousedown","time":1024,"x":188,"y":132},{"type":"mouseup","time":1169,"x":188,"y":132},{"time":1170,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":1483,"x":201,"y":132},{"type":"mousemove","time":1689,"x":273,"y":120},{"type":"mousemove","time":1900,"x":325,"y":117},{"type":"mousemove","time":2103,"x":242,"y":126},{"type":"mousemove","time":2266,"x":242,"y":127},{"type":"mousedown","time":2408,"x":257,"y":133},{"type":"mousemove","time":2469,"x":257,"y":133},{"type":"mouseup","time":2552,"x":257,"y":133},{"time":2553,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":2899,"x":261,"y":133},{"type":"mousemove","time":3099,"x":268,"y":132},{"type":"mousemove","time":3299,"x":297,"y":129},{"type":"mousedown","time":3472,"x":299,"y":129},{"type":"mousemove","time":3503,"x":299,"y":129},{"type":"mouseup","time":3646,"x":299,"y":129},{"time":3647,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":4016,"x":304,"y":129},{"type":"mousemove","time":4216,"x":474,"y":132},{"type":"mousemove","time":4421,"x":548,"y":141},{"type":"mousemove","time":4669,"x":525,"y":131},{"type":"mousedown","time":4681,"x":525,"y":131},{"type":"mouseup","time":4816,"x":525,"y":131},{"time":4817,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":4999,"x":526,"y":130},{"type":"mousemove","time":5199,"x":622,"y":130},{"type":"mousemove","time":5399,"x":646,"y":131},{"type":"mousedown","time":5521,"x":651,"y":132},{"type":"mousemove","time":5604,"x":651,"y":133},{"type":"mouseup","time":5655,"x":651,"y":133},{"time":5656,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":5886,"x":651,"y":133},{"type":"mousemove","time":6050,"x":651,"y":134},{"type":"mousemove","time":6333,"x":661,"y":135},{"type":"mousemove","time":6533,"x":689,"y":134},{"type":"mousedown","time":6648,"x":690,"y":134},{"type":"mousemove","time":6736,"x":690,"y":134},{"type":"mouseup","time":6759,"x":690,"y":134},{"time":6760,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":6983,"x":688,"y":134},{"type":"mousemove","time":7187,"x":659,"y":133},{"type":"mousedown","time":7304,"x":659,"y":133},{"type":"mouseup","time":7438,"x":659,"y":133},{"time":7439,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":7699,"x":651,"y":133},{"type":"mousemove","time":7899,"x":583,"y":135},{"type":"mousemove","time":8105,"x":521,"y":135},{"type":"mousedown","time":8203,"x":521,"y":135},{"type":"mouseup","time":8310,"x":521,"y":135},{"time":8311,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":8432,"x":542,"y":135},{"type":"mousemove","time":8636,"x":640,"y":135},{"type":"mousemove","time":8870,"x":656,"y":134},{"type":"mousedown","time":8896,"x":656,"y":134},{"type":"mouseup","time":9038,"x":656,"y":134},{"time":9039,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":9184,"x":654,"y":130},{"type":"mousemove","time":9387,"x":613,"y":109},{"type":"mousemove","time":9599,"x":582,"y":96},{"type":"mousemove","time":9803,"x":577,"y":94},{"type":"mousedown","time":9927,"x":577,"y":94},{"type":"mouseup","time":10136,"x":577,"y":94},{"time":10137,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":10401,"x":574,"y":93},{"type":"mousemove","time":10603,"x":407,"y":94},{"type":"mousemove","time":10820,"x":304,"y":94},{"type":"mousemove","time":11116,"x":301,"y":94},{"type":"mousedown","time":11319,"x":296,"y":97},{"type":"mousemove","time":11323,"x":296,"y":97},{"type":"mouseup","time":11430,"x":296,"y":97},{"time":11431,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":11616,"x":296,"y":98},{"type":"mousemove","time":11817,"x":246,"y":118},{"type":"mousemove","time":12021,"x":218,"y":135},{"type":"mousedown","time":12137,"x":218,"y":135},{"type":"mouseup","time":12230,"x":218,"y":135},{"time":12231,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":12382,"x":293,"y":133},{"type":"mousemove","time":12583,"x":397,"y":129},{"type":"mousemove","time":12786,"x":441,"y":129},{"type":"mousedown","time":12804,"x":441,"y":129},{"type":"mouseup","time":12886,"x":441,"y":129},{"time":12887,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":12950,"x":419,"y":128},{"type":"mousemove","time":13154,"x":244,"y":79},{"type":"mousemove","time":13366,"x":244,"y":91},{"type":"mousedown","time":13431,"x":245,"y":92},{"type":"mousemove","time":13569,"x":245,"y":92},{"type":"mouseup","time":13574,"x":245,"y":92},{"time":13575,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":13749,"x":256,"y":94},{"type":"mousemove","time":13949,"x":451,"y":91},{"type":"mousemove","time":14153,"x":473,"y":88},{"type":"mousedown","time":14353,"x":473,"y":87},{"type":"mousemove","time":14371,"x":473,"y":87},{"type":"mouseup","time":14520,"x":473,"y":87},{"time":14521,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":15049,"x":474,"y":87},{"type":"mousemove","time":15252,"x":516,"y":83},{"type":"mousemove","time":15487,"x":519,"y":92},{"type":"mousemove","time":15736,"x":514,"y":97},{"type":"mousedown","time":15920,"x":514,"y":97},{"type":"mouseup","time":16054,"x":514,"y":97},{"time":16055,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":16666,"x":531,"y":94},{"type":"mousemove","time":16870,"x":612,"y":81}],"scrollY":0,"scrollX":0,"timestamp":1720675612620}] \ No newline at end of file From c7f672f8e9df5818d186c4c58b946ad13e88e69d Mon Sep 17 00:00:00 2001 From: plainheart Date: Thu, 11 Jul 2024 13:39:06 +0800 Subject: [PATCH 4/6] fix(legend): remove unused import --- src/component/legend/legendAction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/component/legend/legendAction.ts b/src/component/legend/legendAction.ts index 92e3d14d0e..6576af60e7 100644 --- a/src/component/legend/legendAction.ts +++ b/src/component/legend/legendAction.ts @@ -17,7 +17,7 @@ * under the License. */ -import {curry, each, hasOwn, indexOf, map} from 'zrender/src/core/util'; +import {curry, each, hasOwn} from 'zrender/src/core/util'; import { EChartsExtensionInstallRegisters } from '../../extension'; import { Payload } from '../../util/types'; import type GlobalModel from '../../model/Global'; From 6ce6ba312d85537f036e23fc43279313c2855eae Mon Sep 17 00:00:00 2001 From: plainheart Date: Thu, 11 Jul 2024 17:14:12 +0800 Subject: [PATCH 5/6] fix(legend): remove duplicated type of legend select method name --- src/component/legend/legendAction.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/component/legend/legendAction.ts b/src/component/legend/legendAction.ts index 6576af60e7..9a05c367e2 100644 --- a/src/component/legend/legendAction.ts +++ b/src/component/legend/legendAction.ts @@ -23,10 +23,7 @@ import { Payload } from '../../util/types'; import type GlobalModel from '../../model/Global'; import type LegendModel from './LegendModel'; -type LegendSelectMethodNames = - 'select' | 'unSelect' | - 'toggleSelected' | 'toggleSelected' | - 'allSelect' | 'inverseSelect'; +type LegendSelectMethodNames = 'select' | 'unSelect' | 'toggleSelected' | 'allSelect' | 'inverseSelect'; function legendSelectActionHandler(methodName: LegendSelectMethodNames, payload: Payload, ecModel: GlobalModel) { const isAllSelect = methodName === 'allSelect' || methodName === 'inverseSelect'; From 13fe1d903715f1edf1ec13a2f556ec44028d8794 Mon Sep 17 00:00:00 2001 From: Zhongxiang Wang Date: Thu, 11 Jul 2024 22:57:22 +0800 Subject: [PATCH 6/6] fix(legend): return allSelectedMap rather than selectedMap --- src/component/legend/legendAction.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/component/legend/legendAction.ts b/src/component/legend/legendAction.ts index 9a05c367e2..d0771e79aa 100644 --- a/src/component/legend/legendAction.ts +++ b/src/component/legend/legendAction.ts @@ -61,13 +61,13 @@ function legendSelectActionHandler(methodName: LegendSelectMethodNames, payload: // Return the event explicitly return isAllSelect ? { - selected: selectedMap, + selected: allSelectedMap, // return legendIndex array to tell the developers which legends are allSelect / inverseSelect legendIndex: actionLegendIndices } : { name: payload.name, - selected: selectedMap + selected: allSelectedMap }; }