UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

185 lines (184 loc) 10.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RichTextControlRenderer = void 0; var tslib_1 = require("tslib"); var react_1 = (0, tslib_1.__importDefault)(require("react")); var Item_1 = require("./Item"); var classnames_1 = (0, tslib_1.__importDefault)(require("classnames")); var LazyComponent_1 = (0, tslib_1.__importDefault)(require("../../components/LazyComponent")); var tpl_builtin_1 = require("../../utils/tpl-builtin"); var api_1 = require("../../utils/api"); var helper_1 = require("../../utils/helper"); function loadRichText( // Jay // type: 'tinymce' | 'froala' = 'froala' type) { if (type === void 0) { type = 'wangEditor'; } return function () { return type === 'wangEditor' ? Promise.resolve().then(function () { return new Promise(function(resolve){require(['../../components/WangEditor'], function(ret) {resolve(tslib_1.__importStar(ret));})}); }).then(function (item) { return item.default; }) : type === 'tinymce' ? Promise.resolve().then(function () { return new Promise(function(resolve){require(['../../components/Tinymce'], function(ret) {resolve(tslib_1.__importStar(ret));})}); }).then(function (item) { return item.default; }) : Promise.resolve().then(function () { return new Promise(function(resolve){require(['../../components/RichText'], function(ret) {resolve(tslib_1.__importStar(ret));})}); }).then(function (item) { return item.default; }); }; } var RichTextControl = /** @class */ (function (_super) { (0, tslib_1.__extends)(RichTextControl, _super); function RichTextControl(props) { var _this = _super.call(this, props) || this; _this.state = { focused: false }; _this.config = null; var finnalVendor = props.vendor || (props.env.richTextToken ? 'froala' : 'tinymce'); _this.handleFocus = _this.handleFocus.bind(_this); _this.handleBlur = _this.handleBlur.bind(_this); _this.handleChange = _this.handleChange.bind(_this); if (finnalVendor === 'froala') { _this.config = (0, tslib_1.__assign)((0, tslib_1.__assign)({ imageAllowedTypes: ['jpeg', 'jpg', 'png', 'gif'], imageDefaultAlign: 'left', imageEditButtons: props.imageEditable ? [ 'imageReplace', 'imageAlign', 'imageRemove', '|', 'imageLink', 'linkOpen', 'linkEdit', 'linkRemove', '-', 'imageDisplay', 'imageStyle', 'imageAlt', 'imageSize' ] : [], key: props.env.richTextToken, attribution: false }, props.options), { editorClass: props.editorClass, placeholderText: props.translate(props.placeholder), imageUploadURL: (0, tpl_builtin_1.tokenize)(props.receiver, props.data), imageUploadParams: { from: 'rich-text' }, videoUploadURL: (0, tpl_builtin_1.tokenize)(props.videoReceiver, props.data), videoUploadParams: { from: 'rich-text' }, events: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, (props.options && props.options.events)), { focus: _this.handleFocus, blur: _this.handleBlur }), language: !_this.props.locale || _this.props.locale === 'zh-CN' ? 'zh_cn' : '' }); if (props.buttons) { _this.config.toolbarButtons = props.buttons; } } else { var fetcher_1 = props.env.fetcher; _this.config = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, props.options), { images_upload_handler: function (blobInfo, ok, fail) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { var formData, receiver, response, location, e_1; var _a, _b, _c, _d, _e, _f, _g, _h, _j; return (0, tslib_1.__generator)(this, function (_k) { switch (_k.label) { case 0: formData = new FormData(); formData.append(props.fileField, blobInfo.blob(), blobInfo.filename()); _k.label = 1; case 1: _k.trys.push([1, 3, , 4]); receiver = (0, tslib_1.__assign)({ adaptor: function (payload) { return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, payload), { data: payload }); } }, (0, api_1.normalizeApi)(props.receiver, 'post')); return [4 /*yield*/, fetcher_1(receiver, formData, { method: 'post' })]; case 2: response = _k.sent(); if (response.ok) { location = ((_a = response.data) === null || _a === void 0 ? void 0 : _a.link) || ((_b = response.data) === null || _b === void 0 ? void 0 : _b.url) || ((_c = response.data) === null || _c === void 0 ? void 0 : _c.value) || ((_e = (_d = response.data) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.link) || ((_g = (_f = response.data) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.url) || ((_j = (_h = response.data) === null || _h === void 0 ? void 0 : _h.data) === null || _j === void 0 ? void 0 : _j.value); if (location) { ok(location); } else { console.warn('must have return value'); } } return [3 /*break*/, 4]; case 3: e_1 = _k.sent(); fail(e_1); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } }); }); } }); } return _this; } RichTextControl.prototype.handleFocus = function () { this.setState({ focused: true }); }; RichTextControl.prototype.handleBlur = function () { this.setState({ focused: false }); }; RichTextControl.prototype.handleChange = function (value, submitOnChange, changeImmediately) { var _a = this.props, onChange = _a.onChange, disabled = _a.disabled; if (disabled) { return; } onChange === null || onChange === void 0 ? void 0 : onChange(value, submitOnChange, changeImmediately); }; RichTextControl.prototype.render = function () { var _a; var _b = this.props, className = _b.className, ns = _b.classPrefix, value = _b.value, onChange = _b.onChange, disabled = _b.disabled, size = _b.size, vendor = _b.vendor, env = _b.env, locale = _b.locale, translate = _b.translate, borderMode = _b.borderMode; var finnalVendor = vendor || (env.richTextToken ? 'froala' : 'wangEditor'); // Jay 默认使用 wangEditor return (react_1.default.createElement("div", { className: (0, classnames_1.default)(ns + "RichTextControl", className, (_a = { 'is-focused': this.state.focused, 'is-disabled': disabled }, _a[ns + "RichTextControl--border" + (0, helper_1.ucFirst)(borderMode)] = borderMode, _a)) }, react_1.default.createElement(LazyComponent_1.default, { getComponent: loadRichText(finnalVendor), model: value, onModelChange: this.handleChange, onFocus: this.handleFocus, onBlur: this.handleBlur, config: this.config, disabled: disabled, locale: locale, translate: translate }))); }; RichTextControl.defaultProps = { imageEditable: true, receiver: '/api/upload/image', videoReceiver: '/api/upload/video', fileField: 'file', placeholder: 'placeholder.enter', options: { toolbarButtons: [ 'undo', 'redo', 'paragraphFormat', 'textColor', 'backgroundColor', 'bold', 'underline', 'strikeThrough', 'formatOL', 'formatUL', 'align', 'quote', 'insertLink', 'insertImage', 'insertEmotion', 'insertTable', 'html' ] } }; return RichTextControl; }(react_1.default.Component)); exports.default = RichTextControl; var RichTextControlRenderer = /** @class */ (function (_super) { (0, tslib_1.__extends)(RichTextControlRenderer, _super); function RichTextControlRenderer() { return _super !== null && _super.apply(this, arguments) || this; } RichTextControlRenderer = (0, tslib_1.__decorate)([ (0, Item_1.FormItem)({ type: 'input-rich-text', sizeMutable: false }) ], RichTextControlRenderer); return RichTextControlRenderer; }(RichTextControl)); exports.RichTextControlRenderer = RichTextControlRenderer; //# sourceMappingURL=./renderers/Form/InputRichText.js.map