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);
}
}