react-native-facebook-login
Version:
React Native wrapper for native iOS Facebook SDK login button and manager
176 lines (148 loc) • 3.69 kB
JavaScript
;
var React = require('react');
var ReactNative = require('react-native');
var PropTypes = require('prop-types');
var {
StyleSheet,
Image,
Text,
View,
} = ReactNative;
var FBLoginMock = require('./facebook/FBLoginMock.js');
var {FBLoginManager} = require('react-native-facebook-login');
var FB_PHOTO_WIDTH = 200;
var Login = React.createClass({
getInitialState: function(){
return {
user: null,
};
},
componentWillMount: function(){
this.updateView();
},
updateView: function(){
var _this = this;
FBLoginManager.getCredentials(function(error, data){
if (!error) {
_this.setState({ user : data.credentials });
} else {
_this.setState({ 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} /> }
<FBLoginMock style={{ marginBottom: 10, }}
onPress={function(){
console.log("FBLoginMock clicked.");
}}
onLogin={function(){
console.log("FBLoginMock logged in!");
_this.updateView();
}}
onLogout={function(){
console.log("FBLoginMock logged out.");
_this.setState({ user : null });
}}
/>
<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(){
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>
);
}
});
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;