aboutsummaryrefslogtreecommitdiff
path: root/src/routes/authentication/AuthProvider.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/authentication/AuthProvider.tsx')
-rw-r--r--src/routes/authentication/AuthProvider.tsx315
1 files changed, 0 insertions, 315 deletions
diff --git a/src/routes/authentication/AuthProvider.tsx b/src/routes/authentication/AuthProvider.tsx
deleted file mode 100644
index 46f761e1..00000000
--- a/src/routes/authentication/AuthProvider.tsx
+++ /dev/null
@@ -1,315 +0,0 @@
-import AsyncStorage from '@react-native-community/async-storage';
-import React, {createContext, useEffect, useState} from 'react';
-import {INTEGRATED_SOCIAL_LIST} from '../../constants';
-import {
- loadAvatar,
- loadCover,
- loadFollowers,
- loadFollowing,
- loadMoments,
- loadProfileInfo,
- loadRecentlySearchedUsers,
- loadSocialPosts,
- getAllTaggUsers,
- loadBlockedUsers,
-} from '../../services';
-import {
- MomentType,
- ProfilePreviewType,
- ProfileType,
- SocialAccountType,
- UserType,
-} from '../../types';
-
-interface AuthContextProps {
- user: UserType;
- profile: ProfileType;
- login: (userId: string, username: string) => void;
- logout: () => void;
- avatar: string | null;
- cover: string | null;
- socialAccounts: Record<string, SocialAccountType>;
- recentSearches: Array<ProfilePreviewType>;
- taggUsers: Array<ProfilePreviewType>;
- newMomentsAvailable: boolean;
- updateMoments: (value: boolean) => void;
- socialsNeedUpdate: (_: string[]) => void;
- moments: MomentType[];
- followers: ProfilePreviewType[];
- following: ProfilePreviewType[];
- followersNeedUpdate: boolean;
- updateFollowers: (value: boolean) => void;
- blockedUsers: ProfilePreviewType[];
- blockedUsersNeedUpdate: boolean;
- updateBlockedUsers: (value: boolean) => void;
- isEditedProfile: boolean;
- updateIsEditedProfile: (value: boolean) => void;
-}
-
-const NO_USER: UserType = {
- userId: '',
- username: '',
-};
-
-const NO_PROFILE: ProfileType = {
- biography: '',
- website: '',
- name: '',
- gender: '',
- birthday: undefined,
-};
-
-const NO_SOCIAL_ACCOUNTS: Record<string, SocialAccountType> = {
- Instagram: {posts: []},
- Facebook: {posts: []},
- Twitter: {posts: []},
-};
-
-export const AuthContext = createContext<AuthContextProps>({
- user: NO_USER,
- profile: NO_PROFILE,
- login: () => {},
- logout: () => {},
- avatar: null,
- cover: null,
- recentSearches: [],
- taggUsers: [],
- newMomentsAvailable: true,
- updateMoments: () => {},
- socialAccounts: NO_SOCIAL_ACCOUNTS,
- socialsNeedUpdate: () => {},
- moments: [],
- followers: [],
- following: [],
- followersNeedUpdate: true,
- updateFollowers: () => {},
- blockedUsers: [],
- blockedUsersNeedUpdate: true,
- updateBlockedUsers: () => {},
- isEditedProfile: false,
- updateIsEditedProfile: () => {},
-});
-
-/**
- * Authentication provider for the application.
- */
-const AuthProvider: React.FC = ({children}) => {
- const [user, setUser] = useState<UserType>(NO_USER);
- const [profile, setProfile] = useState<ProfileType>(NO_PROFILE);
- const [avatar, setAvatar] = useState<string | null>(null);
- const [cover, setCover] = useState<string | null>(null);
- const [socialAccounts, setSocialAccounts] = useState<
- Record<string, SocialAccountType>
- >(NO_SOCIAL_ACCOUNTS);
- const [recentSearches, setRecentSearches] = useState<
- Array<ProfilePreviewType>
- >([]);
- const [taggUsers, setTaggUsers] = useState<Array<ProfilePreviewType>>([]);
- const [newMomentsAvailable, setNewMomentsAvailable] = useState<boolean>(true);
- // Default update all integrated social lists on start
- 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 [blockedUsers, setBlockedUsers] = useState<Array<ProfilePreviewType>>(
- [],
- );
- const [blockedUsersNeedUpdate, setBlockedUsersNeedUpdate] = useState<boolean>(
- true,
- );
- const [isEditedProfile, setIsEditedProfile] = useState<boolean>(false);
- 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;
- }
-
- const loadData = async () => {
- try {
- const token = await AsyncStorage.getItem('token');
- if (!token) {
- setUser(NO_USER);
- return;
- }
- loadProfileInfo(token, userId, setProfile);
- loadAvatar(token, userId, setAvatar);
- loadCover(token, userId, setCover);
- loadRecentlySearchedUsers(setRecentSearches);
- } catch (err) {
- console.log(err);
- }
- };
- loadData();
- }, [userId, isEditedProfile]);
-
- 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) => {
- socialAccounts[social] = accountData;
- setSocialAccounts(socialAccounts);
- console.log('Refreshed posts data:', social);
- });
- }
- setSocialsNeedUpdate([]);
- }
- }, [socialAccounts, socialsNeedUpdate, userId]);
-
- useEffect(() => {
- const loadNewBlockedUsers = async () => {
- try {
- const token = await AsyncStorage.getItem('token');
- if (!token) {
- setUser(NO_USER);
- return;
- }
- loadBlockedUsers(userId, token, setBlockedUsers);
- setBlockedUsersNeedUpdate(false);
- } catch (error) {
- console.log(error);
- }
- };
- if (blockedUsersNeedUpdate && userId) {
- loadNewBlockedUsers();
- }
- }, [
- setBlockedUsersNeedUpdate,
- blockedUsersNeedUpdate,
- userId,
- setBlockedUsers,
- ]);
-
- useEffect(() => {
- const loadTaggUsers = async () => {
- try {
- const token = await AsyncStorage.getItem('token');
- if (!token) {
- setUser(NO_USER);
- return;
- }
- await getAllTaggUsers(token, setTaggUsers);
- } catch (error) {
- console.log(error);
- }
- };
- loadTaggUsers();
- }, [userId]);
-
- return (
- <AuthContext.Provider
- value={{
- user,
- profile,
- avatar,
- cover,
- newMomentsAvailable,
- socialAccounts,
- moments,
- followers,
- following,
- followersNeedUpdate,
- blockedUsers,
- blockedUsersNeedUpdate,
- isEditedProfile,
- login: (id, username) => {
- setUser({...user, userId: id, username});
- },
- logout: () => {
- try {
- new Promise(() => {
- AsyncStorage.removeItem('token');
- AsyncStorage.removeItem('userId');
- AsyncStorage.removeItem('username');
- }).then(() => {
- setUser(NO_USER);
- });
- } catch (err) {
- console.log(err);
- }
- },
- recentSearches,
- taggUsers,
- updateMoments: (value) => {
- setNewMomentsAvailable(value);
- },
- socialsNeedUpdate: (socials: string[]) => {
- setSocialsNeedUpdate(socials);
- },
- updateFollowers: (value) => {
- setFollowersNeedUpdate(value);
- },
- updateBlockedUsers: (value) => {
- setBlockedUsersNeedUpdate(value);
- },
- updateIsEditedProfile: (value: boolean) => {
- setIsEditedProfile(value);
- },
- }}>
- {children}
- </AuthContext.Provider>
- );
-};
-
-export default AuthProvider;