react-native-facebook-login
Version:
React Native wrapper for native iOS Facebook SDK login button and manager
145 lines (128 loc) • 3.12 kB
JavaScript
'use strict';
var React = require('react');
var ReactNative = require('react-native');
var PropTypes = require('prop-types');
var {
StyleSheet,
Text,
Image,
View,
ViewPropTypes,
TouchableHighlight,
} = ReactNative;
var FBLoginManager = require('NativeModules').FBLoginManager;
const viewPropTypes = ViewPropTypes || View.propTypes;
var FBLoginMock = React.createClass({
propTypes: {
style: viewPropTypes.style,
onPress: PropTypes.func,
onLogin: PropTypes.func,
onLogout: PropTypes.func,
},
getInitialState: function(){
return {
user: null,
};
},
handleLogin: function(){
var _this = this;
FBLoginManager.login(function(error, data){
if (!error) {
_this.setState({ user : data});
_this.props.onLogin && _this.props.onLogin();
} else {
console.log(error, data);
}
});
},
handleLogout: function(){
var _this = this;
FBLoginManager.logout(function(error, data){
if (!error) {
_this.setState({ user : null});
_this.props.onLogout && _this.props.onLogout();
} else {
console.log(error, data);
}
});
},
onPress: function(){
this.state.user
? this.handleLogout()
: this.handleLogin();
this.props.onPress && this.props.onPress();
},
componentWillMount: function(){
var _this = this;
FBLoginManager.getCredentials(function(error, data){
if (!error) {
_this.setState({ user : data})
}
});
},
render: function() {
var text = this.state.user ? "Log out" : "Log in with Facebook";
return (
<View style={this.props.style}>
<TouchableHighlight
style={styles.container}
onPress={this.onPress}
>
<View style={styles.FBLoginButton}>
<Image style={styles.FBLogo} source={require('./images/FB-f-Logo__white_144.png')} />
<Text style={[styles.FBLoginButtonText, this.state.user ? styles.FBLoginButtonTextLoggedIn : styles.FBLoginButtonTextLoggedOut]}
numberOfLines={1}>{text}</Text>
</View>
</TouchableHighlight>
</View>
);
}
});
var styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
},
FBLoginButton: {
flex: 1,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
height: 30,
width: 175,
paddingLeft: 2,
backgroundColor: 'rgb(66,93,174)',
borderRadius: 3,
borderWidth: 1,
borderColor: 'rgb(66,93,174)',
shadowColor: "#000000",
shadowOpacity: 0.8,
shadowRadius: 2,
shadowOffset: {
height: 1,
width: 0
},
},
FBLoginButtonText: {
color: 'white',
fontWeight: '600',
fontFamily: 'Helvetica neue',
fontSize: 14.2,
},
FBLoginButtonTextLoggedIn: {
marginLeft: 5,
},
FBLoginButtonTextLoggedOut: {
marginLeft: 18,
},
FBLogo: {
position: 'absolute',
height: 14,
width: 14,
left: 7,
top: 7,
},
});
module.exports = FBLoginMock;