//Abstracted common profile api calls out here import AsyncStorage from '@react-native-community/async-storage'; import {Alert} from 'react-native'; import RNFetchBlob from 'rn-fetch-blob'; import {SocialAccountType, MomentType} from 'src/types'; import { AVATAR_PHOTO_ENDPOINT, COVER_PHOTO_ENDPOINT, GET_FB_POSTS_ENDPOINT, GET_IG_POSTS_ENDPOINT, GET_TWITTER_POSTS_ENDPOINT, PROFILE_INFO_ENDPOINT, MOMENTS_ENDPOINT, } from '../constants'; export const loadProfileInfo = async ( token: string, userId: string, callback: Function, ) => { try { const response = await fetch(PROFILE_INFO_ENDPOINT + `${userId}/`, { method: 'GET', headers: { Authorization: 'Token ' + token, }, }); const status = response.status; if (status === 200) { const info = await response.json(); let {name, biography, website} = info; callback({name, biography, website}); } } catch (error) { Alert.alert( 'Something went wrong! 😭', "Would you believe me if I told you that I don't know what happened?", ); } }; export const loadAvatar = async ( token: string, userId: string, callback: Function, ) => { try { const response = await RNFetchBlob.config({ fileCache: true, appendExt: 'jpg', }).fetch('GET', AVATAR_PHOTO_ENDPOINT + `${userId}/`, { Authorization: 'Token ' + token, }); const status = response.info().status; if (status === 200) { callback(response.path()); } else { callback(''); } } catch (error) { console.log(error); } }; export const loadCover = async ( token: string, userId: string, callback: Function, ) => { try { let response = await RNFetchBlob.config({ fileCache: true, appendExt: 'jpg', }).fetch('GET', COVER_PHOTO_ENDPOINT + `${userId}/`, { Authorization: 'Token ' + token, }); const status = response.info().status; if (status === 200) { callback(response.path()); } else { callback(''); } } catch (error) { console.log(error); } }; const integratedSocialPostsEndpoints: {[social: string]: string} = { Facebook: GET_FB_POSTS_ENDPOINT, Instagram: GET_IG_POSTS_ENDPOINT, Twitter: GET_TWITTER_POSTS_ENDPOINT, }; export const loadSocialPosts: ( userId: string, socialType: string, ) => Promise = async (userId, socialType) => { const token = await AsyncStorage.getItem('token'); const endpoint = integratedSocialPostsEndpoints[socialType]; const accountData: SocialAccountType = {}; accountData.posts = []; try { const response = await fetch(endpoint + `${userId}/`, { method: 'GET', headers: { Authorization: 'Token ' + token, }, }); if (response.status === 200) { const body = await response.json(); accountData.handle = body.handle; accountData.posts = body.posts; accountData.profile_pic = body.profile_pic; } else { throw 'Unable to fetch posts data from ' + socialType; } } catch (error) { console.log(error); } return accountData; }; export const loadMoments: ( userId: string, token: string, ) => Promise = async (userId, token) => { let moments: MomentType[] = []; try { const response = await fetch(MOMENTS_ENDPOINT + '?user_id=' + userId, { method: 'GET', headers: { Authorization: 'Token ' + token, }, }); const status = response.status; if (status === 200) { const data = await response.json(); moments = data; } else { console.log('Could not load moments!'); return []; } } catch (err) { console.log(err); return []; } return moments; }; export const loadRecentlySearchedUsers = async (callback: Function) => { try { const asyncCache = await AsyncStorage.getItem('@recently_searched_users'); asyncCache != null ? callback(JSON.parse(asyncCache)) : null; } catch (e) { console.log(e); } };