UNPKG

@antv/g6-pc

Version:

A Graph Visualization Framework in JavaScript

176 lines (175 loc) 5.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _util = require("@antv/util"); var DEFAULT_TRIGGER = 'shift'; var ALLOW_EVENTS = ['shift', 'ctrl', 'alt', 'control']; var _default = exports.default = { getDefaultCfg: function getDefaultCfg() { return { multiple: true, trigger: DEFAULT_TRIGGER, selectedState: 'selected', selectNode: true, selectEdge: false, selectCombo: true }; }, getEvents: function getEvents() { var self = this; // 检测输入是否合法 if (!(ALLOW_EVENTS.indexOf(self.trigger.toLowerCase()) > -1)) { self.trigger = DEFAULT_TRIGGER; // eslint-disable-next-line no-console console.warn("Behavior click-select 的 trigger 参数不合法,请输入 'drag'、'shift'、'ctrl' 或 'alt'"); } if (!self.multiple) { return { 'node:click': 'onClick', 'combo:click': 'onClick', 'edge:click': 'onClick', 'canvas:click': 'onCanvasClick' }; } return { 'node:click': 'onClick', 'combo:click': 'onClick', 'edge:click': 'onClick', 'canvas:click': 'onCanvasClick', keyup: 'onKeyUp', keydown: 'onKeyDown' }; }, onClick: function onClick(evt) { var self = this; var item = evt.item; if (!item || item.destroyed) { return; } var type = item.getType(); var graph = self.graph, keydown = self.keydown, multiple = self.multiple, shouldUpdate = self.shouldUpdate, shouldBegin = self.shouldBegin; if (!shouldBegin(evt, self)) { return; } // allow to select multiple nodes but did not press a key || do not allow the select multiple nodes if (!keydown || !multiple) { var selected = graph.findAllByState('node', self.selectedState).concat(graph.findAllByState('edge', self.selectedState)).concat(graph.findAllByState('combo', self.selectedState)); (0, _util.each)(selected, function (selectedItem) { if (selectedItem !== item) { graph.setItemState(selectedItem, self.selectedState, false); } }); } // check if the item could be selected, given the current cfg var itemSelectable = function () { switch (type) { case 'node': return self.selectNode; case 'edge': return self.selectEdge; case 'combo': return self.selectCombo; default: return false; } }(); if (!itemSelectable) { var selectedNodes = graph.findAllByState('node', self.selectedState); var selectedEdges = graph.findAllByState('edge', self.selectedState); var selectedCombos = graph.findAllByState('combo', self.selectedState); graph.emit('nodeselectchange', { selectedItems: { nodes: selectedNodes, edges: selectedEdges, combos: selectedCombos }, select: false }); return; } if (item.hasState(self.selectedState)) { if (shouldUpdate(evt, self)) { graph.setItemState(item, self.selectedState, false); } var selectedNodes = graph.findAllByState('node', self.selectedState); var selectedEdges = graph.findAllByState('edge', self.selectedState); var selectedCombos = graph.findAllByState('combo', self.selectedState); graph.emit('nodeselectchange', { target: item, selectedItems: { nodes: selectedNodes, edges: selectedEdges, combos: selectedCombos }, select: false }); } else { if (shouldUpdate(evt, self)) { graph.setItemState(item, self.selectedState, true); } var selectedNodes = graph.findAllByState('node', self.selectedState); var selectedEdges = graph.findAllByState('edge', self.selectedState); var selectedCombos = graph.findAllByState('combo', self.selectedState); graph.emit('nodeselectchange', { target: item, selectedItems: { nodes: selectedNodes, edges: selectedEdges, combos: selectedCombos }, select: true }); } }, onCanvasClick: function onCanvasClick(evt) { var _this = this; var _a = this, graph = _a.graph, shouldBegin = _a.shouldBegin; if (!shouldBegin(evt, this)) { return; } var selected = graph.findAllByState('node', this.selectedState); (0, _util.each)(selected, function (node) { graph.setItemState(node, _this.selectedState, false); }); var selectedEdges = graph.findAllByState('edge', this.selectedState); (0, _util.each)(selectedEdges, function (edge) { graph.setItemState(edge, _this.selectedState, false); }); var selectedCombos = graph.findAllByState('combo', this.selectedState); (0, _util.each)(selectedCombos, function (combo) { graph.setItemState(combo, _this.selectedState, false); }); graph.emit('nodeselectchange', { selectedItems: { nodes: [], edges: [], combos: [] }, select: false }); }, onKeyDown: function onKeyDown(e) { var self = this; var code = e.key; if (!code) { return; } if (code.toLowerCase() === this.trigger.toLowerCase() || code.toLowerCase() === 'control') { self.keydown = true; } else { self.keydown = false; } }, onKeyUp: function onKeyUp() { var self = this; self.keydown = false; } };