{"version":3,"sources":["https://lively-kernel.org/lively4/BP2019RH1/components/bp2019-theme-group-widget.js"],"names":["Morph","assertListenerInterface","ThemeGroupUpdatedActionType","ThemeGroupAddedAction","ThemeGroupUpdatedAction","ThemeGroupRemovedAction","generateUUID","COLOR_PICKER_BASE_ID","ThemeGroupWidget","initialize","name","isGlobal","listeners","colorstore","undefined","themeSelect","get","addEditButton","addEventListener","_addEditButtonPressed","themeGroupList","addListener","listener","push","applyAction","action","_applyActionToAllListeners","initializeWithData","themes","_setSelectionOptions","removeThemeGroupListItem","themeGroupListItem","removeChild","_applyThemeGroupRemoved","uuid","editThemeGroupListItem","editedThemeGroupItem","_setUIToEdit","setColorStore","colorStore","loadState","_addThemeGroupToList","color","data","_clearSelectOptions","forEach","attribute","appendChild","Option","select","options","length","remove","_editThemeGroup","_addThemeGroup","newThemes","_getSelectedThemes","newName","_getThemeGroupName","updateThemes","updateName","_setToAddMode","innerHTML","themeGroupUUID","_generateCSSValidUUID","themeGroupName","themeGroupColor","_getRandomThemeGroupColor","newThemeGroup","_applyThemeGroupAdded","selectedThemes","availableOptionsCount","i","option","selected","value","_setThemeGroupName","generateRandomHexColor","_setButtonToEdit","_preselectThemes","_prefilName","style","backgroundColor","getColor","availableThemeOptions","includes","themeGroup","_createThemeGroup","lively","create","setUUID","setName","setThemes","setParent","setColor","themeGroupAddedAction","_createNewThemeGroupAddedAction","checked","themeGroupRemovedAction","_createNewThemeGroupRemovedAction","themeGroupAction"],"mappings":"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","file":"bp2019-theme-group-widget.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js'\nimport { assertListenerInterface } from '../src/internal/individuals-as-points/common/interfaces.js'\nimport { ThemeGroupUpdatedActionType, ThemeGroupAddedAction, ThemeGroupUpdatedAction, ThemeGroupRemovedAction} from '../src/internal/individuals-as-points/common/actions.js'\nimport { generateUUID } from \"../src/internal/individuals-as-points/common/utils.js\"\n\n\nconst COLOR_PICKER_BASE_ID = \"theme-group-color-picker\"\n\nexport default class ThemeGroupWidget extends Morph {\n  async initialize() {    \n    this.name = \"group\"\n    this.isGlobal = false\n    this.listeners = []\n    this.colorstore = undefined\n    this.themeSelect = this.get('#theme-select')\n    this.addEditButton = this.get('#add-theme-group')\n    this.addEditButton.addEventListener('click', () => this._addEditButtonPressed()) \n    \n    this.themeGroupList = this.get('#applied-theme-groups-container')\n  }\n  \n  // ------------------------------------------\n  // Public Methods\n  // ------------------------------------------\n  \n  addListener(listener) {\n    assertListenerInterface(listener)\n    this.listeners.push(listener)\n  }\n  \n  applyAction(action) {\n    this._applyActionToAllListeners(action)\n  }\n  \n  initializeWithData(themes) {\n    this._setSelectionOptions(themes)\n  }\n  \n  removeThemeGroupListItem(themeGroupListItem) {\n    this.themeGroupList.removeChild(themeGroupListItem)\n    this._applyThemeGroupRemoved(themeGroupListItem.uuid)\n  }\n  \n  editThemeGroupListItem(themeGroupListItem) {\n    this.editedThemeGroupItem = themeGroupListItem\n    this._setUIToEdit()\n  }\n  \n  setColorStore(colorStore) {\n    this.colorStore = colorStore\n  }\n  \n  loadState(action) {\n    this._addThemeGroupToList(action.uuid, action.themes, action.name, action.color)\n  }\n  \n  // ------------------------------------------\n  // Private Methods\n  // ------------------------------------------\n  \n  _setSelectionOptions(data) {\n    this._clearSelectOptions(this.themeSelect) \n    data.forEach( (attribute) => {\n      this.themeSelect.appendChild(new Option(attribute)) \n    }) \n  }\n  \n   _clearSelectOptions(select) {\n    while(select.options.length > 0) {\n      select.options.remove(0) \n    }\n  }\n  \n  _addEditButtonPressed() {\n    if(this.editedThemeGroupItem) {\n      this._editThemeGroup()\n    } else {\n      this._addThemeGroup()\n    }\n  }\n  \n  _editThemeGroup() {\n    let newThemes = this._getSelectedThemes()\n    let newName = this._getThemeGroupName()\n    \n    this.editedThemeGroupItem.updateThemes(newThemes)\n    this.editedThemeGroupItem.updateName(newName)\n    this._setToAddMode()\n  }\n  \n  _setToAddMode(){\n    this.addEditButton.innerHTML = \"Add theme group\"\n    this.editedThemeGroupItem = undefined\n  }\n  \n  async _addThemeGroup() {\n    let themeGroupUUID = this._generateCSSValidUUID()\n    let themes = this._getSelectedThemes()\n    let themeGroupName = this._getThemeGroupName()\n    let themeGroupColor = this._getRandomThemeGroupColor()\n\n    let newThemeGroup = await this._addThemeGroupToList(themeGroupUUID, themes, themeGroupName, themeGroupColor)\n    this._applyThemeGroupAdded(newThemeGroup)\n  }\n  \n  _generateCSSValidUUID(){\n    return \"a\" + generateUUID()\n  }\n  \n  _getSelectedThemes() {\n    let selectedThemes = [] \n    let availableOptionsCount = this.themeSelect.options.length \n    \n    for(let i = 0; i < availableOptionsCount; i++){\n      let option = this.themeSelect.options[i] \n      if(option.selected){\n        selectedThemes.push(option.value) \n      }\n    }\n      \n    return selectedThemes \n  }\n  \n  _getThemeGroupName() {\n    return this.get('#theme-group-name').value\n  }\n  \n  _setThemeGroupName(name) {\n    this.get('#theme-group-name').value = name\n  }\n  \n  _getRandomThemeGroupColor() {\n    return this.colorStore.generateRandomHexColor()\n  }\n  \n  _setUIToEdit() {\n    this._setButtonToEdit()\n    this._preselectThemes(this.editedThemeGroupItem.themes)\n    this._prefilName(this.editedThemeGroupItem.name)\n  }\n  \n  _setButtonToEdit() {\n    this.addEditButton.innerHTML = \"Apply Edit\"\n    this.addEditButton.style.backgroundColor = this.editedThemeGroupItem.getColor()\n  }\n  \n  _preselectThemes(selectedThemes) {\n    let availableThemeOptions = this.themeSelect.options.length \n    \n    for(let i = 0; i < availableThemeOptions; i++){\n      let option = this.themeSelect.options[i] \n      option.selected = false\n      if(selectedThemes.includes(option.value)){\n        option.selected = true \n      }\n    }\n  }\n  \n  _prefilName(name) {\n    this._setThemeGroupName(name)\n  }\n  \n  \n  async _addThemeGroupToList(themeGroupUUID, themes, themeGroupName, themeGroupColor) {\n    let themeGroup = await this._createThemeGroup(themeGroupUUID, themeGroupName, themes, themeGroupColor)\n    this.themeGroupList.appendChild(themeGroup)\n    return themeGroup\n  }\n  \n  async _createThemeGroup(themeGroupUUID, themeGroupName, themes, themeGroupColor) {\n    let themeGroupListItem = await lively.create(\"bp2019-theme-group-list-item-widget\")\n    \n    themeGroupListItem.setUUID(themeGroupUUID)\n    themeGroupListItem.setName(themeGroupName)\n    themeGroupListItem.setThemes(themes)\n    themeGroupListItem.setParent(this)\n    themeGroupListItem.setColor(themeGroupColor)\n    \n    return themeGroupListItem\n  }\n  \n  _applyThemeGroupAdded(themeGroupListItem){\n    let themeGroupAddedAction = this._createNewThemeGroupAddedAction(\n      themeGroupListItem.uuid,\n      themeGroupListItem.name,\n      themeGroupListItem.themes,\n      themeGroupListItem.color)\n    \n    this._applyActionToAllListeners(themeGroupAddedAction)\n  }\n  \n  _createNewThemeGroupAddedAction(themeGroupUUID, themeGroupName, themes, color){\n    let isGlobal = this.get('#is-global').checked\n    \n    return new ThemeGroupAddedAction(themeGroupUUID, themeGroupName, themes, isGlobal, color)\n  }\n \n  _applyThemeGroupRemoved(themeGroupUUID){\n    let themeGroupRemovedAction = this._createNewThemeGroupRemovedAction(themeGroupUUID)\n    this._applyActionToAllListeners(themeGroupRemovedAction)\n  }\n  \n  _createNewThemeGroupRemovedAction(themeGroupUUID){\n    let isGlobal = this.get('#is-global').checked\n    \n    return new ThemeGroupRemovedAction(themeGroupUUID, isGlobal)\n  }\n  \n  _applyActionToAllListeners(themeGroupAction) {\n    debugger;\n    this.listeners.forEach(listener => {\n      listener.applyAction(themeGroupAction)\n    })\n  }\n  \n}"]}