UNPKG

@r3l/app

Version:
384 lines (304 loc) 14.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.ShareStack = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _reactNativeWeb = require("react-native-web"); var _propTypes = _interopRequireDefault(require("prop-types")); var _redux = require("redux"); var _reactRedux = require("react-redux"); var _reactNativeShareExtension = _interopRequireDefault(require("react-native-share-extension")); var _reactNativeExitApp = _interopRequireDefault(require("react-native-exit-app")); var createPostActions = _interopRequireWildcard(require("../../createPost/createPost.actions")); var navigationActions = _interopRequireWildcard(require("../../navigation/navigation.actions")); var authActions = _interopRequireWildcard(require("../../auth/auth.actions")); var postActions = _interopRequireWildcard(require("../../post/post.actions")); var communityActions = _interopRequireWildcard(require("../../community/community.actions")); var _auth2 = _interopRequireDefault(require("../../auth/mobile/auth.component")); var _reactNavigation = require("react-navigation"); var _reactNavigationStack = require("react-navigation-stack"); var _url = _interopRequireDefault(require("../../createPost/mobile/url.component")); var _categories = _interopRequireDefault(require("../../createPost/mobile/categories.component")); var _headerLeft = _interopRequireDefault(require("../../navigation/mobile/headerLeft.component")); var _createPostHeaderRight = _interopRequireDefault(require("../../createPost/mobile/createPostHeaderRight.component")); var _headerTitle = _interopRequireDefault(require("../../navigation/mobile/headerTitle.component")); var _nav = require("../../../utils/nav"); var _utils = require("../../../utils"); var _global = require("../../../styles/global"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } // Nasty hack because for some reason Dimensions.get('window') returns 0,0 var fullWidth = _reactNativeWeb.Dimensions.get('screen').width; var fullHeight = _reactNativeWeb.Dimensions.get('screen').height; // Modal animation depends on getting the width of the screen _reactNativeWeb.Dimensions.get = function () { return { width: fullWidth, height: fullHeight }; }; var Modal = require('react-native-modalbox').default; var style; var ShareStack = (0, _reactNavigationStack.createStackNavigator)({ createPostUrl: { screen: (0, _nav.withProps)(_url.default), params: { title: 'Share On Relevant', left: 'Close', next: 'Next', share: true } }, createPostTags: { screen: (0, _nav.withProps)(_categories.default), params: { title: 'Post Category', share: true } }, shareAuth: { screen: (0, _nav.withProps)(_auth2.default), params: { left: 'Close', share: true } } }, { initialRouteName: 'createPostUrl', defaultNavigationOptions: function defaultNavigationOptions(props) { return _objectSpread({ headerLayoutPreset: 'center', cardShadowEnabled: true, cardOverlayEnabled: true, gestureEnabled: true, gestureResponseDistance: { horizontal: fullWidth }, headerStyle: { elevation: 0, shadowOpacity: 0, borderBottomColor: _global.darkGrey, borderBottomWidth: _reactNativeWeb.StyleSheet.hairlineWidth, height: 45 }, headerTitle: /*#__PURE__*/_react.default.createElement(_headerTitle.default, props), headerRight: /*#__PURE__*/_react.default.createElement(_createPostHeaderRight.default, props), headerLeft: /*#__PURE__*/_react.default.createElement(_headerLeft.default, props) }, _reactNavigationStack.TransitionPresets.SlideFromRightIOS); } }); exports.ShareStack = ShareStack; var ShareAppContainer = (0, _reactNavigation.createAppContainer)(ShareStack); var ShareContainer = /*#__PURE__*/function (_Component) { (0, _inherits2.default)(ShareContainer, _Component); var _super = _createSuper(ShareContainer); function ShareContainer(props, context) { var _this; (0, _classCallCheck2.default)(this, ShareContainer); _this = _super.call(this, props, context); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", { token: null }); _this.state = { isOpen: true, type: '', value: '', data: {} }; _this.closeModal = _this.closeModal.bind((0, _assertThisInitialized2.default)(_this)); _reactNativeWeb.AppState.addEventListener('change', _this.handleAppStateChange.bind((0, _assertThisInitialized2.default)(_this))); return _this; } (0, _createClass2.default)(ShareContainer, [{ key: "componentDidMount", value: function () { var _componentDidMount = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { var community, token, actions, resp, auth, _actions, data, url, words; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.prev = 0; community = 'relevant'; this.props.actions.setCommunity(community); _context.next = 5; return _utils.storage.getToken(); case 5: token = _context.sent; this.setState({ token: token }); if (!token) this.props.actions.replace('shareAuth'); actions = this.props.actions; _context.next = 11; return this.props.actions.getUser(); case 11: resp = _context.sent; auth = this.props.auth; if (!(resp && auth && auth.user && auth.user.community)) { _context.next = 17; break; } _context.next = 16; return actions.getCommunities(); case 16: actions.setCommunity(auth.user.community); case 17: _context.next = 21; break; case 19: _context.prev = 19; _context.t0 = _context["catch"](0); case 21: _context.prev = 21; _actions = this.props.actions; _context.next = 25; return _reactNativeShareExtension.default.data(); case 25: data = _context.sent; this.data = data; this.setState({ type: data.type, value: data.value, data: data }); url = data.url || data.value; if (url) { words = _utils.text.getWords(url); url = words.find(function (word) { return _utils.post.URL_REGEX.test(word); }); } _actions.setCreatePostState({ postUrl: url || null, postBody: data.selection || !url ? data.value : '', createPreview: {} }); _context.next = 35; break; case 33: _context.prev = 33; _context.t1 = _context["catch"](21); case 35: case "end": return _context.stop(); } } }, _callee, this, [[0, 19], [21, 33]]); })); function componentDidMount() { return _componentDidMount.apply(this, arguments); } return componentDidMount; }() }, { key: "handleAppStateChange", value: function handleAppStateChange(currentAppState) { var _this2 = this; if (currentAppState === 'extension' && !this.state.token) { _utils.storage.getToken().then(function (tk) { _this2.setState({ token: tk }); if (tk) _this2.props.actions.replace('createPostUrl'); }); } } }, { key: "onClose", value: function onClose() { _reactNativeShareExtension.default.close(); // Share extension fails to exit the React app, so if you try to open it two times in a row it fails _reactNativeExitApp.default.exitApp(); } }, { key: "closeModal", value: function closeModal() { this.setState({ isOpen: false }); } }, { key: "render", value: function render() { return /*#__PURE__*/_react.default.createElement(Modal, { backdrop: true, style: { backgroundColor: 'transparent', flex: 1 }, coverScreen: true, keyboardTopOffset: 0, swipeToClose: false, position: "top", entry: "bottom", isOpen: this.state.isOpen, onClosed: this.onClose }, /*#__PURE__*/_react.default.createElement(_reactNativeWeb.KeyboardAvoidingView, { behavior: 'padding', style: { alignItems: 'center', flex: 1, maxHeight: fullHeight * 0.9 } }, /*#__PURE__*/_react.default.createElement(_reactNativeWeb.View, { style: style.modalBody }, /*#__PURE__*/_react.default.createElement(ShareAppContainer, { ref: function ref(navigatorRef) { (0, _nav.setTopLevelNavigator)(navigatorRef); }, screenProps: { close: this.closeModal, share: true } })))); } }]); return ShareContainer; }(_react.Component); (0, _defineProperty2.default)(ShareContainer, "propTypes", { actions: _propTypes.default.object, auth: _propTypes.default.object }); style = _reactNativeWeb.StyleSheet.create({ modalBody: { borderRadius: 10, backgroundColor: 'white', flexGrow: 1, flex: 1, width: fullWidth * 0.95, marginTop: fullHeight * 0.05, marginBottom: 30, padding: 0, overflow: 'hidden', paddingBottom: 0 } }); function mapStateToProps(store) { return { auth: store.auth, community: store.community }; } function mapDispatchToProps(dispatch) { return { actions: (0, _redux.bindActionCreators)(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, authActions), postActions), navigationActions), createPostActions), communityActions), dispatch) }; } var _default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(ShareContainer); exports.default = _default; //# sourceMappingURL=share.container.js.map