(
nodes: OptionSourceDataOriginal<OptionDataValue, OptionDataItemObject<OptionDataValue>>,
edges: OptionSourceDataOriginal<OptionDataValue, GraphEdgeItemObject<OptionDataValue>>,
seriesModel: SeriesModel,
directed: boolean,
beforeLink: (nodeData: SeriesData, edgeData: SeriesData) => void
)
| 33 | import { convertOptionIdName } from '../../util/model'; |
| 34 | |
| 35 | export default function createGraphFromNodeEdge( |
| 36 | nodes: OptionSourceDataOriginal<OptionDataValue, OptionDataItemObject<OptionDataValue>>, |
| 37 | edges: OptionSourceDataOriginal<OptionDataValue, GraphEdgeItemObject<OptionDataValue>>, |
| 38 | seriesModel: SeriesModel, |
| 39 | directed: boolean, |
| 40 | beforeLink: (nodeData: SeriesData, edgeData: SeriesData) => void |
| 41 | ): Graph { |
| 42 | // ??? TODO |
| 43 | // support dataset? |
| 44 | const graph = new Graph(directed); |
| 45 | for (let i = 0; i < nodes.length; i++) { |
| 46 | graph.addNode(zrUtil.retrieve( |
| 47 | // Id, name, dataIndex |
| 48 | nodes[i].id, nodes[i].name, i |
| 49 | ), i); |
| 50 | } |
| 51 | |
| 52 | const linkNameList = []; |
| 53 | const validEdges = []; |
| 54 | let linkCount = 0; |
| 55 | for (let i = 0; i < edges.length; i++) { |
| 56 | const link = edges[i]; |
| 57 | const source = link.source; |
| 58 | const target = link.target; |
| 59 | // addEdge may fail when source or target not exists |
| 60 | if (graph.addEdge(source, target, linkCount)) { |
| 61 | validEdges.push(link); |
| 62 | linkNameList.push(zrUtil.retrieve( |
| 63 | convertOptionIdName(link.id, null), |
| 64 | source + ' > ' + target |
| 65 | )); |
| 66 | linkCount++; |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | const coordSys = seriesModel.get('coordinateSystem'); |
| 71 | let nodeData; |
| 72 | if (coordSys === 'cartesian2d' || coordSys === 'polar' || coordSys === 'matrix') { |
| 73 | nodeData = createSeriesData(nodes, seriesModel); |
| 74 | } |
| 75 | else { |
| 76 | const coordSysCtor = CoordinateSystem.get(coordSys); |
| 77 | const coordDimensions = coordSysCtor |
| 78 | ? (coordSysCtor.dimensions || []) : []; |
| 79 | // FIXME: Some geo do not need `value` dimenson, whereas `calendar` needs |
| 80 | // `value` dimension, but graph need `value` dimension. It's better to |
| 81 | // uniform this behavior. |
| 82 | if (zrUtil.indexOf(coordDimensions, 'value') < 0) { |
| 83 | coordDimensions.concat(['value']); |
| 84 | } |
| 85 | |
| 86 | const { dimensions } = prepareSeriesDataSchema(nodes, { |
| 87 | coordDimensions: coordDimensions, |
| 88 | encodeDefine: seriesModel.getEncode() |
| 89 | }); |
| 90 | nodeData = new SeriesData(dimensions, seriesModel); |
| 91 | nodeData.initData(nodes); |
| 92 | } |
no test coverage detected
searching dependent graphs…