UNPKG

@alicloud/cloud-charts

Version:

![](https://img.shields.io/npm/v/@alicloud/cloud-charts?color=%23ff8200)

101 lines (98 loc) 3.26 kB
"use strict"; exports.__esModule = true; exports.customLegendFilter = customLegendFilter; exports.customLegendFilterLast = customLegendFilterLast; exports.singleCheckedLegendFilter = singleCheckedLegendFilter; var _core = require("@antv/g2/esm/core"); function customLegendFilterLast(view) { view.interaction('legend-custom-filter-last'); } function customLegendFilter(view) { view.interaction('legend-custom-filter'); } function singleCheckedLegendFilter(view) { view.interaction('legend-singlechecked-filter-last'); } // 图例单选模式封装交互 (0, _core.registerInteraction)('legend-custom-filter', { showEnable: [{ trigger: 'legend-item:mouseenter', action: 'cursor:pointer' }, { trigger: 'legend-item:mouseleave', action: 'cursor:default' }], start: [{ trigger: 'legend-item:click', action: ['list-checked:toggle', 'data-filter:filter'] }] }); function notLastLegend(context) { // @ts-ignore var _ref = context.getAction('list-checked').getTriggerListInfo() || {}, item = _ref.item, list = _ref.list; if (!item) { return true; } var items = list.getItems(); var stateItems = list.getItemsByState('unchecked'); // 当前选中项状态 var currentEnable = list.hasState(item, 'unchecked'); // 获取原始事件 var originEvent = context.event.event; // 是否按Control var hasControl = originEvent.ctrlKey || originEvent.metaKey; // 按Control进入单选模式则一直可用,或者:当前是要 unchecked,且只剩下一个 非unchecked 的 item,则返回 false return hasControl || !(!currentEnable && stateItems.length === items.length - 1); } (0, _core.registerInteraction)('legend-custom-filter-last', { showEnable: [{ trigger: 'legend-item:mouseenter', action: 'cursor:pointer', isEnable: notLastLegend }, { trigger: 'legend-item:mouseleave', action: 'cursor:default' }], start: [{ trigger: 'legend-item:click', action: ['list-checked:toggle', 'data-filter:filter', 'element-highlight:clear'], isEnable: notLastLegend }] }); function notLastCheckedLegend(context) { // @ts-ignore var _ref2 = context.getAction('list-checked').getTriggerListInfo() || {}, item = _ref2.item, list = _ref2.list; if (!item) { return true; } var items = list.getItems(); var stateItems = list.getItemsByState('unchecked'); // 当前选中项状态 var currentEnable = list.hasState(item, 'unchecked'); // 获取原始事件 var originEvent = context.event.event; // 是否按Control var hasControl = originEvent.ctrlKey || originEvent.metaKey; // 单选情况下,非Control时一直可用,control时不能消除最后一个legend return !hasControl || !(!currentEnable && stateItems.length === items.length - 1); } // 正选时的交互 (0, _core.registerInteraction)('legend-singlechecked-filter-last', { showEnable: [{ trigger: 'legend-item:mouseenter', action: 'cursor:pointer', isEnable: notLastCheckedLegend }, { trigger: 'legend-item:mouseleave', action: 'cursor:default' }], start: [{ trigger: 'legend-item:click', action: ['list-checked:toggle', 'data-filter:filter', 'element-highlight:clear'], isEnable: notLastCheckedLegend }] });