1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | var _typeof3 = require("@babel/runtime/helpers/typeof");
|
6 |
|
7 | Object.defineProperty(exports, "__esModule", {
|
8 | value: true
|
9 | });
|
10 | exports["default"] = void 0;
|
11 |
|
12 | var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
13 |
|
14 | var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
15 |
|
16 | var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
17 |
|
18 | var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
19 |
|
20 | var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
21 |
|
22 | var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
23 |
|
24 | var React = _interopRequireWildcard(require("react"));
|
25 |
|
26 | var _rcUpload = _interopRequireDefault(require("rc-upload"));
|
27 |
|
28 | var _useMergedState3 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
|
29 |
|
30 | var _classnames = _interopRequireDefault(require("classnames"));
|
31 |
|
32 | var _Dragger = _interopRequireDefault(require("./Dragger"));
|
33 |
|
34 | var _UploadList = _interopRequireDefault(require("./UploadList"));
|
35 |
|
36 | var _utils = require("./utils");
|
37 |
|
38 | var _LocaleReceiver = _interopRequireDefault(require("../locale-provider/LocaleReceiver"));
|
39 |
|
40 | var _default2 = _interopRequireDefault(require("../locale/default"));
|
41 |
|
42 | var _configProvider = require("../config-provider");
|
43 |
|
44 | var _devWarning = _interopRequireDefault(require("../_util/devWarning"));
|
45 |
|
46 | function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
47 |
|
48 | function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
49 |
|
50 | var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
|
51 | function adopt(value) {
|
52 | return value instanceof P ? value : new P(function (resolve) {
|
53 | resolve(value);
|
54 | });
|
55 | }
|
56 |
|
57 | return new (P || (P = Promise))(function (resolve, reject) {
|
58 | function fulfilled(value) {
|
59 | try {
|
60 | step(generator.next(value));
|
61 | } catch (e) {
|
62 | reject(e);
|
63 | }
|
64 | }
|
65 |
|
66 | function rejected(value) {
|
67 | try {
|
68 | step(generator["throw"](value));
|
69 | } catch (e) {
|
70 | reject(e);
|
71 | }
|
72 | }
|
73 |
|
74 | function step(result) {
|
75 | result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
76 | }
|
77 |
|
78 | step((generator = generator.apply(thisArg, _arguments || [])).next());
|
79 | });
|
80 | };
|
81 |
|
82 | var LIST_IGNORE = "__LIST_IGNORE_".concat(Date.now(), "__");
|
83 |
|
84 | var InternalUpload = function InternalUpload(props, ref) {
|
85 | var _classNames2;
|
86 |
|
87 | var fileList = props.fileList,
|
88 | defaultFileList = props.defaultFileList,
|
89 | onRemove = props.onRemove,
|
90 | showUploadList = props.showUploadList,
|
91 | listType = props.listType,
|
92 | onPreview = props.onPreview,
|
93 | onDownload = props.onDownload,
|
94 | onChange = props.onChange,
|
95 | onDrop = props.onDrop,
|
96 | previewFile = props.previewFile,
|
97 | disabled = props.disabled,
|
98 | propLocale = props.locale,
|
99 | iconRender = props.iconRender,
|
100 | isImageUrl = props.isImageUrl,
|
101 | progress = props.progress,
|
102 | customizePrefixCls = props.prefixCls,
|
103 | className = props.className,
|
104 | type = props.type,
|
105 | children = props.children,
|
106 | style = props.style,
|
107 | itemRender = props.itemRender,
|
108 | maxCount = props.maxCount;
|
109 |
|
110 | var _useMergedState = (0, _useMergedState3["default"])(defaultFileList || [], {
|
111 | value: fileList,
|
112 | postState: function postState(list) {
|
113 | return list !== null && list !== void 0 ? list : [];
|
114 | }
|
115 | }),
|
116 | _useMergedState2 = (0, _slicedToArray2["default"])(_useMergedState, 2),
|
117 | mergedFileList = _useMergedState2[0],
|
118 | setMergedFileList = _useMergedState2[1];
|
119 |
|
120 | var _React$useState = React.useState('drop'),
|
121 | _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
|
122 | dragState = _React$useState2[0],
|
123 | setDragState = _React$useState2[1];
|
124 |
|
125 | var upload = React.useRef();
|
126 | React.useEffect(function () {
|
127 | (0, _devWarning["default"])('fileList' in props || !('value' in props), 'Upload', '`value` is not a valid prop, do you mean `fileList`?');
|
128 | (0, _devWarning["default"])(!('transformFile' in props), 'Upload', '`transformFile` is deprecated. Please use `beforeUpload` directly.');
|
129 | }, []);
|
130 |
|
131 | React.useMemo(function () {
|
132 | var timestamp = Date.now();
|
133 | (fileList || []).forEach(function (file, index) {
|
134 | if (!file.uid && !Object.isFrozen(file)) {
|
135 | file.uid = "__AUTO__".concat(timestamp, "_").concat(index, "__");
|
136 | }
|
137 | });
|
138 | }, [fileList]);
|
139 |
|
140 | var onInternalChange = function onInternalChange(file, changedFileList, event) {
|
141 | var cloneList = (0, _toConsumableArray2["default"])(changedFileList);
|
142 |
|
143 | if (maxCount === 1) {
|
144 | cloneList = cloneList.slice(-1);
|
145 | } else if (maxCount) {
|
146 | cloneList = cloneList.slice(0, maxCount);
|
147 | }
|
148 |
|
149 | setMergedFileList(cloneList);
|
150 | var changeInfo = {
|
151 | file: file,
|
152 | fileList: cloneList
|
153 | };
|
154 |
|
155 | if (event) {
|
156 | changeInfo.event = event;
|
157 | }
|
158 |
|
159 | onChange === null || onChange === void 0 ? void 0 : onChange(changeInfo);
|
160 | };
|
161 |
|
162 | var mergedBeforeUpload = function mergedBeforeUpload(file, fileListArgs) {
|
163 | return __awaiter(void 0, void 0, void 0, _regenerator["default"].mark(function _callee() {
|
164 | var beforeUpload, transformFile, parsedFile, result;
|
165 | return _regenerator["default"].wrap(function _callee$(_context) {
|
166 | while (1) {
|
167 | switch (_context.prev = _context.next) {
|
168 | case 0:
|
169 | beforeUpload = props.beforeUpload, transformFile = props.transformFile;
|
170 | parsedFile = file;
|
171 |
|
172 | if (!beforeUpload) {
|
173 | _context.next = 13;
|
174 | break;
|
175 | }
|
176 |
|
177 | _context.next = 5;
|
178 | return beforeUpload(file, fileListArgs);
|
179 |
|
180 | case 5:
|
181 | result = _context.sent;
|
182 |
|
183 | if (!(result === false)) {
|
184 | _context.next = 8;
|
185 | break;
|
186 | }
|
187 |
|
188 | return _context.abrupt("return", false);
|
189 |
|
190 | case 8:
|
191 |
|
192 | delete file[LIST_IGNORE];
|
193 |
|
194 | if (!(result === LIST_IGNORE)) {
|
195 | _context.next = 12;
|
196 | break;
|
197 | }
|
198 |
|
199 | Object.defineProperty(file, LIST_IGNORE, {
|
200 | value: true,
|
201 | configurable: true
|
202 | });
|
203 | return _context.abrupt("return", false);
|
204 |
|
205 | case 12:
|
206 | if ((0, _typeof2["default"])(result) === 'object' && result) {
|
207 | parsedFile = result;
|
208 | }
|
209 |
|
210 | case 13:
|
211 | if (!transformFile) {
|
212 | _context.next = 17;
|
213 | break;
|
214 | }
|
215 |
|
216 | _context.next = 16;
|
217 | return transformFile(parsedFile);
|
218 |
|
219 | case 16:
|
220 | parsedFile = _context.sent;
|
221 |
|
222 | case 17:
|
223 | return _context.abrupt("return", parsedFile);
|
224 |
|
225 | case 18:
|
226 | case "end":
|
227 | return _context.stop();
|
228 | }
|
229 | }
|
230 | }, _callee);
|
231 | }));
|
232 | };
|
233 |
|
234 | var onBatchStart = function onBatchStart(batchFileInfoList) {
|
235 |
|
236 | var filteredFileInfoList = batchFileInfoList.filter(function (info) {
|
237 | return !info.file[LIST_IGNORE];
|
238 | });
|
239 |
|
240 | if (!filteredFileInfoList.length) {
|
241 | return;
|
242 | }
|
243 |
|
244 | var objectFileList = filteredFileInfoList.map(function (info) {
|
245 | return (0, _utils.file2Obj)(info.file);
|
246 | });
|
247 |
|
248 | var newFileList = (0, _toConsumableArray2["default"])(mergedFileList);
|
249 | objectFileList.forEach(function (fileObj) {
|
250 |
|
251 | newFileList = (0, _utils.updateFileList)(fileObj, newFileList);
|
252 | });
|
253 | objectFileList.forEach(function (fileObj, index) {
|
254 |
|
255 | var triggerFileObj = fileObj;
|
256 |
|
257 | if (!filteredFileInfoList[index].parsedFile) {
|
258 |
|
259 | var originFileObj = fileObj.originFileObj;
|
260 | var clone;
|
261 |
|
262 | try {
|
263 | clone = new File([originFileObj], originFileObj.name, {
|
264 | type: originFileObj.type
|
265 | });
|
266 | } catch (e) {
|
267 | clone = new Blob([originFileObj], {
|
268 | type: originFileObj.type
|
269 | });
|
270 | clone.name = originFileObj.name;
|
271 | clone.lastModifiedDate = new Date();
|
272 | clone.lastModified = new Date().getTime();
|
273 | }
|
274 |
|
275 | clone.uid = fileObj.uid;
|
276 | triggerFileObj = clone;
|
277 | } else {
|
278 |
|
279 | fileObj.status = 'uploading';
|
280 | }
|
281 |
|
282 | onInternalChange(triggerFileObj, newFileList);
|
283 | });
|
284 | };
|
285 |
|
286 | var onSuccess = function onSuccess(response, file, xhr) {
|
287 | try {
|
288 | if (typeof response === 'string') {
|
289 | response = JSON.parse(response);
|
290 | }
|
291 | } catch (e) {
|
292 |
|
293 | }
|
294 |
|
295 |
|
296 | if (!(0, _utils.getFileItem)(file, mergedFileList)) {
|
297 | return;
|
298 | }
|
299 |
|
300 | var targetItem = (0, _utils.file2Obj)(file);
|
301 | targetItem.status = 'done';
|
302 | targetItem.percent = 100;
|
303 | targetItem.response = response;
|
304 | targetItem.xhr = xhr;
|
305 | var nextFileList = (0, _utils.updateFileList)(targetItem, mergedFileList);
|
306 | onInternalChange(targetItem, nextFileList);
|
307 | };
|
308 |
|
309 | var onProgress = function onProgress(e, file) {
|
310 |
|
311 | if (!(0, _utils.getFileItem)(file, mergedFileList)) {
|
312 | return;
|
313 | }
|
314 |
|
315 | var targetItem = (0, _utils.file2Obj)(file);
|
316 | targetItem.status = 'uploading';
|
317 | targetItem.percent = e.percent;
|
318 | var nextFileList = (0, _utils.updateFileList)(targetItem, mergedFileList);
|
319 | onInternalChange(targetItem, nextFileList, e);
|
320 | };
|
321 |
|
322 | var onError = function onError(error, response, file) {
|
323 |
|
324 | if (!(0, _utils.getFileItem)(file, mergedFileList)) {
|
325 | return;
|
326 | }
|
327 |
|
328 | var targetItem = (0, _utils.file2Obj)(file);
|
329 | targetItem.error = error;
|
330 | targetItem.response = response;
|
331 | targetItem.status = 'error';
|
332 | var nextFileList = (0, _utils.updateFileList)(targetItem, mergedFileList);
|
333 | onInternalChange(targetItem, nextFileList);
|
334 | };
|
335 |
|
336 | var handleRemove = function handleRemove(file) {
|
337 | var currentFile;
|
338 | Promise.resolve(typeof onRemove === 'function' ? onRemove(file) : onRemove).then(function (ret) {
|
339 | var _a;
|
340 |
|
341 |
|
342 | if (ret === false) {
|
343 | return;
|
344 | }
|
345 |
|
346 | var removedFileList = (0, _utils.removeFileItem)(file, mergedFileList);
|
347 |
|
348 | if (removedFileList) {
|
349 | currentFile = (0, _extends2["default"])((0, _extends2["default"])({}, file), {
|
350 | status: 'removed'
|
351 | });
|
352 | mergedFileList === null || mergedFileList === void 0 ? void 0 : mergedFileList.forEach(function (item) {
|
353 | var matchKey = currentFile.uid !== undefined ? 'uid' : 'name';
|
354 |
|
355 | if (item[matchKey] === currentFile[matchKey] && !Object.isFrozen(item)) {
|
356 | item.status = 'removed';
|
357 | }
|
358 | });
|
359 | (_a = upload.current) === null || _a === void 0 ? void 0 : _a.abort(currentFile);
|
360 | onInternalChange(currentFile, removedFileList);
|
361 | }
|
362 | });
|
363 | };
|
364 |
|
365 | var onFileDrop = function onFileDrop(e) {
|
366 | setDragState(e.type);
|
367 |
|
368 | if (e.type === 'drop') {
|
369 | onDrop === null || onDrop === void 0 ? void 0 : onDrop(e);
|
370 | }
|
371 | };
|
372 |
|
373 |
|
374 | React.useImperativeHandle(ref, function () {
|
375 | return {
|
376 | onBatchStart: onBatchStart,
|
377 | onSuccess: onSuccess,
|
378 | onProgress: onProgress,
|
379 | onError: onError,
|
380 | fileList: mergedFileList,
|
381 | upload: upload.current
|
382 | };
|
383 | });
|
384 |
|
385 | var _React$useContext = React.useContext(_configProvider.ConfigContext),
|
386 | getPrefixCls = _React$useContext.getPrefixCls,
|
387 | direction = _React$useContext.direction;
|
388 |
|
389 | var prefixCls = getPrefixCls('upload', customizePrefixCls);
|
390 | var rcUploadProps = (0, _extends2["default"])((0, _extends2["default"])({
|
391 | onBatchStart: onBatchStart,
|
392 | onError: onError,
|
393 | onProgress: onProgress,
|
394 | onSuccess: onSuccess
|
395 | }, props), {
|
396 | prefixCls: prefixCls,
|
397 | beforeUpload: mergedBeforeUpload,
|
398 | onChange: undefined
|
399 | });
|
400 | delete rcUploadProps.className;
|
401 | delete rcUploadProps.style;
|
402 |
|
403 |
|
404 |
|
405 |
|
406 | if (!children || disabled) {
|
407 | delete rcUploadProps.id;
|
408 | }
|
409 |
|
410 | var renderUploadList = function renderUploadList(button) {
|
411 | return showUploadList ? React.createElement(_LocaleReceiver["default"], {
|
412 | componentName: "Upload",
|
413 | defaultLocale: _default2["default"].Upload
|
414 | }, function (locale) {
|
415 | var _ref = typeof showUploadList === 'boolean' ? {} : showUploadList,
|
416 | showRemoveIcon = _ref.showRemoveIcon,
|
417 | showPreviewIcon = _ref.showPreviewIcon,
|
418 | showDownloadIcon = _ref.showDownloadIcon,
|
419 | removeIcon = _ref.removeIcon,
|
420 | downloadIcon = _ref.downloadIcon;
|
421 |
|
422 | return React.createElement(_UploadList["default"], {
|
423 | listType: listType,
|
424 | items: mergedFileList,
|
425 | previewFile: previewFile,
|
426 | onPreview: onPreview,
|
427 | onDownload: onDownload,
|
428 | onRemove: handleRemove,
|
429 | showRemoveIcon: !disabled && showRemoveIcon,
|
430 | showPreviewIcon: showPreviewIcon,
|
431 | showDownloadIcon: showDownloadIcon,
|
432 | removeIcon: removeIcon,
|
433 | downloadIcon: downloadIcon,
|
434 | iconRender: iconRender,
|
435 | locale: (0, _extends2["default"])((0, _extends2["default"])({}, locale), propLocale),
|
436 | isImageUrl: isImageUrl,
|
437 | progress: progress,
|
438 | appendAction: button,
|
439 | itemRender: itemRender
|
440 | });
|
441 | }) : button;
|
442 | };
|
443 |
|
444 | if (type === 'drag') {
|
445 | var _classNames;
|
446 |
|
447 | var dragCls = (0, _classnames["default"])(prefixCls, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-drag"), true), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-drag-uploading"), mergedFileList.some(function (file) {
|
448 | return file.status === 'uploading';
|
449 | })), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-drag-hover"), dragState === 'dragover'), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-disabled"), disabled), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-rtl"), direction === 'rtl'), _classNames), className);
|
450 | return React.createElement("span", null, React.createElement("div", {
|
451 | className: dragCls,
|
452 | onDrop: onFileDrop,
|
453 | onDragOver: onFileDrop,
|
454 | onDragLeave: onFileDrop,
|
455 | style: style
|
456 | }, React.createElement(_rcUpload["default"], (0, _extends2["default"])({}, rcUploadProps, {
|
457 | ref: upload,
|
458 | className: "".concat(prefixCls, "-btn")
|
459 | }), React.createElement("div", {
|
460 | className: "".concat(prefixCls, "-drag-container")
|
461 | }, children))), renderUploadList());
|
462 | }
|
463 |
|
464 | var uploadButtonCls = (0, _classnames["default"])(prefixCls, (_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-select"), true), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-select-").concat(listType), true), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-disabled"), disabled), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-rtl"), direction === 'rtl'), _classNames2));
|
465 | var uploadButton = React.createElement("div", {
|
466 | className: uploadButtonCls,
|
467 | style: children ? undefined : {
|
468 | display: 'none'
|
469 | }
|
470 | }, React.createElement(_rcUpload["default"], (0, _extends2["default"])({}, rcUploadProps, {
|
471 | ref: upload
|
472 | })));
|
473 |
|
474 | if (listType === 'picture-card') {
|
475 | return React.createElement("span", {
|
476 | className: (0, _classnames["default"])("".concat(prefixCls, "-picture-card-wrapper"), className)
|
477 | }, renderUploadList(uploadButton));
|
478 | }
|
479 |
|
480 | return React.createElement("span", {
|
481 | className: className
|
482 | }, uploadButton, renderUploadList());
|
483 | };
|
484 |
|
485 | var Upload = React.forwardRef(InternalUpload);
|
486 | Upload.Dragger = _Dragger["default"];
|
487 | Upload.LIST_IGNORE = LIST_IGNORE;
|
488 | Upload.displayName = 'Upload';
|
489 | Upload.defaultProps = {
|
490 | type: 'select',
|
491 | multiple: false,
|
492 | action: '',
|
493 | data: {},
|
494 | accept: '',
|
495 | showUploadList: true,
|
496 | listType: 'text',
|
497 | className: '',
|
498 | disabled: false,
|
499 | supportServerRender: true
|
500 | };
|
501 | var _default = Upload;
|
502 | exports["default"] = _default; |
\ | No newline at end of file |