From 52a3fe743e6122d157eaab3ad7bab0c70a96676b Mon Sep 17 00:00:00 2001
From: Ivan Chen <ivan@thetaggid.com>
Date: Thu, 22 Oct 2020 17:42:29 -0400
Subject: [TMA-242] Twitter and Facebook Tagg View (#63)

* modified the way we store social media data, initial skeleton

* MVP? Twitter done?

* cleaned up some things

* forgot to lint and cleaned up some more code

* minor change to text display

* fixed some UI bug, linting, and minor adjustment to posts UI

* fixed a couple of things

* added DateLabel, Facebook taggs view, fixed minor stuff

* Some small changes for the PR

* removed unused Feed

Co-authored-by: Ashm Walia <ashmwalia@outlook.com>
---
 src/routes/authentication/AuthProvider.tsx | 68 +++++++++++++++++++++++-------
 1 file changed, 52 insertions(+), 16 deletions(-)

(limited to 'src/routes/authentication/AuthProvider.tsx')

diff --git a/src/routes/authentication/AuthProvider.tsx b/src/routes/authentication/AuthProvider.tsx
index 8dd9fd73..a705f074 100644
--- a/src/routes/authentication/AuthProvider.tsx
+++ b/src/routes/authentication/AuthProvider.tsx
@@ -1,19 +1,23 @@
-import React, {useEffect} from 'react';
-import {createContext, useState} from 'react';
-import {
-  UserType,
-  ProfileType,
-  InstagramPostType,
-  ProfilePreviewType,
-} from '../../types';
 import AsyncStorage from '@react-native-community/async-storage';
+import React, {createContext, useEffect, useState} from 'react';
+import {
+  GET_FB_POSTS_ENDPOINT,
+  GET_IG_POSTS_ENDPOINT,
+  GET_TWITTER_POSTS_ENDPOINT,
+} from '../../constants';
 import {
-  loadProfileInfo,
   loadAvatar,
   loadCover,
-  loadInstaPosts,
+  loadProfileInfo,
   loadRecentlySearchedUsers,
+  loadSocialPosts,
 } from '../../services';
+import {
+  ProfilePreviewType,
+  ProfileType,
+  SocialAccountType,
+  UserType,
+} from '../../types';
 
 interface AuthContextProps {
   user: UserType;
@@ -22,20 +26,30 @@ interface AuthContextProps {
   logout: () => void;
   avatar: string | null;
   cover: string | null;
-  instaPosts: Array<InstagramPostType>;
+  socialAccounts: Record<string, SocialAccountType>;
   recentSearches: Array<ProfilePreviewType>;
   newMomentsAvailable: boolean;
   updateMoments: (value: boolean) => void;
 }
+
 const NO_USER: UserType = {
   userId: '',
   username: '',
 };
+
 const NO_PROFILE: ProfileType = {
   biography: '',
   website: '',
   name: '',
 };
+
+// Not necessary, but safer, in case SocialAccountType object is undefined
+const NO_SOCIAL_ACCOUNTS: Record<string, SocialAccountType> = {
+  Instagram: {},
+  Facebook: {},
+  Twitter: {},
+};
+
 export const AuthContext = createContext<AuthContextProps>({
   user: NO_USER,
   profile: NO_PROFILE,
@@ -43,7 +57,7 @@ export const AuthContext = createContext<AuthContextProps>({
   logout: () => {},
   avatar: null,
   cover: null,
-  instaPosts: [],
+  socialAccounts: NO_SOCIAL_ACCOUNTS,
   recentSearches: [],
   newMomentsAvailable: true,
   updateMoments: () => {},
@@ -57,7 +71,9 @@ const AuthProvider: 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 [socialAccounts, setSocialAccounts] = useState<
+    Record<string, SocialAccountType>
+  >(NO_SOCIAL_ACCOUNTS);
   const [recentSearches, setRecentSearches] = useState<
     Array<ProfilePreviewType>
   >([]);
@@ -78,14 +94,34 @@ const AuthProvider: React.FC = ({children}) => {
         loadProfileInfo(token, userId, setProfile);
         loadAvatar(token, userId, setAvatar);
         loadCover(token, userId, setCover);
-        loadInstaPosts(token, userId, setInstaPosts);
         loadRecentlySearchedUsers(setRecentSearches);
+        loadSocialPosts(
+          token,
+          userId,
+          'Instagram',
+          GET_IG_POSTS_ENDPOINT,
+          socialAccounts,
+        ).then((newSocialAccounts) => setSocialAccounts(newSocialAccounts));
+        loadSocialPosts(
+          token,
+          userId,
+          'Facebook',
+          GET_FB_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 (
     <AuthContext.Provider
@@ -94,8 +130,8 @@ const AuthProvider: React.FC = ({children}) => {
         profile,
         avatar,
         cover,
-        instaPosts,
         newMomentsAvailable,
+        socialAccounts,
         login: (id, username) => {
           setUser({...user, userId: id, username});
         },
-- 
cgit v1.2.3-70-g09d2

