Advertisement
panjiggm

handleFacebook

Dec 10th, 2019
699
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import auth from '@react-native-firebase/auth';
  2. import React, {useContext, useState, useEffect, useRef} from 'react';
  3. import {Alert} from 'react-native';
  4. import {Snackbar} from 'react-native-paper';
  5. import {AccessToken, LoginManager} from 'react-native-fbsdk';
  6. import {UserContext} from '../../screens/Screen';
  7. import ProviderButton from '../components/ProviderButton';
  8. import {getProviderButtonTitle} from '../util/helpers';
  9.  
  10. const PROVIDER_ID = 'facebook.com';
  11.  
  12. function Facebook() {
  13.   const [loading, setLoading] = useState(false);
  14.   const [visible, setVisible] = useState(false);
  15.   const isCancel = useRef(false);
  16.   const user = useContext(UserContext);
  17.  
  18.   const {isOnlyProvider, title, variant} = getProviderButtonTitle(
  19.     user,
  20.     PROVIDER_ID,
  21.   );
  22.  
  23.   useEffect(() => {
  24.     handleFacebook();
  25.  
  26.     return () => {
  27.       isCancel.current = true;
  28.     };
  29.   }, [handleFacebook]);
  30.  
  31.   function snackbar() {
  32.     return (
  33.       <Snackbar
  34.         visible={visible}
  35.         onDismiss={() => setVisible(false)}
  36.         action={{label: 'OK', onPress: () => setVisible(false)}}>
  37.         Login melalui Facebook dibatalkan
  38.       </Snackbar>
  39.     );
  40.   }
  41.  
  42.   async function handleFacebook() {
  43.     setLoading(true);
  44.  
  45.     try {
  46.       if (variant === 'UNLINK') {
  47.         await user.unlink(PROVIDER_ID);
  48.       } else {
  49.         const {isCancelled} = await LoginManager.logInWithPermissions([
  50.           'public_profile',
  51.         ]);
  52.  
  53.         if (isCancelled) {
  54.           setVisible(true);
  55.           snackbar();
  56.         } else {
  57.           const result = await AccessToken.getCurrentAccessToken();
  58.           if (!result) {
  59.             throw new Error('No Access Token was returned from Facebook SDK.');
  60.           }
  61.  
  62.           const {accessToken} = result;
  63.  
  64.           const credential = auth.FacebookAuthProvider.credential(accessToken);
  65.  
  66.           if (variant === 'LINK') {
  67.             await user.linkWithCredential(credential);
  68.           } else if (variant === 'SIGN_IN') {
  69.             await auth().signInWithCredential(credential);
  70.           }
  71.         }
  72.       }
  73.     } catch (error) {
  74.       Alert.alert('Facebook Auth Error', error.message);
  75.     } finally {
  76.       setLoading(false);
  77.     }
  78.   }
  79.  
  80.   if (isOnlyProvider) {
  81.     return null;
  82.   }
  83.  
  84.   return (
  85.     <ProviderButton loading={loading} type="facebook" onPress={handleFacebook}>
  86.       {title}
  87.     </ProviderButton>
  88.   );
  89. }
  90.  
  91. export default Facebook;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement