@vega/review-tool
Version:
135 lines (104 loc) • 4.35 kB
JavaScript
;
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 _CreateReviewProcess = require('./styles/CreateReviewProcess.css');
var _CreateReviewProcess2 = _interopRequireDefault(_CreateReviewProcess);
var _reactPropsStream = require('react-props-stream');
var _uuid = require('@lyra/uuid');
var _uuid2 = _interopRequireDefault(_uuid);
var _preview = require('part:@lyra/base/preview');
var _default = require('part:@lyra/components/buttons/default');
var _default2 = _interopRequireDefault(_default);
var _client = require('part:@lyra/base/client');
var _client2 = _interopRequireDefault(_client);
var _operators = require('rxjs/operators');
var _rxjs = require('rxjs');
var _withNavigateIntent = require('./withNavigateIntent');
var _withNavigateIntent2 = _interopRequireDefault(_withNavigateIntent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function makeSnapshotOf(article) {
return (0, _preview.observePaths)(article, ['title', 'mainImage', 'abstract', 'content']).pipe((0, _operators.take)(1), (0, _operators.map)(srcArticle => ({
_id: (0, _uuid2.default)(),
_type: 'articleSnapshot',
title: srcArticle.title,
abstract: srcArticle.abstract,
content: srcArticle.content
})));
}
function loadProps(props$) {
const article$ = props$.pipe((0, _operators.map)(props => props.articleId), (0, _operators.distinctUntilChanged)(), (0, _operators.switchMap)(articleId => (0, _preview.observePaths)({ _id: articleId }, ['title'])));
return (0, _rxjs.combineLatest)(props$, article$).pipe((0, _operators.map)(([props, article]) => _extends({}, props, {
article
})));
}
class CreateReviewProcess extends _react2.default.Component /*:: <*, *>*/ {
constructor(...args) {
var _temp;
return _temp = super(...args), this.state = {
isCreating: false
}, this.handleCreate = () => {
var _props = this.props;
const article = _props.article,
navigateIntent = _props.navigateIntent;
const reviewProcessId = (0, _uuid2.default)();
const snapshot$ = makeSnapshotOf(article).pipe((0, _operators.share)());
const reviewProcess$ = snapshot$.pipe((0, _operators.map)(snapshot => ({
_type: 'reviewProcess',
_id: reviewProcessId,
articleSnapshot: {
_type: 'reference',
_ref: snapshot._id
},
article: {
_type: 'reference',
_ref: article._id
}
})));
this.setState({ isCreating: true });
(0, _rxjs.combineLatest)(snapshot$, reviewProcess$).pipe((0, _operators.mergeMap)(([snapshot, reviewProcess]) => _client2.default.observable.transaction().create(snapshot).create(reviewProcess).commit())).pipe((0, _operators.tap)(() => {
navigateIntent('edit', {
type: 'reviewProcess',
id: reviewProcessId
});
})).subscribe();
}, this.handleToggle = stateKey => {
this.setState(prevState => ({ [stateKey]: !prevState[stateKey] }));
}, _temp;
}
render() {
const article = this.props.article;
const isCreating = this.state.isCreating;
return _react2.default.createElement(
'div',
{ className: _CreateReviewProcess2.default.root },
_react2.default.createElement(
'h2',
null,
'Create new review for ',
'"',
_react2.default.createElement(
'span',
{ className: _CreateReviewProcess2.default.articleTitle },
article.title
),
'"'
),
_react2.default.createElement(
_default2.default,
{
loading: isCreating,
type: 'button',
color: 'primary',
onClick: this.handleCreate,
disabled: isCreating
},
isCreating ? 'Creating review…' : 'Create'
)
);
}
}
exports.default = (0, _withNavigateIntent2.default)((0, _reactPropsStream.withPropsStream)(loadProps, CreateReviewProcess));