UNPKG

choerodon-ui

Version:

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

389 lines (333 loc) 14.5 kB
"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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _react = _interopRequireWildcard(require("react")); var _mobxReactLite = require("mobx-react-lite"); var _classnames3 = _interopRequireDefault(require("classnames")); var _isString = _interopRequireDefault(require("lodash/isString")); var _isFunction = _interopRequireDefault(require("lodash/isFunction")); var _enum = require("../../../lib/_util/enum"); var _ConfigContext = _interopRequireDefault(require("../../../lib/config-provider/ConfigContext")); var _enum2 = require("../../../lib/progress/enum"); var _Progress = _interopRequireDefault(require("../progress/Progress")); var _icon = _interopRequireDefault(require("../icon")); var _Picture = _interopRequireDefault(require("../picture/Picture")); var _Button = _interopRequireDefault(require("../button/Button")); var _enum3 = require("../button/enum"); var _singleton = require("../tooltip/singleton"); var _utils = require("./utils"); var _Tooltip = _interopRequireDefault(require("../tooltip/Tooltip")); var _localeContext = require("../locale-context"); var ATTACHMENT_TARGET = 'attachment-preview'; var Item = function Item(props) { var _classnames2; var attachment = props.attachment, listType = props.listType, prefixCls = props.prefixCls, onUpload = props.onUpload, onRemove = props.onRemove, width = props.pictureWidth, bucketName = props.bucketName, onHistory = props.onHistory, onPreview = props.onPreview, _props$previewTarget = props.previewTarget, previewTarget = _props$previewTarget === void 0 ? ATTACHMENT_TARGET : _props$previewTarget, bucketDirectory = props.bucketDirectory, storageCode = props.storageCode, attachmentUUID = props.attachmentUUID, isCard = props.isCard, provided = props.provided, readOnly = props.readOnly, restCount = props.restCount, draggable = props.draggable, index = props.index, hidden = props.hidden, isPublic = props.isPublic, showSize = props.showSize; var status = attachment.status, name = attachment.name, filename = attachment.filename, ext = attachment.ext, url = attachment.url, size = attachment.size, type = attachment.type; var _useContext = (0, _react.useContext)(_ConfigContext["default"]), getConfig = _useContext.getConfig, getTooltipTheme = _useContext.getTooltipTheme, getTooltipPlacement = _useContext.getTooltipPlacement; var attachmentConfig = getConfig('attachment'); var tooltipRef = (0, _react.useRef)(false); var pictureRef = (0, _react.useRef)(null); var getPreviewUrl = attachmentConfig.getPreviewUrl, getDownloadUrl = attachmentConfig.getDownloadUrl; var src = getPreviewUrl ? getPreviewUrl({ attachment: attachment, bucketName: bucketName, bucketDirectory: bucketDirectory, storageCode: storageCode, attachmentUUID: attachmentUUID, isPublic: isPublic }) : url; var downloadUrl = getDownloadUrl && getDownloadUrl({ attachment: attachment, bucketName: bucketName, bucketDirectory: bucketDirectory, storageCode: storageCode, attachmentUUID: attachmentUUID, isPublic: isPublic }); var dragProps = (0, _objectSpread2["default"])({}, provided.dragHandleProps); var isPicture = type.startsWith('image') || ['png', 'gif', 'jpg', 'webp', 'jpeg', 'bmp', 'tif', 'pic', 'svg'].includes(ext); var preview = !!src && (status === 'success' || status === 'done'); var handlePreview = (0, _react.useCallback)(function () { var current = pictureRef.current; if (current) { current.preview(); } }, [pictureRef]); var renderDragger = function renderDragger() { if (draggable && !isCard) { var iconProps = { className: "".concat(prefixCls, "-drag-icon"), type: 'baseline-drag_indicator' }; if (status !== 'deleting') { (0, _extends2["default"])(iconProps, dragProps); } return /*#__PURE__*/_react["default"].createElement(_icon["default"], (0, _extends2["default"])({}, iconProps)); } }; var renderImagePreview = function renderImagePreview() { if (listType === 'text') { var renderIcon = attachmentConfig.renderIcon; var defaultIcon = /*#__PURE__*/_react["default"].createElement(_icon["default"], { type: "insert_drive_file" }); var icon = renderIcon ? renderIcon(attachment, listType, defaultIcon) : defaultIcon; var isSrcIcon = (0, _isString["default"])(icon); return isPicture || isSrcIcon ? /*#__PURE__*/_react["default"].createElement(_Picture["default"], { width: 14, height: 14, alt: name, previewUrl: src, downloadUrl: downloadUrl, src: isSrcIcon ? icon : undefined, objectFit: "contain", status: "loaded", index: index, className: "".concat(prefixCls, "-icon"), previewTarget: isSrcIcon && !isPicture ? previewTarget : undefined, preview: preview, onPreview: onPreview, ref: pictureRef }, /*#__PURE__*/(0, _react.isValidElement)(icon) ? icon : undefined) : preview ? /*#__PURE__*/_react["default"].createElement(_Button["default"], { href: src, target: previewTarget, funcType: _enum3.FuncType.link, className: "".concat(prefixCls, "-icon") }, icon) : /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-icon") }, icon); } if (isCard || listType === 'picture') { if ((preview || status === 'deleting') && isPicture) { return /*#__PURE__*/_react["default"].createElement(_Picture["default"], { width: width, height: width, alt: name, src: src || url, downloadUrl: downloadUrl, lazy: true, objectFit: "contain", index: index, preview: preview }); } return /*#__PURE__*/_react["default"].createElement(_Picture["default"], { width: width, height: width, alt: name, status: status === 'error' ? 'error' : 'empty', index: index }); } }; var renderPlaceholder = function renderPlaceholder() { if (restCount && isCard) { return /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-placeholder") }, "+", restCount); } }; var renderTitle = function renderTitle(isCardTitle) { var fileName = /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", { className: "".concat(prefixCls, "-name") }, filename), ext && /*#__PURE__*/_react["default"].createElement("span", { className: "".concat(prefixCls, "-ext") }, ".", ext)); var nameNode = preview && listType === 'text' ? /*#__PURE__*/_react["default"].createElement("a", (0, _extends2["default"])({}, isPicture ? { onClick: handlePreview } : { href: src, target: previewTarget }, { className: "".concat(prefixCls, "-link") }), fileName) : fileName; return /*#__PURE__*/_react["default"].createElement("span", { className: "".concat(prefixCls, "-title"), style: isCardTitle ? { width: width } : undefined }, nameNode, !isCardTitle && showSize && /*#__PURE__*/_react["default"].createElement("span", { className: "".concat(prefixCls, "-size") }, " (", (0, _utils.formatFileSize)(size), ")")); }; var renderProgress = function renderProgress() { if (status === 'uploading') { return /*#__PURE__*/_react["default"].createElement(_Progress["default"], { value: attachment.percent || 0, size: _enum.Size.small, showInfo: false, strokeWidth: 2, className: "".concat(prefixCls, "-progress"), status: _enum2.ProgressStatus.normal }); } }; var renderButtons = function renderButtons() { var buttons = []; if (!readOnly && status === 'error' && !attachment.invalid) { var upProps = { key: 'upload', className: (0, _classnames3["default"])("".concat(prefixCls, "-icon")), icon: 'replay', onClick: function onClick() { return onUpload(attachment); }, funcType: _enum3.FuncType.link, block: isCard }; buttons.push( /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({}, upProps))); } if (!status || status === 'success' || status === 'done') { if (attachmentUUID && onHistory) { var historyProps = { className: (0, _classnames3["default"])("".concat(prefixCls, "-icon")), icon: 'library_books', onClick: function onClick() { return onHistory(attachment, attachmentUUID); }, funcType: _enum3.FuncType.link, block: isCard }; buttons.push( /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], { key: "history", title: (0, _localeContext.$l)('Attachment', 'view_operation_records') }, /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({}, historyProps)))); } if (downloadUrl) { var downProps = { className: (0, _classnames3["default"])("".concat(prefixCls, "-icon")), icon: isCard ? 'arrow_downward' : 'get_app', funcType: _enum3.FuncType.link, href: (0, _isString["default"])(downloadUrl) ? downloadUrl : undefined, onClick: (0, _isFunction["default"])(downloadUrl) ? downloadUrl : undefined, target: previewTarget, block: isCard }; buttons.push( /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], { key: "download", title: (0, _localeContext.$l)('Attachment', 'download') }, /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({}, downProps)))); } } if (attachmentUUID && !readOnly && status !== 'uploading') { var rmProps = { className: (0, _classnames3["default"])("".concat(prefixCls, "-icon")), icon: isCard ? 'delete_forever-o' : 'close', onClick: function onClick() { return onRemove(attachment); }, funcType: _enum3.FuncType.link, block: isCard }; buttons.push( /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], { key: "remove", title: status === 'deleting' ? undefined : (0, _localeContext.$l)('Attachment', 'delete') }, /*#__PURE__*/_react["default"].createElement(_Button["default"], (0, _extends2["default"])({}, rmProps)))); } if (buttons.length) { return /*#__PURE__*/_react["default"].createElement("div", { className: (0, _classnames3["default"])("".concat(prefixCls, "-buttons"), (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-buttons-visible"), status === 'deleting')) }, buttons); } }; var renderErrorMessage = function renderErrorMessage() { if (status === 'error') { var errorMessage = attachment.errorMessage; if (errorMessage) { return /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-error-content") }, /*#__PURE__*/_react["default"].createElement(_icon["default"], { type: "warning" }), /*#__PURE__*/_react["default"].createElement("span", { className: "".concat(prefixCls, "-error-message") }, errorMessage)); } } }; var errorMessageNode = renderErrorMessage(); var handleMouseEnter = (0, _react.useCallback)(function (e) { if (errorMessageNode) { (0, _singleton.show)(e.currentTarget, { title: errorMessageNode, theme: getTooltipTheme('validation'), placement: getTooltipPlacement('validation') || 'bottomLeft' }); tooltipRef.current = true; } }, [errorMessageNode, getTooltipTheme, getTooltipPlacement, tooltipRef]); var handleMouseLeave = (0, _react.useCallback)(function () { if (tooltipRef.current) { (0, _singleton.hide)(); tooltipRef.current = false; } }, [tooltipRef]); (0, _react.useEffect)(function () { return function () { if (tooltipRef.current) { (0, _singleton.hide)(); tooltipRef.current = false; } }; }, []); var listProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({ ref: provided.innerRef, className: (0, _classnames3["default"])(prefixCls, (_classnames2 = {}, (0, _defineProperty2["default"])(_classnames2, "".concat(prefixCls, "-error"), status === 'error'), (0, _defineProperty2["default"])(_classnames2, "".concat(prefixCls, "-success"), status === 'success'), _classnames2)) }, provided.draggableProps), {}, { style: (0, _objectSpread2["default"])({}, provided.draggableProps.style) }); if (draggable && isCard) { (0, _extends2["default"])(listProps, dragProps); } return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, listProps, { hidden: hidden }), /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-container"), onMouseEnter: isCard ? handleMouseEnter : undefined, onMouseLeave: isCard ? handleMouseLeave : undefined }, /*#__PURE__*/_react["default"].createElement("div", { className: "".concat(prefixCls, "-content") }, renderDragger(), renderImagePreview(), renderPlaceholder(), !restCount && !isCard && renderTitle(), !restCount && renderButtons()), errorMessageNode, renderProgress()), !restCount && isCard && renderTitle(true)); }; Item.displayName = 'Item'; var _default = (0, _mobxReactLite.observer)(Item); exports["default"] = _default; //# sourceMappingURL=Item.js.map