react-native-facebook-login-mock
Version:
React native facebook login that alows changing the login button's style.
207 lines (171 loc) • 8.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _reactNative = require('react-native');
var _reactNative2 = _interopRequireDefault(_reactNative);
var _util = require('./util');
var _style = require('./theme/style');
var _style2 = _interopRequireDefault(_style);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Icon = require('react-native-vector-icons/FontAwesome');
var FBLoginManager = _reactNative.NativeModules.FBLoginManager;
var FBLoginMock = function (_Component) {
_inherits(FBLoginMock, _Component);
function FBLoginMock(props) {
_classCallCheck(this, FBLoginMock);
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(FBLoginMock).call(this, props));
_this.willUnmountSoon = false;
_this.state = {
credentials: null,
subscriptions: []
};
return _this;
}
_createClass(FBLoginMock, [{
key: 'handleLogin',
value: function handleLogin() {
var _this2 = this;
(0, _util.login)(this.props.permissions || null).then(function (data) {
if (!_this2.willUnmountSoon) _this2.setState({ credentials: data.credentials });
})["catch"](function (err) {
if (!_this2.willUnmountSoon) _this2.setState({ credentials: null });
});
}
}, {
key: 'handleLogout',
value: function handleLogout() {
var _this3 = this;
(0, _util.logout)().then(function (data) {
if (!_this3.willUnmountSoon) _this3.setState({ credentials: null });
})["catch"](function (err) {
console.warn(err);
});
}
}, {
key: 'onPress',
value: function onPress() {
this.state.credentials ? this.handleLogout() : this.handleLogin();
this.props.onPress && this.props.onPress();
}
}, {
key: 'invokeHandler',
value: function invokeHandler(eventType, eventData) {
var eventHandler = this.props["on" + eventType];
if (typeof eventHandler === 'function') eventHandler(eventData);
}
}, {
key: 'componentWillMount',
value: function componentWillMount() {
var _this4 = this;
this.willUnmountSoon = false;
var subscriptions = this.state.subscriptions;
Object.keys(FBLoginManager.Events).forEach(function (eventType) {
var sub = _reactNative.DeviceEventEmitter.addListener(FBLoginManager.Events[eventType], _this4.invokeHandler.bind(_this4, eventType));
subscriptions.push(sub);
});
// Add listeners to state
this.setState({ subscriptions: subscriptions });
}
}, {
key: 'unSubscribeEvents',
value: function unSubscribeEvents(subscription) {
subscription.remove();
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
this.willUnmountSoon = true;
this.state.subscriptions.forEach(this.unSubscribeEvents);
}
}, {
key: 'componentDidMount',
value: function componentDidMount() {
var _this5 = this;
(0, _util.getFBCredentials)().then(function (data) {
_this5.setState({ credentials: data.credentials });
})["catch"](function (err) {
_this5.setState({ credentials: null });
console.log('Request failed: ', err);
});
}
}, {
key: 'prepareStyle',
value: function prepareStyle() {
var _props$style = this.props.style;
var style = _props$style === undefined ? {} : _props$style;
var FBLMText = style.FBLMText || _style2["default"].FBLMText;
var FBLMTextLoggedIn = style.FBLMTextLoggedIn || _style2["default"].FBLMTextLoggedIn;
var FBLMTextLoggedOut = style.FBLMTextLoggedOut || _style2["default"].FBLMTextLoggedOut;
return {
FBLMButton: style.FBLMButton || _style2["default"].FBLMButton,
FBLMButtonContent: style.FBLMButtonContent || _style2["default"].FBLMButtonContent,
FBLMIconWrap: style.FBLMIconWrap || _style2["default"].FBLMIconWrap,
FBLMIcon: style.FBLMIcon || _style2["default"].FBLMIcon,
FBLMTextWrap: style.FBLMTextWrap || _style2["default"].FBLMTextWrap,
FBLMText: [FBLMText, this.state.credentials ? FBLMTextLoggedIn : FBLMTextLoggedOut]
};
}
}, {
key: 'render',
value: function render() {
var _props = this.props;
var _props$loginText = _props.loginText;
var loginText = _props$loginText === undefined ? "Log in with Facebook" : _props$loginText;
var _props$logoutText = _props.logoutText;
var logoutText = _props$logoutText === undefined ? "Log out" : _props$logoutText;
var text = this.state.credentials ? logoutText : loginText;
var _prepareStyle = this.prepareStyle();
var FBLMButton = _prepareStyle.FBLMButton;
var FBLMButtonContent = _prepareStyle.FBLMButtonContent;
var FBLMIconWrap = _prepareStyle.FBLMIconWrap;
var FBLMIcon = _prepareStyle.FBLMIcon;
var FBLMTextWrap = _prepareStyle.FBLMTextWrap;
var FBLMText = _prepareStyle.FBLMText;
return _reactNative2["default"].createElement(
_reactNative.TouchableHighlight,
{ style: FBLMButton, onPress: this.onPress.bind(this) },
_reactNative2["default"].createElement(
_reactNative.View,
{ style: FBLMButtonContent },
_reactNative2["default"].createElement(
_reactNative.View,
{ style: FBLMIconWrap },
_reactNative2["default"].createElement(Icon, { name: 'facebook', style: FBLMIcon })
),
_reactNative2["default"].createElement(
_reactNative.View,
{ style: FBLMTextWrap },
_reactNative2["default"].createElement(
_reactNative.Text,
{ style: FBLMText, numberOfLines: 1 },
text
)
),
_reactNative2["default"].createElement(_reactNative.View, { style: FBLMIconWrap })
)
);
}
}]);
return FBLoginMock;
}(_reactNative.Component);
exports["default"] = FBLoginMock;
FBLoginMock.propTypes = {
style: _reactNative.PropTypes.object,
permissions: _reactNative.PropTypes.array, // default: ["public_profile", "email"],
loginText: _reactNative.PropTypes.string,
logoutText: _reactNative.PropTypes.string,
loginBehavior: _reactNative.PropTypes.number, // default: Native
onPress: _reactNative.PropTypes.func,
onLogin: _reactNative.PropTypes.func,
onLogout: _reactNative.PropTypes.func,
onLoginFound: _reactNative.PropTypes.func,
onLoginNotFound: _reactNative.PropTypes.func,
onError: _reactNative.PropTypes.func,
onCancel: _reactNative.PropTypes.func,
onPermissionsMissing: _reactNative.PropTypes.func
};