index.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _vue = require("vue");
  8. var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
  9. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  10. var _LoadingOutlined = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/LoadingOutlined"));
  11. var _PaperClipOutlined = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/PaperClipOutlined"));
  12. var _PictureTwoTone = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/PictureTwoTone"));
  13. var _FileTwoTone = _interopRequireDefault(require("@ant-design/icons-vue/lib/icons/FileTwoTone"));
  14. var _interface = require("../interface");
  15. var _utils = require("../utils");
  16. var _button = _interopRequireDefault(require("../../button"));
  17. var _ListItem = _interopRequireDefault(require("./ListItem"));
  18. var _propsUtil = require("../../_util/props-util");
  19. var _useConfigInject2 = _interopRequireDefault(require("../../_util/hooks/useConfigInject"));
  20. var _transition = require("../../_util/transition");
  21. var _collapseMotion = _interopRequireDefault(require("../../_util/collapseMotion"));
  22. var HackSlot = function HackSlot(_, _ref) {
  23. var _slots$default;
  24. var slots = _ref.slots;
  25. return (0, _propsUtil.filterEmpty)((_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots))[0];
  26. };
  27. var _default2 = (0, _vue.defineComponent)({
  28. compatConfig: {
  29. MODE: 3
  30. },
  31. name: 'AUploadList',
  32. props: (0, _propsUtil.initDefaultProps)((0, _interface.uploadListProps)(), {
  33. listType: 'text',
  34. progress: {
  35. strokeWidth: 2,
  36. showInfo: false
  37. },
  38. showRemoveIcon: true,
  39. showDownloadIcon: false,
  40. showPreviewIcon: true,
  41. previewFile: _utils.previewImage,
  42. isImageUrl: _utils.isImageUrl,
  43. items: [],
  44. appendActionVisible: true
  45. }),
  46. setup: function setup(props, _ref2) {
  47. var slots = _ref2.slots,
  48. expose = _ref2.expose;
  49. var motionAppear = (0, _vue.ref)(false);
  50. var instance = (0, _vue.getCurrentInstance)();
  51. (0, _vue.onMounted)(function () {
  52. motionAppear.value == true;
  53. });
  54. (0, _vue.watchEffect)(function () {
  55. if (props.listType !== 'picture' && props.listType !== 'picture-card') {
  56. return;
  57. }
  58. (props.items || []).forEach(function (file) {
  59. if (typeof document === 'undefined' || typeof window === 'undefined' || !window.FileReader || !window.File || !(file.originFileObj instanceof File || file.originFileObj instanceof Blob) || file.thumbUrl !== undefined) {
  60. return;
  61. }
  62. file.thumbUrl = '';
  63. if (props.previewFile) {
  64. props.previewFile(file.originFileObj).then(function (previewDataUrl) {
  65. // Need append '' to avoid dead loop
  66. file.thumbUrl = previewDataUrl || '';
  67. instance.update();
  68. });
  69. }
  70. });
  71. });
  72. // ============================= Events =============================
  73. var onInternalPreview = function onInternalPreview(file, e) {
  74. if (!props.onPreview) {
  75. return;
  76. }
  77. e === null || e === void 0 ? void 0 : e.preventDefault();
  78. return props.onPreview(file);
  79. };
  80. var onInternalDownload = function onInternalDownload(file) {
  81. if (typeof props.onDownload === 'function') {
  82. props.onDownload(file);
  83. } else if (file.url) {
  84. window.open(file.url);
  85. }
  86. };
  87. var onInternalClose = function onInternalClose(file) {
  88. var _props$onRemove;
  89. (_props$onRemove = props.onRemove) === null || _props$onRemove === void 0 ? void 0 : _props$onRemove.call(props, file);
  90. };
  91. var internalIconRender = function internalIconRender(_ref3) {
  92. var file = _ref3.file;
  93. var iconRender = props.iconRender || slots.iconRender;
  94. if (iconRender) {
  95. return iconRender({
  96. file: file,
  97. listType: props.listType
  98. });
  99. }
  100. var isLoading = file.status === 'uploading';
  101. var fileIcon = props.isImageUrl && props.isImageUrl(file) ? (0, _vue.createVNode)(_PictureTwoTone.default, null, null) : (0, _vue.createVNode)(_FileTwoTone.default, null, null);
  102. var icon = isLoading ? (0, _vue.createVNode)(_LoadingOutlined.default, null, null) : (0, _vue.createVNode)(_PaperClipOutlined.default, null, null);
  103. if (props.listType === 'picture') {
  104. icon = isLoading ? (0, _vue.createVNode)(_LoadingOutlined.default, null, null) : fileIcon;
  105. } else if (props.listType === 'picture-card') {
  106. icon = isLoading ? props.locale.uploading : fileIcon;
  107. }
  108. return icon;
  109. };
  110. var actionIconRender = function actionIconRender(opt) {
  111. var customIcon = opt.customIcon,
  112. callback = opt.callback,
  113. prefixCls = opt.prefixCls,
  114. title = opt.title;
  115. var btnProps = {
  116. type: 'text',
  117. size: 'small',
  118. title: title,
  119. onClick: function onClick() {
  120. callback();
  121. },
  122. class: "".concat(prefixCls, "-list-item-card-actions-btn")
  123. };
  124. if ((0, _propsUtil.isValidElement)(customIcon)) {
  125. return (0, _vue.createVNode)(_button.default, btnProps, {
  126. icon: function icon() {
  127. return customIcon;
  128. }
  129. });
  130. }
  131. return (0, _vue.createVNode)(_button.default, btnProps, {
  132. default: function _default() {
  133. return [(0, _vue.createVNode)("span", null, [customIcon])];
  134. }
  135. });
  136. };
  137. expose({
  138. handlePreview: onInternalPreview,
  139. handleDownload: onInternalDownload
  140. });
  141. var _useConfigInject = (0, _useConfigInject2.default)('upload', props),
  142. prefixCls = _useConfigInject.prefixCls,
  143. direction = _useConfigInject.direction;
  144. var listClassNames = (0, _vue.computed)(function () {
  145. var _ref4;
  146. return _ref4 = {}, (0, _defineProperty2.default)(_ref4, "".concat(prefixCls.value, "-list"), true), (0, _defineProperty2.default)(_ref4, "".concat(prefixCls.value, "-list-").concat(props.listType), true), (0, _defineProperty2.default)(_ref4, "".concat(prefixCls.value, "-list-rtl"), direction.value === 'rtl'), _ref4;
  147. });
  148. var transitionGroupProps = (0, _vue.computed)(function () {
  149. return (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _collapseMotion.default)("".concat(prefixCls.value, "-").concat(props.listType === 'picture-card' ? 'animate-inline' : 'animate'))), (0, _transition.getTransitionGroupProps)("".concat(prefixCls.value, "-").concat(props.listType === 'picture-card' ? 'animate-inline' : 'animate'))), {}, {
  150. class: listClassNames.value,
  151. appear: motionAppear.value
  152. });
  153. });
  154. return function () {
  155. var listType = props.listType,
  156. locale = props.locale,
  157. isImgUrl = props.isImageUrl,
  158. _props$items = props.items,
  159. items = _props$items === void 0 ? [] : _props$items,
  160. showPreviewIcon = props.showPreviewIcon,
  161. showRemoveIcon = props.showRemoveIcon,
  162. showDownloadIcon = props.showDownloadIcon,
  163. removeIcon = props.removeIcon,
  164. previewIcon = props.previewIcon,
  165. downloadIcon = props.downloadIcon,
  166. progress = props.progress,
  167. appendAction = props.appendAction,
  168. itemRender = props.itemRender,
  169. appendActionVisible = props.appendActionVisible;
  170. var appendActionDom = appendAction === null || appendAction === void 0 ? void 0 : appendAction();
  171. return (0, _vue.createVNode)(_transition.TransitionGroup, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, transitionGroupProps.value), {}, {
  172. "tag": "div"
  173. }), {
  174. default: function _default() {
  175. return [items.map(function (file) {
  176. var key = file.uid;
  177. return (0, _vue.createVNode)(_ListItem.default, {
  178. "key": key,
  179. "locale": locale,
  180. "prefixCls": prefixCls.value,
  181. "file": file,
  182. "items": items,
  183. "progress": progress,
  184. "listType": listType,
  185. "isImgUrl": isImgUrl,
  186. "showPreviewIcon": showPreviewIcon,
  187. "showRemoveIcon": showRemoveIcon,
  188. "showDownloadIcon": showDownloadIcon,
  189. "onPreview": onInternalPreview,
  190. "onDownload": onInternalDownload,
  191. "onClose": onInternalClose,
  192. "removeIcon": removeIcon,
  193. "previewIcon": previewIcon,
  194. "downloadIcon": downloadIcon,
  195. "itemRender": itemRender
  196. }, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, slots), {}, {
  197. iconRender: internalIconRender,
  198. actionIconRender: actionIconRender
  199. }));
  200. }), appendAction ? (0, _vue.withDirectives)((0, _vue.createVNode)(HackSlot, {
  201. "key": "__ant_upload_appendAction"
  202. }, {
  203. default: function _default() {
  204. return appendActionDom;
  205. }
  206. }), [[_vue.vShow, !!appendActionVisible]]) : null];
  207. }
  208. });
  209. };
  210. }
  211. });
  212. exports.default = _default2;