diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/routes/authentication/AuthProvider.tsx | 27 | ||||
-rw-r--r-- | src/screens/onboarding/Login.tsx | 23 |
2 files changed, 35 insertions, 15 deletions
diff --git a/src/routes/authentication/AuthProvider.tsx b/src/routes/authentication/AuthProvider.tsx index 55a6f3ad..383b4d5b 100644 --- a/src/routes/authentication/AuthProvider.tsx +++ b/src/routes/authentication/AuthProvider.tsx @@ -4,19 +4,19 @@ import {INTEGRATED_SOCIAL_LIST} from '../../constants'; import { loadAvatar, loadCover, + loadFollowers, + loadFollowing, + loadMoments, loadProfileInfo, loadRecentlySearchedUsers, loadSocialPosts, - loadMoments, - loadFollowers, - loadFollowing, } from '../../services'; import { + MomentType, ProfilePreviewType, ProfileType, SocialAccountType, UserType, - MomentType, } from '../../types'; interface AuthContextProps { @@ -98,6 +98,23 @@ const AuthProvider: React.FC = ({children}) => { const [following, setFollowing] = useState<Array<ProfilePreviewType>>([]); const [followersNeedUpdate, setFollowersNeedUpdate] = useState<boolean>(true); const {userId} = user; + + useEffect(() => { + const loadUserInfoFromStorage = async () => { + const [id, username, token] = await Promise.all([ + AsyncStorage.getItem('userId'), + AsyncStorage.getItem('username'), + AsyncStorage.getItem('token'), + ]); + if (id && username && token) { + setUser({...user, userId: id, username}); + } + }; + if (user === NO_USER) { + loadUserInfoFromStorage(); + } + }, [user]); + useEffect(() => { if (!userId) { return; @@ -196,6 +213,8 @@ const AuthProvider: React.FC = ({children}) => { try { new Promise(() => { AsyncStorage.removeItem('token'); + AsyncStorage.removeItem('userId'); + AsyncStorage.removeItem('username'); }).then(() => { setUser(NO_USER); }); diff --git a/src/screens/onboarding/Login.tsx b/src/screens/onboarding/Login.tsx index 8ff7ebc2..3fe857cd 100644 --- a/src/screens/onboarding/Login.tsx +++ b/src/screens/onboarding/Login.tsx @@ -1,23 +1,22 @@ -import React, {useRef, useState} from 'react'; +import AsyncStorage from '@react-native-community/async-storage'; import {RouteProp} from '@react-navigation/native'; import {StackNavigationProp} from '@react-navigation/stack'; +import React, {useRef, useState} from 'react'; import { - View, - Text, Alert, - StatusBar, Image, - TouchableOpacity, - StyleSheet, KeyboardAvoidingView, Platform, + StatusBar, + StyleSheet, + Text, + TouchableOpacity, + View, } from 'react-native'; - -import {OnboardingStackParams} from '../../routes/onboarding'; +import {Background, SubmitButton, TaggInput} from '../../components'; +import {LOGIN_ENDPOINT, usernameRegex} from '../../constants'; import {AuthContext} from '../../routes/authentication'; -import {Background, TaggInput, SubmitButton} from '../../components'; -import {usernameRegex, LOGIN_ENDPOINT} from '../../constants'; -import AsyncStorage from '@react-native-community/async-storage'; +import {OnboardingStackParams} from '../../routes/onboarding'; import {UserType} from '../../types'; type VerificationScreenRouteProp = RouteProp<OnboardingStackParams, 'Login'>; @@ -137,6 +136,8 @@ const Login: React.FC<LoginProps> = ({navigation}: LoginProps) => { //Stores token received in the response into client's AsynStorage try { await AsyncStorage.setItem('token', data.token); + await AsyncStorage.setItem('userId', data.UserID); + await AsyncStorage.setItem('username', username); login(data.UserID, username); } catch (err) { setUser(NO_USER); |