Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import auth from '@react-native-firebase/auth';
- import React, {useContext, useState, useEffect, useRef} from 'react';
- import {Alert} from 'react-native';
- import {Snackbar} from 'react-native-paper';
- import {AccessToken, LoginManager} from 'react-native-fbsdk';
- import {UserContext} from '../../screens/Screen';
- import ProviderButton from '../components/ProviderButton';
- import {getProviderButtonTitle} from '../util/helpers';
- const PROVIDER_ID = 'facebook.com';
- function Facebook() {
- const [loading, setLoading] = useState(false);
- const [visible, setVisible] = useState(false);
- const isCancel = useRef(false);
- const user = useContext(UserContext);
- const {isOnlyProvider, title, variant} = getProviderButtonTitle(
- user,
- PROVIDER_ID,
- );
- useEffect(() => {
- handleFacebook();
- return () => {
- isCancel.current = true;
- };
- }, [handleFacebook]);
- function snackbar() {
- return (
- <Snackbar
- visible={visible}
- onDismiss={() => setVisible(false)}
- action={{label: 'OK', onPress: () => setVisible(false)}}>
- Login melalui Facebook dibatalkan
- </Snackbar>
- );
- }
- async function handleFacebook() {
- setLoading(true);
- try {
- if (variant === 'UNLINK') {
- await user.unlink(PROVIDER_ID);
- } else {
- const {isCancelled} = await LoginManager.logInWithPermissions([
- 'public_profile',
- ]);
- if (isCancelled) {
- setVisible(true);
- snackbar();
- } else {
- const result = await AccessToken.getCurrentAccessToken();
- if (!result) {
- throw new Error('No Access Token was returned from Facebook SDK.');
- }
- const {accessToken} = result;
- const credential = auth.FacebookAuthProvider.credential(accessToken);
- if (variant === 'LINK') {
- await user.linkWithCredential(credential);
- } else if (variant === 'SIGN_IN') {
- await auth().signInWithCredential(credential);
- }
- }
- }
- } catch (error) {
- Alert.alert('Facebook Auth Error', error.message);
- } finally {
- setLoading(false);
- }
- }
- if (isOnlyProvider) {
- return null;
- }
- return (
- <ProviderButton loading={loading} type="facebook" onPress={handleFacebook}>
- {title}
- </ProviderButton>
- );
- }
- export default Facebook;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement