Skip to content

Commit 4102928

Browse files
crisbetojelbourn
authored andcommitted
refactor(focus-monitor): accept ElementRef in focusVia (#12978)
Looks like something that was missed in #12712. For consistency with `monitor` and `stopMonitoring`, accepts an `ElementRef` in `focusVia`.
1 parent 3f49cb3 commit 4102928

File tree

7 files changed

+25
-10
lines changed

7 files changed

+25
-10
lines changed

src/cdk/a11y/focus-monitor/focus-monitor.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,28 @@ export class FocusMonitor implements OnDestroy {
149149
* @param origin Focus origin.
150150
* @param options Options that can be used to configure the focus behavior.
151151
*/
152-
focusVia(element: HTMLElement, origin: FocusOrigin, options?: FocusOptions): void {
152+
focusVia(element: HTMLElement, origin: FocusOrigin, options?: FocusOptions): void;
153+
154+
/**
155+
* Focuses the element via the specified focus origin.
156+
* @param element Element to focus.
157+
* @param origin Focus origin.
158+
* @param options Options that can be used to configure the focus behavior.
159+
*/
160+
focusVia(element: ElementRef<HTMLElement>, origin: FocusOrigin, options?: FocusOptions): void;
161+
162+
focusVia(element: HTMLElement | ElementRef<HTMLElement>,
163+
origin: FocusOrigin,
164+
options?: FocusOptions): void {
165+
166+
const nativeElement = this._getNativeElement(element);
167+
153168
this._setOriginForCurrentEventQueue(origin);
154169

155170
// `focus` isn't available on the server
156-
if (typeof element.focus === 'function') {
171+
if (typeof nativeElement.focus === 'function') {
157172
// Cast the element to `any`, because the TS typings don't have the `options` parameter yet.
158-
(element as any).focus(options);
173+
(nativeElement as any).focus(options);
159174
}
160175
}
161176

src/lib/checkbox/checkbox.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ export class MatCheckbox extends _MatCheckboxMixinBase implements ControlValueAc
401401

402402
/** Focuses the checkbox. */
403403
focus(): void {
404-
this._focusMonitor.focusVia(this._inputElement.nativeElement, 'keyboard');
404+
this._focusMonitor.focusVia(this._inputElement, 'keyboard');
405405
}
406406

407407
_onInteractionEvent(event: Event) {

src/lib/expansion/expansion-panel-header.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export class MatExpansionPanelHeader implements OnDestroy, FocusableOption {
8686
// Avoids focus being lost if the panel contained the focused element and was closed.
8787
panel.closed
8888
.pipe(filter(() => panel._containsFocus()))
89-
.subscribe(() => _focusMonitor.focusVia(_element.nativeElement, 'program'));
89+
.subscribe(() => _focusMonitor.focusVia(_element, 'program'));
9090

9191
_focusMonitor.monitor(_element.nativeElement).subscribe(origin => {
9292
if (origin && panel.accordion) {
@@ -158,7 +158,7 @@ export class MatExpansionPanelHeader implements OnDestroy, FocusableOption {
158158
* @docs-private
159159
*/
160160
focus(origin: FocusOrigin = 'program') {
161-
this._focusMonitor.focusVia(this._element.nativeElement, origin);
161+
this._focusMonitor.focusVia(this._element, origin);
162162
}
163163

164164
ngOnDestroy() {

src/lib/menu/menu-trigger.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ export class MatMenuTrigger implements AfterContentInit, OnDestroy {
224224
*/
225225
focus(origin: FocusOrigin = 'program') {
226226
if (this._focusMonitor) {
227-
this._focusMonitor.focusVia(this._element.nativeElement, origin);
227+
this._focusMonitor.focusVia(this._element, origin);
228228
} else {
229229
this._element.nativeElement.focus();
230230
}

src/lib/radio/radio.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ export class MatRadioButton extends _MatRadioButtonMixinBase
493493

494494
/** Focuses the radio button. */
495495
focus(): void {
496-
this._focusMonitor.focusVia(this._inputElement.nativeElement, 'keyboard');
496+
this._focusMonitor.focusVia(this._inputElement, 'keyboard');
497497
}
498498

499499
/**

src/lib/slide-toggle/slide-toggle.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ export class MatSlideToggle extends _MatSlideToggleMixinBase implements OnDestro
273273

274274
/** Focuses the slide-toggle. */
275275
focus(): void {
276-
this._focusMonitor.focusVia(this._inputElement.nativeElement, 'keyboard');
276+
this._focusMonitor.focusVia(this._inputElement, 'keyboard');
277277
}
278278

279279
/** Toggles the checked state of the slide-toggle. */

src/universal-app/kitchen-sink/kitchen-sink.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export class KitchenSink {
8484
focusMonitor: FocusMonitor,
8585
elementRef: ElementRef<HTMLElement>,
8686
bottomSheet: MatBottomSheet) {
87-
focusMonitor.focusVia(elementRef.nativeElement, 'program');
87+
focusMonitor.focusVia(elementRef, 'program');
8888
snackBar.open('Hello there');
8989
dialog.open(TestEntryComponent);
9090
bottomSheet.open(TestEntryComponent);

0 commit comments

Comments
 (0)