{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-stable/src/blockchain/view/blockNetworkView.js"],"names":["BlockNetworkView","constructor","blockchainNodeView","_nodeView","nodeClickHandler","_onNodeClick","bind","_displayedBlocks","_newBlocks","_nodeIndices","Map","reset","draw","addBlock","block","push","addBlocks","blocks","concat","_constructNodes","_constructLinks","forEach","set","hash","size","addNode","displayName","target","source","_getBlock","previousHash","addLink","get","blockHash","allBlocks","result","node","Error","lively","openComponentInWindow","then","comp"],"mappings":"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","file":"blockNetworkView.js","sourcesContent":["\nexport default class BlockNetworkView {\n  constructor(blockchainNodeView) {\n    this._nodeView = blockchainNodeView;\n    this._nodeView.nodeClickHandler = this._onNodeClick.bind(this);\n    this._displayedBlocks = [];\n    this._newBlocks = [];\n    this._nodeIndices = new Map();\n  }\n  \n  reset() {\n    this._displayedBlocks = [];\n    this._newBlocks = [];\n    this._nodeIndices = new Map();\n    this._nodeView.reset();\n    this.draw();\n  }\n  \n  addBlock(block) {\n    this._newBlocks.push(block);\n    return this;\n  }\n  \n  addBlocks(blocks) {\n    this._newBlocks = this._newBlocks.concat(blocks);\n    return this;\n  }\n  \n  draw() {\n    this._constructNodes();\n    this._constructLinks();\n    this._nodeView.draw();\n    \n    this._displayedBlocks = this._displayedBlocks.concat(this._newBlocks);\n    this._newBlocks = [];\n  }\n  \n  _constructNodes() {\n    this._newBlocks.forEach((block) => {\n      this._nodeIndices.set(block.hash, this._nodeIndices.size);\n      this._nodeView.addNode(\n        {\n          \"name\": block.displayName,\n          \"group\": 1,\n          \"hash\": block.hash\n        }\n      );\n    });\n  }\n  \n  _constructLinks() {\n    this._newBlocks.forEach((target) => {\n      const source = this._getBlock(target.previousHash);\n      \n      if (!source) {\n        return;\n      }\n      \n      this._nodeView.addLink(\n        {\n          \"source\": this._nodeIndices.get(source.hash),\n          \"target\": this._nodeIndices.get(target.hash),\n          \"value\": 1,\n        }\n      );\n    });\n  }\n  \n  _getBlock(blockHash) {\n    const allBlocks = this._displayedBlocks.concat(this._newBlocks);\n    let result = null;\n\n    allBlocks.forEach((block) => {\n      if (result || block.hash != blockHash) {\n        return;\n      }\n      \n      result = block; \n    });\n    \n    return result;\n  }\n  \n  _onNodeClick(node) {\n    if (!node || !node.hash) {\n      return;\n    }\n    \n    const block = this._getBlock(node.hash);\n    \n    if (!block) {\n      throw new Error(\"Cannot find transaction to display!\");\n    }\n    \n    lively.openComponentInWindow(\"blockchain-block\").then((comp) => {\n      if (!comp) {\n        return;\n      }\n      \n      comp.block = block;\n      return comp;\n    });\n  }\n}"]}