choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
276 lines (224 loc) • 8.3 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _mobxReact = require("mobx-react");
var _reactDom = require("react-dom");
require("react-quill/dist/quill.snow.css");
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
var _isObject = _interopRequireDefault(require("lodash/isObject"));
var _omit = _interopRequireDefault(require("lodash/omit"));
var _reactImageLightbox = _interopRequireDefault(require("react-image-lightbox"));
var _imageDropAndPaste = _interopRequireDefault(require("./utils/imageDropAndPaste"));
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _RichTextViewer = _interopRequireDefault(require("./RichTextViewer"));
var _toolbar = _interopRequireDefault(require("./toolbar"));
var ReactQuill;
var Quill;
if (typeof window !== 'undefined') {
// eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
ReactQuill = require('react-quill'); // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
Quill = require('react-quill').Quill;
/**
* 注册图片拖拽、粘贴
*/
Quill.register('modules/imageDropAndPaste', _imageDropAndPaste["default"]);
}
var BaseEditor = /*#__PURE__*/function (_Component) {
(0, _inherits2["default"])(BaseEditor, _Component);
var _super = (0, _createSuper2["default"])(BaseEditor);
function BaseEditor() {
var _this;
(0, _classCallCheck2["default"])(this, BaseEditor);
_this = _super.apply(this, arguments);
_this.state = {
imgOpen: false,
images: [],
srcIndex: 0
};
_this.handleOpenLightBox = function (e) {
if (e.target.nodeName === 'IMG' && _this.deltaOps) {
e.stopPropagation();
var src = e.target.src;
var imgArr = [];
_this.deltaOps.forEach(function (item) {
var image = item.insert.image;
if (image) {
imgArr.push(image);
}
});
var index = imgArr.findIndex(function (img) {
return img === src;
});
_this.setState({
imgOpen: true,
images: imgArr,
srcIndex: index
});
}
};
_this.saveRef = function (name) {
return function (ref) {
_this[name] = ref;
var saveRef = _this.props.saveRef;
if (saveRef) {
saveRef(ref);
}
};
};
return _this;
}
(0, _createClass2["default"])(BaseEditor, [{
key: "setValue",
value: function setValue(value) {
if (this.editor) {
this.editor.getEditor().setContents(value);
}
}
}, {
key: "handleRichTextChange",
value: function handleRichTextChange(_, __, ___, editor) {
var rtDelta = editor.getContents();
this.deltaOps = rtDelta.ops;
var onChange = this.props.onChange;
if (onChange && rtDelta && rtDelta.ops) {
onChange(rtDelta.ops);
}
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
var value = this.props.value;
var deltaOps;
if (!(0, _isObject["default"])(value) && this.editor) {
deltaOps = this.editor.getEditor().clipboard.convert(value).ops;
}
if ('value' in this.props && !(0, _isEqual["default"])(this.deltaOps, deltaOps || value) && this.editor) {
this.editor.getEditor().setContents(deltaOps || value);
}
}
}, {
key: "getOtherProps",
value: function getOtherProps() {
return (0, _omit["default"])(this.props, ['toolbar', 'className', 'defaultValue', 'onChange', 'value', 'ref']);
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
var thisNode = (0, _reactDom.findDOMNode)(this);
if (thisNode) {
thisNode.removeEventListener('click', this.handleOpenLightBox);
}
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
var _this2 = this;
var autoFocus = this.props.autoFocus;
if (autoFocus && this.editor) {
setTimeout(function () {
_this2.editor.focus();
});
}
var thisNode = (0, _reactDom.findDOMNode)(this);
if (thisNode) {
thisNode.addEventListener('click', this.handleOpenLightBox);
}
}
}, {
key: "blur",
value: function blur() {
if (this.editor) {
this.editor.blur();
}
}
}, {
key: "renderContent",
value: function renderContent() {
var _this$props = this.props,
style = _this$props.style,
className = _this$props.className,
toolbarId = _this$props.toolbarId,
toolbar = _this$props.toolbar,
dataSet = _this$props.dataSet,
value = _this$props.value,
mode = _this$props.mode;
var deltaOps;
if (!(0, _isObject["default"])(value) && this.editor) {
deltaOps = this.editor.getEditor().clipboard.convert(value).ops;
}
if (mode === 'preview') {
return /*#__PURE__*/_react["default"].createElement(_RichTextViewer["default"], {
style: style,
deltaOps: deltaOps || value
});
}
if (ReactQuill) {
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_toolbar["default"], {
id: toolbarId,
dataSet: dataSet,
toolbar: toolbar,
prefixCls: className
}), /*#__PURE__*/_react["default"].createElement(ReactQuill, (0, _extends2["default"])({}, this.getOtherProps(), {
className: "".concat(className, "-quill"),
defaultValue: value,
ref: this.saveRef('editor'),
onChange: this.handleRichTextChange,
bounds: className
})));
}
}
}, {
key: "render",
value: function render() {
var _this3 = this;
var _this$state = this.state,
imgOpen = _this$state.imgOpen,
images = _this$state.images,
srcIndex = _this$state.srcIndex;
var className = this.props.className;
var content = this.renderContent();
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
className: className
}, content), imgOpen && /*#__PURE__*/_react["default"].createElement(_reactImageLightbox["default"], {
mainSrc: images[srcIndex],
onCloseRequest: function onCloseRequest() {
return _this3.setState({
imgOpen: false
});
},
imageTitle: "images",
prevSrc: images[srcIndex - 1],
nextSrc: images[srcIndex + 1],
onMovePrevRequest: function onMovePrevRequest() {
_this3.setState({
srcIndex: srcIndex - 1
});
},
onMoveNextRequest: function onMoveNextRequest() {
_this3.setState({
srcIndex: srcIndex + 1
});
}
}));
}
}]);
return BaseEditor;
}(_react.Component);
(0, _tslib.__decorate)([_autobind["default"]], BaseEditor.prototype, "setValue", null);
(0, _tslib.__decorate)([_autobind["default"]], BaseEditor.prototype, "handleRichTextChange", null);
(0, _tslib.__decorate)([_autobind["default"]], BaseEditor.prototype, "renderContent", null);
BaseEditor = (0, _tslib.__decorate)([_mobxReact.observer], BaseEditor);
var _default = BaseEditor;
exports["default"] = _default;
//# sourceMappingURL=BaseEditor.js.map