{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/components/bp2019-map-widget.js"],"names":["assertListenerInterface","KenyaMap","SomaliaMap","ColorStore","DataProcessor","Morph","InspectAction","FilterAction","FilterActionChain","ColorAction","deepCopy","WIDTH","HEIGHT","initialPointSize","Bp2019MapWidget","initialize","iamReady","ready","Promise","resolve","listeners","name","currentMap","drawingCanvas","get","uniquePolygonCanvas","uniqueIndividualCanvas","canvasWindow","legend","lively","query","window","allParents","find","ea","isWindow","container","target","_addEventListenerForResizing","attachedCallback","notify","detachedCallback","setData","individuals","deletedIndividuals","_initializeWithData","initialIndividuals","activate","applyActionFromRootApplication","action","_dispatchAction","_updateExtent","updateExtent","applyAction","isGlobal","_applyActionToListeners","addListener","listener","push","removeEventListener","addEventListener","controlWidget","_registerControlWidget","districtTooltipDiv","getDistrictTooltip","individualTooltipDiv","getIndividualTooltip","_buildMap","initializeAfterDataFetch","forEach","clear","current","datasetName","Error","create","containerExtent","getExtent","windowGlobalPosition","getGlobalPosition","containerGlobalPosition","legendExtent","windowRelativePosition","subPt","padding","pt","legendHeight","y","windowExtent","setExtent","_handleColorAction","_handleInspectAction","_handleFilterAction","_handleFilterActionChain","_handleNotSupportedAction","colorAction","_recolorNodes","attribute","individualClicker","highlightSelectedIndividual","draw","currentColorAttribute","individual","nodeUniqueValue","getUniqueValueFromIndividual","colorString","getColorForValue","drawing","defaultColor","convertRGBStringToRGBAColorObject","currentColor","deselectSelectedIndividual","selection","selectIndividual","_getIndividualByIndex","index","filteredIndividuals","runOn","filteredIndividualsIndices","_getIndividualIndices","currentIndividuals","includes","dataHandler","selectedIndividual","updateIndividuals","actionChain","map","i","length"],"mappings":"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","file":"bp2019-map-widget.js","sourcesContent":["import { assertListenerInterface } from \"../src/internal/individuals-as-points/common/interfaces.js\"\nimport { KenyaMap, SomaliaMap } from \"../src/internal/individuals-as-points/map/map.js\"\n\nimport ColorStore from \"../src/internal/individuals-as-points/common/color-store.js\"\nimport DataProcessor from \"../src/internal/individuals-as-points/common/data-processor.js\"\nimport Morph from \"src/components/widgets/lively-morph.js\";\n\nimport { InspectAction, FilterAction, FilterActionChain, ColorAction } from '../src/internal/individuals-as-points/common/actions.js'\nimport { deepCopy } from \"../src/internal/individuals-as-points/common/utils.js\"\n\nconst WIDTH = 5000\nconst HEIGHT = 5000\nconst initialPointSize = 5\n\nexport default class Bp2019MapWidget extends Morph {\n  async initialize() {\n    var iamReady \n    this.ready = new Promise( resolve => {\n      iamReady = resolve\n    })\n    this.listeners = []\n    this.name = \"bp2019-map-widget\"\n    debugger\n    this.currentMap\n    this.drawingCanvas = this.get(\"#bp2019-map-widget-drawing-canvas\")\n    this.uniquePolygonCanvas = this.get(\"#bp2019-map-widget-unique-polygon-canvas\")\n    this.uniqueIndividualCanvas = this.get(\"#bp2019-map-widget-unique-individual-canvas\")\n    this.canvasWindow = this.get(\"#bp2019-map-widget-canvas-container\")\n    this.legend = lively.query(this, \"#legend-widget\")\n    \n    let window = lively.allParents(this, [], true)\n      .find(ea => ea && ea.isWindow)\n\n    if (window) {\n      this.container = window.target\n    }\n  \n    this._addEventListenerForResizing()\n    iamReady()\n  }\n  \n  \n  attachedCallback() {\n    // here goes checking for windows stuff\n    lively.notify(\"attached map\")\n  }\n  \n  detachedCallback() {\n    lively.notify(\"dettached map\")\n\n  }\n                                            \n  // ------------------------------------------\n  // Public Methods\n  // ------------------------------------------\n  // *** Interface to application ***\n  \n  async setData(individuals) {\n    this.individuals = individuals\n    this.deletedIndividuals = []\n    await this._initializeWithData()\n    this.initialIndividuals = deepCopy(this.individuals)\n    if (this.container) {\n      this.activate()\n    }\n  }\n  \n  async applyActionFromRootApplication(action) {\n     this._dispatchAction(action)\n  }\n  \n  async activate() {\n    await this.ready\n    debugger\n    this._updateExtent()\n    if (this.currentMap) {\n      this.currentMap.updateExtent()\n    }\n  }\n  \n  // *** Interface to control menu ***\n  \n  applyAction(action){\n    if(action.isGlobal){\n      this._applyActionToListeners(action)\n    } else {\n      this._dispatchAction(action)\n    }    \n  }\n  \n  addListener(listener) {\n    assertListenerInterface(listener)\n    this.listeners.push(listener)\n  }\n  \n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _addEventListenerForResizing() {\n    lively.removeEventListener(\"bpmap\", this.container, \"extent-changed\")\n  \n    lively.addEventListener(\"bpmap\", this.container, \"extent-changed\", () => {\n      this._updateExtent()\n    })\n  }\n  \n  _initializeWithData() {\n    this.controlWidget = this._registerControlWidget()\n    this.districtTooltipDiv = this.controlWidget.getDistrictTooltip()\n    this.individualTooltipDiv = this.controlWidget.getIndividualTooltip()\n    \n    return this._buildMap()\n  }\n  \n  _registerControlWidget() {\n    let controlWidget = this.get(\"#bp2019-map-control-widget\")\n    controlWidget.addListener(this)\n    controlWidget.initializeAfterDataFetch()\n    \n    return controlWidget\n  }\n  \n  _applyActionToListeners(action){\n    this.listeners.forEach((listener) => {\n      listener.applyAction(action);\n    })\n  }\n  \n  _buildMap() {\n    if (this.currentMap) {\n      this.currentMap.clear()\n    }\n    \n    switch(DataProcessor.current().datasetName) {\n      case 'Somalia':\n        this.currentMap = new SomaliaMap(this, WIDTH, HEIGHT, initialPointSize)\n        break\n      case 'Kenya':\n        this.currentMap = new KenyaMap(this, WIDTH, HEIGHT, initialPointSize)\n        break\n      default:\n        throw new Error(\"this dataset is not supported\")\n    }\n    \n    return this.currentMap.create(this.individuals)\n  }\n  \n  _updateExtent() {\n    let containerExtent = lively.getExtent(this.container)\n    let windowGlobalPosition = lively.getGlobalPosition(this.canvasWindow)\n    let containerGlobalPosition = lively.getGlobalPosition(this.container)\n    let legendExtent = lively.getExtent(this.legend)\n    let windowRelativePosition = windowGlobalPosition.subPt(containerGlobalPosition)\n    let padding = lively.pt(20,20)\n    let legendHeight = lively.pt(0, legendExtent.y)\n    let windowExtent = containerExtent.subPt(windowRelativePosition).subPt(padding).subPt(legendHeight)\n    lively.setExtent(this.canvasWindow, windowExtent)\n  }\n  \n  _dispatchAction(action) {\n    switch(true) {\n      case (action instanceof ColorAction):\n        this._handleColorAction(action)\n        break\n      case (action instanceof InspectAction):\n        this._handleInspectAction(action)\n        break\n      case (action instanceof FilterAction):\n        this._handleFilterAction(action)\n        break\n      case (action instanceof FilterActionChain):\n        this._handleFilterActionChain(action)\n        break\n      default:\n        this._handleNotSupportedAction(action)\n     }\n  }\n  \n  _handleColorAction(colorAction) {\n    this._recolorNodes(colorAction.attribute)\n    this.currentMap.individualClicker.highlightSelectedIndividual()\n    this._updateExtent()\n    this.currentMap.updateExtent()\n    this.currentMap.draw()\n  }\n  \n  _recolorNodes(currentColorAttribute){\n    this.individuals.forEach((individual) => {\n      let nodeUniqueValue = DataProcessor.current().getUniqueValueFromIndividual(individual, currentColorAttribute)\n      let colorString = ColorStore.current().getColorForValue(currentColorAttribute, nodeUniqueValue)\n      individual.drawing.defaultColor = ColorStore.current().convertRGBStringToRGBAColorObject(colorString)\n      individual.drawing.currentColor = ColorStore.current().convertRGBStringToRGBAColorObject(colorString)\n    })\n  }\n  \n  _handleInspectAction(action) {\n    this.currentMap.individualClicker.deselectSelectedIndividual()\n    if (!action.selection) {\n      this.currentMap.individualClicker.selectIndividual(null)\n    } else {\n      let individual = this._getIndividualByIndex(action.selection.index)\n      this.currentMap.individualClicker.selectIndividual(individual)\n    }\n    \n    this.currentMap.draw()\n  }\n  \n  _handleFilterAction(action){\n    let filteredIndividuals = deepCopy(this.individuals)    \n    filteredIndividuals = action.runOn(filteredIndividuals)\n    let filteredIndividualsIndices = this._getIndividualIndices(filteredIndividuals)\n    \n    this.deletedIndividuals = []\n    this.currentIndividuals = []\n    this.individuals.forEach(individual => {\n      if (filteredIndividualsIndices.includes(individual.index)) {\n        this.currentIndividuals.push(individual)\n      } else {\n        this.deletedIndividuals.push(individual)\n      }\n    })\n    \n    if (this.deletedIndividuals.includes(this.currentMap.dataHandler.selectedIndividual)) {\n      this.currentMap.individualClicker.deselectSelectedIndividual()\n    }\n    \n    this.currentMap.updateIndividuals(this.currentIndividuals)\n  }\n  \n  _handleFilterActionChain(actionChain) {\n    this._handleFilterAction(actionChain)\n  }\n  \n  _handleNotSupportedAction(action) {\n    lively.notify(this.name + \" can't apply this action: \" + action.name)\n  }\n  \n  _getIndividualIndices(individuals) {\n    let filteredIndividualsIndices = individuals.map(individual => {\n      return individual.index\n    })\n    return filteredIndividualsIndices\n  }\n  \n  _getIndividualByIndex(index) {\n    for (let i = 0; i < this.individuals.length; i++) {\n      if (this.individuals[i].index === index) {\n        return this.individuals[i]\n      }\n    }\n  }\n}"]}