UNPKG

tc-ui-toolkit

Version:

React components used to develop tools for the desktop app translationCore

166 lines (141 loc) 14.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactBootstrap = require("react-bootstrap"); var _editHelpers = require("../VerseEditor/helpers/editHelpers"); var _BaseDialog = _interopRequireDefault(require("./BaseDialog")); function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } /** * Renders a dialog to submit user feedback. * * @class * * @property {Function} translate - the localization function * @property {Function} onClose - callback when the dialog is closed * @property {Function} onSubmit - callback when the feedback is submitted. * @property {Function} open - controls whether the dialog is open or closed * @property {Function} [includeLogs=true] - indicates if logs should be included * @property {string} [message=''] - the feedback message * @property {string} [email=''] - the user's email * @property {string} [category=null] - the feedback category */ var CommentsDialog = /*#__PURE__*/function (_React$Component) { (0, _inherits2["default"])(CommentsDialog, _React$Component); var _super = _createSuper(CommentsDialog); function CommentsDialog(props) { var _this; (0, _classCallCheck2["default"])(this, CommentsDialog); _this = _super.call(this, props); _this._handleSubmit = _this._handleSubmit.bind((0, _assertThisInitialized2["default"])(_this)); _this._handleClose = _this._handleClose.bind((0, _assertThisInitialized2["default"])(_this)); _this._handleCommentChange = _this._handleCommentChange.bind((0, _assertThisInitialized2["default"])(_this)); var comment = props.comment; _this.state = { comment: comment }; return _this; } (0, _createClass2["default"])(CommentsDialog, [{ key: "UNSAFE_componentWillReceiveProps", value: function UNSAFE_componentWillReceiveProps(nextProps) { var comment = nextProps.comment; if (comment !== this.state.comment) { // only update state if comment changed this.setState({ comment: comment }); } } }, { key: "_handleCommentChange", value: function _handleCommentChange(event) { var newComment = event.target.value; if (newComment !== this.state.comment) { // only update state if comment changed this.setState({ comment: newComment }); } } }, { key: "_handleSubmit", value: function _handleSubmit() { var onSubmit = this.props.onSubmit; onSubmit(this.state.comment); } }, { key: "_handleClose", value: function _handleClose() { var onClose = this.props.onClose; onClose(); } }, { key: "render", value: function render() { var _this$props = this.props, open = _this$props.open, translate = _this$props.translate, verseTitle = _this$props.verseTitle, comment = _this$props.comment; var currentComment = this.state.comment; var isSaveEnabled = currentComment !== comment; var saveButton = /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "ok", style: { marginRight: '10px' } }), translate('buttons.save_button')); return /*#__PURE__*/_react["default"].createElement(_BaseDialog["default"], { key: "CommentsDialog-".concat(verseTitle), onSubmit: this._handleSubmit, primaryLabel: saveButton, primaryActionEnabled: isSaveEnabled, secondaryLabel: translate('buttons.cancel_button'), onClose: this._handleClose, title: translate('comment_title', { passage: verseTitle }), bodyStyle: { overflowY: 'auto', padding: '0 10px 0 10px' }, contentStyle: { width: '500px' }, open: open }, /*#__PURE__*/_react["default"].createElement("textarea", { id: "verse-editor-field", rows: 8, className: "edit-screen", autoFocus: true, onFocus: _editHelpers.moveCursorToEnd, onChange: this._handleCommentChange, value: currentComment })); } }]); return CommentsDialog; }(_react["default"].Component); CommentsDialog.propTypes = { comment: _propTypes["default"].string.isRequired, verseTitle: _propTypes["default"].string.isRequired, translate: _propTypes["default"].func.isRequired, onClose: _propTypes["default"].func.isRequired, onSubmit: _propTypes["default"].func.isRequired, open: _propTypes["default"].bool.isRequired }; var _default = CommentsDialog; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db21tZW50c0RpYWxvZy9Db21tZW50c0RpYWxvZy5qcyJdLCJuYW1lcyI6WyJDb21tZW50c0RpYWxvZyIsInByb3BzIiwiX2hhbmRsZVN1Ym1pdCIsImJpbmQiLCJfaGFuZGxlQ2xvc2UiLCJfaGFuZGxlQ29tbWVudENoYW5nZSIsImNvbW1lbnQiLCJzdGF0ZSIsIm5leHRQcm9wcyIsInNldFN0YXRlIiwiZXZlbnQiLCJuZXdDb21tZW50IiwidGFyZ2V0IiwidmFsdWUiLCJvblN1Ym1pdCIsIm9uQ2xvc2UiLCJvcGVuIiwidHJhbnNsYXRlIiwidmVyc2VUaXRsZSIsImN1cnJlbnRDb21tZW50IiwiaXNTYXZlRW5hYmxlZCIsInNhdmVCdXR0b24iLCJtYXJnaW5SaWdodCIsInBhc3NhZ2UiLCJvdmVyZmxvd1kiLCJwYWRkaW5nIiwid2lkdGgiLCJtb3ZlQ3Vyc29yVG9FbmQiLCJSZWFjdCIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsImlzUmVxdWlyZWQiLCJmdW5jIiwiYm9vbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBOzs7Ozs7Ozs7Ozs7OztJQWNNQSxjOzs7OztBQUNKLDBCQUFZQyxLQUFaLEVBQW1CO0FBQUE7O0FBQUE7QUFDakIsOEJBQU1BLEtBQU47QUFDQSxVQUFLQyxhQUFMLEdBQXFCLE1BQUtBLGFBQUwsQ0FBbUJDLElBQW5CLGdEQUFyQjtBQUNBLFVBQUtDLFlBQUwsR0FBb0IsTUFBS0EsWUFBTCxDQUFrQkQsSUFBbEIsZ0RBQXBCO0FBQ0EsVUFBS0Usb0JBQUwsR0FBNEIsTUFBS0Esb0JBQUwsQ0FBMEJGLElBQTFCLGdEQUE1QjtBQUppQixRQU1URyxPQU5TLEdBTUdMLEtBTkgsQ0FNVEssT0FOUztBQVFqQixVQUFLQyxLQUFMLEdBQWE7QUFBRUQsTUFBQUEsT0FBTyxFQUFQQTtBQUFGLEtBQWI7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QVVHLElBQVYsQ0FBZUQsVUFIRDtBQUl6QmxCLEVBQUFBLE9BQU8sRUFBRWdCLHNCQUFVRyxJQUFWLENBQWVELFVBSkM7QUFLekJuQixFQUFBQSxRQUFRLEVBQUVpQixzQkFBVUcsSUFBVixDQUFlRCxVQUxBO0FBTXpCakIsRUFBQUEsSUFBSSxFQUFFZSxzQkFBVUksSUFBVixDQUFlRjtBQU5JLENBQTNCO2VBU2VqQyxjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBHbHlwaGljb24gfSBmcm9tICdyZWFjdC1ib290c3RyYXAnO1xuaW1wb3J0IHsgbW92ZUN1cnNvclRvRW5kIH0gZnJvbSAnLi4vVmVyc2VFZGl0b3IvaGVscGVycy9lZGl0SGVscGVycyc7XG5pbXBvcnQgQmFzZURpYWxvZyBmcm9tICcuL0Jhc2VEaWFsb2cnO1xuXG4vKipcbiAqIFJlbmRlcnMgYSBkaWFsb2cgdG8gc3VibWl0IHVzZXIgZmVlZGJhY2suXG4gKlxuICogQGNsYXNzXG4gKlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdHJhbnNsYXRlIC0gdGhlIGxvY2FsaXphdGlvbiBmdW5jdGlvblxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gb25DbG9zZSAtIGNhbGxiYWNrIHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zZWRcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IG9uU3VibWl0IC0gY2FsbGJhY2sgd2hlbiB0aGUgZmVlZGJhY2sgaXMgc3VibWl0dGVkLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gb3BlbiAtIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGRpYWxvZyBpcyBvcGVuIG9yIGNsb3NlZFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gW2luY2x1ZGVMb2dzPXRydWVdIC0gaW5kaWNhdGVzIGlmIGxvZ3Mgc2hvdWxkIGJlIGluY2x1ZGVkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21lc3NhZ2U9JyddIC0gdGhlIGZlZWRiYWNrIG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZW1haWw9JyddIC0gdGhlIHVzZXIncyBlbWFpbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjYXRlZ29yeT1udWxsXSAtIHRoZSBmZWVkYmFjayBjYXRlZ29yeVxuICovXG5jbGFzcyBDb21tZW50c0RpYWxvZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuX2hhbmRsZVN1Ym1pdCA9IHRoaXMuX2hhbmRsZVN1Ym1pdC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2hhbmRsZUNsb3NlID0gdGhpcy5faGFuZGxlQ2xvc2UuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9oYW5kbGVDb21tZW50Q2hhbmdlID0gdGhpcy5faGFuZGxlQ29tbWVudENoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgY29uc3QgeyBjb21tZW50IH0gPSBwcm9wcztcblxuICAgIHRoaXMuc3RhdGUgPSB7IGNvbW1lbnQgfTtcbiAgfVxuXG4gIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIGNvbnN0IHsgY29tbWVudCB9ID0gbmV4dFByb3BzO1xuXG4gICAgaWYgKGNvbW1lbnQgIT09IHRoaXMuc3RhdGUuY29tbWVudCkgeyAvLyBvbmx5IHVwZGF0ZSBzdGF0ZSBpZiBjb21tZW50IGNoYW5nZWRcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb21tZW50IH0pO1xuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVDb21tZW50Q2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgbmV3Q29tbWVudCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmIChuZXdDb21tZW50ICE9PSB0aGlzLnN0YXRlLmNvbW1lbnQpIHsgLy8gb25seSB1cGRhdGUgc3RhdGUgaWYgY29tbWVudCBjaGFuZ2VkXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29tbWVudDogbmV3Q29tbWVudCB9KTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlU3VibWl0KCkge1xuICAgIGNvbnN0IHsgb25TdWJtaXQgfSA9IHRoaXMucHJvcHM7XG4gICAgb25TdWJtaXQodGhpcy5zdGF0ZS5jb21tZW50KTtcbiAgfVxuXG4gIF9oYW5kbGVDbG9zZSgpIHtcbiAgICBjb25zdCB7IG9uQ2xvc2UgfSA9IHRoaXMucHJvcHM7XG4gICAgb25DbG9zZSgpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9wZW4sXG4gICAgICB0cmFuc2xhdGUsXG4gICAgICB2ZXJzZVRpdGxlLFxuICAgICAgY29tbWVudCxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgY29tbWVudDogY3VycmVudENvbW1lbnQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaXNTYXZlRW5hYmxlZCA9IGN1cnJlbnRDb21tZW50ICE9PSBjb21tZW50O1xuXG4gICAgY29uc3Qgc2F2ZUJ1dHRvbiA9IDxkaXY+XG4gICAgICA8R2x5cGhpY29uIGdseXBoPSdvaycgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6ICcxMHB4JyB9fSAvPlxuICAgICAge3RyYW5zbGF0ZSgnYnV0dG9ucy5zYXZlX2J1dHRvbicpfVxuICAgIDwvZGl2PjtcblxuICAgIHJldHVybiAoXG4gICAgICA8QmFzZURpYWxvZ1xuICAgICAgICBrZXk9e2BDb21tZW50c0RpYWxvZy0ke3ZlcnNlVGl0bGV9YH1cbiAgICAgICAgb25TdWJtaXQ9e3RoaXMuX2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgcHJpbWFyeUxhYmVsPXtzYXZlQnV0dG9ufVxuICAgICAgICBwcmltYXJ5QWN0aW9uRW5hYmxlZD17aXNTYXZlRW5hYmxlZH1cbiAgICAgICAgc2Vjb25kYXJ5TGFiZWw9e3RyYW5zbGF0ZSgnYnV0dG9ucy5jYW5jZWxfYnV0dG9uJyl9XG4gICAgICAgIG9uQ2xvc2U9e3RoaXMuX2hhbmRsZUNsb3NlfVxuICAgICAgICB0aXRsZT17dHJhbnNsYXRlKCdjb21tZW50X3RpdGxlJywgeyBwYXNzYWdlOiB2ZXJzZVRpdGxlIH0pfVxuICAgICAgICBib2R5U3R5bGU9e3sgb3ZlcmZsb3dZOiAnYXV0bycsIHBhZGRpbmc6ICcwIDEwcHggMCAxMHB4JyB9fVxuICAgICAgICBjb250ZW50U3R5bGU9e3sgd2lkdGg6ICc1MDBweCcgfX1cbiAgICAgICAgb3Blbj17b3Blbn0+XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgIGlkPVwidmVyc2UtZWRpdG9yLWZpZWxkXCJcbiAgICAgICAgICByb3dzPXs4fVxuICAgICAgICAgIGNsYXNzTmFtZT0nZWRpdC1zY3JlZW4nXG4gICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgIG9uRm9jdXM9e21vdmVDdXJzb3JUb0VuZH1cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5faGFuZGxlQ29tbWVudENoYW5nZX1cbiAgICAgICAgICB2YWx1ZT17Y3VycmVudENvbW1lbnR9Lz5cbiAgICAgIDwvQmFzZURpYWxvZz5cbiAgICApO1xuICB9XG59XG5cbkNvbW1lbnRzRGlhbG9nLnByb3BUeXBlcyA9IHtcbiAgY29tbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB2ZXJzZVRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHRyYW5zbGF0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25TdWJtaXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21tZW50c0RpYWxvZztcbiJdfQ==