systelab-components
Version:
systelab-components is a set of components that use wide accepted and adopted standard technologies like Angular and Bootstrap, as well as other popular libraries. Please read the ATTRIBUTION.md file for a complete list of dependencies.
109 lines • 15.5 kB
JavaScript
import { Component, EventEmitter, Input, Output } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "../modal/message-popup/message-popup.service";
import * as i2 from "systelab-translate";
import * as i3 from "@angular/common";
export class ChipButtonItem {
constructor(id, name, isChecked = false) {
this.id = id;
this.name = name;
this.isChecked = isChecked;
}
}
export class ChipButtonComponent {
constructor(messagePopupService, i18nService) {
this.messagePopupService = messagePopupService;
this.i18nService = i18nService;
this.changeButton = new EventEmitter();
this.selectButton = new EventEmitter();
this.buttonRemoved = new EventEmitter();
this.buttonAdded = new EventEmitter();
this.showAddButton = true;
this.isRemoveEnabled = true;
this.disabled = false;
}
onClick(item) {
this.selectItem(item);
}
selectItem(item) {
item.isChecked = true;
this.buttonList.filter(btn => btn !== item)
.forEach(btn => btn.isChecked = false);
this.selectButton.emit(item);
this.lastValue = item;
}
removeButtonItem(item, event) {
event.stopPropagation();
if (this.deleteConfirmationMessage) {
this.messagePopupService.showYesNoQuestionPopup(this.deleteConfirmationTitle, this.deleteConfirmationMessage)
.subscribe((res) => {
if (res) {
this.removeElement(item);
}
});
}
else {
this.removeElement(item);
}
}
addButtonITem() {
const maxID = Math.max(...this.buttonList.map(o => o.id), 0);
const item = { name: this.i18nService.instant('COMMON_NEW'), id: maxID + 1, isChecked: false };
this.buttonList.push(item);
this.selectItem(item);
this.buttonAdded.emit(item);
}
changeButtonItem(item) {
if (!this.disabled) {
this.changeButton.emit(item);
}
}
removeElement(item) {
let index = this.buttonList.findIndex(it => it === item);
if (index !== -1) {
this.buttonList.splice(index, 1);
}
this.buttonRemoved.emit(item);
let last;
if (this.lastValue.id !== item.id) {
index = this.buttonList.findIndex(it => it === this.lastValue);
last = this.buttonList[index];
}
else if (index === this.buttonList.length) {
last = this.buttonList[this.buttonList.length - 1];
}
else {
last = this.buttonList[index];
}
if (last) {
this.selectItem(last);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChipButtonComponent, deps: [{ token: i1.MessagePopupService }, { token: i2.I18nService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.9", type: ChipButtonComponent, selector: "systelab-chip-button", inputs: { buttonList: "buttonList", deleteConfirmationTitle: "deleteConfirmationTitle", deleteConfirmationMessage: "deleteConfirmationMessage", showAddButton: "showAddButton", isRemoveEnabled: "isRemoveEnabled", disabled: "disabled" }, outputs: { changeButton: "changeButton", selectButton: "selectButton", buttonRemoved: "buttonRemoved", buttonAdded: "buttonAdded" }, ngImport: i0, template: "@for (button of buttonList; track button) {\n <li class=\"slab-chip-button\" role=\"badge\">\n <button type=\"button\" id=\"{{button.id}}\" (click)=\"onClick(button)\"\n [class.slab-is-selected]=\"button.isChecked\"\n (dblclick)=\"changeButtonItem(button)\">\n <span class=\"slab-chip-text\">{{button.name}}</span>\n <span *ngIf=\"isRemoveEnabled && !disabled\" class=\"slab-chip-button-remove\" aria-hidden=\"true\" (click)=\"removeButtonItem(button, $event)\">\u00D7</span>\n </button>\n </li>\n}\n<button *ngIf=\"showAddButton\" [disabled]=\"disabled\" type=\"button\" class=\"slab-chip-button-add\" (click)=\"addButtonITem()\">+</button>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: ChipButtonComponent, decorators: [{
type: Component,
args: [{ selector: 'systelab-chip-button', template: "@for (button of buttonList; track button) {\n <li class=\"slab-chip-button\" role=\"badge\">\n <button type=\"button\" id=\"{{button.id}}\" (click)=\"onClick(button)\"\n [class.slab-is-selected]=\"button.isChecked\"\n (dblclick)=\"changeButtonItem(button)\">\n <span class=\"slab-chip-text\">{{button.name}}</span>\n <span *ngIf=\"isRemoveEnabled && !disabled\" class=\"slab-chip-button-remove\" aria-hidden=\"true\" (click)=\"removeButtonItem(button, $event)\">\u00D7</span>\n </button>\n </li>\n}\n<button *ngIf=\"showAddButton\" [disabled]=\"disabled\" type=\"button\" class=\"slab-chip-button-add\" (click)=\"addButtonITem()\">+</button>\n" }]
}], ctorParameters: () => [{ type: i1.MessagePopupService }, { type: i2.I18nService }], propDecorators: { changeButton: [{
type: Output
}], selectButton: [{
type: Output
}], buttonRemoved: [{
type: Output
}], buttonAdded: [{
type: Output
}], buttonList: [{
type: Input
}], deleteConfirmationTitle: [{
type: Input
}], deleteConfirmationMessage: [{
type: Input
}], showAddButton: [{
type: Input
}], isRemoveEnabled: [{
type: Input
}], disabled: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3lzdGVsYWItY29tcG9uZW50cy9zcmMvbGliL2NoaXAtYnV0dG9uL2NoaXAtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5c3RlbGFiLWNvbXBvbmVudHMvc3JjL2xpYi9jaGlwLWJ1dHRvbi9jaGlwLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQUl2RSxNQUFNLE9BQU8sY0FBYztJQUMxQixZQUFtQixFQUFVLEVBQVMsSUFBWSxFQUFTLFlBQVksS0FBSztRQUF6RCxPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLGNBQVMsR0FBVCxTQUFTLENBQVE7SUFDNUUsQ0FBQztDQUNEO0FBTUQsTUFBTSxPQUFPLG1CQUFtQjtJQTJCL0IsWUFBc0IsbUJBQXdDLEVBQVksV0FBd0I7UUFBNUUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBekJqRixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFZM0Msa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFHckIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFHdkIsYUFBUSxHQUFHLEtBQUssQ0FBQztJQUt4QixDQUFDO0lBRU0sT0FBTyxDQUFDLElBQW9CO1FBQ2xDLElBQUksQ0FBQyxV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SyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUM1QyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNuRDthQUFNO1lBQ04sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUI7UUFDRCxJQUFJLElBQUksRUFBRTtZQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEI7SUFDRixDQUFDOzhHQTFGVyxtQkFBbUI7a0dBQW5CLG1CQUFtQiw2YUNiaEMsNnNCQVdBOzsyRkRFYSxtQkFBbUI7a0JBSi9CLFNBQVM7K0JBQ0ksc0JBQXNCO2tIQUtsQixZQUFZO3NCQUE1QixNQUFNO2dCQUNVLFlBQVk7c0JBQTVCLE1BQU07Z0JBQ1UsYUFBYTtzQkFBN0IsTUFBTTtnQkFDVSxXQUFXO3NCQUEzQixNQUFNO2dCQUdBLFVBQVU7c0JBRGhCLEtBQUs7Z0JBSUMsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQUlDLHlCQUF5QjtzQkFEL0IsS0FBSztnQkFJQyxhQUFhO3NCQURuQixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnc3lzdGVsYWItdHJhbnNsYXRlJztcbmltcG9ydCB7IE1lc3NhZ2VQb3B1cFNlcnZpY2UgfSBmcm9tICcuLi9tb2RhbC9tZXNzYWdlLXBvcHVwL21lc3NhZ2UtcG9wdXAuc2VydmljZSc7XG5cbmV4cG9ydCBjbGFzcyBDaGlwQnV0dG9uSXRlbSB7XG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBpZDogbnVtYmVyLCBwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgaXNDaGVja2VkID0gZmFsc2UpIHtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICAgICdzeXN0ZWxhYi1jaGlwLWJ1dHRvbicsXG5cdHRlbXBsYXRlVXJsOiAnY2hpcC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBDaGlwQnV0dG9uQ29tcG9uZW50IHtcblxuXHRAT3V0cHV0KCkgcHVibGljIGNoYW5nZUJ1dHRvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIHB1YmxpYyBzZWxlY3RCdXR0b24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdEBPdXRwdXQoKSBwdWJsaWMgYnV0dG9uUmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0QE91dHB1dCgpIHB1YmxpYyBidXR0b25BZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRASW5wdXQoKVxuXHRwdWJsaWMgYnV0dG9uTGlzdDogQ2hpcEJ1dHRvbkl0ZW1bXTtcblxuXHRASW5wdXQoKVxuXHRwdWJsaWMgZGVsZXRlQ29uZmlybWF0aW9uVGl0bGU6IHN0cmluZztcblxuXHRASW5wdXQoKVxuXHRwdWJsaWMgZGVsZXRlQ29uZmlybWF0aW9uTWVzc2FnZTogc3RyaW5nO1xuXG5cdEBJbnB1dCgpXG5cdHB1YmxpYyBzaG93QWRkQnV0dG9uID0gdHJ1ZTtcblxuXHRASW5wdXQoKVxuXHRwdWJsaWMgaXNSZW1vdmVFbmFibGVkID0gdHJ1ZTtcblxuXHRASW5wdXQoKVxuXHRwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGxhc3RWYWx1ZTogQ2hpcEJ1dHRvbkl0ZW07XG5cblx0Y29uc3RydWN0b3IocHJvdGVjdGVkIG1lc3NhZ2VQb3B1cFNlcnZpY2U6IE1lc3NhZ2VQb3B1cFNlcnZpY2UsIHByb3RlY3RlZCBpMThuU2VydmljZTogSTE4blNlcnZpY2UpIHtcblx0fVxuXG5cdHB1YmxpYyBvbkNsaWNrKGl0ZW06IENoaXBCdXR0b25JdGVtKTogdm9pZCB7XG5cdFx0dGhpcy5zZWxlY3RJdGVtKGl0ZW0pO1xuXHR9XG5cblx0cHVibGljIHNlbGVjdEl0ZW0oaXRlbTogQ2hpcEJ1dHRvbkl0ZW0pOiB2b2lkIHtcblx0XHRpdGVtLmlzQ2hlY2tlZCA9IHRydWU7XG5cdFx0dGhpcy5idXR0b25MaXN0LmZpbHRlcihidG4gPT4gYnRuICE9PSBpdGVtKVxuXHRcdFx0LmZvckVhY2goYnRuID0+XG5cdFx0XHRcdGJ0bi5pc0NoZWNrZWQgPSBmYWxzZVxuXHRcdFx0KTtcblx0XHR0aGlzLnNlbGVjdEJ1dHRvbi5lbWl0KGl0ZW0pO1xuXHRcdHRoaXMubGFzdFZhbHVlID0gaXRlbTtcblx0fVxuXG5cdHB1YmxpYyByZW1vdmVCdXR0b25JdGVtKGl0ZW06IENoaXBCdXR0b25JdGVtLCBldmVudDogRXZlbnQpOiB2b2lkIHtcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRpZiAodGhpcy5kZWxldGVDb25maXJtYXRpb25NZXNzYWdlKSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VQb3B1cFNlcnZpY2Uuc2hvd1llc05vUXVlc3Rpb25Qb3B1cCh0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvblRpdGxlLCB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk1lc3NhZ2UpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdGlmIChyZXMpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlRWxlbWVudChpdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJlbW92ZUVsZW1lbnQoaXRlbSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFkZEJ1dHRvbklUZW0oKTogdm9pZCB7XG5cdFx0Y29uc3QgbWF4SUQgPSBNYXRoLm1heCguLi50aGlzLmJ1dHRvbkxpc3QubWFwKG8gPT4gby5pZCksIDApO1xuXHRcdGNvbnN0IGl0ZW0gPSB7bmFtZTogdGhpcy5pMThuU2VydmljZS5pbnN0YW50KCdDT01NT05fTkVXJyksIGlkOiBtYXhJRCArIDEsIGlzQ2hlY2tlZDogZmFsc2V9O1xuXHRcdHRoaXMuYnV0dG9uTGlzdC5wdXNoKGl0ZW0pO1xuXHRcdHRoaXMuc2VsZWN0SXRlbShpdGVtKTtcblx0XHR0aGlzLmJ1dHRvbkFkZGVkLmVtaXQoaXRlbSk7XG5cdH1cblxuXHRwdWJsaWMgY2hhbmdlQnV0dG9uSXRlbShpdGVtOiBDaGlwQnV0dG9uSXRlbSk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5kaXNhYmxlZCkge1xuXHRcdFx0dGhpcy5jaGFuZ2VCdXR0b24uZW1pdChpdGVtKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlbW92ZUVsZW1lbnQoaXRlbTogQ2hpcEJ1dHRvbkl0ZW0pOiB2b2lkIHtcblx0XHRsZXQgaW5kZXggPSB0aGlzLmJ1dHRvbkxpc3QuZmluZEluZGV4KGl0ID0+IGl0ID09PSBpdGVtKTtcblx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHR0aGlzLmJ1dHRvbkxpc3Quc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9XG5cdFx0dGhpcy5idXR0b25SZW1vdmVkLmVtaXQoaXRlbSk7XG5cdFx0bGV0IGxhc3Q7XG5cdFx0aWYgKHRoaXMubGFzdFZhbHVlLmlkICE9PSBpdGVtLmlkKSB7XG5cdFx0XHRpbmRleCA9IHRoaXMuYnV0dG9uTGlzdC5maW5kSW5kZXgoaXQgPT4gaXQgPT09IHRoaXMubGFzdFZhbHVlKTtcblx0XHRcdGxhc3QgPSB0aGlzLmJ1dHRvbkxpc3RbaW5kZXhdO1xuXHRcdH0gZWxzZSBpZiAoaW5kZXggPT09IHRoaXMuYnV0dG9uTGlzdC5sZW5ndGgpIHtcblx0XHRcdGxhc3QgPSB0aGlzLmJ1dHRvbkxpc3RbdGhpcy5idXR0b25MaXN0Lmxlbmd0aCAtIDFdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsYXN0ID0gdGhpcy5idXR0b25MaXN0W2luZGV4XTtcblx0XHR9XG5cdFx0aWYgKGxhc3QpIHtcblx0XHRcdHRoaXMuc2VsZWN0SXRlbShsYXN0KTtcblx0XHR9XG5cdH1cbn1cblxuIiwiQGZvciAoYnV0dG9uIG9mIGJ1dHRvbkxpc3Q7IHRyYWNrIGJ1dHRvbikge1xuICAgIDxsaSBjbGFzcz1cInNsYWItY2hpcC1idXR0b25cIiByb2xlPVwiYmFkZ2VcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJ7e2J1dHRvbi5pZH19XCIgKGNsaWNrKT1cIm9uQ2xpY2soYnV0dG9uKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNsYWItaXMtc2VsZWN0ZWRdPVwiYnV0dG9uLmlzQ2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImNoYW5nZUJ1dHRvbkl0ZW0oYnV0dG9uKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbGFiLWNoaXAtdGV4dFwiPnt7YnV0dG9uLm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNSZW1vdmVFbmFibGVkICYmICFkaXNhYmxlZFwiIGNsYXNzPVwic2xhYi1jaGlwLWJ1dHRvbi1yZW1vdmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAoY2xpY2spPVwicmVtb3ZlQnV0dG9uSXRlbShidXR0b24sICRldmVudClcIj7Dlzwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbn1cbjxidXR0b24gKm5nSWY9XCJzaG93QWRkQnV0dG9uXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic2xhYi1jaGlwLWJ1dHRvbi1hZGRcIiAoY2xpY2spPVwiYWRkQnV0dG9uSVRlbSgpXCI+KzwvYnV0dG9uPlxuIl19