UNPKG

@r3l/app

Version:
418 lines (336 loc) 14.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useCommunityAuth = useCommunityAuth; exports.useCreatePost = useCreatePost; exports.usePreview = usePreview; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _styled = require("../styled"); var _reactRedux = require("react-redux"); var _navigation = require("../navigation/navigation.actions"); var _post = require("../post/post.actions"); var _createPost = require("./createPost.actions"); var _community = require("../community/community.actions"); var _reactGa = _interopRequireDefault(require("react-ga")); var _utils = require("../../utils"); var _history = _interopRequireDefault(require("../navigation/history")); var _component = _interopRequireDefault(require("@loadable/component")); var _common = require("@r3l/common"); 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; } 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 || (0, _typeof2.default)(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; } var BoxLogin = (0, _component.default)({ resolved: {}, chunkName: function chunkName() { return "auth-web-login-web3"; }, isReady: function isReady(props) { var key = this.resolve(props); if (this.resolved[key] !== true) { return false; } if (typeof __webpack_modules__ !== 'undefined') { return !!__webpack_modules__[key]; } return false; }, importAsync: function importAsync() { return Promise.resolve().then(function () { return _interopRequireWildcard(require("../auth/web/login.web3")); }); }, requireAsync: function requireAsync(props) { var _this = this; var key = this.resolve(props); this.resolved[key] = false; return this.importAsync(props).then(function (resolved) { _this.resolved[key] = true; return resolved; }); }, requireSync: function requireSync(props) { var id = this.resolve(props); if (typeof __webpack_require__ !== 'undefined') { return __webpack_require__(id); } return eval('module.require')(id); }, resolve: function resolve() { if (require.resolveWeak) { return require.resolveWeak("../auth/web/login.web3"); } return eval('require.resolve')("../auth/web/login.web3"); } }); function useCommunityAuth() { var dispatch = (0, _reactRedux.useDispatch)(); var _useState = (0, _react.useState)(), _useState2 = (0, _slicedToArray2.default)(_useState, 2), authError = _useState2[0], setAuthError = _useState2[1]; var user = (0, _reactRedux.useSelector)(function (state) { return state.auth.user; }); var ethAddress = user && user.ethLogin; (0, _react.useEffect)(function () { var sendAuthRequtest = /*#__PURE__*/function () { var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { var err; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return dispatch((0, _community.checkAuth)()); case 2: err = _context.sent; err && setAuthError({ component: /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_styled.ErrorBox, { sx: { alignItems: 'flex-start' } }, /*#__PURE__*/_react.default.createElement(_styled.BodyText, null, err.message), !ethAddress && /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_styled.Box, { sx: { mt: 3 } }), /*#__PURE__*/_react.default.createElement(BoxLogin, { type: 'metamask', text: 'Connect your Ethereum Address' })))) }); case 4: case "end": return _context.stop(); } } }, _callee); })); return function sendAuthRequtest() { return _ref.apply(this, arguments); }; }(); sendAuthRequtest(); }, [dispatch, ethAddress]); return authError; } function useCreatePost(_ref2) { var close = _ref2.close, clearPost = _ref2.clearPost, setStatus = _ref2.setStatus; var community = (0, _reactRedux.useSelector)(function (state) { return state.auth.community; }); var dispatch = (0, _reactRedux.useDispatch)(); var createPost = /*#__PURE__*/function () { var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(postData) { var selectedTags, postUrl, urlPreview, edit, mentions, domain, channel, title, postBody, originalPost, image, validate, newPost, success, path; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: setStatus({ submitting: true, error: null }); selectedTags = postData.selectedTags, postUrl = postData.postUrl, urlPreview = postData.urlPreview, edit = postData.edit, mentions = postData.mentions, domain = postData.domain, channel = postData.channel, title = postData.title, postBody = postData.postBody, originalPost = postData.editPost; image = urlPreview ? urlPreview.image : null; _context2.prev = 3; validate = validateInput({ postBody: postBody, selectedTags: selectedTags, setStatus: setStatus }); if (!(validate !== true)) { _context2.next = 7; break; } throw new Error(validate); case 7: newPost = { url: postUrl || postUrl, tags: selectedTags, body: postBody, title: urlPreview ? urlPreview.title : title, description: urlPreview ? urlPreview.description : null, image: image, mentions: mentions, domain: domain, channel: channel }; if (!edit) { _context2.next = 15; break; } newPost = _objectSpread(_objectSpread({}, originalPost), newPost); _context2.next = 12; return dispatch((0, _post.editPost)(newPost)); case 12: success = _context2.sent; if (success) { clearPost(); _history.default.push(_history.default.location.pathname); if (close) close(); } return _context2.abrupt("return"); case 15: _context2.next = 17; return dispatch((0, _createPost.submitPost)(newPost)); case 17: newPost = _context2.sent; if (newPost) { _context2.next = 20; break; } throw new Error('Something went wrong... please try again'); case 20: close && close(); clearPost(); path = newPost.hidden ? 'spam' : 'new'; _history.default.push("/".concat(community, "/").concat(path, "/")); dispatch((0, _navigation.refreshTab)('discover')); _reactGa.default.event({ category: 'User', action: 'Created a Post' }); setStatus({ submitting: false, error: null }); _context2.next = 33; break; case 29: _context2.prev = 29; _context2.t0 = _context2["catch"](3); _utils.alert.browserAlerts.alert(_context2.t0.message); setStatus({ error: _context2.t0.message, submitting: false }); case 33: case "end": return _context2.stop(); } } }, _callee2, null, [[3, 29]]); })); return function createPost(_x) { return _ref3.apply(this, arguments); }; }(); return (0, _react.useCallback)(createPost, [community, dispatch, clearPost, close, setStatus]); } function validateInput(_ref4) { var postBody = _ref4.postBody, selectedTags = _ref4.selectedTags, setStatus = _ref4.setStatus; if (!selectedTags.length) { setStatus({ error: 'Please select at least one topic' }); return 'Please select at least one topic'; } if (!postBody || !postBody.trim().length) { setStatus({ error: 'Please write something' }); return 'Can not create empty post'; } return true; } function usePreview(setState) { var dispatch = (0, _reactRedux.useDispatch)(); var createPreview = /*#__PURE__*/function () { var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(_ref5) { var postUrl, postBody, preview, images, imageURL; return _regenerator.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: postUrl = _ref5.postUrl, postBody = _ref5.postBody; _context3.prev = 1; setState({ loadingPreview: true, urlPreview: { loading: true } }); if (!(0, _common.isImage)(postUrl)) { _context3.next = 5; break; } return _context3.abrupt("return", setState({ url: postUrl, loadingPreview: false, type: 'image', urlPreview: { url: postUrl, image: postUrl, title: 'Image', loading: false }, linkPreview: { url: postUrl, image: postUrl } })); case 5: _context3.next = 7; return dispatch((0, _createPost.generatePreviewServer)(postUrl)); case 7: preview = _context3.sent; if (!(!preview || !preview.url)) { _context3.next = 10; break; } throw new Error("Couldn't generate preview"); case 10: images = preview.image; imageURL = images && images.indexOf(', ') ? images.split(', ')[0] : images; setState({ domain: preview.domain, url: preview.url, loadingPreview: false, keywords: preview.keywords, postTags: preview.keywords, urlPreview: _objectSpread(_objectSpread({}, preview), {}, { image: imageURL, title: preview.title || 'Untitled', loading: false, tags: [] }), linkPreview: _objectSpread(_objectSpread({}, preview), {}, { image: imageURL }) }); _context3.next = 18; break; case 15: _context3.prev = 15; _context3.t0 = _context3["catch"](1); setState({ failedUrl: postUrl, loadingPreview: false, postBody: postBody }); case 18: case "end": return _context3.stop(); } } }, _callee3, null, [[1, 15]]); })); return function createPreview(_x2) { return _ref6.apply(this, arguments); }; }(); return createPreview; } //# sourceMappingURL=hooks.js.map