UNPKG

react-native-facebook-login

Version:

React Native wrapper for native iOS Facebook SDK login button and manager

189 lines (162 loc) 4.22 kB
'use strict'; var React = require('react'); var ReactNative = require('react-native'); var PropTypes = require('prop-types'); var { StyleSheet, Image, Text, View, } = ReactNative; var {FBLogin, FBLoginManager} = require('react-native-facebook-login'); var FBLoginMock = require('./facebook/FBLoginMock.js'); var FB_PHOTO_WIDTH = 200; var Login = React.createClass({ getInitialState: function(){ return { user: null, }; }, render: function() { var _this = this; var user = this.state.user; return ( <View style={styles.loginContainer}> { user && <Photo user={user} /> } { user && <Info user={user} /> } <FBLogin style={{ marginBottom: 10, }} permissions={["email","user_friends"]} onLogin={function(data){ console.log("Logged in!"); console.log(data); _this.setState({ user : data.credentials }); }} onLogout={function(){ console.log("Logged out."); _this.setState({ user : null }); }} onLoginFound={function(data){ console.log("Existing login found."); console.log(data); _this.setState({ user : data.credentials }); }} onLoginNotFound={function(){ console.log("No user logged in."); _this.setState({ user : null }); }} onError={function(data){ console.log("ERROR"); console.log(data); }} onCancel={function(){ console.log("User cancelled."); }} onPermissionsMissing={function(data){ console.log("Check permissions!"); console.log(data); }} /> <Text>{ user ? user.token : "N/A" }</Text> </View> ); } }); var Photo = React.createClass({ propTypes: { user: PropTypes.shape({}).isRequired, }, getInitialState: function(){ return { photo: null, }; }, componentWillMount: function(){ var _this = this; var user = this.props.user; var api = `https://graph.facebook.com/v2.3/${user.userId}/picture?width=${FB_PHOTO_WIDTH}&redirect=false&access_token=${user.token}`; fetch(api) .then((response) => response.json()) .then((responseData) => { _this.setState({ photo : { url : responseData.data.url, height: responseData.data.height, width: responseData.data.width, }, }); }) .done(); }, render: function(){ if(this.state.photo == null) return this.renderLoading(); var photo = this.state.photo; return ( <View style={styles.bottomBump}> <Image style={photo && { height: photo.height, width: photo.width, } } source={{uri: photo && photo.url}} /> </View> ); }, renderLoading: function(){ return ( <View> <Text>Loading...</Text> </View> ); } }); var Info = React.createClass({ propTypes: { user: PropTypes.shape({}).isRequired, }, getInitialState: function(){ return { info: null, }; }, componentWillMount: function(){ var _this = this; var user = this.props.user; var api = `https://graph.facebook.com/v2.3/${user.userId}?fields=name,email&access_token=${user.token}`; fetch(api) .then((response) => response.json()) .then((responseData) => { _this.setState({ info : { name : responseData.name, email: responseData.email, }, }); }) .done(); }, render: function(){ var info = this.state.info; return ( <View style={styles.bottomBump}> <Text>{ info && this.props.user.userId }</Text> <Text>{ info && info.name }</Text> <Text>{ info && info.email }</Text> </View> ); } }); var styles = StyleSheet.create({ loginContainer: { marginTop: 150, flex: 1, alignItems: 'center', justifyContent: 'center', }, bottomBump: { marginBottom: 15, }, }); module.exports = Login;