Advertisement
Guest User

Untitled

a guest
Mar 12th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { LOGIN_START, LOGIN_SUCCESS, LOGIN_ERROR, LOGIN_UNCHECK, ROOT_PROVIDERS } from './ActionTypes';
  2. import { AsyncStorage } from 'react-native';
  3. import request from '../net/Fetch';
  4. import Constants from '../utils/Constants';
  5. import { NavigationAction } from '../navigators/NavigatorService';
  6. import { saveCategories, getCategories, saveRechargeProviders, clearTables, getProviders } from '../db/DatabaseHelper';
  7. import { ImageCacheManager } from 'react-native-cached-image';
  8.  
  9. export const loginStart = pin => {
  10.   return async (dispatch, getState) => {
  11.     const { loading } = getState();
  12.     if (loading) return;
  13.     dispatch({ type: LOGIN_START });
  14.  
  15.     try {
  16.       const body = {
  17.         Pin: pin,
  18.         AppVersion: ''
  19.       };
  20.  
  21.       const response = await request(`${Constants.baseUrl}User/Login`, body);
  22.       const responseStatus = await response.status;
  23.       LOG(responseStatus);
  24.       const responseBody = await response.json();
  25.  
  26.       LOG(responseBody);
  27.  
  28.       if (responseStatus === 200) {
  29.         await AsyncStorage.setItem('@TopUpStore:Token', responseBody.Token);
  30.         await AsyncStorage.setItem(
  31.           '@TopUpStore:UserGuid',
  32.           responseBody.UserGuid
  33.         );
  34.         await AsyncStorage.setItem('@TopUpStore:Login', responseBody.Login);
  35.         await AsyncStorage.setItem(
  36.           '@TopUpStore:ExpiredAt',
  37.           responseBody.ExpiredAt + ''
  38.         );
  39.         await AsyncStorage.setItem(
  40.           '@TopUpStore:TuaCode',
  41.           (responseBody.TuaCode = '')
  42.         );
  43.  
  44.         await checkProviders(responseBody.Version, dispatch);
  45.         const providers = await providersToStore();
  46.  
  47.         dispatch({
  48.           type: ROOT_PROVIDERS,
  49.           payload: { providers }
  50.         });
  51.  
  52.         dispatch({
  53.           type: LOGIN_SUCCESS,
  54.           payload: {}
  55.         });
  56.  
  57.         dispatch(NavigationAction('Tabs'));
  58.       }
  59.     } catch (error) {
  60.       LOG(error);
  61.       dispatch({
  62.         type: LOGIN_ERROR,
  63.         payload: `Failed to login with ${error}`
  64.       });
  65.     }
  66.   };
  67. };
  68.  
  69. export const uncheckClearPin = () => {
  70.   return dispatch => {
  71.     dispatch({ type: LOGIN_UNCHECK });
  72.   };
  73. };
  74.  
  75. const checkProviders = async (version) => {
  76.   const categories = await getCategories();
  77.   const ver = version + '';
  78.   const localVersion = await AsyncStorage.getItem('@TopUpStore:Version');
  79.  
  80.   if (categories.length <= 0 || localVersion === null || ver !== localVersion || __DEV__) {
  81.     await AsyncStorage.setItem('@TopUpStore:Version', ver);
  82.     ImageCacheManager()
  83.       .clearCache()
  84.       .then();
  85.     await clearTables();
  86.     await loadProviders();
  87.     await loadRechargeProviders();
  88.   }
  89. };
  90.  
  91. const loadProviders = async () => {
  92.   const response = await request(
  93.     `${Constants.baseUrl}Provider/ListWithFullInfo`,
  94.     {},
  95.     {},
  96.     'GET'
  97.   );
  98.   const responseStatus = await response.status;
  99.  
  100.   if (responseStatus === 200) {
  101.     const responseBody = await response.json();
  102.  
  103.     await saveCategories(responseBody);
  104.   }
  105. };
  106.  
  107. const loadRechargeProviders = async () => {
  108.   const response = await request(`${Constants.baseUrl}Provider/RechargeProviders`);
  109.   const responseStatus = await response.status;
  110.   if (responseStatus === 200) {
  111.     const responseBody = await response.json();
  112.  
  113.     await saveRechargeProviders(responseBody);
  114.   }
  115. };
  116.  
  117. const providersToStore = async() => {
  118.   let providers = {};
  119.   const providersFromDb = await getProviders();
  120.   providersFromDb.forEach(provider => {
  121.     providers[provider.Id] = {Name: provider.Name, IconCircle: provider.IconCircle};
  122.   });
  123.   return providers;
  124. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement