Skip to content

Commit 9248311

Browse files
committed
refactor(cdk/menu): switch to input transforms
Switches inputs in cdk/menu to use transforms instead of getters/setters.
1 parent ade524f commit 9248311

File tree

6 files changed

+15
-50
lines changed

6 files changed

+15
-50
lines changed

src/cdk/menu/context-menu-trigger.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Directive, inject, Injectable, Input, OnDestroy} from '@angular/core';
9+
import {booleanAttribute, Directive, inject, Injectable, Input, OnDestroy} from '@angular/core';
1010
import {Directionality} from '@angular/cdk/bidi';
1111
import {
1212
FlexibleConnectedPositionStrategy,
1313
Overlay,
1414
OverlayConfig,
1515
STANDARD_DROPDOWN_BELOW_POSITIONS,
1616
} from '@angular/cdk/overlay';
17-
import {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';
1817
import {_getEventTarget} from '@angular/cdk/platform';
1918
import {merge, partition} from 'rxjs';
2019
import {skip, takeUntil} from 'rxjs/operators';
@@ -85,14 +84,7 @@ export class CdkContextMenuTrigger extends CdkMenuTriggerBase implements OnDestr
8584
private readonly _contextMenuTracker = inject(ContextMenuTracker);
8685

8786
/** Whether the context menu is disabled. */
88-
@Input('cdkContextMenuDisabled')
89-
get disabled(): boolean {
90-
return this._disabled;
91-
}
92-
set disabled(value: BooleanInput) {
93-
this._disabled = coerceBooleanProperty(value);
94-
}
95-
private _disabled = false;
87+
@Input({alias: 'cdkContextMenuDisabled', transform: booleanAttribute}) disabled: boolean = false;
9688

9789
constructor() {
9890
super();

src/cdk/menu/menu-item-selectable.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';
10-
import {Directive, Input} from '@angular/core';
9+
import {Directive, Input, booleanAttribute} from '@angular/core';
1110
import {CdkMenuItem} from './menu-item';
1211

1312
/** Base class providing checked state for selectable MenuItems. */
@@ -19,14 +18,7 @@ import {CdkMenuItem} from './menu-item';
1918
})
2019
export abstract class CdkMenuItemSelectable extends CdkMenuItem {
2120
/** Whether the element is checked */
22-
@Input('cdkMenuItemChecked')
23-
get checked(): boolean {
24-
return this._checked;
25-
}
26-
set checked(value: BooleanInput) {
27-
this._checked = coerceBooleanProperty(value);
28-
}
29-
private _checked = false;
21+
@Input({alias: 'cdkMenuItemChecked', transform: booleanAttribute}) checked: boolean = false;
3022

3123
/** Whether the item should close the menu if triggered by the spacebar. */
3224
protected override closeOnSpacebarTrigger = false;

src/cdk/menu/menu-item.spec.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,6 @@ describe('MenuItem', () => {
4444
expect(nativeButton.getAttribute('type')).toBe('button');
4545
});
4646

47-
it('should coerce the disabled property', () => {
48-
menuItem.disabled = '';
49-
expect(menuItem.disabled).toBeTrue();
50-
});
51-
5247
it('should toggle the aria disabled attribute', () => {
5348
expect(nativeButton.hasAttribute('aria-disabled')).toBeFalse();
5449

src/cdk/menu/menu-item.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88

99
import {
10+
booleanAttribute,
1011
Directive,
1112
ElementRef,
1213
EventEmitter,
@@ -16,7 +17,6 @@ import {
1617
OnDestroy,
1718
Output,
1819
} from '@angular/core';
19-
import {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';
2020
import {FocusableOption, InputModalityDetector} from '@angular/cdk/a11y';
2121
import {ENTER, hasModifierKey, LEFT_ARROW, RIGHT_ARROW, SPACE} from '@angular/cdk/keycodes';
2222
import {Directionality} from '@angular/cdk/bidi';
@@ -68,14 +68,7 @@ export class CdkMenuItem implements FocusableOption, FocusableElement, Toggler,
6868
private readonly _menuTrigger = inject(CdkMenuTrigger, {optional: true, self: true});
6969

7070
/** Whether the CdkMenuItem is disabled - defaults to false */
71-
@Input('cdkMenuItemDisabled')
72-
get disabled(): boolean {
73-
return this._disabled;
74-
}
75-
set disabled(value: BooleanInput) {
76-
this._disabled = coerceBooleanProperty(value);
77-
}
78-
private _disabled = false;
71+
@Input({alias: 'cdkMenuItemDisabled', transform: booleanAttribute}) disabled: boolean = false;
7972

8073
/**
8174
* The text used to locate this item during menu typeahead. If not specified,

src/material-experimental/menubar/menubar-item.spec.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {MatMenuBarModule} from './menubar-module';
66

77
describe('MatMenuBarItem', () => {
88
let fixture: ComponentFixture<SimpleMenuBarItem>;
9-
let menubarItem: MatMenuBarItem;
109
let nativeMenubarItem: HTMLElement;
1110

1211
beforeEach(waitForAsync(() => {
@@ -20,7 +19,6 @@ describe('MatMenuBarItem', () => {
2019
fixture = TestBed.createComponent(SimpleMenuBarItem);
2120
fixture.detectChanges();
2221

23-
menubarItem = fixture.componentInstance.menubarItem;
2422
nativeMenubarItem = fixture.componentInstance.nativeMenubarItem.nativeElement;
2523
});
2624

@@ -36,13 +34,6 @@ describe('MatMenuBarItem', () => {
3634
expect(nativeMenubarItem.hasAttribute('aria.disabled')).toBeFalse();
3735
});
3836

39-
it('should coerce and set aria-disabled attribute', () => {
40-
(menubarItem.disabled as any) = '';
41-
fixture.detectChanges();
42-
43-
expect(nativeMenubarItem.getAttribute('aria-disabled')).toBe('true');
44-
});
45-
4637
it('should have cdk and material classes set', () => {
4738
expect(nativeMenubarItem.classList.contains('cdk-menu-item')).toBeTrue();
4839
expect(nativeMenubarItem.classList.contains('mat-menubar-item')).toBeTrue();

tools/public_api_guard/cdk/menu.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
```ts
66

77
import { AfterContentInit } from '@angular/core';
8-
import { BooleanInput } from '@angular/cdk/coercion';
98
import { ConnectedPosition } from '@angular/cdk/overlay';
109
import { Directionality } from '@angular/cdk/bidi';
1110
import { ElementRef } from '@angular/core';
@@ -35,8 +34,9 @@ export const CDK_MENU: InjectionToken<Menu>;
3534
export class CdkContextMenuTrigger extends CdkMenuTriggerBase implements OnDestroy {
3635
constructor();
3736
close(): void;
38-
get disabled(): boolean;
39-
set disabled(value: BooleanInput);
37+
disabled: boolean;
38+
// (undocumented)
39+
static ngAcceptInputType_disabled: unknown;
4040
open(coordinates: ContextMenuCoordinates): void;
4141
_openOnContextMenu(event: MouseEvent): void;
4242
// (undocumented)
@@ -121,8 +121,7 @@ export class CdkMenuItem implements FocusableOption, FocusableElement, Toggler,
121121
protected readonly destroyed: Subject<void>;
122122
// (undocumented)
123123
protected readonly _dir: Directionality | null;
124-
get disabled(): boolean;
125-
set disabled(value: BooleanInput);
124+
disabled: boolean;
126125
// (undocumented)
127126
readonly _elementRef: ElementRef<HTMLElement>;
128127
focus(): void;
@@ -132,6 +131,8 @@ export class CdkMenuItem implements FocusableOption, FocusableElement, Toggler,
132131
get hasMenu(): boolean;
133132
isMenuOpen(): boolean;
134133
// (undocumented)
134+
static ngAcceptInputType_disabled: unknown;
135+
// (undocumented)
135136
ngOnDestroy(): void;
136137
// (undocumented)
137138
protected _ngZone: NgZone;
@@ -177,10 +178,11 @@ export class CdkMenuItemRadio extends CdkMenuItemSelectable implements OnDestroy
177178

178179
// @public
179180
export abstract class CdkMenuItemSelectable extends CdkMenuItem {
180-
get checked(): boolean;
181-
set checked(value: BooleanInput);
181+
checked: boolean;
182182
protected closeOnSpacebarTrigger: boolean;
183183
// (undocumented)
184+
static ngAcceptInputType_checked: unknown;
185+
// (undocumented)
184186
static ɵdir: i0.ɵɵDirectiveDeclaration<CdkMenuItemSelectable, never, never, { "checked": { "alias": "cdkMenuItemChecked"; "required": false; }; }, {}, never, never, false, never>;
185187
// (undocumented)
186188
static ɵfac: i0.ɵɵFactoryDeclaration<CdkMenuItemSelectable, never>;

0 commit comments

Comments
 (0)