{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/groupchaining/node-modules/groupingTryOut.js"],"names":["ROOT_ID","GROUP_TYPE","INDIVIDUAL_TYPE","INDIVIDUAL_COLOR","r","g","b","opacity","INDIVIDUAL_COLOR_SELECTED","PARENT_COLOR","Grouping","constructor","grouper","groupingKey","prevGrouping","prevNodes","prevNewParents","prevRawParents","prevRawIndividuals","groupingLayouter","next","prev","positionInChain","prevRawNewParents","rawIndividuals","rawParents","rawNewParents","prevNodesLookup","nodes","initializeRootGrouping","numberOfParents","forEach","individual","index","toString","push","id","parentId","setColorScaleForDomain","addGrouping","newGrouping","position","updateTreeStructure","removeGrouping","createLookUpTableForNodes","parentRawNode","parentNode","individualsDataFromParentNode","children","map","item","data","uniqueValuesForAllChildren","getUniqueValues","uniqueValue","newParentNode","nodeType","valueForCurrentGroupingKey","getSortedValue","newParentId","newRawIndividual","Object","assign","lookUpTable","node","getGroupingStructure","rawNodes","getRawNodesOfThisGrouping","createLayout","enrichNodesWithDrawingInformation","nodesToReturn","removeRootNodeForRendering","reverse","shift","drawingInformation","nodeIsRoot","setColorForRootNode","setPositionAndSizeForNewNode","nodeIsNewParent","setColorForNewParent","nodeIsOldParent","setColorForOldParent","setPositionAndSizeForExistingNode","nodeIsIndividual","nodesHaveBeenRendered","setColorForIndividual","white","undefined","length","getColorForNewParentNode","x","y","color","getColorForValue","nodeIsSelected","isSelectedIsAvailable","drawing","selected","getParentColor","tcolor","tx","ty","tsize"],"mappings":";;;;;;;;AAAA,YAAMA,UAAU,MAAhB;;;;;;;;;;;;;;AACA,YAAMC,aAAa,QAAnB;;;;;;;;;;;;;;AACO,YAAMC,kBAAkB,OAAxB;;;;;;;;;;;;;;;;;;AACA,YAAMC,mBAAmB,EAACC,GAAG,EAAJ,EAAQC,GAAG,EAAX,EAAeC,GAAG,EAAlB,EAAsBC,SAAS,CAA/B,EAAzB;;;;;;;;;;;;;;;;;;AACA,YAAMC,4BAA6B,EAACJ,GAAG,GAAJ,EAASC,GAAG,CAAZ,EAAeC,GAAG,GAAlB,EAAuBC,SAAS,CAAhC,EAAnC;;;;;;;;;;;;;;;;;;AACP,YAAME,eAAe,EAACL,GAAG,GAAJ,EAASC,GAAG,GAAZ,EAAiBC,GAAG,GAApB,EAAyBC,SAAS,GAAlC,EAArB;;;;;;;;;;;;;;;AAEO,YAAMG,QAAN,CAAe;;AAEpBC,oBAAYC,OAAZ,EAAqBC,WAArB,EAAkCC,YAAlC,EAAgDC,SAAhD,EAA2DC,cAA3D,EAA2EC,cAA3E,EAA2FC,kBAA3F,EAA+GC,gBAA/G,EAAiI;AAC/H,eAAKC,IAAL,GAAY,IAAZ;AACA,eAAKC,IAAL,GAAYP,YAAZ;AACA,eAAKQ,eAAL,GAAuB,CAAvB;AACA,eAAKV,OAAL,GAAeA,OAAf;;AAEA,eAAKM,kBAAL,GAA0BA,kBAA1B;AACA,eAAKH,SAAL,GAAiBA,SAAjB;AACA,eAAKQ,iBAAL,GAAyBP,cAAzB;AACA,eAAKC,cAAL,GAAsBA,cAAtB;;AAEA,eAAKO,cAAL,GAAsB,EAAtB;AACA,eAAKC,UAAL,GAAkB,EAAlB;AACA,eAAKC,aAAL,GAAqB,EAArB;AACA,eAAKC,eAAL,GAAuB,EAAvB;AACA,eAAKC,KAAL,GAAa,EAAb;;AAEA,eAAKT,gBAAL,GAAwBA,gBAAxB;AACA,eAAKN,WAAL,GAAmBA,WAAnB;AAED;;AAEDgB,iCAAwB;AACtB,eAAKC,eAAL,GAAuB,CAAvB;AACA,eAAKZ,kBAAL,CAAwBa,OAAxB,CAAgC,CAACC,UAAD,EAAaC,KAAb,KAAuB;AACnDD,uBAAW,UAAX,IAAyBhC,OAAzB;AACAgC,uBAAW,IAAX,IAAmB,WAAWC,MAAMC,QAAN,CAAe,EAAf,CAA9B;AACAF,uBAAW,UAAX,IAAyB9B,eAAzB;AACF,iBAAKsB,cAAL,CAAoBW,IAApB,CAAyBH,UAAzB;AACD,WALD;;AAOA,eAAKN,aAAL,CAAmBS,IAAnB,CAAwB,EAACC,IAAIpC,OAAL,EAAcqC,UAAU,EAAxB,EAAxB;AACA,eAAKZ,UAAL,CAAgBU,IAAhB,CAAqB,EAACC,IAAIpC,OAAL,EAAcqC,UAAU,EAAxB,EAArB;;AAEA,eAAKlB,gBAAL,CAAsBmB,sBAAtB,CAA6C,EAA7C;;AAEA,eAAKhB,eAAL,GAAuB,CAAvB;AACD;;AAEDiB,oBAAY1B,WAAZ,EAAyB;AACvB,cAAG,KAAKO,IAAL,IAAa,IAAhB,EAAsB;AACpB,iBAAKA,IAAL,CAAUmB,WAAV,CAAsB1B,WAAtB;AACD,WAFD,MAEO;AACL,gBAAI2B,cAAc,IAAI9B,QAAJ,CAChB,KAAKE,OADW,EAEhBC,WAFgB,EAGhB,IAHgB,EAIhB,CAAC,GAAG,KAAKe,KAAT,CAJgB,EAKhB,CAAC,GAAG,KAAKF,aAAT,CALgB,EAMhB,CAAC,GAAG,KAAKD,UAAT,CANgB,EAOhB,CAAC,GAAG,KAAKD,cAAT,CAPgB,EAQhB,KAAKL,gBARW,CAAlB;AAUA,iBAAKC,IAAL,GAAYoB,WAAZ;AACAA,wBAAYlB,eAAZ,GAA8B,KAAKmB,QAAL,GAAgB,CAA9C;AACAD,wBAAYE,mBAAZ;AACD;AACF;;AAEDC,uBAAe9B,WAAf,EAA2B;AACzB,cAAG,KAAKA,WAAL,IAAoBA,WAAvB,EAAmC;AACjC,iBAAKQ,IAAL,CAAUD,IAAV,GAAiB,IAAjB;AACA,iBAAKC,IAAL,GAAY,IAAZ;AACD,WAHD,MAGO;AACL,iBAAKD,IAAL,CAAUuB,cAAV,CAAyB9B,WAAzB;AACD;AACF;;AAED6B,8BAAsB;AACpB,eAAKf,eAAL,GAAuB,KAAKiB,yBAAL,CAA+B,KAAK7B,SAApC,CAAvB;;AAEA;AACA,eAAKQ,iBAAL,CAAuBQ,OAAvB,CAAiCc,aAAD,IAAmB;AACjD,gBAAIC,aAAa,KAAKnB,eAAL,CAAqBkB,cAAcT,EAAnC,CAAjB;AACA,gBAAIW,gCAAgCD,WAAWE,QAAX,CAAoBC,GAApB,CAAyBC,IAAD,IAAUA,KAAKC,IAAvC,CAApC;AACA,gBAAIC,6BACA,KAAKxC,OAAL,CAAayC,eAAb,CAA6BN,6BAA7B,EAA4D,KAAKlC,WAAjE,CADJ;;AAGAuC,uCAA2BrB,OAA3B,CAAqCuB,WAAD,IAAiB;AACnD,kBAAIC,gBAAgB;AAClBnB,oBAAIkB,cAAcT,cAAcT,EADd;AAElBC,0BAAUQ,cAAcT,EAFN;AAGlBoB,0BAAUvD,UAHQ;AAIlBqB,iCAAiB,KAAKA,eAJJ;AAKlBgC,6BAAaA;AALK,eAApB;AAOA,mBAAK5B,aAAL,CAAmBS,IAAnB,CAAwBoB,aAAxB;AACD,aATD;AAUD,WAhBD;;AAkBA,eAAKrC,kBAAL,CAAwBa,OAAxB,CAAiCC,UAAD,IAAgB;AAC9C,gBAAIyB,6BAA6B,KAAK7C,OAAL,CAAa8C,cAAb,CAA4B1B,WAAW,KAAKnB,WAAhB,CAA5B,CAAjC;;AAEA,gBAAI8C,cAAcF,2BAA2BvB,QAA3B,KAAwCF,WAAWK,QAArE;AACA,gBAAIuB,mBAAmBC,OAAOC,MAAP,CAAc,EAAd,EAAkB9B,UAAlB,CAAvB;AACA4B,6BAAiBvB,QAAjB,GAA4BsB,WAA5B;AACA,iBAAKnC,cAAL,CAAoBW,IAApB,CAAyByB,gBAAzB;AACD,WAPD;;AASA,eAAKnC,UAAL,CAAgBU,IAAhB,CAAqB,GAAG,KAAKlB,cAA7B;AACA,eAAKQ,UAAL,CAAgBU,IAAhB,CAAqB,GAAG,KAAKT,aAA7B;AACD;;AAEDkB,kCAA0BhB,KAA1B,EAAgC;AAC9B,cAAImC,cAAc,EAAlB;AACAnC,gBAAMG,OAAN,CAAeiC,IAAD,IAAU;AACtBD,wBAAYC,KAAKb,IAAL,CAAUf,EAAtB,IAA4B4B,IAA5B;AACD,WAFD;;AAIA,iBAAOD,WAAP;AACD;;AAEDE,+BAAsB;AACpB,cAAG,KAAK7C,IAAL,IAAa,IAAhB,EAAsB;AACpB,gBAAI8C,WAAW,KAAKC,yBAAL,EAAf;AACA,iBAAKvC,KAAL,GAAa,KAAKT,gBAAL,CAAsBiD,YAAtB,CAAmCF,QAAnC,CAAb;AACA,iBAAKG,iCAAL;AACA,gBAAIC,gBAAgB,CAAC,GAAG,KAAK1C,KAAT,CAApB;AACA,iBAAK2C,0BAAL,CAAgCD,aAAhC;AACAA,0BAAcE,OAAd;AACA,mBAAOF,aAAP;AACD,WARD,MASK;AACH,mBAAO,KAAKlD,IAAL,CAAU6C,oBAAV,EAAP;AACD;AACF;;AAEDE,oCAA2B;;AAEzB,cAAID,WAAW,EAAf;;AAEAA,mBAAS/B,IAAT,CAAc,GAAG,KAAKX,cAAtB;AACA0C,mBAAS/B,IAAT,CAAc,GAAG,KAAKV,UAAtB;;AAEA,iBAAOyC,QAAP;AACD;;AAEDK,mCAA2B3C,KAA3B,EAAiC;AAC/BA,gBAAM6C,KAAN;AACD;;AAEDJ,4CAAoC;AAClC,eAAKzC,KAAL,CAAWG,OAAX,CAAqBiC,IAAD,IAAU;AAC5B,gBAAIU,qBAAqB,EAAzB;;AAEA,gBAAG,KAAKC,UAAL,CAAgBX,IAAhB,CAAH,EAA0B;AACxB,mBAAKY,mBAAL,CAAyBF,kBAAzB;AACA,mBAAKG,4BAAL,CAAkCH,kBAAlC,EAAsDV,IAAtD;AACD;;AAED,gBAAG,KAAKc,eAAL,CAAqBd,IAArB,CAAH,EAA+B;AAC7B,mBAAKe,oBAAL,CAA0BL,kBAA1B,EAA8CV,IAA9C;AACA,mBAAKa,4BAAL,CAAkCH,kBAAlC,EAAsDV,IAAtD;AACD;;AAED,gBAAG,KAAKgB,eAAL,CAAqBhB,IAArB,CAAH,EAA+B;AAC7B,mBAAKiB,oBAAL,CAA0BP,kBAA1B,EAA8CV,IAA9C;AACA,mBAAKkB,iCAAL,CAAuCR,kBAAvC,EAA2DV,IAA3D;AACD;;AAED,gBAAG,KAAKmB,gBAAL,CAAsBnB,IAAtB,CAAH,EAAgC;AAC9B,kBAAG,KAAKoB,qBAAL,EAAH,EAAgC;AAC9B,qBAAKC,qBAAL,CAA2BX,kBAA3B,EAA+CV,IAA/C;AACA,qBAAKkB,iCAAL,CAAuCR,kBAAvC,EAA2DV,IAA3D;AACD,eAHD,MAGO;AACL,qBAAKqB,qBAAL,CAA2BX,kBAA3B,EAA+CV,IAA/C;AACA,qBAAKa,4BAAL,CAAkCH,kBAAlC,EAAsDV,IAAtD;AACD;AAEF;;AAEDA,iBAAK,SAAL,IAAkBU,kBAAlB;AACD,WA9BD;AA+BD;;AAEDC,mBAAWX,IAAX,EAAgB;AACd,iBAAOA,KAAK5B,EAAL,KAAW,MAAlB;AACD;;AAEDwC,4BAAoBF,kBAApB,EAAuC;AACrC,cAAIY,QAAQ,EAAClF,GAAG,GAAJ,EAASC,GAAG,GAAZ,EAAiBC,GAAG,GAApB,EAAyBC,SAAS,GAAlC,EAAZ;AACAmE,6BAAmB,QAAnB,IAA+BY,KAA/B;AACAZ,6BAAmB,QAAnB,IAA+BY,KAA/B;AACD;;AAEDR,wBAAgBd,IAAhB,EAAsB;AACpB,iBAAS,KAAKrC,eAAL,CAAqBqC,KAAKb,IAAL,CAAUf,EAA/B,MAAuCmD,SAAxC,IAAuD,KAAKxE,SAAL,CAAeyE,MAAf,KAA0B,CAAzF;AACD;;AAEDT,6BAAqBL,kBAArB,EAAyCV,IAAzC,EAA8C;AAC5CU,6BAAmB,QAAnB,IAA+B,KAAKe,wBAAL,CAA8BzB,IAA9B,CAA/B;AACAU,6BAAmB,QAAnB,IAA+B,KAAKe,wBAAL,CAA8BzB,IAA9B,CAA/B;AACD;;AAEDa,qCAA6BH,kBAA7B,EAAiDV,IAAjD,EAAsD;AACpDU,6BAAmB,IAAnB,IAA2BV,KAAK0B,CAAhC;AACAhB,6BAAmB,IAAnB,IAA2BV,KAAK2B,CAAhC;AACAjB,6BAAmB,IAAnB,IAA2BV,KAAK0B,CAAhC;AACAhB,6BAAmB,IAAnB,IAA2BV,KAAK2B,CAAhC;AACAjB,6BAAmB,OAAnB,IAA8BV,KAAK5D,CAAL,GAAS,CAAvC;AACAsE,6BAAmB,OAAnB,IAA8B,CAA9B;AACD;;AAEDe,iCAAyBzB,IAAzB,EAA+B;AAC7B,cAAI4B,QAAQ,KAAKzE,gBAAL,CAAsB0E,gBAAtB,CAAuC7B,KAAKb,IAAL,CAAU,aAAV,CAAvC,CAAZ;AACAyC,gBAAMrF,OAAN,GAAgB,IAAhB;;AAEA,iBAAOqF,KAAP;AACD;;AAEDT,yBAAiBnB,IAAjB,EAAsB;AACpB,iBAAQA,KAAKb,IAAL,CAAUK,QAAV,IAAsBtD,eAA9B;AACD;;AAEDkF,gCAAuB;AACrB,iBAAO,KAAKrE,SAAL,CAAeyE,MAAf,KAA0B,CAAjC;AACD;;AAEDH,8BAAsBX,kBAAtB,EAA0CV,IAA1C,EAA+C;AAC7C,cAAG,KAAK8B,cAAL,CAAoB9B,IAApB,CAAH,EAA6B;AAC3BU,+BAAmB,QAAnB,IAA+BlE,yBAA/B;AACAkE,+BAAmB,QAAnB,IAA+BlE,yBAA/B;AACD,WAHD,MAGO;AACLkE,+BAAmB,QAAnB,IAA+BvE,gBAA/B;AACAuE,+BAAmB,QAAnB,IAA+BvE,gBAA/B;AACD;AACF;;AAED2F,uBAAe9B,IAAf,EAAoB;AAClB,cAAG,KAAKoB,qBAAL,EAAH,EAAiC;AAC/B,gBAAIW,wBAAyB,KAAKpE,eAAL,CAAqBqC,KAAKb,IAAL,CAAUf,EAA/B,EAAmC4D,OAAnC,CAA2C,UAA3C,MAA2DT,SAAxF;AACA,gBAAIQ,qBAAJ,EAA2B;AACzB,qBAAO,KAAKpE,eAAL,CAAqBqC,KAAKb,IAAL,CAAUf,EAA/B,EAAmC4D,OAAnC,CAA2CC,QAAlD;AACD;AACD,mBAAO,KAAP;AACD;AACD,iBAAO,KAAP;AACD;;AAEDjB,wBAAgBhB,IAAhB,EAAqB;AACnB,iBAAOA,KAAKb,IAAL,CAAUK,QAAV,IAAsBvD,UAAtB,IAAoC,KAAK0B,eAAL,CAAqBqC,KAAKb,IAAL,CAAUf,EAA/B,MAAuCmD,SAAlF;AACD;;AAEDN,6BAAqBP,kBAArB,EAAyCV,IAAzC,EAA8C;AAC5CU,6BAAmB,QAAnB,IAA+B,KAAKwB,cAAL,CAAoBlC,IAApB,CAA/B;AACAU,6BAAmB,QAAnB,IAA+B,KAAK/C,eAAL,CAAqBqC,KAAKb,IAAL,CAAUf,EAA/B,EAAmC4D,OAAnC,CAA2CG,MAA1E;AACD;;AAEDjB,0CAAkCR,kBAAlC,EAAsDV,IAAtD,EAA2D;AACzDU,6BAAmB,IAAnB,IAA2BV,KAAK0B,CAAhC;AACAhB,6BAAmB,IAAnB,IAA2BV,KAAK2B,CAAhC;AACAjB,6BAAmB,IAAnB,IAA2B,KAAK/C,eAAL,CAAqBqC,KAAKb,IAAL,CAAUf,EAA/B,EAAmC4D,OAAnC,CAA2CI,EAAtE;AACA1B,6BAAmB,IAAnB,IAA2B,KAAK/C,eAAL,CAAqBqC,KAAKb,IAAL,CAAUf,EAA/B,EAAmC4D,OAAnC,CAA2CK,EAAtE;AACA3B,6BAAmB,OAAnB,IAA8BV,KAAK5D,CAAL,GAAS,CAAvC;AACAsE,6BAAmB,OAAnB,IAA8B,KAAK/C,eAAL,CAAqBqC,KAAKb,IAAL,CAAUf,EAA/B,EAAmC4D,OAAnC,CAA2CM,KAAzE;AACD;;AAEDJ,uBAAelC,IAAf,EAAqB;AACnB,cAAI5D,IAAIK,aAAaL,CAAb,IAAkB,MAAM4D,KAAKb,IAAL,CAAU7B,eAAlC,CAAR;AACA,cAAIjB,IAAII,aAAaJ,CAAb,IAAkB,MAAM2D,KAAKb,IAAL,CAAU7B,eAAlC,CAAR;AACA,cAAIhB,IAAIG,aAAaH,CAAb,IAAkB,MAAM0D,KAAKb,IAAL,CAAU7B,eAAlC,CAAR;AACA,cAAIf,UAAU,CAAd;;AAEA,iBAAO,EAACH,GAAGA,CAAJ,EAAOC,GAAGA,CAAV,EAAaC,GAAGA,CAAhB,EAAmBC,SAASA,OAA5B,EAAP;AACD;AA1QmB","file":"groupingTryOut.js","sourcesContent":["const ROOT_ID = \"root\"\nconst GROUP_TYPE = \"parent\";\nexport const INDIVIDUAL_TYPE = \"child\"\nexport const INDIVIDUAL_COLOR = {r: 58, g: 58, b: 61, opacity: 1};\nexport const INDIVIDUAL_COLOR_SELECTED =  {r: 255, g: 0, b: 246, opacity: 1};\nconst PARENT_COLOR = {r: 117, g: 119, b: 125, opacity: 0.8};\n\nexport class Grouping {\n  \n  constructor(grouper, groupingKey, prevGrouping, prevNodes, prevNewParents, prevRawParents, prevRawIndividuals, groupingLayouter) {\n    this.next = null;\n    this.prev = prevGrouping;\n    this.positionInChain = 0;\n    this.grouper = grouper;\n    \n    this.prevRawIndividuals = prevRawIndividuals;\n    this.prevNodes = prevNodes;\n    this.prevRawNewParents = prevNewParents;\n    this.prevRawParents = prevRawParents;\n    \n    this.rawIndividuals = [];\n    this.rawParents = [];\n    this.rawNewParents = [];\n    this.prevNodesLookup = [];\n    this.nodes = [];\n\n    this.groupingLayouter = groupingLayouter;\n    this.groupingKey = groupingKey;\n    \n  }    \n  \n  initializeRootGrouping(){\n    this.numberOfParents = 1;\n    this.prevRawIndividuals.forEach((individual, index) => {\n        individual[\"parentId\"] = ROOT_ID;\n        individual[\"id\"] = 'child_' + index.toString(10);\n        individual[\"nodeType\"] = INDIVIDUAL_TYPE;\n      this.rawIndividuals.push(individual);\n    })\n    \n    this.rawNewParents.push({id: ROOT_ID, parentId: \"\"});\n    this.rawParents.push({id: ROOT_ID, parentId: \"\"});\n    \n    this.groupingLayouter.setColorScaleForDomain([]);\n    \n    this.positionInChain = 1;\n  }   \n  \n  addGrouping(groupingKey) {\n    if(this.next != null) {\n      this.next.addGrouping(groupingKey);\n    } else {\n      let newGrouping = new Grouping(\n        this.grouper,\n        groupingKey, \n        this, \n        [...this.nodes],\n        [...this.rawNewParents],\n        [...this.rawParents],\n        [...this.rawIndividuals],\n        this.groupingLayouter\n      );\n      this.next = newGrouping;\n      newGrouping.positionInChain = this.position + 1;\n      newGrouping.updateTreeStructure();\n    }\n  }\n  \n  removeGrouping(groupingKey){\n    if(this.groupingKey == groupingKey){\n      this.prev.next = null;\n      this.prev = null;      \n    } else {\n      this.next.removeGrouping(groupingKey);\n    }\n  }\n  \n  updateTreeStructure() {\n    this.prevNodesLookup = this.createLookUpTableForNodes(this.prevNodes);\n    \n    //append  new node for each distinct value of new grouping key\n    this.prevRawNewParents.forEach( (parentRawNode) => {\n      let parentNode = this.prevNodesLookup[parentRawNode.id];\n      let individualsDataFromParentNode = parentNode.children.map((item) => item.data)\n      let uniqueValuesForAllChildren = \n          this.grouper.getUniqueValues(individualsDataFromParentNode, this.groupingKey);\n       \n      uniqueValuesForAllChildren.forEach( (uniqueValue) => {\n        let newParentNode = {\n          id: uniqueValue + parentRawNode.id, \n          parentId: parentRawNode.id,\n          nodeType: GROUP_TYPE,\n          positionInChain: this.positionInChain,\n          uniqueValue: uniqueValue\n        };\n        this.rawNewParents.push(newParentNode)\n      })\n    });\n\n    this.prevRawIndividuals.forEach((individual) => {\n      let valueForCurrentGroupingKey = this.grouper.getSortedValue(individual[this.groupingKey]);\n      \n      let newParentId = valueForCurrentGroupingKey.toString() + individual.parentId;\n      let newRawIndividual = Object.assign({}, individual)\n      newRawIndividual.parentId = newParentId;\n      this.rawIndividuals.push(newRawIndividual);\n    });\n    \n    this.rawParents.push(...this.prevRawParents);\n    this.rawParents.push(...this.rawNewParents);\n  }\n  \n  createLookUpTableForNodes(nodes){\n    let lookUpTable = {}\n    nodes.forEach((node) => {\n      lookUpTable[node.data.id] = node;\n    });\n    \n    return lookUpTable;\n  }\n  \n  getGroupingStructure(){\n    if(this.next == null) {\n      let rawNodes = this.getRawNodesOfThisGrouping();\n      this.nodes = this.groupingLayouter.createLayout(rawNodes);\n      this.enrichNodesWithDrawingInformation();\n      let nodesToReturn = [...this.nodes];\n      this.removeRootNodeForRendering(nodesToReturn);\n      nodesToReturn.reverse();\n      return nodesToReturn;\n    }\n    else {\n      return this.next.getGroupingStructure();\n    }\n  }\n  \n  getRawNodesOfThisGrouping(){\n    \n    let rawNodes = [];\n    \n    rawNodes.push(...this.rawIndividuals);\n    rawNodes.push(...this.rawParents);\n    \n    return rawNodes;\n  }\n  \n  removeRootNodeForRendering(nodes){\n    nodes.shift();\n  }\n  \n  enrichNodesWithDrawingInformation() {\n    this.nodes.forEach( (node) => {\n      let drawingInformation = {};\n      \n      if(this.nodeIsRoot(node)) {\n        this.setColorForRootNode(drawingInformation);\n        this.setPositionAndSizeForNewNode(drawingInformation, node);\n      }\n      \n      if(this.nodeIsNewParent(node)) {\n        this.setColorForNewParent(drawingInformation, node);\n        this.setPositionAndSizeForNewNode(drawingInformation, node);\n      }\n      \n      if(this.nodeIsOldParent(node)) {\n        this.setColorForOldParent(drawingInformation, node);\n        this.setPositionAndSizeForExistingNode(drawingInformation, node);\n      }\n      \n      if(this.nodeIsIndividual(node)) {\n        if(this.nodesHaveBeenRendered()){\n          this.setColorForIndividual(drawingInformation, node);\n          this.setPositionAndSizeForExistingNode(drawingInformation, node);\n        } else {\n          this.setColorForIndividual(drawingInformation, node);\n          this.setPositionAndSizeForNewNode(drawingInformation, node);\n        }\n        \n      }\n      \n      node[\"drawing\"] = drawingInformation;\n    });\n  }\n  \n  nodeIsRoot(node){\n    return node.id ===\"root\";\n  }\n  \n  setColorForRootNode(drawingInformation){\n    let white = {r: 255, g: 255, b: 255, opacity: 1.0};\n    drawingInformation[\"tcolor\"] = white;\n    drawingInformation[\"scolor\"] = white;\n  }\n  \n  nodeIsNewParent(node) {\n    return ((this.prevNodesLookup[node.data.id] === undefined) && (this.prevNodes.length !== 0));\n  }\n  \n  setColorForNewParent(drawingInformation, node){\n    drawingInformation[\"tcolor\"] = this.getColorForNewParentNode(node);\n    drawingInformation[\"scolor\"] = this.getColorForNewParentNode(node);\n  }\n  \n  setPositionAndSizeForNewNode(drawingInformation, node){\n    drawingInformation[\"tx\"] = node.x;\n    drawingInformation[\"ty\"] = node.y;\n    drawingInformation[\"sx\"] = node.x;\n    drawingInformation[\"sy\"] = node.y;\n    drawingInformation[\"tsize\"] = node.r * 2;\n    drawingInformation[\"ssize\"] = 0;\n  }\n  \n  getColorForNewParentNode(node) {\n    let color = this.groupingLayouter.getColorForValue(node.data['uniqueValue']);\n    color.opacity = 0.85;\n   \n    return color;\n  }\n  \n  nodeIsIndividual(node){\n    return (node.data.nodeType == INDIVIDUAL_TYPE);\n  }\n  \n  nodesHaveBeenRendered(){\n    return this.prevNodes.length !== 0;\n  }\n  \n  setColorForIndividual(drawingInformation, node){\n    if(this.nodeIsSelected(node)){\n      drawingInformation[\"tcolor\"] = INDIVIDUAL_COLOR_SELECTED;\n      drawingInformation[\"scolor\"] = INDIVIDUAL_COLOR_SELECTED;\n    } else {\n      drawingInformation[\"tcolor\"] = INDIVIDUAL_COLOR;\n      drawingInformation[\"scolor\"] = INDIVIDUAL_COLOR;\n    }\n  }\n  \n  nodeIsSelected(node){\n    if(this.nodesHaveBeenRendered()) {\n      let isSelectedIsAvailable = (this.prevNodesLookup[node.data.id].drawing[\"selected\"] !== undefined);\n      if (isSelectedIsAvailable) {\n        return this.prevNodesLookup[node.data.id].drawing.selected; \n      }\n      return false;\n    }\n    return false;\n  }\n  \n  nodeIsOldParent(node){\n    return node.data.nodeType == GROUP_TYPE && this.prevNodesLookup[node.data.id] !== undefined;\n  }\n    \n  setColorForOldParent(drawingInformation, node){\n    drawingInformation[\"tcolor\"] = this.getParentColor(node);\n    drawingInformation[\"scolor\"] = this.prevNodesLookup[node.data.id].drawing.tcolor;\n  }\n   \n  setPositionAndSizeForExistingNode(drawingInformation, node){\n    drawingInformation[\"tx\"] = node.x;\n    drawingInformation[\"ty\"] = node.y;\n    drawingInformation[\"sx\"] = this.prevNodesLookup[node.data.id].drawing.tx;\n    drawingInformation[\"sy\"] = this.prevNodesLookup[node.data.id].drawing.ty;\n    drawingInformation[\"tsize\"] = node.r * 2;\n    drawingInformation[\"ssize\"] = this.prevNodesLookup[node.data.id].drawing.tsize;\n  }\n    \n  getParentColor(node) {\n    let r = PARENT_COLOR.r / (100 / node.data.positionInChain);\n    let g = PARENT_COLOR.g / (100 / node.data.positionInChain);\n    let b = PARENT_COLOR.b / (100 / node.data.positionInChain);\n    let opacity = 1;\n    \n    return {r: r, g: g, b: b, opacity: opacity};\n  }\n}"]}