Skip to content

Commit 6628685

Browse files
committed
fix issue with code leftover in TabController.TabBar of optimize prop
1 parent c13de69 commit 6628685

File tree

2 files changed

+66
-33
lines changed
  • demo/src/screens/componentScreens/TabControllerScreen
  • src/components/tabController

2 files changed

+66
-33
lines changed

demo/src/screens/componentScreens/TabControllerScreen/index.js

Lines changed: 66 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,37 @@
11
import React, {Component} from 'react';
22
import {ActivityIndicator} from 'react-native';
3-
import {TabController, Colors, View, Text, Image, Assets, Button} from 'react-native-ui-lib'; //eslint-disable-line
3+
import {
4+
TabController,
5+
Colors,
6+
View,
7+
Text,
8+
Button
9+
} from 'react-native-ui-lib'; //eslint-disable-line
410
import {gestureHandlerRootHOC} from 'react-native-gesture-handler';
511
import _ from 'lodash';
612

713
import Tab1 from './tab1';
814
import Tab2 from './tab2';
915
import Tab3 from './tab3';
1016

11-
const TABS = ['Home', 'Posts', 'Reviews', 'Videos', 'Photos', 'Events', 'About', 'Community', 'Groups', 'Offers'];
17+
const TABS = [
18+
'Home',
19+
'Posts',
20+
'Reviews',
21+
'Videos',
22+
'Photos',
23+
'Events',
24+
'About',
25+
'Community',
26+
'Groups',
27+
'Offers'
28+
];
1229

1330
class TabControllerScreen extends Component {
1431
state = {
1532
asCarousel: true,
1633
centerSelected: false,
34+
fewItems: false,
1735
selectedIndex: 0,
1836
items: _.chain(TABS)
1937
.map((tab) => ({label: tab, key: tab}))
@@ -39,10 +57,32 @@ class TabControllerScreen extends Component {
3957
const {tabsCount} = this.state;
4058

4159
if (tabsCount < 6) {
42-
this.setState({tabsCount: tabsCount + 1, key: Date.now(), selectedIndex: tabsCount});
60+
this.setState({
61+
tabsCount: tabsCount + 1,
62+
key: Date.now(),
63+
selectedIndex: tabsCount
64+
});
4365
}
4466
};
4567

68+
toggleItemsCount = () => {
69+
const {fewItems} = this.state;
70+
71+
let items;
72+
if (fewItems) {
73+
items = _.chain(TABS)
74+
.map((tab) => ({label: tab, key: tab}))
75+
.value();
76+
} else {
77+
items = _.chain(TABS)
78+
.take(3)
79+
.map((tab) => ({label: tab, key: tab}))
80+
.value();
81+
}
82+
83+
this.setState({fewItems: !fewItems, items, key: Date.now()});
84+
};
85+
4686
toggleCarouselMode = () => {
4787
this.setState({
4888
asCarousel: !this.state.asCarousel,
@@ -84,7 +124,12 @@ class TabControllerScreen extends Component {
84124
<TabController.TabPage index={1}>
85125
<Tab2/>
86126
</TabController.TabPage>
87-
<TabController.TabPage index={2} lazy lazyLoadTime={1500} renderLoading={this.renderLoadingPage}>
127+
<TabController.TabPage
128+
index={2}
129+
lazy
130+
lazyLoadTime={1500}
131+
renderLoading={this.renderLoadingPage}
132+
>
88133
<Tab3/>
89134
</TabController.TabPage>
90135

@@ -102,14 +147,21 @@ class TabControllerScreen extends Component {
102147
}
103148

104149
render() {
105-
const {key, selectedIndex, asCarousel, centerSelected, items} = this.state;
150+
const {
151+
key,
152+
selectedIndex,
153+
asCarousel,
154+
centerSelected,
155+
fewItems,
156+
items
157+
} = this.state;
106158
return (
107159
<View flex bg-grey70>
108160
<TabController
109161
key={key}
110162
asCarousel={asCarousel}
111163
selectedIndex={selectedIndex}
112-
onChangeIndex={this.onChangeIndex}
164+
onChangeIndex={this.onChangeIndex}
113165
items={items}
114166
>
115167
<TabController.TabBar
@@ -130,6 +182,14 @@ class TabControllerScreen extends Component {
130182
{this.renderTabPages()}
131183
</TabController>
132184
<View absB left margin-20 marginB-100 style={{zIndex: 1}}>
185+
<Button
186+
bg-green10={!fewItems}
187+
bg-green30={fewItems}
188+
label={fewItems ? 'Show Many Items' : 'Show Few Items'}
189+
marginB-12
190+
size="small"
191+
onPress={this.toggleItemsCount}
192+
/>
133193
<Button
134194
bg-grey20={!asCarousel}
135195
bg-green30={asCarousel}

src/components/tabController/TabBar.js

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,6 @@ class TabBar extends PureComponent {
141141
if ((props.items || this.children) && !context.items) {
142142
this.registerTabItems();
143143
}
144-
145-
if (this.items) {
146-
this.measureItems();
147-
}
148144
}
149145

150146
get containerWidth() {
@@ -190,29 +186,6 @@ class TabBar extends PureComponent {
190186
}
191187
}
192188

193-
measureItems = async () => {
194-
const {items: contextItems} = this.context;
195-
const {labelStyle, items: propsItems} = this.props;
196-
const items = contextItems || propsItems;
197-
const measuring = _.map(items, (item) => {
198-
return Typography.measureTextSize(item.label, labelStyle);
199-
});
200-
const results = await Promise.all(measuring);
201-
const widths = _.map(results, (item) => item.width + Spacings.s4 * 2);
202-
const offsets = [];
203-
_.forEach(widths, (width, index) => {
204-
if (index === 0) {
205-
offsets[index] = this.centerOffset;
206-
} else {
207-
offsets[index] = widths[index - 1] + offsets[index - 1];
208-
}
209-
});
210-
this._itemsWidths = widths;
211-
this._itemsOffsets = offsets;
212-
// TODO: consider saving this setState and ride registerTabItems setState
213-
this.setItemsLayouts();
214-
};
215-
216189
registerTabItems() {
217190
const {registerTabItems} = this.context;
218191
const {items} = this.props;

0 commit comments

Comments
 (0)