1
1
import React , { Component } from 'react' ;
2
2
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 , TabControllerItemProps } from 'react-native-ui-lib' ;
11
4
import { gestureHandlerRootHOC } from 'react-native-gesture-handler' ;
12
5
import _ from 'lodash' ;
13
6
14
7
import Tab1 from './tab1' ;
15
8
import Tab2 from './tab2' ;
16
9
import Tab3 from './tab3' ;
17
10
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 : TabControllerItemProps [ ] ;
20
+ }
21
+
22
+ class TabControllerScreen extends Component < { } , State > {
34
23
35
-
24
+ constructor ( props : { } ) {
25
+ super ( props ) ;
36
26
this . state = {
37
27
asCarousel : true ,
38
28
centerSelected : false ,
39
29
fewItems : false ,
40
30
selectedIndex : 0 ,
41
- key : Date . now ( )
31
+ key : Date . now ( ) ,
32
+ items : [ ]
42
33
} ;
43
-
44
- const items = this . generateTabItems ( ) ;
45
- this . state . items = items ;
34
+
35
+ this . state . items = this . generateTabItems ( ) ;
46
36
}
47
37
38
+ generateTabItems = ( fewItems = this . state . fewItems , centerSelected = this . state . centerSelected ) : TabControllerItemProps [ ] => {
39
+ let items : TabControllerItemProps [ ] = _ . chain ( TABS )
40
+ . take ( fewItems ? 3 : TABS . length )
41
+ . map < TabControllerItemProps > ( tab => ( { label : tab , key : tab } ) )
42
+ . value ( ) ;
43
+
44
+ const addItem : TabControllerItemProps = { 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
+
48
52
componentDidMount ( ) {
49
53
// this.slow();
50
54
}
@@ -61,19 +65,7 @@ class TabControllerScreen extends Component {
61
65
62
66
onAddItem = ( ) => {
63
67
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
+ } ;
77
69
78
70
toggleItemsCount = ( ) => {
79
71
const { fewItems} = this . state ;
@@ -97,14 +89,14 @@ class TabControllerScreen extends Component {
97
89
} ) ;
98
90
} ;
99
91
100
- onChangeIndex = ( selectedIndex ) => {
92
+ onChangeIndex = ( selectedIndex : number ) => {
101
93
this . setState ( { selectedIndex} ) ;
102
94
} ;
103
95
104
96
renderLoadingPage ( ) {
105
97
return (
106
98
< View flex center >
107
- < ActivityIndicator size = "large" />
99
+ < ActivityIndicator size = "large" />
108
100
< Text text60L marginT-10 >
109
101
Loading
110
102
</ Text >
@@ -119,18 +111,13 @@ class TabControllerScreen extends Component {
119
111
return (
120
112
< Container { ...containerProps } >
121
113
< TabController . TabPage index = { 0 } >
122
- < Tab1 />
114
+ < Tab1 />
123
115
</ TabController . TabPage >
124
116
< TabController . TabPage index = { 1 } >
125
- < Tab2 />
117
+ < Tab2 />
126
118
</ 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 />
134
121
</ TabController . TabPage >
135
122
136
123
{ _ . map ( _ . takeRight ( TABS , TABS . length - 3 ) , ( title , index ) => {
@@ -147,14 +134,7 @@ class TabControllerScreen extends Component {
147
134
}
148
135
149
136
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 ;
158
138
return (
159
139
< View flex bg-grey70 >
160
140
< TabController
@@ -166,7 +146,7 @@ class TabControllerScreen extends Component {
166
146
>
167
147
< TabController . TabBar
168
148
// items={items}
169
- // key={key}
149
+ key = { key }
170
150
// uppercase
171
151
// indicatorStyle={{backgroundColor: 'green', height: 3}}
172
152
// labelColor={'green'}
@@ -188,22 +168,22 @@ class TabControllerScreen extends Component {
188
168
bg-green30 = { fewItems }
189
169
label = { fewItems ? 'Show Many Items' : 'Show Few Items' }
190
170
marginB-12
191
- size = " small"
171
+ size = { Button . sizes . small }
192
172
onPress = { this . toggleItemsCount }
193
173
/>
194
174
< Button
195
175
bg-grey20 = { ! asCarousel }
196
176
bg-green30 = { asCarousel }
197
177
label = { `Carousel : ${ asCarousel ? 'ON' : 'OFF' } ` }
198
178
marginB-12
199
- size = " small"
179
+ size = { Button . sizes . small }
200
180
onPress = { this . toggleCarouselMode }
201
181
/>
202
182
< Button
203
183
bg-grey20 = { ! centerSelected }
204
184
bg-green30 = { centerSelected }
205
185
label = { `centerSelected : ${ centerSelected ? 'ON' : 'OFF' } ` }
206
- size = " small"
186
+ size = { Button . sizes . small }
207
187
onPress = { this . toggleCenterSelected }
208
188
/>
209
189
</ View >
0 commit comments