UNPKG

@vega/review-tool

Version:
164 lines (129 loc) 5.54 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _debounce2 = require('lodash/debounce'); var _debounce3 = _interopRequireDefault(_debounce2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _ReviewProcess = require('./styles/ReviewProcess.css'); var _ReviewProcess2 = _interopRequireDefault(_ReviewProcess); var _reactPropsStream = require('react-props-stream'); var _ArticleSnapshot = require('./ArticleSnapshot'); var _ArticleSnapshot2 = _interopRequireDefault(_ArticleSnapshot); var _operators = require('rxjs/operators'); var _rxjs = require('rxjs'); var _preview = require('part:@lyra/base/preview'); var _user = require('part:@vega/datastores/user'); var _withUserRoles = require('./withUserRoles'); var _ManageReviewProcess = require('./ManageReviewProcess'); var _ManageReviewProcess2 = _interopRequireDefault(_ManageReviewProcess); var _EditReviewItem = require('./EditReviewItem'); var _EditReviewItem2 = _interopRequireDefault(_EditReviewItem); var _observableWithQuery = require('../util/observableWithQuery'); var _observableWithQuery2 = _interopRequireDefault(_observableWithQuery); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getListenReviewItemQuery(currentUserId) { return `*[_type == "reviewItem" && reviewer._ref == "${currentUserId}" && !(_id in path('drafts.**'))][0] {...,reviewer->{_id,name},reviewProcess->{_id}}`; } function loadProps(props$) { const reviewProcessId$ = props$.pipe((0, _operators.map)(props => props.reviewProcessId), (0, _operators.distinctUntilChanged)()); const reviewProcess$ = reviewProcessId$.pipe((0, _operators.switchMap)(reviewProcessId => (0, _preview.observePaths)({ _id: reviewProcessId }, ['completedAt', 'article._id', 'articleSnapshot.title', 'articleSnapshot.abstract', 'articleSnapshot.content']))); const reviewItem$ = _user.currentUser$.pipe((0, _operators.switchMap)(currentUser => (0, _observableWithQuery2.default)(getListenReviewItemQuery(currentUser._id)))); return (0, _rxjs.combineLatest)(_user.currentUser$, reviewProcess$, reviewItem$, props$).pipe((0, _operators.map)(([currentUser, reviewProcess, reviewItem, props]) => { const matchingReviewItem = reviewProcess._id === reviewItem.reviewProcess._id ? reviewItem : null; return { currentUser, reviewProcess, reviewItem: matchingReviewItem, highlightedPointerKey: props.highlightedPointerKey }; })); } class ReviewProcess extends _react2.default.Component /*:: <*>*/ { constructor(...args) { var _temp; return _temp = super(...args), this.scrollPointerIntoView = (0, _debounce3.default)(highlightedPointerKey => { const elm = document.getElementById(highlightedPointerKey); if (elm) { window.requestAnimationFrame(() => { elm.scrollIntoView({ behavior: 'smooth', block: 'center' }); }); } }, 100), this.renderRole = roles => { var _props = this.props; const reviewProcess = _props.reviewProcess, currentUser = _props.currentUser, reviewItem = _props.reviewItem; if (roles.includes('admin')) { return _react2.default.createElement(_ManageReviewProcess2.default, { reviewProcess: reviewProcess }); } if (roles.includes('editor')) { return _react2.default.createElement(_ManageReviewProcess2.default, { reviewProcess: reviewProcess }); } if (roles.includes('reviewer')) { return _react2.default.createElement( 'div', null, _react2.default.createElement(_EditReviewItem2.default, { reviewItem: reviewItem, reviewer: currentUser, readOnly: Boolean(reviewItem.completedAt) }), Boolean(reviewItem.completedAt) && _react2.default.createElement( 'div', { className: _ReviewProcess2.default.thankYou }, _react2.default.createElement( 'h2', null, 'Review completed' ), _react2.default.createElement( 'p', null, 'Thank you for the review.' ) ) ); } return `Unknown role: ${roles}`; }, _temp; } componentDidUpdate() { const highlightedPointerKey = this.props.highlightedPointerKey; if (highlightedPointerKey) { this.scrollPointerIntoView(highlightedPointerKey); } } render() { var _props2 = this.props; const reviewProcess = _props2.reviewProcess, highlightedPointerKey = _props2.highlightedPointerKey; return _react2.default.createElement( 'div', { className: _ReviewProcess2.default.root }, _react2.default.createElement( 'div', { className: _ReviewProcess2.default.leftPane }, _react2.default.createElement(_ArticleSnapshot2.default, { snapshot: reviewProcess.articleSnapshot, highlightedPointerKey: highlightedPointerKey }) ), _react2.default.createElement( 'div', { className: _ReviewProcess2.default.rightPane }, _react2.default.createElement( _withUserRoles.WithUserRoles, { subjectType: 'article', subjectId: reviewProcess.article._id }, this.renderRole ) ) ); } } exports.default = (0, _reactPropsStream.withPropsStream)(loadProps, ReviewProcess);