UNPKG

wetrade-design

Version:

一款多语言支持Vue3的UI框架

166 lines 5.04 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck"; import _createClass from "@babel/runtime/helpers/esm/createClass"; import _inherits from "@babel/runtime/helpers/esm/inherits"; import _createSuper from "@babel/runtime/helpers/esm/createSuper"; /** * User: CHT * Date: 2020/5/8 * Time: 14:00 */ import GraphEvent from './graphEvent'; import GraphNode from './graphNode'; import GraphLink from './graphLink'; import { mark, arrayReplace } from './index'; var Graph = /*#__PURE__*/function (_GraphEvent) { _inherits(Graph, _GraphEvent); var _super = _createSuper(Graph); function Graph(options) { var _this; _classCallCheck(this, Graph); var relationMark = options.relationMark, startMark = options.startMark, endMark = options.endMark, _options$nodeList = options.nodeList, nodeList = _options$nodeList === void 0 ? [] : _options$nodeList, _options$linkList = options.linkList, linkList = _options$linkList === void 0 ? [] : _options$linkList, origin = options.origin; _this = _super.call(this); _extends(mark, { relationMark: relationMark, startMark: startMark, endMark: endMark }); _this.nodeList = []; _this.linkList = []; _this.origin = origin; _this.mouseOnLink = null; _this.mouseonNode = null; _this.maskBoundingClientRect = {}; _this.initNode(nodeList); _this.initLink(linkList); return _this; } _createClass(Graph, [{ key: "pointMap", value: function pointMap() { var map = {}; this.nodeList.forEach(function (point) { map[point[mark.relationMark]] = point; }); return map; } }, { key: "initNode", value: function initNode(nodeList) { var _this2 = this; arrayReplace(this.nodeList, nodeList.map(function (node) { return _this2.createNode(node); })); return this.nodeList; } }, { key: "initLink", value: function initLink(linkList) { var _this3 = this; var list = []; linkList.forEach(function (link) { var _link$startAt = link.startAt, startAt = _link$startAt === void 0 ? [0, 0] : _link$startAt, _link$endAt = link.endAt, endAt = _link$endAt === void 0 ? [0, 0] : _link$endAt, _link$meta = link.meta, meta = _link$meta === void 0 ? null : _link$meta; var id = link[mark.relationMark] || ''; var startId = link[mark.startMark] || ''; var endId = link[mark.endMark] || ''; var pointMap = _this3.pointMap(); var start = pointMap[startId]; var end = pointMap[endId]; if (start && end) { list.push(_this3.createLink({ id: id, start: start, end: end, meta: meta, startAt: startAt, endAt: endAt })); } }); arrayReplace(this.linkList, list); return this.linkList; } }, { key: "createNode", value: function createNode(options) { return new GraphNode(options, this); } }, { key: "createLink", value: function createLink(options) { return new GraphLink(options, this); } }, { key: "addNode", value: function addNode(options) { var node = options.constructor === GraphNode ? options : this.createNode(options); this.nodeList.push(node); return node; } }, { key: "addLink", value: function addLink(options) { var newLink = options.constructor === GraphLink ? options : this.createLink(options); var currentLink = this.linkList.find(function (item) { return item.start === newLink.start && item.end === newLink.end; }); if (currentLink) { currentLink.startAt = newLink.startAt; currentLink.endAt = newLink.endAt; } else if (newLink.start && newLink.end) { this.linkList.push(newLink); } return newLink; } }, { key: "removeNode", value: function removeNode(node) { var _this4 = this; var idx = this.nodeList.indexOf(node); this.linkList.filter(function (link) { return link.start === node || link.end === node; }).forEach(function (link) { _this4.removeLink(link); }); this.nodeList.splice(idx, 1); return node; } }, { key: "removeLink", value: function removeLink(link) { var idx = this.linkList.indexOf(link); this.linkList.splice(idx, 1); if (this.mouseOnLink === link) { this.mouseOnLink = null; } return link; } }, { key: "toJSON", value: function toJSON() { return { origin: this.origin, nodeList: this.nodeList.map(function (node) { return node.toJSON(); }), linkList: this.linkList.map(function (link) { return link.toJSON(); }) }; } }]); return Graph; }(GraphEvent); export default Graph;