diff --git a/assets/fonts/SF-UI-Text-Bold.otf b/assets/fonts/SF-UI-Text-Bold.otf new file mode 100644 index 0000000..949a2b1 Binary files /dev/null and b/assets/fonts/SF-UI-Text-Bold.otf differ diff --git a/assets/fonts/SF-UI-Text-Regular.otf b/assets/fonts/SF-UI-Text-Regular.otf new file mode 100644 index 0000000..4505e38 Binary files /dev/null and b/assets/fonts/SF-UI-Text-Regular.otf differ diff --git a/assets/profile_screen/img1.png b/assets/profile_screen/img1.png new file mode 100644 index 0000000..fcbe59c Binary files /dev/null and b/assets/profile_screen/img1.png differ diff --git a/assets/profile_screen/img2.png b/assets/profile_screen/img2.png new file mode 100644 index 0000000..a4d42a8 Binary files /dev/null and b/assets/profile_screen/img2.png differ diff --git a/assets/profile_screen/img3.png b/assets/profile_screen/img3.png new file mode 100644 index 0000000..2c8204e Binary files /dev/null and b/assets/profile_screen/img3.png differ diff --git a/assets/profile_screen/img4.png b/assets/profile_screen/img4.png new file mode 100644 index 0000000..978bf25 Binary files /dev/null and b/assets/profile_screen/img4.png differ diff --git a/assets/profile_screen/img5.png b/assets/profile_screen/img5.png new file mode 100644 index 0000000..ed518cc Binary files /dev/null and b/assets/profile_screen/img5.png differ diff --git a/routes.js b/routes.js index 0efa63d..c0eca22 100644 --- a/routes.js +++ b/routes.js @@ -19,6 +19,8 @@ import Presentation from './src/screens/Presentation'; import Dashboard from './src/screens/Dashboard'; import Register from './src/screens/Register'; import Grid from './src/screens/Grid'; +import SocialProfile from './src/screens/SocialProfile'; + import theme from './src/theme'; import { Block, Icon, Text } from './src'; @@ -152,6 +154,13 @@ const screens = { drawerIcon: props => , }, }, + SocialProfile: { + screen: SocialProfile, + navigationOptions: { + drawerLabel: 'Social Profile', + drawerIcon: props => , + } + }, }; const options = { diff --git a/src/screens/SocialProfile.js b/src/screens/SocialProfile.js new file mode 100644 index 0000000..4936827 --- /dev/null +++ b/src/screens/SocialProfile.js @@ -0,0 +1,372 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { + Dimensions, StyleSheet, ScrollView, Platform, Image, ActivityIndicator, Alert, +} from 'react-native'; +import { Font, LinearGradient } from 'expo'; +// galio components +import { + Button, Block, Icon, Text, NavBar, Card, +} from 'galio-framework'; +import theme from '../theme'; + +const BASE_SIZE = theme.SIZES.BASE; +const GRADIENT_GREY = ['#f3f3f3', '#ffffff']; +const GRADIENT_CRIMSON = ['#f96332', '#fe2472']; +const COLOR_WHITE = theme.COLORS.WHITE; +const COLOR_GREY = theme.COLORS.MUTED; +const COLOR_DARK_GREY = '#444444'; +const FONT_REGULAR = 'SFUIText-Regular'; +const FONT_BOLD = 'SFUIText-Bold'; +const { width } = Dimensions.get('screen'); + + +const imageOne = require('../../assets/profile_screen/img1.png'); +const imageTwo = require('../../assets/profile_screen/img2.png'); +const imageThree = require('../../assets/profile_screen/img3.png'); +const imageFour = require('../../assets/profile_screen/img4.png'); +const imageFive = require('../../assets/profile_screen/img5.png'); + +// F O N T S +const SF_UI_REGULAR = require('../../assets/fonts/SF-UI-Text-Regular.otf'); +const SF_UI_BOLD = require('../../assets/fonts/SF-UI-Text-Bold.otf'); + +const grids = [ + { + id: 1, + image: imageOne, + }, + { + id: 2, + image: imageTwo, + }, + { + id: 3, + image: imageThree, + }, + { + id: 4, + image: imageFour, + }, + { + id: 5, + image: imageFive, + }, +]; + + +class SocialProfile extends React.Component { + state = { + fontsLoaded: false, + } + + async componentDidMount() { + await Font.loadAsync({ + 'SFUIText-Regular': SF_UI_REGULAR, + 'SFUIText-Bold': SF_UI_BOLD, + }); + this.setState({ fontsLoaded: true }); + } + + renderHeader = navigation => ( + Alert.alert('Like it!')} + /> + )} + titleStyle={styles.titleStyle} + leftIconColor={COLOR_GREY} + onLeftPress={() => navigation.goBack()} + style={Platform.OS === 'android' ? { marginTop: BASE_SIZE } : null} + /> + ); + + renderBio = () => ( + + + + + + + + + + + Julie Andrew + + Hey there, I'm a UI designer from Paris. + + + + ); + + renderLevel = () => ( + + + 100 + Photos + + + 30 + Articles + + + 4K + Followers + + + ); + + renderPhotos = () => ( + + + Photos + View more + + + { + grids.map((grid, index) => ( + + + + )) + } + + + + + + ); + + renderArticles = () => ( + + + Articles + View more + + + + + + ); + + render() { + const { fontsLoaded } = this.state; + const { navigation } = this.props; + // S H O W - L O A D E R - W H E N - F O N T - I S - L O A D I N G + if (!fontsLoaded) { + return ( + + + + ); + } + // E L S E - S H O W - T H E - S C R E E N + return ( + + {/* G R E D I E N T - B A C K G R O U N D */} + + {/* H E A D E R */} + {this.renderHeader(navigation)} + + + + {/* R E N D E R - M A I N - C O N T E N T S */} + {this.renderBio()} + + {this.renderLevel()} + + {this.renderPhotos()} + + {this.renderArticles()} + + + + ); + } +} + +SocialProfile.propTypes = { + navigation: PropTypes.object.isRequired, +}; +const styles = StyleSheet.create({ + backgroundGradient: { + position: 'absolute', + top: 0, + bottom: 0, + right: 0, + left: 0, + zIndex: 0, + }, + titleStyle: { + fontFamily: FONT_REGULAR, + lineHeight: 16, + }, + container: { + paddingHorizontal: theme.SIZES.BASE, + }, + bioContainer: { + marginBottom: 30, + paddingHorizontal: 8, + }, + bioAvatarWrap: { + height: 55, + width: 55, + borderRadius: BASE_SIZE * 3.25, + shadowColor: 'rgb(0,0,0)', + shadowOffset: { width: 0, height: 10 }, + shadowOpacity: 0.3, + shadowRadius: -3, + elevation: 27, + overflow: 'hidden', + }, + bioAvatar: { + height: '100%', + width: '100%', + }, + bioButton: { + height: 32, + overflow: 'hidden', + shadowColor: 'rgb(0,0,0)', + shadowOffset: { width: 0, height: 13 }, + shadowOpacity: 0.1, + shadowRadius: -8, + elevation: 11, + width: 102, + }, + buttonTextStyle: { + fontFamily: FONT_REGULAR, + lineHeight: 19, + }, + bioInnerContainer: { + marginTop: 16, + }, + bioHeading: { + fontFamily: FONT_BOLD, + fontSize: 36, + lineHeight: 43, + marginBottom: 7, + }, + bioParagraph: { + fontFamily: FONT_REGULAR, + fontSize: 14, + lineHeight: 16, + }, + levelCard: { + alignItems: 'center', + borderWidth: 0, + borderColor: 'transparent', + backgroundColor: COLOR_WHITE, + paddingTop: 17, + paddingBottom: 12, + marginBottom: 37, + shadowColor: 'rgba(0,0,0, 0.1)', + shadowOffset: { width: 0, height: 10 }, + shadowOpacity: 0.1, + shadowRadius: -1, + elevation: 34, + }, + levelHeading: { + fontFamily: FONT_REGULAR, + fontSize: 16, + lineHeight: 19, + marginBottom: 6, + }, + levelParagraph: { + fontFamily: FONT_REGULAR, + fontSize: 12, + lineHeight: 14, + }, + headingWrapper: { + paddingHorizontal: 7, + marginBottom: 11, + }, + leftHeading: { + fontFamily: FONT_REGULAR, + fontSize: 16, + lineHeight: 19, + }, + rightParagraph: { + fontFamily: FONT_REGULAR, + fontSize: 12, + lineHeight: 14, + }, + column: { + height: width * 0.28, + marginBottom: 15, + width: width * 0.28, + }, + fullSize: { + borderWidth: 0, + height: '100%', + padding: 0, + width: '100%', + }, + crimsonGradient: { + alignItems: 'center', + borderRadius: 3, + flexDirection: 'row', + height: '100%', + justifyContent: 'center', + position: 'absolute', + top: 0, + left: 0, + right: 0, + bottom: 0, + width: '100%', + }, +}); + +export default SocialProfile;