Skip to content

Commit

Permalink
fix how invisible items are managed, #859
Browse files Browse the repository at this point in the history
  • Loading branch information
pixelzoom committed Dec 4, 2023
1 parent 23a38c9 commit a9815df
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions js/ComboBoxListBox.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,12 @@ export type ComboBoxListBoxOptions = SelfOptions & PanelOptions;

export default class ComboBoxListBox<T> extends Panel {

// Nodes that correspond to items in the list
private readonly listItemNodes: ComboBoxListItemNode<T>[];

// The visible subset of listItemNodes, used for keyboard traversal.
private visibleListItemNodes: ComboBoxListItemNode<T>[];

private readonly disposeComboBoxListBox: () => void;

// We need a separate node to voice through because when a selection occurs, the list box is hidden, silencing any
Expand Down Expand Up @@ -264,7 +268,12 @@ export default class ComboBoxListBox<T> extends Panel {
this.addInputListener( keyboardListener );

this.listItemNodes = listItemNodes;
this.visibleListItemNodes = listItemNodes.slice();

// When the visibility of any item changes, update visibleListItemNodes
this.visibleListItemNodes = [];
listItemNodes.forEach( listItemNode => listItemNode.visibleProperty.link( visible => {
this.visibleListItemNodes = _.filter( this.listItemNodes, itemNode => itemNode.visible );
} ) );

this.disposeComboBoxListBox = () => {
for ( let i = 0; i < listItemNodes.length; i++ ) {
Expand Down Expand Up @@ -295,7 +304,6 @@ export default class ComboBoxListBox<T> extends Panel {
*/
public setItemVisible( value: T, visible: boolean ): void {
this.getListItemNode( value ).visible = visible;
this.visibleListItemNodes = _.filter( this.listItemNodes, itemNode => itemNode.visible );
}

/**
Expand Down

0 comments on commit a9815df

Please sign in to comment.