UNPKG

@vega/review-tool

Version:
211 lines (167 loc) 6.36 kB
'use strict'; 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;