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

Commit 409a6a6

Browse files
authored
feat(tabs): Convert JS to TypeScript (#4412)
Refs #4225
1 parent 03b791d commit 409a6a6

19 files changed

+546
-251
lines changed

packages/mdc-tabs/index.js renamed to packages/mdc-tabs/index.ts

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

24-
export {MDCTabFoundation, MDCTab} from './tab';
25-
export {MDCTabBarFoundation, MDCTabBar} from './tab-bar';
26-
export {MDCTabBarScrollerFoundation, MDCTabBarScroller} from './tab-bar-scroller';
24+
export * from './tab';
25+
export * from './tab-bar';
26+
export * from './tab-bar-scroller';
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* @license
3+
* Copyright 2019 Google Inc.
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy
6+
* of this software and associated documentation files (the "Software"), to deal
7+
* in the Software without restriction, including without limitation the rights
8+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
* copies of the Software, and to permit persons to whom the Software is
10+
* furnished to do so, subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in
13+
* all copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21+
* THE SOFTWARE.
22+
*/
23+
24+
import {EventType, SpecificEventListener} from '@material/base/types';
25+
26+
export interface MDCTabBarScrollerAdapter {
27+
addClass: (className: string) => void;
28+
removeClass: (className: string) => void;
29+
eventTargetHasClass: (target: Element, className: string) => boolean;
30+
addClassToForwardIndicator: (className: string) => void;
31+
removeClassFromForwardIndicator: (className: string) => void;
32+
addClassToBackIndicator: (className: string) => void;
33+
removeClassFromBackIndicator: (className: string) => void;
34+
isRTL: () => boolean;
35+
registerBackIndicatorClickHandler: (handler: SpecificEventListener<'click'>) => void;
36+
deregisterBackIndicatorClickHandler: (handler: SpecificEventListener<'click'>) => void;
37+
registerForwardIndicatorClickHandler: (handler: SpecificEventListener<'click'>) => void;
38+
deregisterForwardIndicatorClickHandler: (handler: SpecificEventListener<'click'>) => void;
39+
registerCapturedInteractionHandler: <K extends EventType>(evt: K, handler: SpecificEventListener<K>) => void;
40+
deregisterCapturedInteractionHandler: <K extends EventType>(evt: K, handler: SpecificEventListener<K>) => void;
41+
registerWindowResizeHandler: (handler: SpecificEventListener<'resize'>) => void;
42+
deregisterWindowResizeHandler: (handler: SpecificEventListener<'resize'>) => void;
43+
getNumberOfTabs: () => number;
44+
getComputedWidthForTabAtIndex: (index: number) => number;
45+
getComputedLeftForTabAtIndex: (index: number) => number;
46+
getOffsetWidthForScrollFrame: () => number;
47+
getScrollLeftForScrollFrame: () => number;
48+
setScrollLeftForScrollFrame: (scrollLeftAmount: number) => void;
49+
getOffsetWidthForTabBar: () => number;
50+
setTransformStyleForTabBar: (value: string) => void;
51+
getOffsetLeftForEventTarget: (target: HTMLElement) => number;
52+
getOffsetWidthForEventTarget: (target: HTMLElement) => number;
53+
}
54+
55+
export default MDCTabBarScrollerAdapter;

packages/mdc-tabs/tab-bar-scroller/index.js renamed to packages/mdc-tabs/tab-bar-scroller/component.ts

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -21,58 +21,61 @@
2121
* THE SOFTWARE.
2222
*/
2323

24-
import {getCorrectPropertyName} from '@material/animation/index.ts';
24+
import {getCorrectPropertyName} from '@material/animation/index';
2525
import {MDCComponent} from '@material/base/component';
26+
import {MDCTabBar, MDCTabBarFactory} from '../tab-bar/index';
27+
import {MDCTabBarScrollerAdapter} from './adapter';
28+
import {MDCTabBarScrollerFoundation} from './foundation';
2629

27-
import {MDCTabBar} from '../tab-bar/index';
28-
import MDCTabBarScrollerFoundation from './foundation';
29-
30-
export {MDCTabBarScrollerFoundation};
31-
32-
export class MDCTabBarScroller extends MDCComponent {
33-
static attachTo(root) {
30+
export class MDCTabBarScroller extends MDCComponent<MDCTabBarScrollerFoundation> {
31+
static attachTo(root: Element) {
3432
return new MDCTabBarScroller(root);
3533
}
3634

3735
get tabBar() {
3836
return this.tabBar_;
3937
}
4038

41-
initialize(tabBarFactory = (root) => new MDCTabBar(root)) {
42-
this.scrollFrame_ = this.root_.querySelector(MDCTabBarScrollerFoundation.strings.FRAME_SELECTOR);
43-
this.tabBarEl_ = this.root_.querySelector(MDCTabBarScrollerFoundation.strings.TABS_SELECTOR);
44-
this.forwardIndicator_ = this.root_.querySelector(MDCTabBarScrollerFoundation.strings.INDICATOR_FORWARD_SELECTOR);
45-
this.backIndicator_ = this.root_.querySelector(MDCTabBarScrollerFoundation.strings.INDICATOR_BACK_SELECTOR);
39+
protected root_!: HTMLElement; // assigned in MDCComponent constructor
40+
41+
private tabBar_!: MDCTabBar; // assigned in initialize()
42+
private scrollFrame_!: HTMLElement; // assigned in initialize()
43+
private tabBarEl_!: HTMLElement; // assigned in initialize()
44+
private forwardIndicator_!: HTMLElement; // assigned in initialize()
45+
private backIndicator_!: HTMLElement; // assigned in initialize()
46+
47+
initialize(tabBarFactory: MDCTabBarFactory = (el) => new MDCTabBar(el)) {
48+
this.scrollFrame_ =
49+
this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.FRAME_SELECTOR)!;
50+
this.tabBarEl_ =
51+
this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.TABS_SELECTOR)!;
52+
this.forwardIndicator_ =
53+
this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.INDICATOR_FORWARD_SELECTOR)!;
54+
this.backIndicator_ =
55+
this.root_.querySelector<HTMLElement>(MDCTabBarScrollerFoundation.strings.INDICATOR_BACK_SELECTOR)!;
56+
4657
this.tabBar_ = tabBarFactory(this.tabBarEl_);
4758
}
4859

4960
getDefaultFoundation() {
50-
return new MDCTabBarScrollerFoundation({
61+
// tslint:disable:object-literal-sort-keys
62+
const adapter: MDCTabBarScrollerAdapter = {
5163
addClass: (className) => this.root_.classList.add(className),
5264
removeClass: (className) => this.root_.classList.remove(className),
5365
eventTargetHasClass: (target, className) => target.classList.contains(className),
5466
addClassToForwardIndicator: (className) => this.forwardIndicator_.classList.add(className),
5567
removeClassFromForwardIndicator: (className) => this.forwardIndicator_.classList.remove(className),
5668
addClassToBackIndicator: (className) => this.backIndicator_.classList.add(className),
5769
removeClassFromBackIndicator: (className) => this.backIndicator_.classList.remove(className),
58-
isRTL: () =>
59-
getComputedStyle(this.root_).getPropertyValue('direction') === 'rtl',
60-
registerBackIndicatorClickHandler: (handler) =>
61-
this.backIndicator_.addEventListener('click', handler),
62-
deregisterBackIndicatorClickHandler: (handler) =>
63-
this.backIndicator_.removeEventListener('click', handler),
64-
registerForwardIndicatorClickHandler: (handler) =>
65-
this.forwardIndicator_.addEventListener('click', handler),
66-
deregisterForwardIndicatorClickHandler: (handler) =>
67-
this.forwardIndicator_.removeEventListener('click', handler),
68-
registerCapturedInteractionHandler: (evt, handler) =>
69-
this.root_.addEventListener(evt, handler, true),
70-
deregisterCapturedInteractionHandler: (evt, handler) =>
71-
this.root_.removeEventListener(evt, handler, true),
72-
registerWindowResizeHandler: (handler) =>
73-
window.addEventListener('resize', handler),
74-
deregisterWindowResizeHandler: (handler) =>
75-
window.removeEventListener('resize', handler),
70+
isRTL: () => getComputedStyle(this.root_).getPropertyValue('direction') === 'rtl',
71+
registerBackIndicatorClickHandler: (handler) => this.backIndicator_.addEventListener('click', handler),
72+
deregisterBackIndicatorClickHandler: (handler) => this.backIndicator_.removeEventListener('click', handler),
73+
registerForwardIndicatorClickHandler: (handler) => this.forwardIndicator_.addEventListener('click', handler),
74+
deregisterForwardIndicatorClickHandler: (handler) => this.forwardIndicator_.removeEventListener('click', handler),
75+
registerCapturedInteractionHandler: (evt, handler) => this.root_.addEventListener(evt, handler, true),
76+
deregisterCapturedInteractionHandler: (evt, handler) => this.root_.removeEventListener(evt, handler, true),
77+
registerWindowResizeHandler: (handler) => window.addEventListener('resize', handler),
78+
deregisterWindowResizeHandler: (handler) => window.removeEventListener('resize', handler),
7679
getNumberOfTabs: () => this.tabBar.tabs.length,
7780
getComputedWidthForTabAtIndex: (index) => this.tabBar.tabs[index].computedWidth,
7881
getComputedLeftForTabAtIndex: (index) => this.tabBar.tabs[index].computedLeft,
@@ -85,7 +88,9 @@ export class MDCTabBarScroller extends MDCComponent {
8588
},
8689
getOffsetLeftForEventTarget: (target) => target.offsetLeft,
8790
getOffsetWidthForEventTarget: (target) => target.offsetWidth,
88-
});
91+
};
92+
// tslint:enable:object-literal-sort-keys
93+
return new MDCTabBarScrollerFoundation(adapter);
8994
}
9095

9196
layout() {

packages/mdc-tabs/tab-bar-scroller/constants.js renamed to packages/mdc-tabs/tab-bar-scroller/constants.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@
2222
*/
2323

2424
export const cssClasses = {
25-
INDICATOR_FORWARD: 'mdc-tab-bar-scroller__indicator--forward',
2625
INDICATOR_BACK: 'mdc-tab-bar-scroller__indicator--back',
2726
INDICATOR_ENABLED: 'mdc-tab-bar-scroller__indicator--enabled',
27+
INDICATOR_FORWARD: 'mdc-tab-bar-scroller__indicator--forward',
2828
TAB: 'mdc-tab',
2929
};
3030

3131
export const strings = {
3232
FRAME_SELECTOR: '.mdc-tab-bar-scroller__scroll-frame',
33+
INDICATOR_BACK_SELECTOR: '.mdc-tab-bar-scroller__indicator--back',
34+
INDICATOR_FORWARD_SELECTOR: '.mdc-tab-bar-scroller__indicator--forward',
3335
TABS_SELECTOR: '.mdc-tab-bar-scroller__scroll-frame__tabs',
3436
TAB_SELECTOR: '.mdc-tab',
35-
INDICATOR_FORWARD_SELECTOR: '.mdc-tab-bar-scroller__indicator--forward',
36-
INDICATOR_BACK_SELECTOR: '.mdc-tab-bar-scroller__indicator--back',
3737
};

0 commit comments

Comments
 (0)