createGraphFromNodeEdge.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. var zrUtil = require("zrender/lib/core/util");
  2. var List = require("../../data/List");
  3. var Graph = require("../../data/Graph");
  4. var linkList = require("../../data/helper/linkList");
  5. var completeDimensions = require("../../data/helper/completeDimensions");
  6. var CoordinateSystem = require("../../CoordinateSystem");
  7. var createListFromArray = require("./createListFromArray");
  8. function _default(nodes, edges, hostModel, directed, beforeLink) {
  9. var graph = new Graph(directed);
  10. for (var i = 0; i < nodes.length; i++) {
  11. graph.addNode(zrUtil.retrieve( // Id, name, dataIndex
  12. nodes[i].id, nodes[i].name, i), i);
  13. }
  14. var linkNameList = [];
  15. var validEdges = [];
  16. var linkCount = 0;
  17. for (var i = 0; i < edges.length; i++) {
  18. var link = edges[i];
  19. var source = link.source;
  20. var target = link.target; // addEdge may fail when source or target not exists
  21. if (graph.addEdge(source, target, linkCount)) {
  22. validEdges.push(link);
  23. linkNameList.push(zrUtil.retrieve(link.id, source + ' > ' + target));
  24. linkCount++;
  25. }
  26. }
  27. var coordSys = hostModel.get('coordinateSystem');
  28. var nodeData;
  29. if (coordSys === 'cartesian2d' || coordSys === 'polar') {
  30. nodeData = createListFromArray(nodes, hostModel, hostModel.ecModel);
  31. } else {
  32. // FIXME
  33. var coordSysCtor = CoordinateSystem.get(coordSys); // FIXME
  34. var dimensionNames = completeDimensions((coordSysCtor && coordSysCtor.type !== 'view' ? coordSysCtor.dimensions || [] : []).concat(['value']), nodes);
  35. nodeData = new List(dimensionNames, hostModel);
  36. nodeData.initData(nodes);
  37. }
  38. var edgeData = new List(['value'], hostModel);
  39. edgeData.initData(validEdges, linkNameList);
  40. beforeLink && beforeLink(nodeData, edgeData);
  41. linkList({
  42. mainData: nodeData,
  43. struct: graph,
  44. structAttr: 'graph',
  45. datas: {
  46. node: nodeData,
  47. edge: edgeData
  48. },
  49. datasAttr: {
  50. node: 'data',
  51. edge: 'edgeData'
  52. }
  53. }); // Update dataIndex of nodes and edges because invalid edge may be removed
  54. graph.update();
  55. return graph;
  56. }
  57. module.exports = _default;