{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH-stable/src/internal/individuals-as-points/common/data-processor.js"],"names":["equalArrays","deepCopy","KENYA_ATTRIBUTES","value_type","grouping","grouping_type","groups","upper_bound","lower_bound","DEFAULT_MISSING_VALUES","SOMALIA_ATTRIBUTES","DataProcessorType","IndividualsProcessor","constructor","valuesByAttribute","valueAggregationLookUp","getType","setColorStore","colorStore","initializeWithIndividualsFromKenia","individuals","datasetName","currentAttributes","_initializeIndividuals","_generateValuesByAttribute","initializeWithIndividualsFromSomalia","getValuesForAttribute","attribute","getAllAttributes","attributes","Object","keys","includes","splice","indexOf","getValuesByAttribute","getUniqueValueFromIndividual","individual","attributeProcessDescription","_getIndividualsValueFromGrouping","individualIsMale","individualIsFemale","individualGenderIsMissing","getDemographicKeysForCurrentDataSet","colors","forEach","index","isInspected","isSelected","isColoredByAttribute","drawing","getDefaultColor","getInspectColor","getDeselectColor","getUniqueRGBColor","uniqueValues","_extractUniqueValuesWithAttributeDescription","_sortValues","result","levelthemes","i","length","push","sort","concat","_getValuesFromMergedGrouping","_getValuesFromGrouping","_getThemesFromIndividuals","_getValuesFromIndividuals","Set","map","themeCombinations","themes","themeCombination","level","theme","themeArray","individualValues","groupLabel","value","_getIndividualsValueFromSingleValueType","_getIndividualsValueFromMultiValueType","_getIndividualsValueFromWithinBounds","_getIndividualsValueFromEnumeration","_getIndividualsValueFromMerge","resultingGroup","groupDescription","acceptedValues","values","_getIndividualsValueThatMatchesAll","group","acceptedSet","testedSet"],"mappings":"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","file":"data-processor.js","sourcesContent":["import { equalArrays, deepCopy } from \"./utils.js\"\n\n/* \nThis singleton class computes the unique values for the important attributes of the individuals applications. An example internal data structure could look like the following\n\nvaluesByAttributes: {\n  \"age\": [\"18-25\", \"26-40\", ...],\n  \"gender\": [\"male\", \"NC\", ...],\n}\n  \nIt also exposes an api that finds the unique value for an individual if the value string does not match the unique value classes (e.g. age is 19 => 18-25)\n\nSchema for individuals:\n{\n  \"index\": 0,\n  \"isInspected\": false,\n  \"isSelected\": true,\n  \"isColoredByAttribute\": false,\n  \"age\": 10,\n  \"gender\": \"male\",\n  \"languages\": [],\n  \"themes\": {\n    \"L1\": [],\n    \"L2\": []\n  },\n  \"consent_withdrawn\": \"TRUE\",\n  \"drawing\": {\n    \"inspectColor\": {r: 255, g: 0, b: 0, opacity: 1},\n    \"deselectColor\": {r: 211, g: 211, b: 211, opacity: 1},\n    \"attributeColor\": {r: 146, g: 135, b: 10, opacity: 1},\n    \"defaultColor\": {r: 161, g: 176, b: 230, opacity: 1},\n    \"identifyingColor\": //a unique color\n    \"currentPosition\": {\n      \"x\": 0,\n      \"y\": 0\n    },\n    \"defaultPosition\": {\n      \"x\": 0,\n      \"y\": 0\n    },\n    \"targetPosition\": {\n      \"x\": 0,\n      \"y\": 0\n    },\n    \"startPosition\": {\n      \"x\": 0,\n      \"y\": 0\n    },\n    \"startSize\": 5,\n    \"targetSize\": 5,\n    \"currentSize\": 5,\n    \"defaultSize\": 5,\n  }\n}\n*/\n\nconst KENYA_ATTRIBUTES = {\n  \"index\": {\n    value_type: \"single\",\n    grouping: false\n  },\n  \"age\": {\n    value_type: \"single\",\n    grouping: true,\n    grouping_type: \"bounds\",\n    groups: {\n      \"under 10\": {\n        upper_bound: 9,\n        lower_bound: 0\n      },\n      \"10 - 14\": {\n        lower_bound: 10,\n        upper_bound: 14,\n      },\n      \"15 - 17\": {\n        lower_bound: 15,\n        upper_bound: 17,\n      },\n      \"18 - 35\": {\n        lower_bound: 18,\n        upper_bound: 35,\n      },\n      \"36 - 54\": {\n        lower_bound: 36,\n        upper_bound: 54,\n      },\n      \"over 55\": {\n        lower_bound: 55,\n        upper_bound: 1000,\n      },\n      \"missing\": {\n        lower_bound: \"missing\",\n        upper_bound: \"missing\"\n      }      \n    }\n  },\n  \"constituency\": {\n    value_type: \"single\",\n    grouping: false\n  },\n  \"county\": {\n    value_type: \"single\",\n    grouping: false\n  },\n  \"gender\": {\n    value_type: \"single\",\n    grouping: true,\n    grouping_type: \"enumeration\",\n    groups: {\n      \"male\": [\"male\"],\n      \"female\": [\"female\"],\n      \"missing\": [\"missing\"]\n    }\n  },\n  \"languages\": {\n    value_type: \"multi\",\n    grouping: true,\n    grouping_type: \"all\",\n    groups: {\n      \"(En) & (Swa)\": [\"(En)\", \"(Swa)\"],\n      \"(En)\": [\"(En)\"],\n      \"(Swa)\" : [\"(Swa)\"],\n      \"missing\": [\"missing\"]\n    }\n  },\n  \"themes\": {\n    value_type: \"object\",\n    grouping: false,\n  },\n  \"consent_withdrawn\" : {\n    value_type: \"single\",\n    grouping: false\n  }\n}\n\nconst DEFAULT_MISSING_VALUES = [\"NC\", \"STOP\", \"CE\", \"NA\", \"NR\", \"greeting\", \"push_back\", \"question\", \"showtime_question\", \"WS\"]\n\nconst SOMALIA_ATTRIBUTES = {\n  \"index\": {\n    value_type: \"single\",\n    grouping: false\n  },\n  \"age\": {\n    value_type: \"single\",\n    grouping: true,\n    grouping_type: \"bounds\",\n    groups: {\n      \"under 10\": {\n        upper_bound: 9,\n        lower_bound: 0\n      },\n      \"10 - 14\": {\n        lower_bound: 10,\n        upper_bound: 14,\n      },\n      \"15 - 17\": {\n        lower_bound: 15,\n        upper_bound: 17,\n      },\n      \"18 - 35\": {\n        lower_bound: 18,\n        upper_bound: 35,\n      },\n      \"36 - 54\": {\n        lower_bound: 36,\n        upper_bound: 54,\n      },\n      \"over 55\": {\n        lower_bound: 55,\n        upper_bound: 1000,\n      },\n      \"missing\": {\n        lower_bound: \"missing\",\n        upper_bound: \"missing\"\n      }      \n    }\n  },\n  \"state\": {\n    value_type: \"single\",\n    grouping: true,\n    grouping_type: \"merge\",\n    groups: {\n      \"missing\": DEFAULT_MISSING_VALUES\n    }\n  },\n  \"region\": {\n    value_type: \"single\",\n    grouping: true,\n    grouping_type: \"merge\",\n    groups: {\n      \"missing\": DEFAULT_MISSING_VALUES\n    }\n  },\n  \"gender\": {\n    value_type: \"single\",\n    grouping: true,\n    grouping_type: \"merge\",\n    groups: {\n      \"missing\": DEFAULT_MISSING_VALUES\n    }\n  },\n  \"district\": {\n    value_type: \"single\",\n    grouping: true,\n    grouping_type: \"merge\",\n    groups: {\n      \"missing\": DEFAULT_MISSING_VALUES\n    }\n  },\n  \"zone\": {\n    value_type: \"single\",\n    grouping: true,\n    grouping_type: \"merge\",\n    groups: {\n      \"missing\": [\"NC\", \"STOP\", \"CE\", \"NA\", \"NR\", \"greeting\", \"push_back\", \"question\", \"showtime_question\", \"WS\"]\n    }\n  },\n  \"recently_displaced\": {\n    value_type: \"single\",\n    grouping: true,\n    grouping_type: \"merge\",\n    groups: {\n      \"missing\": DEFAULT_MISSING_VALUES\n    }\n  },\n  \"themes\": {\n    value_type: \"single\",\n    grouping: false\n  },\n  \"consent_withdrawn\" : {\n    value_type: \"single\",\n    grouping: false\n  }\n}\n\nexport const DataProcessorType = \"dataProcessor\"\n\nexport default class IndividualsProcessor {\n  \n  constructor() {\n    this.valuesByAttribute = {}\n    this.valueAggregationLookUp = {}\n  }\n  \n  // ------------------------------------------\n  // Public Methods\n  // ------------------------------------------\n  \n  getType() {\n    return DataProcessorType\n  }\n  \n  setColorStore(colorStore) {\n    this.colorStore = colorStore\n  }\n  \n  initializeWithIndividualsFromKenia(individuals) {\n    this.datasetName = \"Kenya\"\n    this.currentAttributes = KENYA_ATTRIBUTES\n    this.valuesByAttribute = {}\n    this._initializeIndividuals(individuals)\n    \n    this._generateValuesByAttribute(individuals)\n  }\n  \n  initializeWithIndividualsFromSomalia(individuals) {\n    this.datasetName = \"Somalia\"\n    this.currentAttributes = SOMALIA_ATTRIBUTES\n    this.valuesByAttribute = {}\n    this._initializeIndividuals(individuals)\n    \n    this._generateValuesByAttribute(individuals)\n  }\n  \n  getValuesForAttribute(attribute) {\n    return this.valuesByAttribute[attribute]\n  }\n  \n  getAllAttributes() {\n    let attributes = Object.keys(this.valuesByAttribute)\n    if (attributes.includes(\"index\")) {\n      attributes.splice(attributes.indexOf(\"index\"), 1)\n    }\n    if (attributes.includes(\"consent_withdrawn\")) {\n      attributes.splice(attributes.indexOf(\"consent_withdrawn\"), 1)\n    }\n    return attributes\n  }\n  \n  getValuesByAttribute() {\n    let valuesByAttribute = deepCopy(this.valuesByAttribute)\n    delete valuesByAttribute[\"index\"]\n    delete valuesByAttribute[\"consent_withdrawn\"]\n    return valuesByAttribute\n  }\n  \n  getUniqueValueFromIndividual(individual, attribute) {\n    let attributeProcessDescription = this.currentAttributes[attribute]\n    if (attributeProcessDescription.grouping) {\n      return this._getIndividualsValueFromGrouping(attributeProcessDescription, individual[attribute])\n    } else {\n      return individual[attribute]\n    }\n  }\n  \n  individualIsMale(individual) {\n    return this.getUniqueValueFromIndividual(individual, \"gender\") === \"male\"\n  }\n  \n  individualIsFemale(individual) {\n    return this.getUniqueValueFromIndividual(individual, \"gender\") === \"female\"\n  }\n  \n  individualGenderIsMissing(individual) {\n    return (this.getUniqueValueFromIndividual(individual, \"gender\") !== \"male\") && (this.getUniqueValueFromIndividual(individual, \"gender\") !== \"female\")\n  }\n  \n  getDemographicKeysForCurrentDataSet() {\n    if(this.datasetName === \"Kenya\") {\n      return  ['age', 'gender', 'languages', 'constituency', 'county']\n    }\n    if(this.datasetName === \"Somalia\") {\n      return  ['age', 'gender', 'languages', 'district', 'state', 'region', 'zone']\n    }\n    \n    return ['age', 'gender', 'languages']\n  }\n  \n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _initializeIndividuals(individuals) {\n    let colors = {}\n    individuals.forEach((individual, index) => {\n      individual.index = index\n      individual.isInspected = false\n      individual.isSelected = true\n      individual.isColoredByAttribute = false\n      individual.drawing = {\n        \"currentColor\": this.colorStore.getDefaultColor(),\n        \"inspectColor\": this.colorStore.getInspectColor(),\n        \"deselectColor\": this.colorStore.getDeselectColor(),\n        \"attributeColor\": this.colorStore.getDefaultColor(),\n        \"defaultColor\": this.colorStore.getDefaultColor(),\n        \"identifyingColor\": this.colorStore.getUniqueRGBColor(colors),\n        \"currentPosition\": {\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"defaultPosition\": {\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"targetPosition\": {\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"startPosition\": {\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"startSize\": 5,\n        \"targetSize\": 5,\n        \"currentSize\": 5,\n        \"defaultSize\": 5\n      }\n    })\n  }\n\n  _generateValuesByAttribute(individuals) {\n    Object.keys(this.currentAttributes).forEach((attribute) => {\n      let attributeProcessDescription = this.currentAttributes[attribute]\n      let uniqueValues = this._extractUniqueValuesWithAttributeDescription(\n        attribute, attributeProcessDescription, individuals) \n      this.valuesByAttribute[attribute] = this._sortValues(attribute, uniqueValues)\n    })\n  }\n  \n  _sortValues(attribute, uniqueValues) {\n    if (attribute === \"age\" || attribute === \"index\") {\n      return uniqueValues\n    } else if (attribute === \"themes\") {\n      let result = []\n      let levelthemes = []\n      for (let i = 0; i < uniqueValues.length; i++) {\n        if (!uniqueValues[i].includes(\"missing\")) {\n          levelthemes.push(uniqueValues[i])\n        } else {\n          levelthemes.sort()\n          levelthemes.push(uniqueValues[i])\n          result = result.concat(levelthemes)\n          levelthemes = []\n        }\n      }\n      levelthemes.sort()\n      result = result.concat(levelthemes)\n      return result\n    } else {\n      uniqueValues = uniqueValues.sort()\n      if (uniqueValues.includes(\"missing\")) {\n        uniqueValues.splice(uniqueValues.indexOf(\"missing\"), 1)\n        uniqueValues.push(\"missing\")\n      }\n      return uniqueValues\n    }    \n  }\n  \n  _extractUniqueValuesWithAttributeDescription(attribute, attributeProcessDescription, individuals) {\n    if (attributeProcessDescription.grouping) {\n      if (attributeProcessDescription.grouping_type === \"merge\") {\n        return this._getValuesFromMergedGrouping(individuals, attribute, attributeProcessDescription)\n      }\n      return this._getValuesFromGrouping(attributeProcessDescription)\n    } else {\n      if (this.currentAttributes[attribute].value_type === \"object\") {\n        // TODO: rename functions from theme to object related name\n        return this._getThemesFromIndividuals(individuals)\n      } else {\n        return this._getValuesFromIndividuals(individuals, attribute)\n      }\n    }\n  }\n  \n  _getValuesFromGrouping(attributeProcessDescription){\n    return Object.keys(attributeProcessDescription.groups)\n  }\n  \n  _getValuesFromIndividuals(individuals, attribute){\n    return [... new Set(individuals.map((individual) => individual[attribute]))]\n  }\n  \n  _getThemesFromIndividuals(individuals) {\n    let themeCombinations = this._getValuesFromIndividuals(individuals, \"themes\")\n    let themes = {}\n    themeCombinations.forEach(themeCombination => {\n      Object.keys(themeCombination).forEach(level => {\n        themeCombination[level].forEach(theme => {\n          if(!themes[level]) {\n            themes[level] = []\n          }\n          if(!themes[level].includes(theme)) {\n            themes[level].push(theme)\n          }\n        })\n      })\n    })\n    \n    let themeArray = []\n    Object.keys(themes).forEach(level => {\n      themeArray = themeArray.concat(themes[level])\n    })\n    return themeArray\n  }\n  \n  _getValuesFromMergedGrouping(individuals, attribute, attributeProcessDescription) {\n    let individualValues = this._getValuesFromIndividuals(individuals, attribute)\n    let groups = attributeProcessDescription.groups\n    Object.keys(groups).forEach((groupLabel) => {\n      groups[groupLabel].forEach((attribute) => {\n        if (individualValues.includes(attribute)) {\n          let index = individualValues.indexOf(attribute)\n          individualValues.splice(index, 1)\n        }\n      })\n    })\n    individualValues.sort()\n    individualValues = individualValues.concat(Object.keys(groups))\n    return individualValues\n  }\n  \n  _getIndividualsValueFromGrouping(attributeProcessDescription, value){\n    if (attributeProcessDescription.value_type === \"single\") {\n      return this._getIndividualsValueFromSingleValueType(attributeProcessDescription, value)\n\n    }\n    if (attributeProcessDescription.value_type === \"multi\") {\n      return this._getIndividualsValueFromMultiValueType(attributeProcessDescription, value)\n    }\n  }\n         \n  _getIndividualsValueFromSingleValueType(attributeProcessDescription, value) {\n    if (attributeProcessDescription.grouping_type === \"bounds\") {\n      return this._getIndividualsValueFromWithinBounds(attributeProcessDescription.groups, value)\n    }\n    if (attributeProcessDescription.grouping_type === \"enumeration\") {\n      return this._getIndividualsValueFromEnumeration(attributeProcessDescription.groups, value)\n    }\n    if (attributeProcessDescription.grouping_type === \"merge\") {\n      return this._getIndividualsValueFromMerge(attributeProcessDescription.groups, value)\n    }\n  }\n  \n  _getIndividualsValueFromWithinBounds(groups, value) {\n    let resultingGroup = \"missing\"\n    Object.keys(groups).forEach((groupLabel) => {\n      let groupDescription = groups[groupLabel]\n      if (groupDescription.lower_bound <= +value && +value <= groupDescription.upper_bound)\n        resultingGroup = groupLabel\n    })\n    return resultingGroup\n  }\n  \n  _getIndividualsValueFromEnumeration(groups, value) {\n    let resultingGroup = \"missing\"\n    Object.keys(groups).forEach((groupLabel) => {\n      let acceptedValues = groups[groupLabel]\n      if (acceptedValues.includes(value)) {\n        resultingGroup = groupLabel\n      }\n    })\n    return resultingGroup\n  }\n  \n  _getIndividualsValueFromMerge(groups, value) {\n    let resultingGroup = value\n    Object.keys(groups).forEach((groupLabel) => {\n      let acceptedValues = groups[groupLabel]\n      if (acceptedValues.includes(value)) {\n        resultingGroup = groupLabel\n      }\n    })\n    return resultingGroup\n  }\n  \n  _getIndividualsValueFromMultiValueType(attributeProcessDescription, values){\n    if (attributeProcessDescription.grouping_type === \"all\") {\n      return this._getIndividualsValueThatMatchesAll(attributeProcessDescription.groups, values)\n    }\n  }\n  \n  _getIndividualsValueThatMatchesAll(groups, values){\n    let resultingGroup = \"missing\"\n    \n    Object.keys(groups).forEach((group) => {\n      let acceptedSet = [... new Set(groups[group])]\n      let testedSet = [... new Set(values)]\n      \n      if (equalArrays(acceptedSet, testedSet)) {\n        resultingGroup = group\n      }\n    })\n    \n    return resultingGroup\n  }\n}"]}