{"version":3,"file":"suarsan-ngx-duallistbox.mjs","sources":["../../../../projects/suarsan/ngx-duallistbox/src/lib/ngx-duallistbox.component.ts","../../../../projects/suarsan/ngx-duallistbox/src/lib/ngx-duallistbox.component.html","../../../../projects/suarsan/ngx-duallistbox/src/lib/ngx-duallistbox.module.ts","../../../../projects/suarsan/ngx-duallistbox/src/public-api.ts","../../../../projects/suarsan/ngx-duallistbox/src/suarsan-ngx-duallistbox.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\n\r\nexport class DualListBoxItem {\r\n  private _data: Object | undefined;\r\n  private _selected: boolean | undefined;\r\n  private _visible: boolean | undefined;\r\n\r\n  constructor(data?: Object, selected?: boolean, visible?: boolean) {\r\n    this._data = data;\r\n    this._selected = selected;\r\n    this._visible = visible;\r\n  }\r\n  public get Data() {\r\n    return this._data;\r\n  }\r\n  public get Selected() {\r\n    return this._selected;\r\n  }\r\n  public get Visible() {\r\n    return this._visible;\r\n  }\r\n  public set Data(data) {\r\n    this._data = data;\r\n  }\r\n  public set Selected(selected) {\r\n    this._selected = selected;\r\n  }\r\n  public set Visible(visible) {\r\n    this._visible = visible;\r\n  }\r\n}\r\n\r\n@Component({\r\n  selector: 'ngx-duallistbox',\r\n  templateUrl: 'ngx-duallistbox.component.html',\r\n  styleUrls: ['ngx-duallistbox.component.scss']\r\n})\r\nexport class NgxDuallistboxComponent implements OnInit, OnChanges {\r\n\r\n  private input: Map<any, DualListBoxItem>;\r\n  private output: Map<any, DualListBoxItem>;\r\n  private filterInputKey: string | undefined;\r\n  private filterOutputKey: string | undefined;\r\n  @Output() addEvent = new EventEmitter<any>();\r\n  @Output() removeEvent = new EventEmitter<any>();\r\n  @Output() outputEvent = new EventEmitter<any>();\r\n  @Input() inputId!: string;\r\n  @Input() outputId!: string;\r\n  @Input() title: string | undefined;\r\n  @Input() display!: Array<string>;\r\n  @Input() displaySeparator!: string;\r\n  @Input() showFilterInput: boolean;\r\n  @Input() showFilterOutput: boolean;\r\n  @Input() filterInputKeys!: Array<string>;\r\n  @Input() filterOutputKeys!: Array<string>;\r\n  @Input() inData: Array<Object>;\r\n  @Input() outData: Array<Object>;\r\n\r\n  constructor(private cd: ChangeDetectorRef) {\r\n    this.input = new Map<any, DualListBoxItem>();\r\n    this.output = new Map<any, DualListBoxItem>();\r\n    this.inData = [];\r\n    this.outData = [];\r\n    this.showFilterInput = false;\r\n    this.showFilterOutput = false;\r\n    this.inputId = 'id';\r\n    this.outputId = 'id';\r\n  }\r\n\r\n  ngOnInit() { }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    this.inDataProcess(this.inData);\r\n    this.outDataProcess(this.outData);\r\n  }\r\n\r\n  public inDataProcess(data: any) {\r\n    this.input.clear();\r\n    for (const i of data) {\r\n      this.input.set(eval('i.' + this.inputId), new DualListBoxItem(i, false, true));\r\n    }\r\n    if (data.length === 0) {\r\n      this.input.clear();\r\n      this.output.clear();\r\n    }\r\n  }\r\n  public outDataProcess(data: any) {\r\n    this.output.clear();\r\n    for (const o of data) {\r\n      this.output.set(eval('o.' + this.outputId), new DualListBoxItem(o, false, true));\r\n    }\r\n    if (data.length === 0) {\r\n      this.output.clear();\r\n    }\r\n  }\r\n\r\n  public get(map: any) : any[] {\r\n    return Array.from(eval('this.' + map).entries());\r\n  }\r\n\r\n  public toggle(map: any, itemkey: any) {\r\n    eval('this.' + map).get(itemkey).Selected = !eval('this.' + map).get(itemkey).Selected;\r\n  }\r\n\r\n  public add() {\r\n    const addedItems = new Array<any>();\r\n    for (const item of this.input) {\r\n      if (item[1].Selected) {\r\n        item[1].Selected = false;\r\n        this.output.set(item[0], item[1]);\r\n        addedItems.push(item[1].Data);\r\n        this.input.delete(item[0]);\r\n      }\r\n    }\r\n    this.addEvent.emit({ addedItems });\r\n    this.outputEvent.emit(this.output);\r\n  }\r\n\r\n  public remove() {\r\n    const removedItems = new Array<any>();\r\n    for (const item of this.output) {\r\n      if (item[1].Selected) {\r\n        item[1].Selected = false;\r\n        this.input.set(item[0], item[1]);\r\n        removedItems.push(item[1].Data);\r\n        this.output.delete(item[0]);\r\n      }\r\n    }\r\n    this.removeEvent.emit({ removedItems });\r\n    this.outputEvent.emit(this.output);\r\n  }\r\n\r\n  public all(map: any) {\r\n    for (const item of eval('this.' + map).values()) {\r\n      item.Selected = true;\r\n    }\r\n  }\r\n\r\n  public none(map: any) {\r\n    for (const item of eval('this.' + map).values()) {\r\n      item.Selected = false;\r\n    }\r\n  }\r\n\r\n  public trackByIndex(index: any, item: any) {\r\n    return index;\r\n  }\r\n\r\n  public getCompleteDisplay(item: any, display: any) {\r\n    let completeDisplay = '';\r\n    display.forEach((d: any, i: any) => {\r\n      completeDisplay += item.Data[d];\r\n      if (i < (display.length - 1)) {\r\n        completeDisplay += this.displaySeparator ? this.displaySeparator : ' - ';\r\n      }\r\n    });\r\n    return completeDisplay;\r\n  }\r\n\r\n  public filterInput(items: any, e: any) {\r\n    this.filterInputKey = e.target.value;\r\n    const regExp1 = '[a-zA-Z0-9?!\"·$%&/()=?¿|@#~€¬^*¨Ç;:_]*';\r\n    const regExp2 = '[a-zA-Z0-9?!\"·$%&/()=?¿|@#~€¬^*¨Ç;:_]*';\r\n    const regExp = new RegExp(regExp1 + this.filterInputKey + regExp2, 'i');\r\n    if (items) {\r\n      items.forEach((i: any) => {\r\n        if (this.filterInputKeys) {\r\n          for (const arg of this.filterInputKeys) {\r\n            if (regExp.test(i[1].Data[arg])) {\r\n              i[1].Visible = true;\r\n              break;\r\n            } else {\r\n              i[1].Visible = false;\r\n            }\r\n          }\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  public filterOutput(items: any, e: any) {\r\n    this.filterOutputKey = e.target.value;\r\n    const regExp1 = '[a-zA-Z0-9?!\"·$%&/()=?¿|@#~€¬^*¨Ç;:_]*';\r\n    const regExp2 = '[a-zA-Z0-9?!\"·$%&/()=?¿|@#~€¬^*¨Ç;:_]*';\r\n    const regExp = new RegExp(regExp1 + this.filterOutputKey + regExp2, 'i');\r\n    if (items) {\r\n      items.forEach((i: any) => {\r\n        if (this.filterOutputKeys) { \r\n          for (const arg of this.filterOutputKeys) {\r\n            if (regExp.test(i[1].Data[arg])) {\r\n              i[1].Visible = true;\r\n              break;\r\n            } else {\r\n              i[1].Visible = false;\r\n            }\r\n          }\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n}\r\n","<article>\r\n    <p *ngIf=\"title\">{{title}}</p>\r\n    <div>\r\n      <div>\r\n        <ul>\r\n          <span [class.border-bottom]=\"!showFilterOutput\">AVAILABLES</span>\r\n          <div *ngIf=\"showFilterInput\" class=\"filter\">\r\n            <div>\r\n              <svg version=\"1.0\" xmlns=\"http://www.w3.org/2000/svg\" nwidth=\"1244.000000pt\" height=\"1280.000000pt\" viewBox=\"0 0 1244.000000 1280.000000\" preserveAspectRatio=\"xMidYMid meet\">\r\n                <g transform=\"translate(0.000000,1280.000000) scale(0.100000,-0.100000)\" stroke=\"none\">\r\n                <path d=\"M4030 12780 c-330 -30 -522 -62 -785 -130 -619 -160 -1185 -453-1700 -881 -129 -107 -407 -385 -514 -514 -567 -683 -904 -1468 -995 -2325 -37 -340 -41 -461 -22 -690 10 -118 24 -264 32 -325 105 -818 442 -1583 978 -2225 103 -124 344 -367 476 -482 590 -513 1294 -852 2063 -993 410 -75 943 -86 1362 -29 633 87 1285 335 1801 684 40 26 82 54 94 60 21 11 157 -122 2449 -2413 1931 -1930 2436 -2430 2476 -2450 78 -38 192 -69 239 -64 119 13 220 59 304 141 84 81 136 190 149 312 5 46 -25 161 -64 239 -20 40 -515 540 -2429 2455 -1322 1323 -2404 2408 -2404 2412 0 4 31 42 68 86 1076 1249 1350 3000 705 4511 -105 245 -218 454 -379 696 -491 740 -1196 1311 -2019 1634 -426 168 -769 245 -1290 291 -261 23 -337 23 -595 0z m735 -924 c652 -92 1208 -330 1715 -735 118 -95 337 -307 440 -426 757 -882 1013 -2057 694 -3175 -113 -395 -335 -829 -588 -1150 -697 -884 -1751 -1366 -2865 -1309 -1176 60 -2224 712 -2810 1746 -192 339 -337 766 -395 1163 -52 356 -45 765 19 1115 241 1311 1241 2374 2535 2695 175 44 348 72 575 94 94 9 575 -4 680 -18z\"/></g>\r\n              </svg>\r\n              <input  type=\"text\" placeholder=\"Filter...\" (keyup)=\"filterInput(get('input'), $event)\">\r\n            </div>\r\n          </div>\r\n          <li *ngFor=\"let inputItem of get('input'); trackBy: trackByIndex;\" (click)=\"toggle('input', inputItem[0])\" [class.selected]=\"inputItem[1].Selected\" [title]=\"getCompleteDisplay(inputItem[1], display)\" [class.hide]=\"!inputItem[1].Visible\">\r\n            <span *ngFor=\"let dis of display; let last = last\" [title]=\"getCompleteDisplay(inputItem[1], display)\">{{ inputItem[1].Data[dis] + (last ? '' : (displaySeparator ? displaySeparator : ' - ') ) }}</span>\r\n          </li>\r\n        </ul>\r\n        <div>\r\n          <div>\r\n            <button (click)=\"all('input')\">\r\n              <span>ALL</span>\r\n            </button>\r\n            <button (click)=\"none('input')\">\r\n              <span>NONE</span>\r\n            </button>\r\n          </div>\r\n          <button (click)=\"add()\">\r\n            <span>ADD</span>\r\n          </button>\r\n        </div>\r\n      </div>\r\n      <div>\r\n        <ul>\r\n          <span [class.border-bottom]=\"!showFilterOutput\">SELECTED</span>\r\n          <div *ngIf=\"showFilterOutput\" class=\"filter\">\r\n            <div>\r\n              <svg version=\"1.0\" xmlns=\"http://www.w3.org/2000/svg\" nwidth=\"1244.000000pt\" height=\"1280.000000pt\" viewBox=\"0 0 1244.000000 1280.000000\" preserveAspectRatio=\"xMidYMid meet\">\r\n                <g transform=\"translate(0.000000,1280.000000) scale(0.100000,-0.100000)\" stroke=\"none\">\r\n                <path d=\"M4030 12780 c-330 -30 -522 -62 -785 -130 -619 -160 -1185 -453-1700 -881 -129 -107 -407 -385 -514 -514 -567 -683 -904 -1468 -995 -2325 -37 -340 -41 -461 -22 -690 10 -118 24 -264 32 -325 105 -818 442 -1583 978 -2225 103 -124 344 -367 476 -482 590 -513 1294 -852 2063 -993 410 -75 943 -86 1362 -29 633 87 1285 335 1801 684 40 26 82 54 94 60 21 11 157 -122 2449 -2413 1931 -1930 2436 -2430 2476 -2450 78 -38 192 -69 239 -64 119 13 220 59 304 141 84 81 136 190 149 312 5 46 -25 161 -64 239 -20 40 -515 540 -2429 2455 -1322 1323 -2404 2408 -2404 2412 0 4 31 42 68 86 1076 1249 1350 3000 705 4511 -105 245 -218 454 -379 696 -491 740 -1196 1311 -2019 1634 -426 168 -769 245 -1290 291 -261 23 -337 23 -595 0z m735 -924 c652 -92 1208 -330 1715 -735 118 -95 337 -307 440 -426 757 -882 1013 -2057 694 -3175 -113 -395 -335 -829 -588 -1150 -697 -884 -1751 -1366 -2865 -1309 -1176 60 -2224 712 -2810 1746 -192 339 -337 766 -395 1163 -52 356 -45 765 19 1115 241 1311 1241 2374 2535 2695 175 44 348 72 575 94 94 9 575 -4 680 -18z\"/></g>\r\n              </svg>\r\n              <input type=\"text\" placeholder=\"Filter...\" (keyup)=\"filterOutput(get('output'), $event)\">\r\n            </div>\r\n          </div>\r\n          <li *ngFor=\"let outputItem of get('output'); trackBy: trackByIndex\" (click)=\"toggle('output', outputItem[0])\" [class.selected]=\"outputItem[1].Selected\" [title]=\"getCompleteDisplay(outputItem[1], display)\" [class.hide]=\"!outputItem[1].Visible\">\r\n            <span *ngFor=\"let dis of display; let last = last\" [title]=\"getCompleteDisplay(outputItem[1], display)\">{{ outputItem[1].Data[dis] + (last ? '' : (displaySeparator ? displaySeparator : ' ') ) }}</span>\r\n          </li>\r\n        </ul>\r\n        <div>\r\n          <div>\r\n            <button (click)=\"all('output')\">\r\n              <span>ALL</span>\r\n            </button>\r\n            <button (click)=\"none('output')\">\r\n              <span>NONE</span>\r\n            </button>\r\n          </div>\r\n          <button (click)=\"remove()\">\r\n            <span>REMOVE</span>\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </article>","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgxDuallistboxComponent } from './ngx-duallistbox.component';\n\n\n\n@NgModule({\n  declarations: [\n    NgxDuallistboxComponent\n  ],\n  imports: [\n    BrowserModule\n  ],\n  exports: [\n    NgxDuallistboxComponent\n  ]\n})\nexport class NgxDuallistboxModule { }\n","/*\n * Public API Surface of ngx-duallistbox\n */\n\nexport * from './lib/ngx-duallistbox.component';\nexport * from './lib/ngx-duallistbox.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}