UNPKG

rsuite

Version:

A suite of react components

319 lines (255 loc) 9.29 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var React = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _lodash = _interopRequireDefault(require("lodash")); var _FormattedMessage = _interopRequireDefault(require("../IntlProvider/FormattedMessage")); var _utils = require("../utils"); var getSize = function getSize(size) { if (size === void 0) { size = 0; } var K = 1024; var M = 1024 * 1024; var G = 1024 * 1024 * 1024; if (size > G) { return (size / G).toFixed(2) + "GB"; } if (size > M) { return (size / M).toFixed(2) + "MB"; } if (size > K) { return (size / K).toFixed(2) + "KB"; } return size + "B"; }; var UploadFileItem = /*#__PURE__*/ function (_React$Component) { (0, _inheritsLoose2.default)(UploadFileItem, _React$Component); function UploadFileItem(props) { var _this; _this = _React$Component.call(this, props) || this; _this.handleRemove = function (event) { var _this$props = _this.props, disabled = _this$props.disabled, onCancel = _this$props.onCancel, file = _this$props.file; if (disabled) { return; } onCancel && onCancel(file.fileKey, event); }; _this.handlePreview = function (event) { var _this$props2 = _this.props, disabled = _this$props2.disabled, onPreview = _this$props2.onPreview, file = _this$props2.file; if (disabled) { return; } onPreview && onPreview(file, event); }; _this.handleReupload = function (event) { var _this$props3 = _this.props, disabled = _this$props3.disabled, onReupload = _this$props3.onReupload, file = _this$props3.file; if (disabled) { return; } onReupload && onReupload(file, event); }; _this.addPrefix = function (name) { return (0, _utils.prefix)(_this.props.classPrefix)(name); }; var _file = props.file; _this.state = { previewImage: _file.url ? _file.url : null }; if (!_file.url) { _this.getThumbnail(function (previewImage) { _this.setState({ previewImage: previewImage }); }); } return _this; } var _proto = UploadFileItem.prototype; _proto.getThumbnail = function getThumbnail(callback) { var _this$props4 = this.props, file = _this$props4.file, listType = _this$props4.listType, maxPreviewFileSize = _this$props4.maxPreviewFileSize; if (!~['picture-text', 'picture'].indexOf(listType)) { return; } if (!file.blobFile || _lodash.default.get(file, 'blobFile.size') > maxPreviewFileSize) { return; } (0, _utils.previewFile)(file.blobFile, callback); }; _proto.renderProgressBar = function renderProgressBar() { var _this$props5 = this.props, disabled = _this$props5.disabled, file = _this$props5.file; var _file$progress = file.progress, progress = _file$progress === void 0 ? 0 : _file$progress, status = file.status; var show = !disabled && status === 'uploading'; var visibility = show ? 'visible' : 'hidden'; var wrapStyle = { visibility: visibility }; var progressbarStyle = { width: progress + "%" }; return React.createElement("div", { className: this.addPrefix('progress'), style: wrapStyle }, React.createElement("div", { className: this.addPrefix('progress-bar'), style: progressbarStyle })); }; _proto.renderPreview = function renderPreview() { var previewImage = this.state.previewImage; var file = this.props.file; if (previewImage) { return React.createElement("div", { className: this.addPrefix('preview') }, React.createElement("img", { role: "presentation", src: previewImage, alt: file.name, onClick: this.handlePreview })); } return null; }; _proto.renderLoading = function renderLoading() { var _classNames; var file = this.props.file; var uploading = file.status === 'uploading'; var classes = (0, _classnames.default)(this.addPrefix('icon-wrapper'), (_classNames = {}, _classNames[this.addPrefix('icon-loading')] = uploading, _classNames)); return React.createElement("div", { className: classes }, React.createElement("i", { className: this.addPrefix('icon') })); }; _proto.renderRemoveButton = function renderRemoveButton() { var removable = this.props.removable; if (!removable) { return null; } return React.createElement("a", { "aria-label": "Remove", className: this.addPrefix('btn-remove'), onClick: this.handleRemove, role: "button", tabIndex: -1 }, React.createElement("span", { "aria-hidden": "true" }, "\xD7")); }; _proto.renderErrorStatus = function renderErrorStatus() { var file = this.props.file; if (file.status === 'error') { return React.createElement("div", { className: this.addPrefix('status') }, React.createElement(_FormattedMessage.default, { id: "error" }), React.createElement("a", { role: "button", tabIndex: -1, onClick: this.handleReupload }, React.createElement("i", { className: this.addPrefix('icon-reupload') }))); } return null; }; _proto.renderFileSize = function renderFileSize() { var file = this.props.file; if (file.status !== 'error' && file.blobFile) { return React.createElement("span", { className: this.addPrefix('size') }, getSize(_lodash.default.get(file, 'blobFile.size'))); } return null; }; _proto.renderFilePanel = function renderFilePanel() { var _this$props6 = this.props, file = _this$props6.file, renderFileInfo = _this$props6.renderFileInfo; var fileElement = React.createElement("a", { role: "presentation", className: this.addPrefix('title'), onClick: this.handlePreview }, file.name); return React.createElement("div", { className: this.addPrefix('panel') }, React.createElement("div", { className: this.addPrefix('content') }, renderFileInfo ? renderFileInfo(file, fileElement) : fileElement, this.renderErrorStatus(), this.renderFileSize())); }; _proto.render = function render() { var _classNames2; var _this$props7 = this.props, disabled = _this$props7.disabled, file = _this$props7.file, classPrefix = _this$props7.classPrefix, listType = _this$props7.listType, className = _this$props7.className, rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props7, ["disabled", "file", "classPrefix", "listType", "className"]); var classes = (0, _classnames.default)(classPrefix, className, this.addPrefix(listType), (_classNames2 = {}, _classNames2[this.addPrefix('has-error')] = file.status === 'error', _classNames2[this.addPrefix('disabled')] = disabled, _classNames2)); var unhandled = (0, _utils.getUnhandledProps)(UploadFileItem, rest); if (listType === 'picture') { return React.createElement("div", { className: classes }, this.renderLoading(), this.renderPreview(), this.renderErrorStatus(), this.renderRemoveButton()); } if (listType === 'picture-text') { return React.createElement("div", { className: classes }, this.renderLoading(), this.renderPreview(), this.renderFilePanel(), this.renderProgressBar(), this.renderRemoveButton()); } return React.createElement("div", (0, _extends2.default)({}, unhandled, { className: classes }), this.renderLoading(), this.renderFilePanel(), this.renderProgressBar(), this.renderRemoveButton()); }; return UploadFileItem; }(React.Component); UploadFileItem.propTypes = { file: _propTypes.default.object, listType: _propTypes.default.oneOf(['text', 'picture-text', 'picture']), disabled: _propTypes.default.bool, className: _propTypes.default.string, maxPreviewFileSize: _propTypes.default.number, classPrefix: _propTypes.default.string, removable: _propTypes.default.bool, renderFileInfo: _propTypes.default.func, onCancel: _propTypes.default.func, onPreview: _propTypes.default.func, onReupload: _propTypes.default.func }; UploadFileItem.defaultProps = { maxPreviewFileSize: 1024 * 1024 * 5, // 5MB listType: 'text', removable: true }; var _default = (0, _utils.defaultProps)({ classPrefix: 'uploader-file-item' })(UploadFileItem); exports.default = _default; module.exports = exports.default;