aboutsummaryrefslogtreecommitdiff
path: root/src/routes/authentication/AuthProvider.tsx
diff options
context:
space:
mode:
authorAshm Walia <40498934+ashmgarv@users.noreply.github.com>2020-10-27 17:36:03 -0700
committerGitHub <noreply@github.com>2020-10-27 20:36:03 -0400
commit62d6fe2bca4bdd1a48cfe54e4c0c3fe590c3b750 (patch)
tree3afb2c723a10a2649c298e226bc31e10cec92d5a /src/routes/authentication/AuthProvider.tsx
parent795ba089207571ec13226f2d07c149c8697763ce (diff)
[HOT FIX] Refactor to make things clean and make the app work (#82)
* Refactored * Final refactor with an issue * It works * Whoops
Diffstat (limited to 'src/routes/authentication/AuthProvider.tsx')
-rw-r--r--src/routes/authentication/AuthProvider.tsx67
1 files changed, 67 insertions, 0 deletions
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<AuthContextProps>({
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<string[]>([
...INTEGRATED_SOCIAL_LIST,
]);
+ const [moments, setMoments] = useState<Array<MomentType>>([]);
+ const [followers, setFollowers] = useState<Array<ProfilePreviewType>>([]);
+ const [following, setFollowing] = useState<Array<ProfilePreviewType>>([]);
+ const [followersNeedUpdate, setFollowersNeedUpdate] = useState<boolean>(true);
const {userId} = user;
useEffect(() => {
if (!userId) {
@@ -104,6 +122,48 @@ const AuthProvider: React.FC = ({children}) => {
}, [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) {
loadSocialPosts(userId, social).then((accountData) => {
@@ -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}
</AuthContext.Provider>