@vega/review-tool
Version:
164 lines (129 loc) • 5.54 kB
JavaScript
;
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);