Skip to content

Commit 8c95d6f

Browse files
authored
Merge pull request #6 from ngwattcos/optimize-slide-toggle
perf(slide-toggle): convert MatSlideToggle adapter to class object
2 parents b7d4e42 + 15d4adc commit 8c95d6f

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

src/material-experimental/mdc-slide-toggle/slide-toggle.ts

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,26 @@ const RIPPLE_ANIMATION_CONFIG: RippleAnimationConfig = {
4848
exitDuration: numbers.FG_DEACTIVATION_MS,
4949
};
5050

51+
class SlideToggleAdapter implements MDCSwitchAdapter {
52+
constructor(private readonly _delegate: MatSlideToggle) {}
53+
54+
addClass(className: string) {
55+
return this._delegate._switchElement.nativeElement.classList.add(className);
56+
}
57+
removeClass(className: string) {
58+
return this._delegate._switchElement.nativeElement.classList.remove(className);
59+
}
60+
setNativeControlChecked(checked: boolean) {
61+
this._delegate._checked = checked;
62+
}
63+
setNativeControlDisabled(disabled: boolean) {
64+
this._delegate._disabled = disabled;
65+
}
66+
setNativeControlAttr(name: string, value: string) {
67+
this._delegate._inputElement.nativeElement.setAttribute(name, value);
68+
}
69+
}
70+
5171
/** @docs-private */
5272
export const MAT_SLIDE_TOGGLE_VALUE_ACCESSOR: any = {
5373
provide: NG_VALUE_ACCESSOR,
@@ -94,17 +114,9 @@ export class MatSlideToggle implements ControlValueAccessor, AfterViewInit, OnDe
94114

95115
private _uniqueId: string = `mat-mdc-slide-toggle-${++nextUniqueId}`;
96116
private _required: boolean = false;
97-
private _checked: boolean = false;
117+
_checked: boolean = false;
98118
private _foundation: MDCSwitchFoundation;
99-
private _adapter: MDCSwitchAdapter = {
100-
addClass: className => this._switchElement.nativeElement.classList.add(className),
101-
removeClass: className => this._switchElement.nativeElement.classList.remove(className),
102-
setNativeControlChecked: checked => this._checked = checked,
103-
setNativeControlDisabled: disabled => this._disabled = disabled,
104-
setNativeControlAttr: (name, value) => {
105-
this._inputElement.nativeElement.setAttribute(name, value);
106-
}
107-
};
119+
private _adapter: MDCSwitchAdapter;
108120

109121
/** Whether the slide toggle is currently focused. */
110122
_focused: boolean;
@@ -176,7 +188,7 @@ export class MatSlideToggle implements ControlValueAccessor, AfterViewInit, OnDe
176188
this._foundation.setDisabled(this._disabled);
177189
}
178190
}
179-
private _disabled = false;
191+
_disabled = false;
180192

181193
/** An event will be dispatched each time the slide-toggle changes its value. */
182194
@Output() readonly change: EventEmitter<MatSlideToggleChange> =
@@ -199,6 +211,7 @@ export class MatSlideToggle implements ControlValueAccessor, AfterViewInit, OnDe
199211
@Inject(MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS)
200212
public defaults: MatSlideToggleDefaultOptions,
201213
@Optional() @Inject(ANIMATION_MODULE_TYPE) public _animationMode?: string) {
214+
this._adapter = new SlideToggleAdapter(this);
202215
this.tabIndex = parseInt(tabIndex) || 0;
203216
}
204217

0 commit comments

Comments
 (0)