UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

460 lines (380 loc) 16.5 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); 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 _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _reactBeautifulDnd = require("react-beautiful-dnd"); var _icon = _interopRequireDefault(require("../icon")); var _tooltip = _interopRequireDefault(require("../tooltip")); var _progress = _interopRequireDefault(require("../progress")); var _animate = _interopRequireDefault(require("../animate")); var _enum = require("../progress/enum"); var _utils = require("./utils"); var _compressedfileIcon = _interopRequireDefault(require("./icon-svg/compressedfileIcon")); var _docIcon = _interopRequireDefault(require("./icon-svg/docIcon")); var _fileuploadIcon = _interopRequireDefault(require("./icon-svg/fileuploadIcon")); var _imageIcon = _interopRequireDefault(require("./icon-svg/imageIcon")); var _pdfIcon = _interopRequireDefault(require("./icon-svg/pdfIcon")); var _xlsIcon = _interopRequireDefault(require("./icon-svg/xlsIcon")); var _enum2 = require("../_util/enum"); var _ConfigContext = _interopRequireDefault(require("../config-provider/ConfigContext")); function _createSuper(Derived) { 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; } } return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (isNativeReflectConstruct()) { 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); }; } // a little function to help us with reordering the result var reorder = function reorder(list, startIndex, endIndex) { var result = Array.from(list); var _result$splice = result.splice(startIndex, 1), _result$splice2 = (0, _slicedToArray2["default"])(_result$splice, 1), removed = _result$splice2[0]; result.splice(endIndex, 0, removed); return result; }; var UploadList = /*#__PURE__*/ function (_Component) { (0, _inherits2["default"])(UploadList, _Component); var _super = _createSuper(UploadList); function UploadList() { var _this; (0, _classCallCheck2["default"])(this, UploadList); _this = _super.apply(this, arguments); _this.handleClose = function (file) { var onRemove = _this.props.onRemove; if (onRemove) { onRemove(file); } }; _this.handlePreview = function (file, e) { var onPreview = _this.props.onPreview; if (!onPreview) { return; } e.preventDefault(); return onPreview(file); }; /** * 拖拽事件 * @param result */ _this.onDragEnd = function (result) { var _this$props = _this.props, items = _this$props.items, onDragEnd = _this$props.onDragEnd; // dropped outside the list if (!result.destination) { return; } var dragItems = reorder(items, result.source.index, result.destination.index); onDragEnd(dragItems); }; return _this; } (0, _createClass2["default"])(UploadList, [{ key: "componentDidUpdate", value: function componentDidUpdate() { var _this2 = this; var _this$props2 = this.props, listType = _this$props2.listType, items = _this$props2.items, previewFile = _this$props2.previewFile; if (listType !== 'picture' && listType !== 'picture-card') { return; } (items || []).forEach(function (file) { if (typeof document === 'undefined' || typeof window === 'undefined' || !window.FileReader || !window.File || !(file.originFileObj instanceof File || file.originFileObj instanceof Blob) || file.thumbUrl !== undefined) { return; } file.thumbUrl = ''; if (previewFile) { previewFile(file.originFileObj).then(function (previewDataUrl) { // Need append '' to avoid dead loop file.thumbUrl = previewDataUrl || ''; _this2.forceUpdate(); }); } }); } }, { key: "render", value: function render() { var _this3 = this, _classNames2; var _this$props3 = this.props, customizePrefixCls = _this$props3.prefixCls, _this$props3$items = _this$props3.items, items = _this$props3$items === void 0 ? [] : _this$props3$items, listType = _this$props3.listType, showPreviewIcon = _this$props3.showPreviewIcon, showRemoveIcon = _this$props3.showRemoveIcon, locale = _this$props3.locale, dragUploadList = _this$props3.dragUploadList, showFileSize = _this$props3.showFileSize; var getPrefixCls = this.context.getPrefixCls; var prefixCls = getPrefixCls('upload', customizePrefixCls); var list = items.map(function (file, index) { var _classNames; var progress; var icon = file.status === 'uploading' ? _react["default"].createElement(_progress["default"], { key: 'loading', type: _enum.ProgressType.loading, size: _enum2.Size.small }) : _react["default"].createElement(_fileuploadIcon["default"], { className: "".concat(prefixCls, "-icon-file") }); if (file.status !== 'uploading') { var filetype = (0, _utils.getFileType)(file.name); switch (filetype) { case 'compressedfile': icon = _react["default"].createElement(_compressedfileIcon["default"], { className: "".concat(prefixCls, "-icon-file") }); break; case 'doc': icon = _react["default"].createElement(_docIcon["default"], { className: "".concat(prefixCls, "-icon-file") }); break; case 'image': icon = _react["default"].createElement(_imageIcon["default"], { className: "".concat(prefixCls, "-icon-file") }); break; case 'pdf': icon = _react["default"].createElement(_pdfIcon["default"], { className: "".concat(prefixCls, "-icon-file") }); break; case 'xls': icon = _react["default"].createElement(_xlsIcon["default"], { className: "".concat(prefixCls, "-icon-file") }); break; default: break; } } if (listType === 'picture' || listType === 'picture-card') { if (listType === 'picture-card' && file.status === 'uploading') { icon = _react["default"].createElement("div", { className: "".concat(prefixCls, "-list-item-uploading-text") }, locale.uploading); } else if (listType === 'picture' && file.status === 'uploading') { icon = _react["default"].createElement(_progress["default"], { key: 'loading', type: _enum.ProgressType.loading, size: _enum2.Size.small }); } else if (!file.thumbUrl && !file.url) { icon = _react["default"].createElement(_icon["default"], { className: "".concat(prefixCls, "-list-item-thumbnail"), type: "picture" }); } else { var thumbnail = (0, _utils.isImageUrl)(file) ? _react["default"].createElement("img", { src: file.thumbUrl || file.url, alt: file.name }) : _react["default"].createElement(_icon["default"], { type: "file", style: { fontSize: 48, color: 'rgba(0,0,0,0.5)' } }); icon = _react["default"].createElement("a", { className: "".concat(prefixCls, "-list-item-thumbnail"), onClick: function onClick(e) { return _this3.handlePreview(file, e); }, href: file.url || file.thumbUrl, target: "_blank", rel: "noopener noreferrer" }, thumbnail); } } if (file.status === 'uploading') { var progressAttr = _this3.props.progressAttr; // show loading icon if upload progress listener is disabled var loadingProgress = 'percent' in file ? _react["default"].createElement(_progress["default"], (0, _extends2["default"])({ type: _enum.ProgressType.line }, progressAttr, { percent: file.percent })) : null; progress = _react["default"].createElement("div", { className: "".concat(prefixCls, "-list-item-progress"), key: "progress" }, loadingProgress); } var infoUploadingClass = (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-list-item"), true), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-list-item-").concat(file.status), true), _classNames)); var preview = file.url ? _react["default"].createElement("a", (0, _extends2["default"])({}, file.linkProps, { href: file.url, target: "_blank", rel: "noopener noreferrer", className: "".concat(prefixCls, "-list-item-name"), onClick: function onClick(e) { return _this3.handlePreview(file, e); }, title: file.name }), file.name) : _react["default"].createElement("span", { className: "".concat(prefixCls, "-list-item-name"), onClick: function onClick(e) { return _this3.handlePreview(file, e); }, title: file.name }, file.name); var style = file.url || file.thumbUrl ? undefined : { pointerEvents: 'none', opacity: 0.5 }; var previewIcon = showPreviewIcon ? _react["default"].createElement("a", { href: file.url || file.thumbUrl, target: "_blank", rel: "noopener noreferrer", style: style, onClick: function onClick(e) { return _this3.handlePreview(file, e); }, title: locale.previewFile }, _react["default"].createElement(_icon["default"], { type: "visibility" })) : null; var removeIcon = showRemoveIcon ? _react["default"].createElement(_icon["default"], { type: "delete", title: locale.removeFile, onClick: function onClick() { return _this3.handleClose(file); } }) : null; var removeIconCross = showRemoveIcon ? _react["default"].createElement(_icon["default"], { type: "close", title: locale.removeFile, onClick: function onClick() { return _this3.handleClose(file); } }) : null; var actions = listType === 'picture-card' && file.status !== 'uploading' ? _react["default"].createElement("span", { className: "".concat(prefixCls, "-list-item-actions") }, previewIcon, removeIcon) : removeIconCross; var message; if (file.response && typeof file.response === 'string') { message = file.response; } else { message = file.error && file.error.statusText || locale.uploadError; } var filesizeStr = (0, _utils.getFileSizeStr)(file.size); var fileSize = showFileSize && filesizeStr !== '' && listType === 'text' ? _react["default"].createElement("span", { className: "".concat(prefixCls, "-list-item-info-filesize") }, filesizeStr) : null; var listItemInfo = _react["default"].createElement("div", { className: "".concat(prefixCls, "-list-item-info") }, _react["default"].createElement("span", { className: "".concat(prefixCls, "-list-item-span") }, icon, preview, fileSize, actions), _react["default"].createElement(_animate["default"], { transitionName: "fade", component: "" }, progress)); var listItemInfoTooltip = file.status === 'error' ? _react["default"].createElement(_tooltip["default"], { title: message }, listItemInfo) : listItemInfo; if (dragUploadList) { return _react["default"].createElement(_reactBeautifulDnd.Draggable, { key: file.uid, draggableId: String(file.uid), index: index }, function (provided) { return _react["default"].createElement("div", (0, _extends2["default"])({ className: infoUploadingClass, key: file.uid, ref: provided.innerRef }, provided.draggableProps, provided.dragHandleProps), listItemInfoTooltip); }); } return _react["default"].createElement("div", { className: infoUploadingClass, key: file.uid }, listItemInfoTooltip); }); var listClassNames = (0, _classnames["default"])((_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-list"), true), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-list-").concat(listType), true), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-list-drag"), dragUploadList), _classNames2)); var animationDirection = listType === 'picture-card' ? 'animate-inline' : 'animate'; if (dragUploadList) { return _react["default"].createElement(_reactBeautifulDnd.DragDropContext, { onDragEnd: this.onDragEnd }, _react["default"].createElement(_reactBeautifulDnd.Droppable, { droppableId: "droppable", direction: "horizontal" }, function (provided, snapshot) { return _react["default"].createElement("div", (0, _extends2["default"])({ ref: provided.innerRef, style: { background: snapshot.isDraggingOver ? '#f2f9f4' : '', border: snapshot.isDraggingOver ? '2px dashed #1ab16f' : '', display: 'inline-flex', maxWidth: '100%', flexWrap: 'wrap', overflow: 'auto' } }, provided.droppableProps, { className: listClassNames }), list, provided.placeholder); })); } return _react["default"].createElement(_animate["default"], { transitionName: "".concat(prefixCls, "-").concat(animationDirection), component: "div", className: listClassNames }, list); } }], [{ key: "contextType", get: function get() { return _ConfigContext["default"]; } }]); return UploadList; }(_react.Component); exports["default"] = UploadList; UploadList.displayName = 'UploadList'; UploadList.defaultProps = { listType: 'text', progressAttr: { strokeWidth: 2, showInfo: false }, previewFile: _utils.previewImage, showRemoveIcon: true, showPreviewIcon: true, dragUploadList: false, showFileSize: false }; //# sourceMappingURL=UploadList.js.map