UNPKG

@vega/review-tool

Version:
179 lines (144 loc) 5.67 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _operators = require('rxjs/operators'); var _rxjs = require('rxjs'); var _trashIcon = require('part:@lyra/base/trash-icon'); var _trashIcon2 = _interopRequireDefault(_trashIcon); var _default = require('part:@lyra/components/buttons/default'); var _default2 = _interopRequireDefault(_default); var _client = require('part:@lyra/base/client'); var _client2 = _interopRequireDefault(_client); var _preview = require('part:@lyra/base/preview'); var _reactPropsStream = require('react-props-stream'); var _EditReviewItem = require('../EditReviewItem'); var _EditReviewItem2 = _interopRequireDefault(_EditReviewItem); var _ManageReviewItem = require('./styles/ManageReviewItem.css'); var _ManageReviewItem2 = _interopRequireDefault(_ManageReviewItem); var _InviteLinkForReviewer = require('./InviteLinkForReviewer'); var _InviteLinkForReviewer2 = _interopRequireDefault(_InviteLinkForReviewer); var _user = require('part:@vega/datastores/user'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const recommendationMapping = { publish: 'Publish', 'publish-with-revisions': 'Publish with revisions', reject: 'Reject' }; function inferStatus(reviewItem) { if (reviewItem.completedAt) { return `Verdict: ${recommendationMapping[reviewItem.recommendation] || 'unknown'}`; } if (reviewItem.acceptState) { return `In progress…`; //capitalize(reviewItem.acceptState) } return 'Review pending…'; } function loadProps(props$) { const reviewer$ = props$.pipe((0, _operators.switchMap)(props => (0, _preview.observePaths)(props.reviewItem.reviewer, ['name', 'identity']))); return (0, _rxjs.combineLatest)(props$, reviewer$, _user.currentUser$).pipe((0, _operators.map)(([props, reviewer, currentUser]) => _extends({}, props, { readOnly: reviewer._id !== currentUser._id, reviewer, currentUser }))); } /*:: type Props = { reviewItem: any, reviewer: any, readOnly: boolean, isCompleted: boolean }*/ /*:: type State = { isEditReviewerNameOpen: boolean }*/ class ManageReviewItem extends _react2.default.PureComponent /*:: <Props, State>*/ { constructor(...args) { var _temp; return _temp = super(...args), this.state = { isExpanded: false }, this.handleDelete = () => { // eslint-disable-next-line no-alert if (window.confirm('Delete this review?')) { const reviewItem = this.props.reviewItem; _client2.default.delete(reviewItem._id); } }, this.handleToggleExpand = () => { const isExpanded = this.state.isExpanded; this.setState({ isExpanded: !isExpanded }); }, _temp; } render() { var _props = this.props; const reviewItem = _props.reviewItem, reviewer = _props.reviewer, readOnly = _props.readOnly, isCompleted = _props.isCompleted; const isExpanded = this.state.isExpanded; const status = inferStatus(reviewItem); const hasAccepted = reviewer.identity; return _react2.default.createElement( 'li', { className: _ManageReviewItem2.default.reviewItem }, _react2.default.createElement( 'div', { className: _ManageReviewItem2.default.header }, _react2.default.createElement( 'div', { className: _ManageReviewItem2.default.reviewerName }, 'Review by ', reviewer.name ), _react2.default.createElement( 'div', { className: _ManageReviewItem2.default.statusCollection }, _react2.default.createElement( 'span', { className: hasAccepted ? _ManageReviewItem2.default.accepted : _ManageReviewItem2.default.pending }, 'Invitation ', hasAccepted ? 'accepted' : 'pending' ), _react2.default.createElement( 'span', { className: reviewItem.completedAt ? _ManageReviewItem2.default.accepted : _ManageReviewItem2.default.pending }, status ), _react2.default.createElement(_default2.default, { kind: 'simple', color: 'danger', title: 'Delete', icon: _trashIcon2.default, onClick: this.handleDelete }) ) ), !isCompleted && _react2.default.createElement(_InviteLinkForReviewer2.default, { reviewer: reviewer }), !readOnly && _react2.default.createElement(_trashIcon2.default, { onClick: this.handleDelete }), _react2.default.createElement( 'div', { className: _ManageReviewItem2.default.collapse, onClick: this.handleToggleExpand }, _react2.default.createElement( 'div', { className: _ManageReviewItem2.default.collapsedPointer }, isExpanded ? '▼' : '►' ), _react2.default.createElement( 'div', null, 'View' ) ), isExpanded && _react2.default.createElement(_EditReviewItem2.default, { reviewItem: reviewItem, readOnly: readOnly, reviewer: reviewer, isCompleted: isCompleted }) ); } } exports.default = (0, _reactPropsStream.withPropsStream)(loadProps, ManageReviewItem);