Skip to content

Commit 51aeb68

Browse files
committed
Fix layout profile
1 parent 7319111 commit 51aeb68

File tree

5 files changed

+160
-24
lines changed

5 files changed

+160
-24
lines changed

src/screens/Home.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ export default function HomeScreen() {
138138
const styles = StyleSheet.create({
139139
container: {
140140
flex: 1,
141+
backgroundColor: '#fff',
141142
},
142143
header: {
143144
paddingTop: 64,

src/screens/Message.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const styles = StyleSheet.create({
1414
flex: 1,
1515
alignItems: 'center',
1616
justifyContent: 'center',
17-
backgroundColor: 'transparent',
17+
// backgroundColor: 'transparent',
18+
backgroundColor: '#fff',
1819
},
1920
});

src/screens/Notification.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const styles = StyleSheet.create({
1414
flex: 1,
1515
alignItems: 'center',
1616
justifyContent: 'center',
17-
backgroundColor: 'transparent',
17+
// backgroundColor: 'transparent',
18+
backgroundColor: '#fff',
1819
},
1920
});

src/screens/Profile.js

Lines changed: 103 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,85 @@
1-
import React, {useContext} from 'react';
2-
import {Text, StyleSheet, View, TouchableOpacity} from 'react-native';
3-
import * as firebase from 'firebase';
1+
import React, {useContext, useEffect, useState} from 'react';
2+
import {Text, StyleSheet, View, TouchableOpacity, Image} from 'react-native';
3+
import firebase from 'firebase';
44

55
import {CTX} from '../tools/context';
66

77
export default function ProfileScreen() {
88
const authContext = useContext(CTX);
99
const {_logout} = authContext;
1010

11+
const [user, setUser] = useState(null);
12+
13+
useEffect(() => {
14+
profile();
15+
// unsubscribe();
16+
}, []);
17+
18+
// let unsubscribe = firebase
19+
// .firestore()
20+
// .collection('users')
21+
// .doc(_uid())
22+
// .onSnapshot(doc => {
23+
// console.log(doc.data());
24+
// setUser(doc.data());
25+
// });
26+
1127
function _onLogout() {
1228
// NOTE: context
13-
_logout();
29+
// _logout();
1430

1531
// NOTE: firebase
32+
// unsubscribe();
1633
firebase.auth().signOut();
1734
}
1835

36+
function profile() {
37+
firebase
38+
.firestore()
39+
.collection('users')
40+
.doc(_uid())
41+
.onSnapshot(doc => {
42+
// console.log(doc.data());
43+
setUser(doc.data());
44+
});
45+
}
46+
47+
function _uid() {
48+
return (firebase.auth().currentUser || {}).uid;
49+
}
50+
1951
return (
2052
<View style={styles.container}>
21-
<Text> Profile </Text>
53+
<View style={{marginTop: 64, alignItems: 'center'}}>
54+
<View style={styles.avatarContainer}>
55+
<Image
56+
source={
57+
// !user
58+
// ? {uri: user.avatar}
59+
// :
60+
require('../assets/avatar/image1.png')
61+
}
62+
style={styles.avatar}
63+
/>
64+
</View>
65+
<Text style={styles.name}>{user && user.fullName}</Text>
66+
</View>
67+
68+
<View style={styles.statsContainer}>
69+
<View style={styles.stat}>
70+
<Text style={styles.statAmount}>21</Text>
71+
<Text style={styles.statTitle}>Posts</Text>
72+
</View>
73+
<View style={styles.stat}>
74+
<Text style={styles.statAmount}>981</Text>
75+
<Text style={styles.statTitle}>Followers</Text>
76+
</View>
77+
<View style={styles.stat}>
78+
<Text style={styles.statAmount}>63</Text>
79+
<Text style={styles.statTitle}>Following</Text>
80+
</View>
81+
</View>
82+
2283
<TouchableOpacity onPress={_onLogout}>
2384
<Text>Log out</Text>
2485
</TouchableOpacity>
@@ -31,6 +92,42 @@ const styles = StyleSheet.create({
3192
flex: 1,
3293
alignItems: 'center',
3394
justifyContent: 'center',
34-
backgroundColor: 'transparent',
95+
// backgroundColor: 'transparent',
96+
backgroundColor: '#fff',
97+
},
98+
avatarContainer: {
99+
shadowColor: '#151734',
100+
shadowRadius: 30,
101+
shadowOpacity: 0.4,
102+
},
103+
avatar: {
104+
width: 136,
105+
height: 136,
106+
borderRadius: 68,
107+
},
108+
name: {
109+
marginTop: 24,
110+
fontSize: 16,
111+
fontWeight: '600',
112+
},
113+
statsContainer: {
114+
flexDirection: 'row',
115+
justifyContent: 'space-between',
116+
margin: 32,
117+
},
118+
stat: {
119+
alignItems: 'center',
120+
flex: 1,
121+
},
122+
statAmount: {
123+
color: '#4F566D',
124+
fontSize: 18,
125+
fontWeight: '300',
126+
},
127+
statTitle: {
128+
color: '#C3C5CD',
129+
fontSize: 12,
130+
fontWeight: '500',
131+
marginTop: 4,
35132
},
36133
});

src/screens/Register.js

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@ import {
55
View,
66
TextInput,
77
TouchableOpacity,
8+
Image,
89
} from 'react-native';
910
import {Formik} from 'formik';
1011
import SafeAreaView from 'react-native-safe-area-view';
11-
// import FontAwesome5 from 'react-native-vector-icons/FontAwesome5';
12+
import FontAwesome5 from 'react-native-vector-icons/FontAwesome5';
1213
import firebase from 'firebase';
1314
import {useNavigation} from '@react-navigation/native';
1415

1516
import RegisterSchema from '../validation/Register';
1617
import {primaryColor} from '../theme';
1718

18-
export default function RegisterScreen(props) {
19+
export default function RegisterScreen() {
1920
const navigation = useNavigation();
2021
const {navigate} = navigation;
2122

@@ -28,9 +29,16 @@ export default function RegisterScreen(props) {
2829
.auth()
2930
.createUserWithEmailAndPassword(email, password)
3031
.then(userCredentials => {
31-
return userCredentials.user.updateProfile({
32-
displayName: fullName,
33-
});
32+
const uid = userCredentials.user.uid;
33+
firebase
34+
.firestore()
35+
.collection('users')
36+
.doc(uid)
37+
.set({fullName, phone, email})
38+
.then(res => {
39+
setErrorMessage('');
40+
})
41+
.catch(error => setErrorMessage(error.message));
3442
})
3543
.catch(error => setErrorMessage(error.message));
3644

@@ -48,20 +56,33 @@ export default function RegisterScreen(props) {
4856
return (
4957
<SafeAreaView style={styles.container}>
5058
<Text style={styles.greeting}>Sign up to get started</Text>
51-
<View style={styles.errorMessage}>
52-
<Text style={styles.error}>{errorMessage}</Text>
53-
</View>
59+
60+
{/* <TouchableOpacity
61+
style={styles.back}
62+
onPress={() => navigation.goBack()}>
63+
<FontAwesome5
64+
name="chevron-left"
65+
size={32}
66+
color="#000000"></FontAwesome5>
67+
</TouchableOpacity> */}
68+
5469
{/* <View
5570
style={{
5671
// position: 'absolute',
5772
// top: 64,
5873
alignItems: 'center',
5974
width: '100%',
6075
}}>
61-
<TouchableOpacity style={styles.avatar}>
62-
<FontAwesome5 name={'heart'} size={24} />
76+
<TouchableOpacity style={styles.avatarPlaceholder}>
77+
<Image source={null} style={styles.avatar} />
78+
<FontAwesome5 name={'plus'} size={24} color="#FFF" />
6379
</TouchableOpacity>
6480
</View> */}
81+
82+
<View style={styles.errorMessage}>
83+
<Text style={styles.error}>{errorMessage}</Text>
84+
</View>
85+
6586
<Formik
6687
initialValues={{
6788
fullName: 'Trinh Chin Chin',
@@ -171,6 +192,12 @@ const styles = StyleSheet.create({
171192
justifyContent: 'center',
172193
marginHorizontal: 30,
173194
},
195+
error: {
196+
color: primaryColor,
197+
fontSize: 13,
198+
fontWeight: '600',
199+
textAlign: 'center',
200+
},
174201
form: {
175202
marginBottom: 48,
176203
marginHorizontal: 30,
@@ -187,12 +214,6 @@ const styles = StyleSheet.create({
187214
fontSize: 15,
188215
color: '#161F3D',
189216
},
190-
error: {
191-
color: primaryColor,
192-
fontSize: 13,
193-
fontWeight: '600',
194-
textAlign: 'center',
195-
},
196217
button: {
197218
marginHorizontal: 30,
198219
backgroundColor: primaryColor,
@@ -210,4 +231,19 @@ const styles = StyleSheet.create({
210231
fontSize: 13,
211232
fontWeight: '500',
212233
},
234+
avatarPlaceholder: {
235+
width: 100,
236+
height: 100,
237+
backgroundColor: '#E1E2E6',
238+
borderRadius: 50,
239+
marginTop: 48,
240+
justifyContent: 'center',
241+
alignItems: 'center',
242+
},
243+
avatar: {
244+
position: 'absolute',
245+
width: 100,
246+
height: 100,
247+
borderRadius: 50,
248+
},
213249
});

0 commit comments

Comments
 (0)