@alicloud/cloud-charts
Version:

101 lines (98 loc) • 3.26 kB
JavaScript
;
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
}]
});