aboutsummaryrefslogtreecommitdiff
path: root/src/services/UserProfileService.ts
blob: 59f9649a9148d756b044e19399a71cf4fb22c5e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//Abstracted common profile api calls out here

import {Alert} from 'react-native';
import {
  PROFILE_INFO_ENDPOINT,
  AVATAR_PHOTO_ENDPOINT,
  COVER_PHOTO_ENDPOINT,
  GET_IG_POSTS_ENDPOINT,
  GET_TWITTER_POSTS_ENDPOINT,
} from '../constants';

import AsyncStorage from '@react-native-community/async-storage';
import RNFetchBlob from 'rn-fetch-blob';
import {SocialAccountType} from 'src/types';

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);
  }
};

export const loadSocialPosts = async (
  token: string,
  userId: string,
  socialType: string,
  endpoint: string,
  socialAccounts: Record<string, SocialAccountType>,
) => {
  try {
    const response = await fetch(endpoint + `${userId}/`, {
      method: 'GET',
      headers: {
        Authorization: 'Token ' + token,
      },
    });
    if (response.status === 200) {
      const body = await response.json();
      socialAccounts[socialType].handle = body.handle;
      socialAccounts[socialType].posts = body.posts;
      socialAccounts[socialType].profile_pic = body.profile_pic;
    } else {
      throw new Error(await response.json());
    }
  } catch (error) {
    console.log(error);
  }
  return socialAccounts;
};

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);
  }
};