diff options
Diffstat (limited to 'src/routes/viewProfile/ProfileProvider.tsx')
-rw-r--r-- | src/routes/viewProfile/ProfileProvider.tsx | 49 |
1 files changed, 37 insertions, 12 deletions
diff --git a/src/routes/viewProfile/ProfileProvider.tsx b/src/routes/viewProfile/ProfileProvider.tsx index 8fb9a011..a4b6cb14 100644 --- a/src/routes/viewProfile/ProfileProvider.tsx +++ b/src/routes/viewProfile/ProfileProvider.tsx @@ -1,14 +1,16 @@ -import React, {useEffect} from 'react'; -import {createContext, useState} from 'react'; import AsyncStorage from '@react-native-community/async-storage'; -import {UserType, ProfileType, InstagramPostType} from '../../types'; - +import React, {createContext, useEffect, useState} from 'react'; +import { + GET_IG_POSTS_ENDPOINT, + GET_TWITTER_POSTS_ENDPOINT, +} from '../../constants'; import { - loadProfileInfo, loadAvatar, loadCover, - loadInstaPosts, + loadProfileInfo, + loadSocialPosts, } from '../../services'; +import {ProfileType, SocialAccountType, UserType} from '../../types'; interface ProfileContextProps { user: UserType; @@ -16,9 +18,9 @@ interface ProfileContextProps { loadProfile: (userId: string, username: string) => void; avatar: string | null; cover: string | null; - instaPosts: Array<InstagramPostType>; newMomentsAvailable: boolean; updateMoments: (value: boolean) => void; + socialAccounts: Record<string, SocialAccountType>; } const NO_USER: UserType = { userId: '', @@ -29,15 +31,23 @@ const NO_PROFILE: ProfileType = { website: '', name: '', }; + +// Not necessary, but safer, in case SocialAccountType object is undefined +const NO_SOCIAL_ACCOUNTS: Record<string, SocialAccountType> = { + Instagram: {}, + Facebook: {}, + Twitter: {}, +}; + export const ProfileContext = createContext<ProfileContextProps>({ user: NO_USER, profile: NO_PROFILE, loadProfile: () => {}, avatar: null, cover: null, - instaPosts: [], newMomentsAvailable: true, updateMoments: () => {}, + socialAccounts: NO_SOCIAL_ACCOUNTS, }); /** @@ -48,9 +58,11 @@ const ProfileProvider: React.FC = ({children}) => { const [profile, setProfile] = useState<ProfileType>(NO_PROFILE); const [avatar, setAvatar] = useState<string | null>(null); const [cover, setCover] = useState<string | null>(null); - const [instaPosts, setInstaPosts] = useState<Array<InstagramPostType>>([]); const [newMomentsAvailable, setNewMomentsAvailable] = useState<boolean>(true); + const [socialAccounts, setSocialAccounts] = useState< + Record<string, SocialAccountType> + >(NO_SOCIAL_ACCOUNTS); const {userId} = user; useEffect(() => { if (!userId) { @@ -67,13 +79,26 @@ const ProfileProvider: React.FC = ({children}) => { loadProfileInfo(token, userId, setProfile); loadAvatar(token, userId, setAvatar); loadCover(token, userId, setCover); - loadInstaPosts(token, userId, setInstaPosts); + loadSocialPosts( + token, + userId, + 'Instagram', + GET_IG_POSTS_ENDPOINT, + socialAccounts, + ).then((newSocialAccounts) => setSocialAccounts(newSocialAccounts)); + loadSocialPosts( + token, + userId, + 'Twitter', + GET_TWITTER_POSTS_ENDPOINT, + socialAccounts, + ).then((newSocialAccounts) => setSocialAccounts(newSocialAccounts)); } catch (err) { console.log(err); } }; loadData(); - }, [userId]); + }, [socialAccounts, userId]); return ( <ProfileContext.Provider @@ -82,8 +107,8 @@ const ProfileProvider: React.FC = ({children}) => { profile, avatar, cover, - instaPosts, newMomentsAvailable, + socialAccounts, loadProfile: (id, username) => { setUser({...user, userId: id, username}); }, |