@@ -53,15 +53,23 @@ import { MultiSelectJustify } from './multi-select-justify';
5353 <div
5454 class="trigger-content"
5555 [style.justify-content]="this.justify"
56- [ngClass]="[this.triggerLabelDisplayMode, this.popoverOpen ? 'open' : '', this.size]"
56+ [ngClass]="[
57+ this.triggerLabelDisplayMode,
58+ this.popoverOpen ? 'open' : '',
59+ this.size,
60+ this.disabled ? 'disabled' : ''
61+ ]"
5762 #triggerContainer
5863 >
5964 <ht-icon *ngIf="this.icon" [icon]="this.icon" [size]="this.iconSize"></ht-icon>
6065 <ng-container *ngIf="!this.isIconOnlyMode()">
6166 <div class="trigger-label-container" *ngIf="this.triggerValues$ | async as triggerValues">
6267 <ht-label class="trigger-label" [label]="triggerValues.label"></ht-label>
63- <span *ngIf="triggerValues.selectedItemsCount > 1" class="trigger-more-items"
64- >+{{ triggerValues.selectedItemsCount - 1 }}</span
68+ <span
69+ *ngIf="triggerValues.overflowItemsCount"
70+ class="trigger-more-items"
71+ [htTooltip]="triggerValues.overflowLabel"
72+ >+{{ triggerValues.overflowItemsCount }}</span
6573 >
6674 <ht-icon class="trigger-icon" icon="${ IconType . ChevronDown } " [size]="this.iconSize"></ht-icon>
6775 </div>
@@ -262,6 +270,10 @@ export class MultiSelectComponent<V> implements ControlValueAccessor, AfterConte
262270 this . propagateControlValueChangeOnTouch = onTouch ;
263271 }
264272
273+ public setDisabledState ( isDisabled ?: boolean ) : void {
274+ this . disabled = isDisabled ?? false ;
275+ }
276+
265277 private setSelection ( selected : V [ ] ) : void {
266278 this . selected = selected ;
267279 this . setTriggerLabel ( ) ;
@@ -273,7 +285,7 @@ export class MultiSelectComponent<V> implements ControlValueAccessor, AfterConte
273285 if ( this . triggerLabelDisplayMode === TriggerLabelDisplayMode . Placeholder ) {
274286 this . triggerValues$ = of ( {
275287 label : this . placeholder ,
276- selectedItemsCount : 0
288+ overflowItemsCount : 0
277289 } ) ;
278290
279291 return ;
@@ -282,10 +294,17 @@ export class MultiSelectComponent<V> implements ControlValueAccessor, AfterConte
282294 this . triggerValues$ = this . allOptions$ ?. pipe (
283295 map ( options => {
284296 const selectedItems : SelectOptionComponent < V > [ ] = options . filter ( item => this . isSelectedItem ( item ) ) ;
297+ const isMultiSelection = selectedItems . length > 1 ;
285298
286299 return {
287300 label : this . getLabel ( selectedItems ) ,
288- selectedItemsCount : selectedItems . length
301+ overflowItemsCount : isMultiSelection ? selectedItems . length - 1 : 0 ,
302+ overflowLabel : isMultiSelection
303+ ? selectedItems
304+ . slice ( 1 )
305+ . map ( item => item . label )
306+ . join ( ', ' )
307+ : undefined
289308 } ;
290309 } )
291310 ) ;
@@ -307,7 +326,8 @@ export class MultiSelectComponent<V> implements ControlValueAccessor, AfterConte
307326
308327interface TriggerValues {
309328 label : string | undefined ;
310- selectedItemsCount : number ;
329+ overflowItemsCount : number ;
330+ overflowLabel ?: string ;
311331}
312332
313333export const enum TriggerLabelDisplayMode {
0 commit comments