react-native-facebook-login
Version:
React Native wrapper for native iOS Facebook SDK login button and manager
189 lines (162 loc) • 4.22 kB
JavaScript
;
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;