started to work with new boost screen design

This commit is contained in:
u-e 2019-07-20 02:10:41 +03:00
parent 3b6dfba2f3
commit d90d7a3d74
6 changed files with 76 additions and 207 deletions

View File

@ -1,4 +0,0 @@
import BoostItemsList from './view/boostItemsListView';
export { BoostItemsList };
export default BoostItemsList;

View File

@ -1,53 +0,0 @@
import EStyleSheet from 'react-native-extended-stylesheet';
export default EStyleSheet.create({
pointText: {
color: '$primaryBlue',
fontSize: 26,
marginTop: 24,
justifyContent: 'center',
alignSelf: 'center',
fontWeight: 'bold',
},
priceText: {
color: '$editorButtonColor',
fontSize: 22,
marginTop: 24,
justifyContent: 'center',
alignSelf: 'center',
fontWeight: 'bold',
},
placeTitleText: {
color: '$primaryBlue',
paddingTop: 5,
fontSize: 15,
textAlign: 'center',
},
placeIcon: {
width: 30,
height: 30,
},
activeIconWrapper: {
backgroundColor: '$white',
},
slide: {
borderRadius: 6,
flex: 1,
shadowOpacity: 0.5,
shadowColor: '$shadowColor',
paddingBottom: 5,
shadowOffset: {
height: 3,
},
},
slideContainer: {
alignItems: 'center',
justifyContent: 'space-between',
width: '$deviceWidth / 2',
height: '$deviceHeight / 7',
padding: '5%',
},
slider: {
height: '$deviceHeight / 6',
},
});

View File

@ -1,94 +0,0 @@
import React, { Component } from 'react';
// External Component
import { Text, View, Image, Dimensions, TouchableOpacity } from 'react-native';
import Carousel from 'react-native-snap-carousel';
// Styles
import styles from './boostItemsListStyles';
/*
* Props Name Description Value
*@props --> selectedSlide selected slide index for casousel Number
*@props --> handleOnPlaceSelect when place selected its trigger Function
*@props --> selectedPlace selected place index for casousel Number
*
*/
const DEVICE_WIDTH = Dimensions.get('window').width;
class BoostItemsListView extends Component {
constructor(props) {
super(props);
this.state = {};
}
_renderPlaceListItem = ({ item }) => (
<TouchableOpacity
style={[styles.slide, { backgroundColor: item.color }]}
onPress={() => this._handleOnSlidePress(item)}
>
<View style={styles.slideContainer}>
<Text style={styles.pointText}>{item.name}</Text>
<View>
<Text style={styles.priceText}>{item.price}</Text>
</View>
</View>
</TouchableOpacity>
);
_handleOnSlidePress = item => {
const { items, navigateToRoom } = this.props;
const activeSlideIndex = this._carousel.currentIndex;
const isSelectedSlideCentered = items[activeSlideIndex] === item;
if (isSelectedSlideCentered) {
if (navigateToRoom) navigateToRoom(item);
} else {
const nextSlideIndex = items.findIndex(place => place === item);
const lastSlideIndex = items.length - 1;
if (
(activeSlideIndex === lastSlideIndex && nextSlideIndex === 0) ||
(activeSlideIndex === 0 && nextSlideIndex === lastSlideIndex)
) {
if (activeSlideIndex > nextSlideIndex) {
this._carousel.snapToNext();
} else {
this._carousel.snapToPrev();
}
} else if (activeSlideIndex > nextSlideIndex) {
this._carousel.snapToPrev();
} else {
this._carousel.snapToNext();
}
}
};
render() {
const { items, onSnapToItem } = this.props;
return (
<View>
<Carousel
ref={c => {
this._carousel = c;
}}
snapOnAndroid
firstItem={3}
showsHorizontalScrollIndicator={false}
data={items}
renderItem={this._renderPlaceListItem}
sliderWidth={DEVICE_WIDTH}
itemWidth={DEVICE_WIDTH / 2}
onSnapToItem={index => onSnapToItem(index)}
slideStyle={styles.slide}
containerCustomStyle={styles.slider}
inactiveSlideOpacity={1}
activeOpacity={1}
loop
/>
</View>
);
}
}
export default BoostItemsListView;

View File

@ -296,7 +296,7 @@
"next": "NEXT"
},
"boost": {
"title": "Boost",
"title": "Get eSteem Points",
"buy": "GET ESTM",
"next": "NEXT"
},

View File

@ -1,25 +1,28 @@
import React, { Component } from 'react';
import { injectIntl } from 'react-intl';
import { View, Text, ImageBackground } from 'react-native';
import { View, Text } from 'react-native';
// Components
import { BasicHeader } from '../../../components/basicHeader';
import { BoostItemsList } from '../../../components/boostItemsList';
import { MainButton } from '../../../components/mainButton';
import { Icon } from '../../../components/icon';
// Styles
import globalStyles from '../../../globalStyles';
import styles from './boostScreenStyles';
const SIDE_MENU_BACKGROUND = require('../../../assets/side_menu_background.png');
const BOOST_DATA = [
{ name: '100 ESTM', color: '#fff', price: '1$', description: 'For beginner users' },
{ name: '200 ESTM', color: '#fff', price: '2$', description: 'awesome point' },
{ name: '500 ESTM', color: '#fff', price: '5$', description: 'awesome point' },
{ name: '1000 ESTM', color: '#fff', price: '10$', description: 'awesome point' },
{ name: '5000 ESTM', color: '#fff', price: '50$', description: 'Most using' },
{ name: '10000 ESTM', color: '#fff', price: '100$', description: 'Popular choice' },
{
name: '10000 ESTM',
priceText: '100$',
price: 100,
description: 'BEST DEAL!',
},
{ name: '5000 ESTM', priceText: '50.00$', price: 50, description: 'POPULAR' },
{ name: '1000 ESTM', priceText: '10.00$', price: 10, description: '' },
{ name: '500 ESTM', priceText: '5.00$', price: 5, description: '' },
{ name: '200 ESTM', priceText: '2.00$', price: 2, description: '' },
{ name: '100 ESTM', priceText: '1.00$', price: 1, description: '' },
];
class BoostScreen extends Component {
@ -50,32 +53,38 @@ class BoostScreen extends Component {
id: 'boost.title',
})}
/>
<ImageBackground source={SIDE_MENU_BACKGROUND} style={styles.descriptionWrapper}>
<Text style={styles.title}>{BOOST_DATA[selectedBoost].name}</Text>
<Text style={styles.description}>{BOOST_DATA[selectedBoost].description}</Text>
</ImageBackground>
<View style={styles.wrapper}>
<BoostItemsList
items={BOOST_DATA}
handleOnPlaceSelect={item => console.log(item)}
selectedSlide={4}
onSnapToItem={item => this.setState({ selectedBoost: item })}
/>
</View>
<View style={styles.button}>
<MainButton
onPress={() => alert(selectedBoost)}
iconName="rocket"
iconType="MaterialCommunityIcons"
iconColor="white"
text={intl.formatMessage({
id: 'boost.buy',
})}
isDisable={false}
isLoading={false}
/>
</View>
{BOOST_DATA.map(item => (
<View style={styles.boostLine}>
{item.description && (
<View style={styles.descriptionWrapper}>
<Text>{item.description}</Text>
</View>
)}
<MainButton
style={styles.button}
onPress={() => alert(selectedBoost)}
height={50}
text={intl.formatMessage({
id: 'boost.buy',
})}
isDisable={false}
isLoading={false}
>
<View style={styles.buttonContent}>
<Text style={styles.buttonText}>{item.name}</Text>
<View style={styles.buttonIconWrapper}>
<Icon name="add" iconType="MaterialIcons" color="#357ce6" size={23} />
</View>
</View>
</MainButton>
<View style={styles.priceWrapper}>
<Text>{item.priceText}</Text>
</View>
</View>
))}
</View>
);
}

View File

@ -5,30 +5,41 @@ export default EStyleSheet.create({
flex: 1,
position: 'absolute',
top: '$deviceHeight / 3',
// backgroundColor: '$primaryBlue',
},
descriptionWrapper: {
height: '$deviceHeight / 3.5',
flexDirection: 'column',
boostLine: {
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
},
title: {
color: '$white',
fontSize: 26,
marginTop: 24,
justifyContent: 'center',
fontWeight: 'bold',
},
description: {
color: '$white',
fontSize: 18,
marginTop: 24,
justifyContent: 'center',
},
button: {
marginTop: 150,
marginVertical: 8,
marginVertical: 12,
alignSelf: 'center',
paddingHorizontal: 24,
paddingHorizontal: 18,
minWidth: '$deviceWidth / 2.4',
},
buttonContent: {
flexDirection: 'row',
},
buttonText: {
color: '$pureWhite',
fontSize: 14,
fontWeight: 'bold',
alignSelf: 'center',
width: 100,
},
buttonIconWrapper: {
backgroundColor: '$pureWhite',
borderRadius: 20,
width: 24,
height: 24,
},
priceWrapper: {
alignItems: 'center',
justifyContent: 'center',
alignSelf: 'center',
},
descriptionWrapper: {
backgroundColor: '#c10000',
width: '$deviceWidth / 3',
},
});