From 62d6fe2bca4bdd1a48cfe54e4c0c3fe590c3b750 Mon Sep 17 00:00:00 2001 From: Ashm Walia <40498934+ashmgarv@users.noreply.github.com> Date: Tue, 27 Oct 2020 17:36:03 -0700 Subject: [HOT FIX] Refactor to make things clean and make the app work (#82) * Refactored * Final refactor with an issue * It works * Whoops --- src/routes/authentication/AuthProvider.tsx | 67 ++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) (limited to 'src/routes/authentication') diff --git a/src/routes/authentication/AuthProvider.tsx b/src/routes/authentication/AuthProvider.tsx index 5bd4278d..68182ee3 100644 --- a/src/routes/authentication/AuthProvider.tsx +++ b/src/routes/authentication/AuthProvider.tsx @@ -7,12 +7,16 @@ import { loadProfileInfo, loadRecentlySearchedUsers, loadSocialPosts, + loadMoments, + loadFollowers, + loadFollowing, } from '../../services'; import { ProfilePreviewType, ProfileType, SocialAccountType, UserType, + MomentType, } from '../../types'; interface AuthContextProps { @@ -27,6 +31,11 @@ interface AuthContextProps { newMomentsAvailable: boolean; updateMoments: (value: boolean) => void; socialsNeedUpdate: (_: string[]) => void; + moments: MomentType[]; + followers: ProfilePreviewType[]; + following: ProfilePreviewType[]; + followersNeedUpdate: boolean; + updateFollowers: (value: boolean) => void; } const NO_USER: UserType = { @@ -58,6 +67,11 @@ export const AuthContext = createContext({ updateMoments: () => {}, socialAccounts: NO_SOCIAL_ACCOUNTS, socialsNeedUpdate: () => {}, + moments: [], + followers: [], + following: [], + followersNeedUpdate: true, + updateFollowers: () => {}, }); /** @@ -79,6 +93,10 @@ const AuthProvider: React.FC = ({children}) => { const [socialsNeedUpdate, setSocialsNeedUpdate] = useState([ ...INTEGRATED_SOCIAL_LIST, ]); + const [moments, setMoments] = useState>([]); + const [followers, setFollowers] = useState>([]); + const [following, setFollowing] = useState>([]); + const [followersNeedUpdate, setFollowersNeedUpdate] = useState(true); const {userId} = user; useEffect(() => { if (!userId) { @@ -103,6 +121,48 @@ const AuthProvider: React.FC = ({children}) => { loadData(); }, [userId]); + useEffect(() => { + const loadNewMoments = async () => { + try { + const token = await AsyncStorage.getItem('token'); + if (!token) { + setUser(NO_USER); + return; + } + const newMoments = await loadMoments(userId, token); + if (newMoments) { + setMoments(newMoments); + } + setNewMomentsAvailable(false); + } catch (error) { + console.log(error); + } + }; + if (newMomentsAvailable && userId) { + loadNewMoments(); + } + }, [newMomentsAvailable, userId, moments]); + + useEffect(() => { + const loadNewFollowers = async () => { + try { + const token = await AsyncStorage.getItem('token'); + if (!token) { + setUser(NO_USER); + return; + } + loadFollowers(userId, token, setFollowers); + loadFollowing(userId, token, setFollowing); + setFollowersNeedUpdate(false); + } catch (error) { + console.log(error); + } + }; + if (followersNeedUpdate && userId) { + loadNewFollowers(); + } + }, [followersNeedUpdate, userId, followers, following]); + useEffect(() => { if (socialsNeedUpdate.length > 0 && userId) { for (let social of socialsNeedUpdate) { @@ -125,6 +185,10 @@ const AuthProvider: React.FC = ({children}) => { cover, newMomentsAvailable, socialAccounts, + moments, + followers, + following, + followersNeedUpdate, login: (id, username) => { setUser({...user, userId: id, username}); }, @@ -146,6 +210,9 @@ const AuthProvider: React.FC = ({children}) => { socialsNeedUpdate: (socials: string[]) => { setSocialsNeedUpdate(socials); }, + updateFollowers: (value) => { + setFollowersNeedUpdate(value); + }, }}> {children} -- cgit v1.2.3-70-g09d2