src/common/interaction/actions/list-reverse-checked.ts (31 lines of code) (raw):

import { G2Dependents } from '../../types'; import ListUnchecked from '@antv/g2/esm/interaction/action/component/list-unchecked'; // 图例反选 Action 默认行为 export class ListReverseChecked extends ListUnchecked { toggle() { // 获取原始事件 const originEvent = this.context.event.event; const { item, list } = this.getTriggerListInfo() || {}; // 用于显示分组的items不触发交互 if (!item || !!item.dodge) { return; } // 是否按Control const hasControl = originEvent.ctrlKey || originEvent.metaKey; // 当前选中状态 false-选中,true-未选 const currentEnable = this.hasState(list, item); if (hasControl) { // Control进入单选默认 const listItems = list.getItems(); const isOneChecked = listItems.reduce((pre: number, cur: G2Dependents.ListItem) => { return pre + (this.hasState(list, cur) ? 0 : 1); }, 0) === 1; listItems.forEach((listItem: G2Dependents.ListItem) => { const enable = this.hasState(list, listItem); const otherEnable = !currentEnable && isOneChecked ? !enable : true; if (listItem !== item) { this.setItemState(list, listItem, otherEnable); } else { this.setItemState(list, listItem, false); } }); } else { // 非Control时保持默认反选 this.setItemState(list, item, !currentEnable); } } }