@@ -445,24 +445,38 @@ export class DropdownList implements AbstractDropdownView, AfterViewInit, OnDest
445445 console . error ( `${ this . constructor . name } .propagateSelected expects an Array<ListItem>, got ${ JSON . stringify ( value ) } ` ) ;
446446 }
447447 this . onItemsReady ( ( ) => {
448+ const selectedNewItems = [ ] ;
449+ for ( let newItem of value ) {
450+ if ( newItem && newItem . selected ) {
451+ // copy the item
452+ let tempNewItem : string | ListItem = Object . assign ( { } , newItem ) ;
453+ // deleted selected because it's what we _want_ to change
454+ delete tempNewItem . selected ;
455+ // stringify for compare later
456+ tempNewItem = JSON . stringify ( tempNewItem ) ;
457+ // add to the list of selected items
458+ selectedNewItems . push ( tempNewItem ) ;
459+ }
460+ }
461+
448462 // loop through the list items and update the `selected` state for matching items in `value`
449463 for ( let oldItem of this . getListItems ( ) ) {
464+ // fast path when no items are selected
465+ if ( selectedNewItems . length === 0 ) {
466+ oldItem . selected = false ;
467+ continue ;
468+ }
469+
450470 // copy the item
451471 let tempOldItem : string | ListItem = Object . assign ( { } , oldItem ) ;
452472 // deleted selected because it's what we _want_ to change
453473 delete tempOldItem . selected ;
454474 // stringify for compare
455475 tempOldItem = JSON . stringify ( tempOldItem ) ;
456- for ( let newItem of value ) {
457- // copy the item
458- let tempNewItem : string | ListItem = Object . assign ( { } , newItem ) ;
459- // deleted selected because it's what we _want_ to change
460- delete tempNewItem . selected ;
461- // stringify for compare
462- tempNewItem = JSON . stringify ( tempNewItem ) ;
476+ for ( let selectedNewItem of selectedNewItems ) {
463477 // do the compare
464- if ( tempOldItem . includes ( tempNewItem ) ) {
465- oldItem . selected = newItem . selected ;
478+ if ( tempOldItem . includes ( selectedNewItem ) ) {
479+ oldItem . selected = true ;
466480 // if we've found a matching item, we can stop looping
467481 break ;
468482 } else {
0 commit comments