import { Component, Input, Output, ElementRef, EventEmitter, AfterViewInit } from '@angular/core'; import { RdComponent } from '../../base/rdComponent'; import { RdLib } from '../../base/rdLib'; import { StyleLoaderService } from "../../library/style-loader.service"; import { ScriptLoaderService } from "../../library/script-loader.service"; export interface IDualListItem { id: string; text: string; } @Component({ selector: 'rd-dual-list', template: `
` }) export class DualList extends RdComponent implements AfterViewInit { constructor(private element: ElementRef, private style: StyleLoaderService, private script: ScriptLoaderService) { super(); this.style.load(["./assets/css/duallistbox.min.css"]); this.script.load(["./assets/js/duallistbox.min.js"]); } @Input("rd-list") list: Array = []; @Output("rd-input") input: EventEmitter = new EventEmitter(); @Output("rd-output") output: EventEmitter = new EventEmitter(); RdLib = RdLib; container; ngAfterViewInit() { this.container = this.jQuery(this.element.nativeElement).find('select[name="dualList"]').bootstrapDualListbox(); } outputEmit() { let outputIDs = this.jQuery(this.container).val(); // always Array; if (typeof this.list[0]["id"] === "number") { outputIDs = outputIDs.map((item) => { return parseInt(item) }); } let remainingItems = this.list.filter((item) => { return !outputIDs.includes(item["id"]) }); let remainingIDs = []; remainingItems.map((item) => { remainingIDs.push(item["id"]) }); this.input.emit(remainingIDs); this.output.emit(outputIDs); } }