Skip to content

Commit 89def2a

Browse files
committed
Move TabControllerScreen to ts
1 parent 59f7572 commit 89def2a

File tree

10 files changed

+80
-88
lines changed

10 files changed

+80
-88
lines changed

demo/src/screens/componentScreens/TabControllerScreen/index.js renamed to demo/src/screens/componentScreens/TabControllerScreen/index.tsx

Lines changed: 45 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,54 @@
11
import React, {Component} from 'react';
22
import {ActivityIndicator} from 'react-native';
3-
import {
4-
Assets,
5-
TabController,
6-
Colors,
7-
View,
8-
Text,
9-
Button
10-
} from 'react-native-ui-lib'; //eslint-disable-line
3+
import {Assets, TabController, Colors, View, Text, Button, TabBarItemProps} from 'react-native-ui-lib';
114
import {gestureHandlerRootHOC} from 'react-native-gesture-handler';
125
import _ from 'lodash';
136

147
import Tab1 from './tab1';
158
import Tab2 from './tab2';
169
import Tab3 from './tab3';
1710

18-
const TABS = [
19-
'Home',
20-
'Posts',
21-
'Reviews',
22-
'Videos',
23-
'Photos',
24-
'Events',
25-
'About',
26-
'Community',
27-
'Groups',
28-
'Offers'
29-
];
30-
31-
class TabControllerScreen extends Component {
32-
constructor(props) {
33-
super(props);
11+
const TABS = ['Home', 'Posts', 'Reviews', 'Videos', 'Photos', 'Events', 'About', 'Community', 'Groups', 'Offers'];
12+
13+
interface State {
14+
asCarousel: boolean;
15+
centerSelected: boolean;
16+
fewItems: boolean;
17+
selectedIndex: number;
18+
key: string | number;
19+
items: TabBarItemProps[];
20+
}
21+
22+
class TabControllerScreen extends Component<{}, State> {
3423

35-
24+
constructor(props: {}) {
25+
super(props);
3626
this.state = {
3727
asCarousel: true,
3828
centerSelected: false,
3929
fewItems: false,
4030
selectedIndex: 0,
41-
key: Date.now()
31+
key: Date.now(),
32+
items: []
4233
};
43-
44-
const items = this.generateTabItems();
45-
this.state.items = items;
34+
35+
this.setState({items: this.generateTabItems()});
4636
}
4737

38+
generateTabItems = (fewItems = this.state.fewItems, centerSelected = this.state.centerSelected): TabBarItemProps[] => {
39+
let items: TabBarItemProps[] = _.chain(TABS)
40+
.take(fewItems ? 3 : TABS.length)
41+
.map<TabBarItemProps>(tab => ({label: tab, key: tab}))
42+
.value();
43+
44+
const addItem: TabBarItemProps = {icon: Assets.icons.demo.add, key: 'add', ignore: true, width: 60, onPress: this.onAddItem};
45+
46+
if (!centerSelected) {
47+
items = [...items, addItem];
48+
}
49+
return items;
50+
};
51+
4852
componentDidMount() {
4953
// this.slow();
5054
}
@@ -61,19 +65,7 @@ class TabControllerScreen extends Component {
6165

6266
onAddItem = () => {
6367
console.warn('Add Item');
64-
}
65-
66-
generateTabItems = (fewItems = this.state.fewItems, centerSelected = this.state.centerSelected) => {
67-
let items = _.chain(TABS)
68-
.take(fewItems ? 3 : TABS.length)
69-
.map((tab) => ({label: tab, key: tab}))
70-
.value();
71-
72-
if (!centerSelected) {
73-
items = [...items, {icon: Assets.icons.demo.add, key: 'add', ignore: true, width: 60, onPress: this.onAddItem}];
74-
}
75-
return items;
76-
}
68+
};
7769

7870
toggleItemsCount = () => {
7971
const {fewItems} = this.state;
@@ -97,14 +89,14 @@ class TabControllerScreen extends Component {
9789
});
9890
};
9991

100-
onChangeIndex = (selectedIndex) => {
92+
onChangeIndex = (selectedIndex: number) => {
10193
this.setState({selectedIndex});
10294
};
10395

10496
renderLoadingPage() {
10597
return (
10698
<View flex center>
107-
<ActivityIndicator size="large"/>
99+
<ActivityIndicator size="large" />
108100
<Text text60L marginT-10>
109101
Loading
110102
</Text>
@@ -119,18 +111,13 @@ class TabControllerScreen extends Component {
119111
return (
120112
<Container {...containerProps}>
121113
<TabController.TabPage index={0}>
122-
<Tab1/>
114+
<Tab1 />
123115
</TabController.TabPage>
124116
<TabController.TabPage index={1}>
125-
<Tab2/>
117+
<Tab2 />
126118
</TabController.TabPage>
127-
<TabController.TabPage
128-
index={2}
129-
lazy
130-
lazyLoadTime={1500}
131-
renderLoading={this.renderLoadingPage}
132-
>
133-
<Tab3/>
119+
<TabController.TabPage index={2} lazy lazyLoadTime={1500} renderLoading={this.renderLoadingPage}>
120+
<Tab3 />
134121
</TabController.TabPage>
135122

136123
{_.map(_.takeRight(TABS, TABS.length - 3), (title, index) => {
@@ -147,14 +134,7 @@ class TabControllerScreen extends Component {
147134
}
148135

149136
render() {
150-
const {
151-
key,
152-
selectedIndex,
153-
asCarousel,
154-
centerSelected,
155-
fewItems,
156-
items
157-
} = this.state;
137+
const {key, selectedIndex, asCarousel, centerSelected, fewItems, items} = this.state;
158138
return (
159139
<View flex bg-grey70>
160140
<TabController
@@ -166,7 +146,7 @@ class TabControllerScreen extends Component {
166146
>
167147
<TabController.TabBar
168148
// items={items}
169-
// key={key}
149+
key={key}
170150
// uppercase
171151
// indicatorStyle={{backgroundColor: 'green', height: 3}}
172152
// labelColor={'green'}
@@ -188,22 +168,22 @@ class TabControllerScreen extends Component {
188168
bg-green30={fewItems}
189169
label={fewItems ? 'Show Many Items' : 'Show Few Items'}
190170
marginB-12
191-
size="small"
171+
size={Button.sizes.small}
192172
onPress={this.toggleItemsCount}
193173
/>
194174
<Button
195175
bg-grey20={!asCarousel}
196176
bg-green30={asCarousel}
197177
label={`Carousel : ${asCarousel ? 'ON' : 'OFF'}`}
198178
marginB-12
199-
size="small"
179+
size={Button.sizes.small}
200180
onPress={this.toggleCarouselMode}
201181
/>
202182
<Button
203183
bg-grey20={!centerSelected}
204184
bg-green30={centerSelected}
205185
label={`centerSelected : ${centerSelected ? 'ON' : 'OFF'}`}
206-
size="small"
186+
size={Button.sizes.small}
207187
onPress={this.toggleCenterSelected}
208188
/>
209189
</View>

demo/src/screens/componentScreens/TabControllerScreen/tab1.js renamed to demo/src/screens/componentScreens/TabControllerScreen/tab1.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, {Component} from 'react';
22
import {StyleSheet} from 'react-native';
3-
import {Colors, View, Text, Image, Assets, Button} from 'react-native-ui-lib'; //eslint-disable-line
3+
import {View, Text, Image, Assets, Button} from 'react-native-ui-lib';
44

55
class Tab1 extends Component {
66
state = {};
@@ -19,7 +19,14 @@ class Tab1 extends Component {
1919
Home
2020
</Text>
2121
<View absR marginR-20>
22-
<Button marginT-20 round style={{width: 50}} size="small" iconSource={Assets.icons.search} white/>
22+
<Button
23+
marginT-20
24+
round
25+
style={{width: 50}}
26+
size={Button.sizes.small}
27+
iconSource={Assets.icons.search}
28+
white
29+
/>
2330
</View>
2431
</View>
2532
);

demo/src/screens/componentScreens/TabControllerScreen/tab2.js renamed to demo/src/screens/componentScreens/TabControllerScreen/tab2.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, {Component} from 'react';
22
import {StyleSheet} from 'react-native';
3-
import {Colors, View, Text, Image, Assets, Button} from 'react-native-ui-lib'; //eslint-disable-line
3+
import {View, Text, Image} from 'react-native-ui-lib';
44

55
class Tab2 extends Component {
66
state = {

demo/src/screens/componentScreens/TabControllerScreen/tab3.js renamed to demo/src/screens/componentScreens/TabControllerScreen/tab3.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import React, {Component} from 'react';
22
import {ScrollView} from 'react-native';
33
import _ from 'lodash';
4-
import {Card, Avatar, View, Text, Image, Assets, Button} from 'react-native-ui-lib'; //eslint-disable-line
4+
import {Card, Avatar, View, Text} from 'react-native-ui-lib';
55

66
class Tab2 extends Component {
77
state = {
8-
loading: true,
8+
loading: true
99
};
1010

1111
componentDidMount() {
@@ -51,10 +51,12 @@ class Tab2 extends Component {
5151
<Avatar
5252
size={50}
5353
source={{
54-
uri: 'https://static.pexels.com/photos/60628/flower-garden-blue-sky-hokkaido-japan-60628.jpeg',
54+
uri: 'https://static.pexels.com/photos/60628/flower-garden-blue-sky-hokkaido-japan-60628.jpeg'
5555
}}
5656
/>
57-
<Text text40 marginL-20>{index}</Text>
57+
<Text text40 marginL-20>
58+
{index}
59+
</Text>
5860
</Card>
5961
);
6062
})}

generatedTypes/components/tabController/TabBarItem.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ export interface TabBarItemProps {
1414
/**
1515
* custom label style
1616
*/
17-
labelStyle: TextStyle;
17+
labelStyle?: TextStyle;
1818
/**
1919
* custom selected label style
2020
*/
21-
selectedLabelStyle: TextStyle;
21+
selectedLabelStyle?: TextStyle;
2222
/**
2323
* the default label color
2424
*/
@@ -102,7 +102,7 @@ export default class TabBarItem extends PureComponent<Props> {
102102
onLayout: ({ nativeEvent: { layout: { width } } }: LayoutChangeEvent) => void;
103103
onPress: () => void;
104104
getItemStyle(): TouchableOpacityProps['style'];
105-
getLabelStyle(): (TextStyle | _.Dictionary<Reanimated.Node<number> | Reanimated.Node<"normal" | "bold" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"> | Reanimated.Node<string | number | boolean> | undefined>)[];
105+
getLabelStyle(): (TextStyle | _.Dictionary<Reanimated.Node<number> | Reanimated.Node<"normal" | "bold" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900"> | Reanimated.Node<string | number | boolean> | undefined> | undefined)[];
106106
getIconStyle(): {
107107
tintColor: Reanimated.Node<string>;
108108
};

generatedTypes/components/tabController/index.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import TabBar from './TabBar';
33
import TabBarItem, { TabBarItemProps } from './TabBarItem';
44
import TabPage from './TabPage';
55
import PageCarousel from './PageCarousel';
6-
interface TabControllerProps {
6+
export { TabBarItemProps };
7+
export interface TabControllerProps {
78
/**
89
* The list of tab bar items
910
*/

generatedTypes/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export {default as Overlay, OverlayTypes} from './components/overlay';
4242
export {default as RadioButton, RadioButtonPropTypes, RadioButtonProps} from './components/radioButton/RadioButton';
4343
export {default as RadioGroup, RadioGroupPropTypes, RadioGroupProps} from './components/radioButton/RadioGroup';
4444
export {default as Switch, SwitchProps} from './components/switch';
45+
export {default as TabController, TabControllerProps, TabBarItemProps} from './components/tabController';
4546
export {default as TabBar, TabBarProps} from './components/TabBar';
4647
export {default as Fader, FaderProps, FaderPosition} from './components/fader';
4748
export {default as ExpandableSection, ExpandableSectionProps} from './components/expandableSection';
@@ -115,6 +116,5 @@ export const SafeAreaInsetsManager;
115116
export const SafeAreaSpacerView;
116117
export const ScrollBar;
117118
export const SelectableComponent;
118-
export const TabController;
119119
export const TextField;
120120
export const Wizard;

src/components/tabController/TabBarItem.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ export interface TabBarItemProps {
3030
/**
3131
* custom label style
3232
*/
33-
labelStyle: TextStyle;
33+
labelStyle?: TextStyle;
3434
/**
3535
* custom selected label style
3636
*/
37-
selectedLabelStyle: TextStyle;
37+
selectedLabelStyle?: TextStyle;
3838
/**
3939
* the default label color
4040
*/
@@ -201,31 +201,31 @@ export default class TabBarItem extends PureComponent<Props> {
201201

202202
let fontWeight, letterSpacing, fontFamily;
203203

204-
if (labelStyle.fontWeight || selectedLabelStyle.fontWeight) {
204+
if (labelStyle?.fontWeight || selectedLabelStyle?.fontWeight) {
205205
fontWeight = cond(
206206
// @ts-ignore TODO: typescript - add or delete and?
207207
and(eq(targetPage, index) /* , defined(itemWidth) */),
208-
selectedLabelStyle.fontWeight || 'normal',
209-
labelStyle.fontWeight || 'normal'
208+
selectedLabelStyle?.fontWeight || 'normal',
209+
labelStyle?.fontWeight || 'normal'
210210
);
211211
}
212212

213-
if (labelStyle.letterSpacing || selectedLabelStyle.letterSpacing) {
213+
if (labelStyle?.letterSpacing || selectedLabelStyle?.letterSpacing) {
214214
letterSpacing = cond(
215215
// @ts-ignore TODO: typescript - add or delete and?
216216
and(eq(targetPage, index) /* , defined(itemWidth) */),
217-
selectedLabelStyle.letterSpacing || 0,
218-
labelStyle.letterSpacing || 0
217+
selectedLabelStyle?.letterSpacing || 0,
218+
labelStyle?.letterSpacing || 0
219219
);
220220
}
221221

222-
if (labelStyle.fontFamily || selectedLabelStyle.fontFamily) {
222+
if (labelStyle?.fontFamily || selectedLabelStyle?.fontFamily) {
223223
fontFamily = cond(
224224
// @ts-ignore TODO: typescript - add or delete and?
225225
and(eq(targetPage, index) /* , defined(itemWidth) */),
226226
// @ts-ignore
227227
selectedLabelStyle.fontFamily,
228-
labelStyle.fontFamily
228+
labelStyle?.fontFamily
229229
);
230230
}
231231

src/components/tabController/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import TabBar from './TabBar';
1111
import TabBarItem, {TabBarItemProps} from './TabBarItem';
1212
import TabPage from './TabPage';
1313
import PageCarousel from './PageCarousel';
14+
export {TabBarItemProps};
1415

1516
const {
1617
and,
@@ -35,7 +36,7 @@ const {
3536
multiply
3637
} = Reanimated;
3738

38-
interface TabControllerProps {
39+
export interface TabControllerProps {
3940
/**
4041
* The list of tab bar items
4142
*/

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export {default as Overlay, OverlayTypes} from './components/overlay';
3636
export {default as RadioButton, RadioButtonPropTypes, RadioButtonProps} from './components/radioButton/RadioButton';
3737
export {default as RadioGroup, RadioGroupPropTypes, RadioGroupProps} from './components/radioButton/RadioGroup';
3838
export {default as Switch, SwitchProps} from './components/switch';
39+
export {default as TabController, TabControllerProps, TabBarItemProps} from './components/tabController';
3940
export {default as TabBar, TabBarProps} from './components/TabBar';
4041
export {default as Fader, FaderProps, FaderPosition} from './components/fader';
4142
export {default as ExpandableSection, ExpandableSectionProps} from './components/expandableSection';

0 commit comments

Comments
 (0)