Skip to content

Commit 80437d8

Browse files
committed
fix(material/autocomplete): panel not visible when opened from multiple triggers (#28843)
Fixes that if one panel is tied to multiple triggers, it ends up becoming invisible because the original trigger resets the state after the next trigger picks it up. These changes avoid the state reset if the trigger has changed. Fixes #28362. (cherry picked from commit 2f17c69)
1 parent cbe0a78 commit 80437d8

File tree

3 files changed

+14
-3
lines changed

3 files changed

+14
-3
lines changed

src/material/autocomplete/autocomplete-trigger.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,14 @@ export class MatAutocompleteTrigger
309309
});
310310
}
311311

312-
this.autocomplete._isOpen = this._overlayAttached = false;
312+
// Only reset if this trigger is the latest one that opened the
313+
// autocomplete since another may have taken it over.
314+
if (this.autocomplete._latestOpeningTrigger === this) {
315+
this.autocomplete._isOpen = false;
316+
this.autocomplete._latestOpeningTrigger = null;
317+
}
318+
319+
this._overlayAttached = false;
313320
this._pendingAutoselectedOption = null;
314321

315322
if (this._overlayRef && this._overlayRef.hasAttached()) {
@@ -331,8 +338,7 @@ export class MatAutocompleteTrigger
331338

332339
// Remove aria-owns attribute when the autocomplete is no longer visible.
333340
if (this._trackedModal) {
334-
const panelId = this.autocomplete.id;
335-
removeAriaReferencedId(this._trackedModal, 'aria-owns', panelId);
341+
removeAriaReferencedId(this._trackedModal, 'aria-owns', this.autocomplete.id);
336342
}
337343
}
338344

@@ -786,6 +792,7 @@ export class MatAutocompleteTrigger
786792
const wasOpen = this.panelOpen;
787793

788794
this.autocomplete._isOpen = this._overlayAttached = true;
795+
this.autocomplete._latestOpeningTrigger = this;
789796
this.autocomplete._setColor(this._formField?.color);
790797
this._updatePanelState();
791798
this._applyModalPanelOwnership();

src/material/autocomplete/autocomplete.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,9 @@ export class MatAutocomplete implements AfterContentInit, OnDestroy {
145145
}
146146
_isOpen: boolean = false;
147147

148+
/** Latest trigger that opened the autocomplete. */
149+
_latestOpeningTrigger: unknown;
150+
148151
/** @docs-private Sets the theme color of the panel. */
149152
_setColor(value: ThemePalette) {
150153
this._color = value;

tools/public_api_guard/material/autocomplete.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ export class MatAutocomplete implements AfterContentInit, OnDestroy {
9191
// (undocumented)
9292
_isOpen: boolean;
9393
_keyManager: ActiveDescendantKeyManager<MatOption>;
94+
_latestOpeningTrigger: unknown;
9495
// (undocumented)
9596
static ngAcceptInputType_autoActiveFirstOption: unknown;
9697
// (undocumented)

0 commit comments

Comments
 (0)