acud
Version:
acg react 组件库
275 lines (273 loc) • 11.7 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _rcMotion = _interopRequireWildcard(require("rc-motion"));
var _classnames = _interopRequireDefault(require("classnames"));
var _OutlinedLoading = _interopRequireDefault(require("acud-icon/lib/icons/OutlinedLoading"));
var _OutlinedFileDoc = _interopRequireDefault(require("acud-icon/lib/icons/OutlinedFileDoc"));
var _OutlinedFileImage = _interopRequireDefault(require("acud-icon/lib/icons/OutlinedFileImage"));
var _OutlinedFileVideo = _interopRequireDefault(require("acud-icon/lib/icons/OutlinedFileVideo"));
var _OutlinedFileMusic = _interopRequireDefault(require("acud-icon/lib/icons/OutlinedFileMusic"));
var _OutlinedFileZip = _interopRequireDefault(require("acud-icon/lib/icons/OutlinedFileZip"));
var _OutlinedPhoto = _interopRequireDefault(require("acud-icon/lib/icons/OutlinedPhoto"));
var _OutlinedFile = _interopRequireDefault(require("acud-icon/lib/icons/OutlinedFile"));
var _reactNode = require("../../_util/reactNode");
var _utils = require("../utils");
var _motion = _interopRequireDefault(require("../../_util/motion"));
var _configProvider = require("../../config-provider");
var _button = _interopRequireDefault(require("../../button"));
var _useForceUpdate = _interopRequireDefault(require("../../_util/hooks/useForceUpdate"));
var _ListItem = _interopRequireDefault(require("./ListItem"));
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
/*
* upload 上传
* author zhousheng
*/
var listItemMotion = (0, _extends2["default"])({}, _motion["default"]);
delete listItemMotion.onAppearEnd;
delete listItemMotion.onEnterEnd;
delete listItemMotion.onLeaveEnd;
var renderIcon = function renderIcon(fileName) {
var type = (0, _utils.getFiletypeByName)(fileName);
var Icon = _OutlinedFileDoc["default"];
switch (type) {
case 'image':
Icon = _OutlinedFileImage["default"];
break;
case 'video':
Icon = _OutlinedFileVideo["default"];
break;
case 'audio':
Icon = _OutlinedFileMusic["default"];
break;
case 'zip':
Icon = _OutlinedFileZip["default"];
break;
default:
break;
}
return /*#__PURE__*/React.createElement(Icon, {
width: 16
});
};
var InternalUploadList = function InternalUploadList(_ref, ref) {
var listType = _ref.listType,
previewFile = _ref.previewFile,
onPreview = _ref.onPreview,
onDownload = _ref.onDownload,
onRemove = _ref.onRemove,
onUpload = _ref.onUpload,
locale = _ref.locale,
iconRender = _ref.iconRender,
isImgUrl = _ref.isImageUrl,
customizePrefixCls = _ref.prefixCls,
_ref$items = _ref.items,
items = _ref$items === void 0 ? [] : _ref$items,
showPreviewIcon = _ref.showPreviewIcon,
showUploadIcon = _ref.showUploadIcon,
showRemoveIcon = _ref.showRemoveIcon,
showDownloadIcon = _ref.showDownloadIcon,
removeIcon = _ref.removeIcon,
downloadIcon = _ref.downloadIcon,
uploadIcon = _ref.uploadIcon,
progress = _ref.progress,
_ref$motionDeadline = _ref.motionDeadline,
motionDeadline = _ref$motionDeadline === void 0 ? 2000 : _ref$motionDeadline,
appendAction = _ref.appendAction,
itemRender = _ref.itemRender;
var forceUpdate = (0, _useForceUpdate["default"])();
var _React$useState = React.useState(false),
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
motionAppear = _React$useState2[0],
setMotionAppear = _React$useState2[1];
var _React$useContext = React.useContext(_configProvider.ConfigContext),
getPrefixCls = _React$useContext.getPrefixCls,
direction = _React$useContext.direction;
// ============================= Render =============================
var prefixCls = getPrefixCls('upload', customizePrefixCls);
// ============================= Effect =============================
React.useEffect(function () {
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 || '';
forceUpdate();
});
}
});
}, [listType, items, previewFile]);
React.useEffect(function () {
setMotionAppear(true);
}, []);
// ============================= Events =============================
var onInternalPreview = function onInternalPreview(file, e) {
if (!onPreview) {
return;
}
e === null || e === void 0 ? void 0 : e.preventDefault();
return onPreview(file);
};
var onInternalDownload = function onInternalDownload(file) {
if (typeof onDownload === 'function') {
onDownload(file);
} else if (file.url) {
window.open(file.url);
}
};
var onInternalClose = function onInternalClose(file) {
onRemove === null || onRemove === void 0 ? void 0 : onRemove(file);
};
var onInternalUpload = function onInternalUpload(file) {
onUpload === null || onUpload === void 0 ? void 0 : onUpload(file);
};
var internalIconRender = function internalIconRender(file) {
if (iconRender) {
return iconRender(file, listType);
}
var isLoading = file.status === 'uploading';
var fileIcon = isImgUrl && isImgUrl(file) ? /*#__PURE__*/React.createElement(_OutlinedPhoto["default"], {
width: 24
}) : /*#__PURE__*/React.createElement(_OutlinedFile["default"], {
width: 24
});
var icon = renderIcon(file.name || file.fileName);
if (listType === 'picture') {
icon = isLoading ? /*#__PURE__*/React.createElement(_OutlinedLoading["default"], {
animation: "spin"
}) : fileIcon;
} else if (listType === 'picture-card') {
icon = isLoading ? "".concat(locale.uploading, "...") : fileIcon;
}
return icon;
};
var actionIconRender = function actionIconRender(customIcon, callback, prefixCls, title) {
var btnProps = {
type: 'text',
size: 'small',
title: title,
onClick: function onClick(e) {
callback();
if ((0, _reactNode.isValidElement)(customIcon) && customIcon.props.onClick) {
customIcon.props.onClick(e);
}
},
className: "".concat(prefixCls, "-list-item-card-actions-btn")
};
if ((0, _reactNode.isValidElement)(customIcon)) {
var btnIcon = (0, _reactNode.cloneElement)(customIcon, (0, _extends2["default"])((0, _extends2["default"])({}, customIcon.props), {
onClick: function onClick() {}
}));
return /*#__PURE__*/React.createElement(_button["default"], (0, _extends2["default"])({}, btnProps, {
icon: btnIcon
}));
}
return /*#__PURE__*/React.createElement(_button["default"], btnProps, /*#__PURE__*/React.createElement("span", null, customIcon));
};
// ============================== Ref ===============================
// Test needs
React.useImperativeHandle(ref, function () {
return {
handlePreview: onInternalPreview,
handleDownload: onInternalDownload
};
});
// >>> Motion config
var motionKeyList = (0, _toConsumableArray2["default"])(items.map(function (file) {
return {
key: file.uid,
file: file
};
}));
var animationDirection = listType === 'picture-card' ? 'animate-inline' : 'animate';
// const transitionName = list.length === 0 ? '' : `${prefixCls}-${animationDirection}`;
var motionConfig = {
motionDeadline: motionDeadline,
motionName: "".concat(prefixCls, "-").concat(animationDirection),
keys: motionKeyList,
motionAppear: motionAppear
};
if (listType !== 'picture-card') {
motionConfig = (0, _extends2["default"])((0, _extends2["default"])({}, listItemMotion), motionConfig);
}
var listClassNames = (0, _classnames["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, "".concat(prefixCls, "-list"), true), "".concat(prefixCls, "-list-").concat(listType), true), "".concat(prefixCls, "-list-rtl"), direction === 'rtl'));
return /*#__PURE__*/React.createElement("div", {
className: listClassNames
}, appendAction && /*#__PURE__*/React.createElement(_rcMotion["default"], motionConfig, function (_ref2) {
var motionClassName = _ref2.className,
motionStyle = _ref2.style;
return (0, _reactNode.cloneElement)(appendAction, function (oriProps) {
return {
className: (0, _classnames["default"])(oriProps.className, motionClassName),
style: (0, _extends2["default"])((0, _extends2["default"])({}, motionStyle), oriProps.style)
};
});
}), /*#__PURE__*/React.createElement(_rcMotion.CSSMotionList, (0, _extends2["default"])({}, motionConfig, {
component: false
}), function (_ref3) {
var key = _ref3.key,
file = _ref3.file,
motionClassName = _ref3.className,
motionStyle = _ref3.style;
return /*#__PURE__*/React.createElement(_ListItem["default"], {
key: key,
locale: locale,
prefixCls: prefixCls,
className: motionClassName,
style: motionStyle,
file: file,
items: items,
progress: progress,
listType: listType,
isImgUrl: isImgUrl,
showPreviewIcon: showPreviewIcon,
showUploadIcon: showUploadIcon,
showRemoveIcon: showRemoveIcon,
showDownloadIcon: showDownloadIcon,
removeIcon: removeIcon,
downloadIcon: downloadIcon,
uploadIcon: uploadIcon,
iconRender: internalIconRender,
actionIconRender: actionIconRender,
itemRender: itemRender,
onPreview: onInternalPreview,
onDownload: onInternalDownload,
onClose: onInternalClose,
onUpload: onInternalUpload,
motionDeadline: motionDeadline
});
}));
};
var UploadList = /*#__PURE__*/React.forwardRef(InternalUploadList);
UploadList.displayName = 'UploadList';
UploadList.defaultProps = {
listType: 'text',
progress: {
// strokeWidth: 4,
// showInfo: false
},
showUploadIcon: true,
motionDeadline: 2000,
showRemoveIcon: true,
showDownloadIcon: false,
showPreviewIcon: true,
previewFile: _utils.previewImage,
isImageUrl: _utils.isImageUrl
};
var _default = exports["default"] = UploadList;