UNPKG

@elliemae/ds-wysiwygeditor

Version:

Ellie Mae - Dim Sum - WYSIWYG Editor

198 lines (173 loc) • 7.74 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator'); var _slicedToArray = require('@babel/runtime/helpers/slicedToArray'); var _regeneratorRuntime = require('@babel/runtime/regenerator'); var React = require('react'); var Image = require('@elliemae/ds-icons/Image'); var DSUploader = require('@elliemae/ds-uploader'); var DSModal = require('@elliemae/ds-modal'); var components_CustomToolbar = require('./CustomToolbar.js'); require('@babel/runtime/helpers/extends'); require('@babel/runtime/helpers/objectWithoutProperties'); require('@elliemae/ds-basic/Button'); require('@elliemae/ds-icons/ArrowheadDown'); require('@elliemae/ds-dropdownmenu'); require('@elliemae/ds-basic/Tooltip'); require('../constants.js'); require('@babel/runtime/helpers/toConsumableArray'); require('./colors.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator); var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray); var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime); var React__default = /*#__PURE__*/_interopDefaultLegacy(React); var Image__default = /*#__PURE__*/_interopDefaultLegacy(Image); var DSUploader__default = /*#__PURE__*/_interopDefaultLegacy(DSUploader); var DSModal__default = /*#__PURE__*/_interopDefaultLegacy(DSModal); var ALLOWED_TYPES_TEXT = 'JPG, JPEG, PNG, GIF, BMP, TIFF'; var ALLOWED_TYPES = /image\/(jpeg|jpg|png|gif|bmp|tiff)/; var DEFAULT_MAX_SIZE = 1024 * 1024; // 1 MB var CustomImageUploader = function CustomImageUploader(_ref) { var quillRef = _ref.quillRef, editorFieldName = _ref.editorFieldName, _ref$allowedImageType = _ref.allowedImageTypes, allowedImageTypes = _ref$allowedImageType === void 0 ? ALLOWED_TYPES_TEXT : _ref$allowedImageType, _ref$uploadAsset = _ref.uploadAsset, uploadAsset = _ref$uploadAsset === void 0 ? function () { return null; } : _ref$uploadAsset; var _useState = React.useState(false), _useState2 = _slicedToArray__default['default'](_useState, 2), isOpen = _useState2[0], setIsOpen = _useState2[1]; var _useState3 = React.useState(null), _useState4 = _slicedToArray__default['default'](_useState3, 2), error = _useState4[0], setError = _useState4[1]; var _useState5 = React.useState(false), _useState6 = _slicedToArray__default['default'](_useState5, 2), inProgress = _useState6[0], setInProgress = _useState6[1]; var _useState7 = React.useState({ index: 0, length: 0 }), _useState8 = _slicedToArray__default['default'](_useState7, 2), lastSelection = _useState8[0], setLastSelection = _useState8[1]; var elementId = "uploadImage".concat(editorFieldName); // eslint-disable-next-line consistent-return var handleFileChange = /*#__PURE__*/function () { var _ref2 = _asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee2(files) { var selectedFile, fr; return _regeneratorRuntime__default['default'].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (inProgress) { _context2.next = 7; break; } setError(null); selectedFile = files[0]; if (selectedFile) { _context2.next = 6; break; } setError('Please select a file.'); return _context2.abrupt("return", false); case 6: if (!selectedFile.type.match(ALLOWED_TYPES)) { setError('File must be an image.'); } else if (selectedFile.size > DEFAULT_MAX_SIZE) { setError('File is too large.'); } else { fr = new FileReader(); fr.onload = /*#__PURE__*/_asyncToGenerator__default['default']( /*#__PURE__*/_regeneratorRuntime__default['default'].mark(function _callee() { var url; return _regeneratorRuntime__default['default'].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: setInProgress(true); _context.prev = 1; _context.next = 4; return uploadAsset({ name: selectedFile.name, type: selectedFile.type, description: selectedFile.name, isSystemAsset: false, file: fr.result }); case 4: url = _context.sent; setIsOpen(false); quillRef === null || quillRef === void 0 ? void 0 : quillRef.getEditor().insertEmbed((lastSelection === null || lastSelection === void 0 ? void 0 : lastSelection.index) || 0, 'image', url); _context.next = 12; break; case 9: _context.prev = 9; _context.t0 = _context["catch"](1); setError('An error has occurred, try again'); case 12: setInProgress(false); case 13: case "end": return _context.stop(); } } }, _callee, null, [[1, 9]]); })); fr.readAsArrayBuffer(selectedFile); } case 7: case "end": return _context2.stop(); } } }, _callee2); })); return function handleFileChange(_x) { return _ref2.apply(this, arguments); }; }(); return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(components_CustomToolbar.TippedButton, { tip: "Insert Image", onClick: function onClick() { setLastSelection(quillRef === null || quillRef === void 0 ? void 0 : quillRef.getEditor().getSelection()); setIsOpen(true); } }, /*#__PURE__*/React__default['default'].createElement(Image__default['default'], { color: ['neutral', 500], size: "s" })), /*#__PURE__*/React__default['default'].createElement(DSModal__default['default'], { isOpen: isOpen, title: "", onConfirm: function onConfirm() { setIsOpen(false); }, onClose: function onClose() { setIsOpen(false); }, showClose: true, version: 2, size: "xsmall", modalType: DSModal.MODAL_TYPE_V2.DECISION, confirmLabel: "Cancel", message: "" }, !inProgress && /*#__PURE__*/React__default['default'].createElement(DSUploader__default['default'], { containerProps: { id: elementId }, showAltAction: false, acceptedTypesText: allowedImageTypes, onDrop: handleFileChange }), inProgress && 'Upload in progress...', error && /*#__PURE__*/React__default['default'].createElement("div", { style: { color: 'red', marginTop: '10px' } }, error))); }; exports.CustomImageUploader = CustomImageUploader; //# sourceMappingURL=CustomImageUploader.js.map