UNPKG

@vega/review-tool

Version:
284 lines (253 loc) 8.69 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _isEmpty2 = require('lodash/isEmpty'); var _isEmpty3 = _interopRequireDefault(_isEmpty2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _rxjs = require('rxjs'); var _operators = require('rxjs/operators'); var _dateFns = require('date-fns'); var _ReviewProcessList = require('./styles/ReviewProcessList.css'); var _ReviewProcessList2 = _interopRequireDefault(_ReviewProcessList); var _reactPropsStream = require('react-props-stream'); var _user = require('part:@vega/datastores/user'); var _client = require('part:@lyra/base/client'); var _client2 = _interopRequireDefault(_client); var _router = require('part:@vega/core/router'); var _ReviewProcess = require('./ReviewProcess'); var _ReviewProcess2 = _interopRequireDefault(_ReviewProcess); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const reviewItemQuery = userId => { return `*[_type == "reviewItem" && reviewer._ref == "${userId}"][0]{...}`; }; function loadProps() { const reviewProcesses$ = _client2.default.observable.fetch(`*[_type == "reviewProcess" && !(_id in path('drafts.**'))]|order(_createdAt desc)[0..1000]{ ..., article->{_id,title}, "reviewItems": *[_type=="reviewItem" && !(_id in path('drafts.**')) && references(^._id)] }`); const reviewItem$ = _user.currentUser$.pipe((0, _operators.filter)(Boolean), (0, _operators.switchMap)(user => _client2.default.observable.fetch(reviewItemQuery(user._id)))); return (0, _rxjs.combineLatest)([_user.currentUser$, reviewProcesses$, reviewItem$]).pipe((0, _operators.map)(([user, reviewProcesses, reviewItem]) => { return { user, reviewProcesses, reviewItem: (0, _isEmpty3.default)(reviewItem) ? null : reviewItem }; })); } function processStartTime(reviewProcess) { return `${(0, _dateFns.distanceInWordsToNow)(new Date(reviewProcess._createdAt))} ago`; } /*:: type Props = { user: any, reviewProcesses: any, reviewItem: any }*/ class ReviewProcessList extends _react2.default.PureComponent /*:: <Props>*/ { getCompletedProcesses() { return this.props.reviewProcesses.filter(reviewProcess => !!reviewProcess.completedAt); } getOngoingProcesses() { return this.props.reviewProcesses.filter(reviewProcess => !reviewProcess.completedAt); } render() { var _props = this.props; const user = _props.user, reviewItem = _props.reviewItem; const ongoingProcesses = this.getOngoingProcesses(); const completedProcesses = this.getCompletedProcesses(); return _react2.default.createElement( 'div', { className: _ReviewProcessList2.default.root }, reviewItem && _react2.default.createElement(_ReviewProcess2.default, { reviewProcessId: reviewItem.reviewProcess._ref }), !reviewItem && _react2.default.createElement( 'div', null, _react2.default.createElement( 'h2', null, 'Reviews' ), _react2.default.createElement( 'h4', null, 'Hello, ', user.name ), _react2.default.createElement( 'table', { className: _ReviewProcessList2.default.reviewProcessTable }, _react2.default.createElement( 'tbody', null, _react2.default.createElement( 'caption', null, 'Ongoing' ), _react2.default.createElement( 'tr', null, _react2.default.createElement('th', null), _react2.default.createElement( 'th', null, 'Started' ), _react2.default.createElement( 'th', null, 'Invited' ), _react2.default.createElement( 'th', null, 'Accepted Reviews' ), _react2.default.createElement( 'th', null, 'Completed Reviews' ), _react2.default.createElement('th', null) ), ongoingProcesses.map(reviewProcess => { const reviewItems = reviewProcess.reviewItems || []; return _react2.default.createElement( 'tr', { key: reviewProcess.article._id }, _react2.default.createElement( 'td', null, reviewProcess.article.title ), _react2.default.createElement( 'td', null, processStartTime(reviewProcess) ), _react2.default.createElement( 'td', null, reviewItems.length ), _react2.default.createElement( 'td', null, reviewItems.filter(item => item.acceptState === 'accepted').length ), _react2.default.createElement( 'td', null, reviewItems.filter(item => item.completedAt).length ), _react2.default.createElement( 'td', null, _react2.default.createElement( _router.IntentLink, { intent: 'edit', params: { type: 'reviewProcess', id: reviewProcess._id } }, 'Open' ) ) ); }) ), _react2.default.createElement( 'tbody', null, _react2.default.createElement( 'caption', null, 'Completed' ), _react2.default.createElement( 'tr', null, _react2.default.createElement('th', null), _react2.default.createElement( 'th', null, 'Completed' ), _react2.default.createElement( 'th', null, 'Invited' ), _react2.default.createElement( 'th', null, 'Final Decision' ), _react2.default.createElement( 'th', null, 'Completed Reviews' ), _react2.default.createElement('th', null) ), completedProcesses.map(reviewProcess => { const reviewItems = reviewProcess.reviewItems || []; return _react2.default.createElement( 'tr', { key: reviewProcess.article._id }, _react2.default.createElement( 'td', null, reviewProcess.article.title ), _react2.default.createElement( 'td', null, (0, _dateFns.distanceInWordsToNow)(new Date(reviewProcess.completedAt)), ' ', 'ago' ), _react2.default.createElement( 'td', null, reviewItems.length ), _react2.default.createElement( 'td', null, reviewProcess.decision ), _react2.default.createElement( 'td', null, reviewItems.filter(item => item.recommendation).length ), _react2.default.createElement( 'td', null, _react2.default.createElement( _router.IntentLink, { intent: 'edit', params: { type: 'reviewProcess', id: reviewProcess._id } }, 'Open' ) ) ); }) ) ) ) ); } } exports.default = (0, _reactPropsStream.withPropsStream)(loadProps, ReviewProcessList);