UNPKG

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
'use strict'; 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 };