{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/scratch/individualsAsPoints/regl/groupchaining/node-modules/individuals-grouper.js"],"names":["Grouping","GroupingMenu","IndividualsGrouper","constructor","interactiveCanvas","individuals","groupingLayouter","menuContainer","world","keys","setParentIdKey","setIdKey","rawIndividuals","groupingKeys","headGrouping","groupingKey","slice","initializeRootGrouping","groupingMenu","initializeGroupingMenu","menu","initGroupingSelectBox","addGrouping","removeGrouping","getGroupingStructure","updateNodes","animateNodes","getUniqueValuesForKey","key","getUniqueValues","Array","isArray","getUniqueValuesForArrayGrouping","Set","map","individual","values","forEach","individualValues","getSortedValue","value","add","permutations","getPermutationsForValues","from","push","sort","array","intermediate","entry","length","permutation","toString"],"mappings":"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","file":"individuals-grouper.js","sourcesContent":["import { Grouping } from './groupingTryOut.js';\nimport { GroupingMenu } from './grouping-menu.js';\n\n\nexport class IndividualsGrouper {\n  \n  constructor(interactiveCanvas, individuals, groupingLayouter, menuContainer, world, keys){\n    this.interactiveCanvas = interactiveCanvas;\n    \n    // Set up groupingLayouter\n    this.groupingLayouter = groupingLayouter;\n    this.groupingLayouter.setParentIdKey(\"parentId\");\n    this.groupingLayouter.setIdKey(\"id\");\n    \n    this.rawIndividuals = individuals;\n    \n    this.groupingKeys = \"root\";\n    \n    this.headGrouping = new Grouping(\n      this,\n      this.groupingKey, \n      [], \n      [],\n      [],\n      [],\n      this.rawIndividuals.slice(), \n      this.groupingLayouter);\n    this.headGrouping.initializeRootGrouping();\n    this.groupingMenu = this.initializeGroupingMenu(menuContainer, world, keys);\n  }\n  \n  initializeGroupingMenu(menuContainer, world, keys) {\n    let menu = new GroupingMenu(this, keys);\n    menu.initGroupingSelectBox(menuContainer, world, this.addGrouping, this.removeGrouping)\n    return menu;\n  }\n  \n  getGroupingStructure(){\n    return this.headGrouping.getGroupingStructure();\n  } \n  \n  addGrouping(groupingKey){\n    this.headGrouping.addGrouping(groupingKey);\n    this.interactiveCanvas.updateNodes(this.getGroupingStructure(), groupingKey)\n    this.interactiveCanvas.animateNodes();\n  }\n  \n  removeGrouping(groupingKey){\n    this.headGrouping.removeGrouping(groupingKey);\n    this.interactiveCanvas.updateNodes(this.getGroupingStructure())\n    this.interactiveCanvas.animateNodes();\n  }\n  \n  getUniqueValuesForKey(key){\n    return this.getUniqueValues(this.rawIndividuals, key);\n  }\n  \n  getUniqueValues(individuals, key){\n    if(Array.isArray(individuals[0][key])){\n      return this.getUniqueValuesForArrayGrouping(individuals, key)\n    } else {\n      return [...new Set(this.rawIndividuals.map((individual) => individual[key]))]\n    }\n    \n  }\n   \n  getUniqueValuesForArrayGrouping(individuals, key){\n    let values = new Set();\n    individuals.forEach((individual) => {\n      let individualValues = this.getSortedValue(individual[key]);\n      \n      if(individualValues !== \"missing\"){\n        individualValues.forEach((value) => {\n          values.add(value);\n        })\n      }\n    });\n    \n    let permutations = this.getPermutationsForValues(Array.from(values));\n    permutations.push(\"missing\");\n    return permutations;\n        \n  }\n  \n  getSortedValue(value){\n    if(Array.isArray(value)) return value.sort();\n    return value;\n  }\n  \n  getPermutationsForValues(array){\n    let permutations = [];\n    let intermediate = [];\n    array.forEach((entry) => {\n      intermediate.push(entry);\n      if(intermediate.length > 1) {\n        permutations.push([entry])\n      }\n      permutations.push([...intermediate]);\n    })\n    \n    return permutations.map(permutation => permutation.toString());\n\n  }\n\n}"]}