Skip to content
This repository was archived by the owner on Jan 13, 2025. It is now read-only.

Commit 2befa88

Browse files
Matt Gooacdvorak
Matt Goo
authored andcommitted
feat(checkbox): typescript conversion (#4319)
refs #4225
1 parent 0f8a271 commit 2befa88

File tree

7 files changed

+134
-211
lines changed

7 files changed

+134
-211
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"fix": "npm-run-all --parallel fix:*",
1818
"lint:css": "stylelint \"packages/**/*.scss\" && stylelint --config=test/screenshot/.stylelintrc.yaml \"test/screenshot/**/*.scss\"",
1919
"lint:js": "eslint packages test scripts webpack.config.js demos/webpack.config.js karma.conf.js",
20-
"lint:ts": "tslint \"packages/**/*.ts\" \"test/**/*.ts\" \"scripts/**/*.ts\"",
20+
"lint:ts": "tslint --exclude \"test/**/*.d.ts\" \"packages/**/*.ts\" \"test/**/*.ts\" \"scripts/**/*.ts\"",
2121
"lint:html": "find test/screenshot/spec/ -name '*.html' | grep -v 'index.html$' | xargs htmllint",
2222
"lint:imports": "node scripts/check-imports.js",
2323
"lint": "npm-run-all --parallel lint:*",

packages/mdc-checkbox/adapter.js renamed to packages/mdc-checkbox/adapter.ts

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,6 @@
2121
* THE SOFTWARE.
2222
*/
2323

24-
/* eslint-disable no-unused-vars */
25-
import {MDCSelectionControlState} from '@material/selection-control/index';
26-
27-
/* eslint no-unused-vars: [2, {"args": "none"}] */
28-
2924
/**
3025
* Adapter for MDC Checkbox. Provides an interface for managing
3126
* - classes
@@ -42,42 +37,24 @@ import {MDCSelectionControlState} from '@material/selection-control/index';
4237
*
4338
* @record
4439
*/
45-
class MDCCheckboxAdapter {
46-
/** @param {string} className */
47-
addClass(className) {}
48-
49-
/** @param {string} className */
50-
removeClass(className) {}
5140

41+
interface MDCCheckboxAdapter {
42+
addClass(className: string): void;
43+
forceLayout(): void;
44+
hasNativeControl(): boolean;
45+
isAttachedToDOM(): boolean;
46+
isChecked(): boolean;
47+
isIndeterminate(): boolean;
48+
removeClass(className: string): void;
5249
/**
53-
* Sets an attribute with a given value on the input element.
54-
* @param {string} attr
55-
* @param {string} value
50+
* Removes an attribute from the input element.
5651
*/
57-
setNativeControlAttr(attr, value) {}
58-
52+
removeNativeControlAttr(attr: string): void;
5953
/**
60-
* Removes an attribute from the input element.
61-
* @param {string} attr
54+
* Sets an attribute with a given value on the input element.
6255
*/
63-
removeNativeControlAttr(attr) {}
64-
65-
forceLayout() {}
66-
67-
/** @return {boolean} */
68-
isAttachedToDOM() {}
69-
70-
/** @return {boolean} */
71-
isIndeterminate() {}
72-
73-
/** @return {boolean} */
74-
isChecked() {}
75-
76-
/** @return {boolean} */
77-
hasNativeControl() {}
78-
79-
/** @param {boolean} disabled */
80-
setNativeControlDisabled(disabled) {}
56+
setNativeControlAttr(attr: string, value: string): void;
57+
setNativeControlDisabled(disabled: boolean): void;
8158
}
8259

8360
export default MDCCheckboxAdapter;

packages/mdc-checkbox/constants.js renamed to packages/mdc-checkbox/constants.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,35 +21,31 @@
2121
* THE SOFTWARE.
2222
*/
2323

24-
/** @const {string} */
2524
const ROOT = 'mdc-checkbox';
2625

27-
/** @enum {string} */
2826
const cssClasses = {
29-
UPGRADED: 'mdc-checkbox--upgraded',
30-
CHECKED: 'mdc-checkbox--checked',
31-
INDETERMINATE: 'mdc-checkbox--indeterminate',
32-
DISABLED: 'mdc-checkbox--disabled',
33-
ANIM_UNCHECKED_CHECKED: 'mdc-checkbox--anim-unchecked-checked',
34-
ANIM_UNCHECKED_INDETERMINATE: 'mdc-checkbox--anim-unchecked-indeterminate',
35-
ANIM_CHECKED_UNCHECKED: 'mdc-checkbox--anim-checked-unchecked',
3627
ANIM_CHECKED_INDETERMINATE: 'mdc-checkbox--anim-checked-indeterminate',
28+
ANIM_CHECKED_UNCHECKED: 'mdc-checkbox--anim-checked-unchecked',
3729
ANIM_INDETERMINATE_CHECKED: 'mdc-checkbox--anim-indeterminate-checked',
3830
ANIM_INDETERMINATE_UNCHECKED: 'mdc-checkbox--anim-indeterminate-unchecked',
31+
ANIM_UNCHECKED_CHECKED: 'mdc-checkbox--anim-unchecked-checked',
32+
ANIM_UNCHECKED_INDETERMINATE: 'mdc-checkbox--anim-unchecked-indeterminate',
33+
CHECKED: 'mdc-checkbox--checked',
34+
DISABLED: 'mdc-checkbox--disabled',
35+
INDETERMINATE: 'mdc-checkbox--indeterminate',
36+
UPGRADED: 'mdc-checkbox--upgraded',
3937
};
4038

41-
/** @enum {string} */
4239
const strings = {
40+
ARIA_CHECKED_ATTR: 'aria-checked',
41+
ARIA_CHECKED_INDETERMINATE_VALUE: 'mixed',
4342
NATIVE_CONTROL_SELECTOR: `.${ROOT}__native-control`,
44-
TRANSITION_STATE_INIT: 'init',
4543
TRANSITION_STATE_CHECKED: 'checked',
46-
TRANSITION_STATE_UNCHECKED: 'unchecked',
4744
TRANSITION_STATE_INDETERMINATE: 'indeterminate',
48-
ARIA_CHECKED_ATTR: 'aria-checked',
49-
ARIA_CHECKED_INDETERMINATE_VALUE: 'mixed',
45+
TRANSITION_STATE_INIT: 'init',
46+
TRANSITION_STATE_UNCHECKED: 'unchecked',
5047
};
5148

52-
/** @enum {number} */
5349
const numbers = {
5450
ANIM_END_LATCH_MS: 250,
5551
};

packages/mdc-checkbox/foundation.js renamed to packages/mdc-checkbox/foundation.ts

Lines changed: 27 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -22,77 +22,57 @@
2222
*/
2323

2424
import MDCFoundation from '@material/base/foundation';
25-
/* eslint-disable no-unused-vars */
26-
import {MDCSelectionControlState} from '@material/selection-control/index';
2725
import MDCCheckboxAdapter from './adapter';
28-
/* eslint-enable no-unused-vars */
29-
import {cssClasses, strings, numbers} from './constants';
26+
import {cssClasses, numbers, strings} from './constants';
3027

31-
/**
32-
* @extends {MDCFoundation<!MDCCheckboxAdapter>}
33-
*/
34-
class MDCCheckboxFoundation extends MDCFoundation {
35-
/** @return enum {cssClasses} */
28+
class MDCCheckboxFoundation extends MDCFoundation<MDCCheckboxAdapter> {
3629
static get cssClasses() {
3730
return cssClasses;
3831
}
3932

40-
/** @return enum {strings} */
4133
static get strings() {
4234
return strings;
4335
}
4436

45-
/** @return enum {numbers} */
4637
static get numbers() {
4738
return numbers;
4839
}
4940

50-
/** @return {!MDCCheckboxAdapter} */
51-
static get defaultAdapter() {
52-
return /** @type {!MDCCheckboxAdapter} */ ({
53-
addClass: (/* className: string */) => {},
54-
removeClass: (/* className: string */) => {},
55-
setNativeControlAttr: (/* attr: string, value: string */) => {},
56-
removeNativeControlAttr: (/* attr: string */) => {},
57-
forceLayout: () => {},
58-
isAttachedToDOM: () => /* boolean */ {},
59-
isIndeterminate: () => /* boolean */ {},
60-
isChecked: () => /* boolean */ {},
61-
hasNativeControl: () => /* boolean */ {},
62-
setNativeControlDisabled: (/* disabled: boolean */) => {},
63-
});
41+
static get defaultAdapter(): MDCCheckboxAdapter {
42+
return {
43+
addClass: () => undefined,
44+
forceLayout: () => undefined,
45+
hasNativeControl: () => false,
46+
isAttachedToDOM: () => false,
47+
isChecked: () => false,
48+
isIndeterminate: () => false,
49+
removeClass: () => undefined,
50+
removeNativeControlAttr: () => undefined,
51+
setNativeControlAttr: () => undefined,
52+
setNativeControlDisabled: () => undefined,
53+
};
6454
}
6555

66-
constructor(adapter) {
67-
super(Object.assign(MDCCheckboxFoundation.defaultAdapter, adapter));
68-
69-
/** @private {string} */
70-
this.currentCheckState_ = strings.TRANSITION_STATE_INIT;
71-
72-
/** @private {string} */
73-
this.currentAnimationClass_ = '';
74-
75-
/** @private {number} */
76-
this.animEndLatchTimer_ = 0;
56+
private currentCheckState_ = strings.TRANSITION_STATE_INIT;
57+
private currentAnimationClass_ = '';
58+
private animEndLatchTimer_ = 0;
59+
private enableAnimationEndHandler_ = false;
7760

78-
/** @private {boolean} */
79-
this.enableAnimationEndHandler_ = false;
61+
constructor(adapter: MDCCheckboxAdapter) {
62+
super(Object.assign(MDCCheckboxFoundation.defaultAdapter, adapter));
8063
}
8164

82-
/** @override */
8365
init() {
8466
this.currentCheckState_ = this.determineCheckState_();
8567
this.updateAriaChecked_();
8668
this.adapter_.addClass(cssClasses.UPGRADED);
8769
}
8870

89-
/** @override */
9071
destroy() {
9172
clearTimeout(this.animEndLatchTimer_);
9273
}
9374

94-
/** @param {boolean} disabled */
95-
setDisabled(disabled) {
75+
setDisabled(disabled: boolean) {
9676
this.adapter_.setNativeControlDisabled(disabled);
9777
if (disabled) {
9878
this.adapter_.addClass(cssClasses.DISABLED);
@@ -122,8 +102,7 @@ class MDCCheckboxFoundation extends MDCFoundation {
122102
this.transitionCheckState_();
123103
}
124104

125-
/** @private */
126-
transitionCheckState_() {
105+
private transitionCheckState_() {
127106
if (!this.adapter_.hasNativeControl()) {
128107
return;
129108
}
@@ -155,11 +134,7 @@ class MDCCheckboxFoundation extends MDCFoundation {
155134
}
156135
}
157136

158-
/**
159-
* @return {string}
160-
* @private
161-
*/
162-
determineCheckState_() {
137+
private determineCheckState_(): string {
163138
const {
164139
TRANSITION_STATE_INDETERMINATE,
165140
TRANSITION_STATE_CHECKED,
@@ -172,12 +147,7 @@ class MDCCheckboxFoundation extends MDCFoundation {
172147
return this.adapter_.isChecked() ? TRANSITION_STATE_CHECKED : TRANSITION_STATE_UNCHECKED;
173148
}
174149

175-
/**
176-
* @param {string} oldState
177-
* @param {string} newState
178-
* @return {string}
179-
*/
180-
getTransitionAnimationClass_(oldState, newState) {
150+
private getTransitionAnimationClass_(oldState: string, newState: string): string {
181151
const {
182152
TRANSITION_STATE_INIT,
183153
TRANSITION_STATE_CHECKED,
@@ -194,6 +164,7 @@ class MDCCheckboxFoundation extends MDCFoundation {
194164
} = MDCCheckboxFoundation.cssClasses;
195165

196166
switch (oldState) {
167+
// @ts-ignore:no-switch-case-fall-through already existing fallthrough
197168
case TRANSITION_STATE_INIT:
198169
if (newState === TRANSITION_STATE_UNCHECKED) {
199170
return '';
@@ -210,7 +181,7 @@ class MDCCheckboxFoundation extends MDCFoundation {
210181
}
211182
}
212183

213-
updateAriaChecked_() {
184+
private updateAriaChecked_() {
214185
// Ensure aria-checked is set to mixed if checkbox is in indeterminate state.
215186
if (this.adapter_.isIndeterminate()) {
216187
this.adapter_.setNativeControlAttr(

0 commit comments

Comments
 (0)