UNPKG

@clr/angular

Version:

Angular components for Clarity

82 lines 9.83 kB
/* * Copyright (c) 2016-2025 Broadcom. All Rights Reserved. * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. * This software is released under MIT license. * The full license information can be found in LICENSE in the root directory of this project. */ export class MultiSelectComboboxModel { containsItem(item) { return this.model ? this.model.includes(item) : false; } select(item) { this.addItem(item); } unselect(item) { this.removeItem(item); } isEmpty() { return !(this.model && this.model.length > 0); } pop() { let item; if (this.model && this.model.length > 0) { item = this.model[this.model.length - 1]; this.removeItem(item); } return item; } toString(displayField, index = -1) { let displayString = ''; if (this.model) { // If the model is array, we can use a specific item from it, to retrieve the display value. if (index > -1) { if (this.model[index]) { // If we have a defined display field, we'll use it's value as display value if (displayField && this.model[index][displayField]) { displayString += this.model[index][displayField]; } else { // If we don't have a defined display field, we'll use the toString representation of the // item as display value. displayString += this.model[index].toString(); } } } else { this.model.forEach((model) => { // If we have a defined display field, we'll use it's value as display value if (displayField && model[displayField]) { displayString += model[displayField]; } else { // If we don't have a defined display field, we'll use the toString representation of the // model as display value. displayString += model.toString(); } displayString += ' '; }); } } return displayString.trim(); } addItem(item) { if (!this.containsItem(item)) { this.model = this.model || []; this.model.push(item); } } removeItem(item) { if (this.model === null || this.model === undefined) { return; } const index = this.model.indexOf(item); if (index > -1) { this.model.splice(index, 1); } // we intentionally set the model to null for form validation if (this.model.length === 0) { this.model = null; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LWNvbWJvYm94Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZm9ybXMvY29tYm9ib3gvbW9kZWwvbXVsdGktc2VsZWN0LWNvbWJvYm94Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBSUgsTUFBTSxPQUFPLHdCQUF3QjtJQUduQyxZQUFZLENBQUMsSUFBTztRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDeEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFPO1FBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQU87UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsR0FBRztRQUNELElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsUUFBUSxDQUFDLFlBQXFCLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsNEZBQTRGO1lBQzVGLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDckIsNEVBQTRFO29CQUM1RSxJQUFJLFlBQVksSUFBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO3dCQUM1RCxhQUFhLElBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztxQkFDM0Q7eUJBQU07d0JBQ0wseUZBQXlGO3dCQUN6Rix5QkFBeUI7d0JBQ3pCLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO3FCQUMvQztpQkFDRjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBUSxFQUFFLEVBQUU7b0JBQzlCLDRFQUE0RTtvQkFDNUUsSUFBSSxZQUFZLElBQUssS0FBYSxDQUFDLFlBQVksQ0FBQyxFQUFFO3dCQUNoRCxhQUFhLElBQUssS0FBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUMvQzt5QkFBTTt3QkFDTCx5RkFBeUY7d0JBQ3pGLDBCQUEwQjt3QkFDMUIsYUFBYSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztxQkFDbkM7b0JBQ0QsYUFBYSxJQUFJLEdBQUcsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsT0FBTyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLE9BQU8sQ0FBQyxJQUFPO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQU87UUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUNuRCxPQUFPO1NBQ1I7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM3QjtRQUVELDZEQUE2RDtRQUM3RCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNuQjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSBCcm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgQ29tYm9ib3hNb2RlbCB9IGZyb20gJy4vY29tYm9ib3gubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3RDb21ib2JveE1vZGVsPFQ+IGltcGxlbWVudHMgQ29tYm9ib3hNb2RlbDxUPiB7XG4gIG1vZGVsOiBUW107XG5cbiAgY29udGFpbnNJdGVtKGl0ZW06IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbCA/IHRoaXMubW9kZWwuaW5jbHVkZXMoaXRlbSkgOiBmYWxzZTtcbiAgfVxuXG4gIHNlbGVjdChpdGVtOiBUKTogdm9pZCB7XG4gICAgdGhpcy5hZGRJdGVtKGl0ZW0pO1xuICB9XG5cbiAgdW5zZWxlY3QoaXRlbTogVCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKTtcbiAgfVxuXG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgcG9wKCk6IFQge1xuICAgIGxldCBpdGVtO1xuICAgIGlmICh0aGlzLm1vZGVsICYmIHRoaXMubW9kZWwubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbSA9IHRoaXMubW9kZWxbdGhpcy5tb2RlbC5sZW5ndGggLSAxXTtcbiAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICB0b1N0cmluZyhkaXNwbGF5RmllbGQ/OiBzdHJpbmcsIGluZGV4ID0gLTEpOiBzdHJpbmcge1xuICAgIGxldCBkaXNwbGF5U3RyaW5nID0gJyc7XG5cbiAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgLy8gSWYgdGhlIG1vZGVsIGlzIGFycmF5LCB3ZSBjYW4gdXNlIGEgc3BlY2lmaWMgaXRlbSBmcm9tIGl0LCB0byByZXRyaWV2ZSB0aGUgZGlzcGxheSB2YWx1ZS5cbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsW2luZGV4XSkge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBkZWZpbmVkIGRpc3BsYXkgZmllbGQsIHdlJ2xsIHVzZSBpdCdzIHZhbHVlIGFzIGRpc3BsYXkgdmFsdWVcbiAgICAgICAgICBpZiAoZGlzcGxheUZpZWxkICYmICh0aGlzLm1vZGVsW2luZGV4XSBhcyBhbnkpW2Rpc3BsYXlGaWVsZF0pIHtcbiAgICAgICAgICAgIGRpc3BsYXlTdHJpbmcgKz0gKHRoaXMubW9kZWxbaW5kZXhdIGFzIGFueSlbZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGRlZmluZWQgZGlzcGxheSBmaWVsZCwgd2UnbGwgdXNlIHRoZSB0b1N0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgICAgIC8vIGl0ZW0gYXMgZGlzcGxheSB2YWx1ZS5cbiAgICAgICAgICAgIGRpc3BsYXlTdHJpbmcgKz0gdGhpcy5tb2RlbFtpbmRleF0udG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaCgobW9kZWw6IFQpID0+IHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZGVmaW5lZCBkaXNwbGF5IGZpZWxkLCB3ZSdsbCB1c2UgaXQncyB2YWx1ZSBhcyBkaXNwbGF5IHZhbHVlXG4gICAgICAgICAgaWYgKGRpc3BsYXlGaWVsZCAmJiAobW9kZWwgYXMgYW55KVtkaXNwbGF5RmllbGRdKSB7XG4gICAgICAgICAgICBkaXNwbGF5U3RyaW5nICs9IChtb2RlbCBhcyBhbnkpW2Rpc3BsYXlGaWVsZF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBkZWZpbmVkIGRpc3BsYXkgZmllbGQsIHdlJ2xsIHVzZSB0aGUgdG9TdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlXG4gICAgICAgICAgICAvLyBtb2RlbCBhcyBkaXNwbGF5IHZhbHVlLlxuICAgICAgICAgICAgZGlzcGxheVN0cmluZyArPSBtb2RlbC50b1N0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkaXNwbGF5U3RyaW5nICs9ICcgJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRJdGVtKGl0ZW06IFQpIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbnNJdGVtKGl0ZW0pKSB7XG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5tb2RlbCB8fCBbXTtcbiAgICAgIHRoaXMubW9kZWwucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUl0ZW0oaXRlbTogVCkge1xuICAgIGlmICh0aGlzLm1vZGVsID09PSBudWxsIHx8IHRoaXMubW9kZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tb2RlbC5pbmRleE9mKGl0ZW0pO1xuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMubW9kZWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IHNldCB0aGUgbW9kZWwgdG8gbnVsbCBmb3IgZm9ybSB2YWxpZGF0aW9uXG4gICAgaWYgKHRoaXMubW9kZWwubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLm1vZGVsID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==