@vega/review-tool
Version:
211 lines (167 loc) • 6.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _sample2 = require('lodash/sample');
var _sample3 = _interopRequireDefault(_sample2);
var _capitalize2 = require('lodash/capitalize');
var _capitalize3 = _interopRequireDefault(_capitalize2);
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 _AddReviewItem = require('./styles/AddReviewItem.css');
var _AddReviewItem2 = _interopRequireDefault(_AddReviewItem);
var _uuid = require('@lyra/uuid');
var _uuid2 = _interopRequireDefault(_uuid);
var _default = require('part:@lyra/components/dialogs/default');
var _default2 = _interopRequireDefault(_default);
var _default3 = require('part:@lyra/components/textinputs/default');
var _default4 = _interopRequireDefault(_default3);
var _client = require('part:@lyra/base/client');
var _client2 = _interopRequireDefault(_client);
var _InviteLink = require('./InviteLink');
var _InviteLink2 = _interopRequireDefault(_InviteLink);
var _animals = require('animals');
var _animals2 = _interopRequireDefault(_animals);
var _adjectives = require('adjectives');
var _adjectives2 = _interopRequireDefault(_adjectives);
var _default5 = require('part:@lyra/components/buttons/default');
var _default6 = _interopRequireDefault(_default5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const COMMIT_ACTION = {
title: 'Invite',
tooltip: 'Add reviewer and proceed to invitation link',
name: 'commit',
color: 'primary'
};
const CLOSE_ACTION = { name: 'close' };
function createName() {
const animal = (0, _animals2.default)();
const adjective = (0, _sample3.default)(_adjectives2.default.filter(adj => adj[0] === animal[0]));
return [adjective, animal].map(_capitalize3.default).join(' ');
}
class AddReviewItemDialog extends _react2.default.Component /*:: <*, *>*/ {
constructor(...args) {
var _temp;
return _temp = super(...args), this.state = {
reviewerName: '',
submitState: null,
submitResult: null
}, this.handleReviewerNameChange = event => {
this.setState({ reviewerName: event.target.value });
}, this.handleAction = action => {
if (action.name === 'commit') {
this.createReviewer();
}
if (action.name === 'close') {
this.props.onClose();
}
}, _temp;
}
createReviewer() {
const reviewProcess = this.props.reviewProcess;
const reviewerName = this.state.reviewerName;
const reviewer = {
_id: (0, _uuid2.default)(),
_type: 'user',
name: reviewerName,
isReviewer: true
};
const reviewItem = {
_id: (0, _uuid2.default)(),
_type: 'reviewItem',
reviewProcess: {
_type: 'reference',
_ref: reviewProcess._id
},
reviewer: {
_type: 'reference',
_ref: reviewer._id
}
};
const invite = {
_id: (0, _uuid2.default)(),
_type: 'invite',
targetType: 'guest',
message: `You are invited to review the article «${reviewProcess.articleSnapshot.title}»`,
target: { _type: 'reference', _ref: reviewer._id, _weak: true },
isAccepted: false,
isRevoked: false
};
this.setState({ submitState: 'isCreating' });
_client2.default.transaction().create(reviewer).create(invite).create(reviewItem).commit().then(res => {
this.setState({ submitState: 'isCreated', submitResult: res });
}, error => {
this.setState({ submitState: 'error', submitResult: error });
});
}
render() {
var _state = this.state;
const reviewerName = _state.reviewerName,
submitState = _state.submitState,
submitResult = _state.submitResult;
const commitAction = _extends({}, COMMIT_ACTION, {
disabled: !reviewerName.trim() || submitState !== null
});
const closeAction = _extends({}, CLOSE_ACTION, {
title: submitState === 'isCreated' ? 'Close' : 'Cancel',
disabled: submitState === 'isCreating'
});
const actions = [submitState !== 'isCreated' && commitAction, closeAction].filter(Boolean);
return _react2.default.createElement(
_default2.default,
{ actions: actions, onAction: this.handleAction },
_react2.default.createElement(
'div',
{ className: _AddReviewItem2.default.root },
submitState === 'isCreated' && _react2.default.createElement(
'span',
null,
'Reviewer ',
_react2.default.createElement(
'em',
null,
reviewerName
),
' added. Below is a link you can send to ',
reviewerName,
'.',
_react2.default.createElement(_InviteLink2.default, { invite: { _id: submitResult.results[1].id } })
),
submitState === 'isCreating' && `Adding reviewer…`,
submitState === 'error' && `Oops, that went wrong: ${submitResult.message}`,
!submitState && _react2.default.createElement(
'form',
{ onSubmit: e => e.preventDefault() },
_react2.default.createElement(
'div',
null,
'Name of reviewer',
_react2.default.createElement(
'div',
{ style: { display: 'flex', width: '100%' } },
_react2.default.createElement(
'div',
{ style: { flexGrow: 1 } },
_react2.default.createElement(_default4.default, {
value: reviewerName,
onChange: this.handleReviewerNameChange,
disabled: submitState === 'isCreating'
})
),
_react2.default.createElement(
_default6.default,
{
title: 'Assign a random anonymous animal name',
onClick: () => this.setState({ reviewerName: createName() })
},
'Anonymize'
)
)
)
)
)
);
}
}
exports.default = AddReviewItemDialog;