UNPKG

13.7 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports["default"] = void 0;
11
12var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
16var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
17
18var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
19
20var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
21
22var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
23
24var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
25
26var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
27
28var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
29
30var _react = _interopRequireWildcard(require("react"));
31
32var _classnames = _interopRequireDefault(require("classnames"));
33
34var _uniqBy = _interopRequireDefault(require("lodash/uniqBy"));
35
36var _LocaleReceiver = _interopRequireDefault(require("../locale-provider/LocaleReceiver"));
37
38var _default = _interopRequireDefault(require("../locale-provider/default"));
39
40var _UploadList = _interopRequireDefault(require("./UploadList"));
41
42var _utils = require("./utils");
43
44var _upload = _interopRequireDefault(require("../rc-components/upload"));
45
46var _configure = require("../configure");
47
48function _createSuper(Derived) {
49 function isNativeReflectConstruct() {
50 if (typeof Reflect === "undefined" || !Reflect.construct) return false;
51 if (Reflect.construct.sham) return false;
52 if (typeof Proxy === "function") return true;
53
54 try {
55 Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
56 return true;
57 } catch (e) {
58 return false;
59 }
60 }
61
62 return function () {
63 var Super = (0, _getPrototypeOf2["default"])(Derived),
64 result;
65
66 if (isNativeReflectConstruct()) {
67 var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor;
68 result = Reflect.construct(Super, arguments, NewTarget);
69 } else {
70 result = Super.apply(this, arguments);
71 }
72
73 return (0, _possibleConstructorReturn2["default"])(this, result);
74 };
75}
76
77var Upload =
78/*#__PURE__*/
79function (_Component) {
80 (0, _inherits2["default"])(Upload, _Component);
81
82 var _super = _createSuper(Upload);
83
84 function Upload(props) {
85 var _this;
86
87 (0, _classCallCheck2["default"])(this, Upload);
88 _this = _super.call(this, props);
89
90 _this.onStart = function (file) {
91 var fileList = _this.state.fileList;
92 var nextFileList = (0, _toConsumableArray2["default"])(fileList);
93 var targetItem = (0, _utils.fileToObject)(file);
94 targetItem.status = 'uploading';
95 nextFileList.push(targetItem);
96
97 _this.onChange({
98 file: targetItem,
99 fileList: nextFileList
100 }); // fix ie progress
101
102
103 if (!window.FormData) {
104 _this.autoUpdateProgress(0, targetItem);
105 }
106
107 var onStart = _this.props.onStart;
108
109 if (onStart) {
110 onStart(file);
111 }
112 };
113
114 _this.onSuccess = function (response, file) {
115 _this.clearProgressTimer();
116
117 try {
118 if (typeof response === 'string') {
119 response = JSON.parse(response);
120 }
121 } catch (e) {
122 /* do nothing */
123 }
124
125 var fileList = _this.state.fileList;
126 var targetItem = (0, _utils.getFileItem)(file, fileList); // removed
127
128 if (targetItem) {
129 targetItem.status = 'done';
130 targetItem.response = response;
131
132 _this.onChange({
133 file: (0, _objectSpread2["default"])({}, targetItem),
134 fileList: fileList
135 });
136 }
137
138 var onSuccess = _this.props.onSuccess;
139
140 if (onSuccess) {
141 onSuccess(response, file);
142 }
143 };
144
145 _this.onProgress = function (e, file) {
146 var fileList = _this.state.fileList;
147 var targetItem = (0, _utils.getFileItem)(file, fileList); // removed
148
149 if (targetItem) {
150 targetItem.percent = e.percent;
151
152 _this.onChange({
153 event: e,
154 file: (0, _objectSpread2["default"])({}, targetItem),
155 fileList: fileList
156 });
157 }
158
159 var onProgress = _this.props.onProgress;
160
161 if (onProgress) {
162 onProgress(e, file);
163 }
164 };
165
166 _this.onError = function (error, response, file) {
167 _this.clearProgressTimer();
168
169 var fileList = _this.state.fileList;
170 var targetItem = (0, _utils.getFileItem)(file, fileList); // removed
171
172 if (!targetItem) {
173 return;
174 }
175
176 targetItem.error = error;
177 targetItem.response = response;
178 targetItem.status = 'error';
179
180 _this.onChange({
181 file: (0, _objectSpread2["default"])({}, targetItem),
182 fileList: fileList
183 });
184
185 var onError = _this.props.onError;
186
187 if (onError) {
188 onError(error, response, file);
189 }
190 };
191
192 _this.handleManualRemove = function (file) {
193 _this.upload.abort(file);
194
195 file.status = 'removed'; // eslint-disable-line
196
197 _this.handleRemove(file);
198 };
199 /**
200 * 拖拽触发回调
201 * @param uploadFiles 拖拽后文件列表
202 */
203
204
205 _this.onDragEnd = function (uploadFiles) {
206 var onDragEnd = _this.props.onDragEnd;
207
208 if (onDragEnd) {
209 var result = onDragEnd(uploadFiles);
210
211 if (result !== false) {
212 _this.setState({
213 fileList: uploadFiles
214 });
215 } else {
216 return false;
217 }
218 }
219
220 _this.setState({
221 fileList: uploadFiles
222 });
223 };
224
225 _this.onChange = function (info) {
226 if (!('fileList' in _this.props)) {
227 _this.setState({
228 fileList: info.fileList
229 });
230 }
231
232 var onChange = _this.props.onChange;
233
234 if (onChange) {
235 onChange(info);
236 }
237 };
238
239 _this.onFileDrop = function (e) {
240 _this.setState({
241 dragState: e.type
242 });
243 };
244
245 _this.beforeUpload = function (file, uploadFiles) {
246 var beforeUpload = _this.props.beforeUpload;
247
248 if (beforeUpload) {
249 var result = beforeUpload(file, uploadFiles);
250
251 if (result === false) {
252 var fileList = _this.state.fileList;
253
254 _this.onChange({
255 file: file,
256 fileList: (0, _uniqBy["default"])(uploadFiles.concat(fileList), function (item) {
257 return item.uid;
258 })
259 });
260
261 return false;
262 }
263
264 if (result && result.then) {
265 return result;
266 }
267 }
268
269 return true;
270 };
271
272 _this.saveUpload = function (node) {
273 _this.upload = node;
274 };
275
276 _this.renderUploadList = function (uploadLocale) {
277 var _this$props = _this.props,
278 showUploadList = _this$props.showUploadList,
279 listType = _this$props.listType,
280 onPreview = _this$props.onPreview,
281 locale = _this$props.locale,
282 previewFile = _this$props.previewFile,
283 dragUploadList = _this$props.dragUploadList;
284 var fileList = _this.state.fileList;
285 var showRemoveIcon = showUploadList.showRemoveIcon,
286 showPreviewIcon = showUploadList.showPreviewIcon;
287 return _react["default"].createElement(_UploadList["default"], {
288 listType: listType,
289 items: fileList,
290 onPreview: onPreview,
291 dragUploadList: dragUploadList,
292 onDragEnd: _this.onDragEnd,
293 previewFile: previewFile,
294 onRemove: _this.handleManualRemove,
295 showRemoveIcon: showRemoveIcon,
296 showPreviewIcon: showPreviewIcon,
297 locale: (0, _objectSpread2["default"])({}, uploadLocale, {}, locale)
298 });
299 };
300
301 _this.state = {
302 fileList: props.fileList || props.defaultFileList || [],
303 dragState: 'drop'
304 };
305 return _this;
306 }
307
308 (0, _createClass2["default"])(Upload, [{
309 key: "componentWillUnmount",
310 value: function componentWillUnmount() {
311 this.clearProgressTimer();
312 }
313 }, {
314 key: "autoUpdateProgress",
315 value: function autoUpdateProgress(_, file) {
316 var _this2 = this;
317
318 var getPercent = (0, _utils.genPercentAdd)();
319 var curPercent = 0;
320 this.clearProgressTimer();
321 this.progressTimer = setInterval(function () {
322 curPercent = getPercent(curPercent);
323
324 _this2.onProgress({
325 percent: curPercent
326 }, file);
327 }, 200);
328 }
329 }, {
330 key: "handleRemove",
331 value: function handleRemove(file) {
332 var _this3 = this;
333
334 var onRemove = this.props.onRemove;
335 Promise.resolve(typeof onRemove === 'function' ? onRemove(file) : onRemove).then(function (ret) {
336 // Prevent removing file
337 if (ret === false) {
338 return;
339 }
340
341 var fileList = _this3.state.fileList;
342 var removedFileList = (0, _utils.removeFileItem)(file, fileList);
343
344 if (removedFileList) {
345 _this3.onChange({
346 file: file,
347 fileList: removedFileList
348 });
349 }
350 });
351 }
352 }, {
353 key: "componentWillReceiveProps",
354 value: function componentWillReceiveProps(nextProps) {
355 if ('fileList' in nextProps) {
356 this.setState({
357 fileList: nextProps.fileList || []
358 });
359 }
360 }
361 }, {
362 key: "clearProgressTimer",
363 value: function clearProgressTimer() {
364 clearInterval(this.progressTimer);
365 }
366 }, {
367 key: "render",
368 value: function render() {
369 var _classNames2;
370
371 var _this$props2 = this.props,
372 customizePrefixCls = _this$props2.prefixCls,
373 className = _this$props2.className,
374 showUploadList = _this$props2.showUploadList,
375 listType = _this$props2.listType,
376 type = _this$props2.type,
377 disabled = _this$props2.disabled,
378 children = _this$props2.children,
379 dragUploadList = _this$props2.dragUploadList;
380 var _this$state = this.state,
381 fileList = _this$state.fileList,
382 dragState = _this$state.dragState;
383 var prefixCls = (0, _configure.getPrefixCls)('upload', customizePrefixCls);
384 var rcUploadProps = (0, _objectSpread2["default"])({}, this.props, {
385 onStart: this.onStart,
386 onError: this.onError,
387 onProgress: this.onProgress,
388 onSuccess: this.onSuccess,
389 beforeUpload: this.beforeUpload,
390 prefixCls: prefixCls
391 });
392 delete rcUploadProps.className;
393 var uploadList = showUploadList ? _react["default"].createElement(_LocaleReceiver["default"], {
394 componentName: "Upload",
395 defaultLocale: _default["default"].Upload
396 }, this.renderUploadList) : null;
397
398 if (type === 'drag') {
399 var _classNames;
400
401 var dragCls = (0, _classnames["default"])(prefixCls, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-drag"), true), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-drag-uploading"), fileList.some(function (file) {
402 return file.status === 'uploading';
403 })), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-drag-hover"), dragState === 'dragover'), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-disabled"), disabled), _classNames));
404 return _react["default"].createElement("span", {
405 className: className
406 }, _react["default"].createElement("div", {
407 className: dragCls,
408 onDrop: this.onFileDrop,
409 onDragOver: this.onFileDrop,
410 onDragLeave: this.onFileDrop
411 }, _react["default"].createElement(_upload["default"], (0, _extends2["default"])({}, rcUploadProps, {
412 ref: this.saveUpload,
413 className: "".concat(prefixCls, "-btn")
414 }), _react["default"].createElement("div", {
415 className: "".concat(prefixCls, "-drag-container")
416 }, children))), uploadList);
417 }
418
419 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, "-drag-btn"), dragUploadList), _classNames2));
420
421 var uploadButton = _react["default"].createElement("div", {
422 className: uploadButtonCls,
423 style: {
424 display: children ? '' : 'none'
425 }
426 }, _react["default"].createElement(_upload["default"], (0, _extends2["default"])({}, rcUploadProps, {
427 ref: this.saveUpload
428 })));
429
430 if (listType === 'picture-card') {
431 return _react["default"].createElement("span", {
432 className: className
433 }, uploadList, uploadButton);
434 }
435
436 return _react["default"].createElement("span", {
437 className: className
438 }, uploadButton, uploadList);
439 }
440 }]);
441 return Upload;
442}(_react.Component);
443
444exports["default"] = Upload;
445Upload.displayName = 'Upload';
446Upload.defaultProps = {
447 type: 'select',
448 multiple: false,
449 action: '',
450 data: {},
451 accept: '',
452 beforeUpload: _utils.T,
453 showUploadList: true,
454 listType: 'text',
455 className: '',
456 disabled: false,
457 supportServerRender: true
458};
459//# sourceMappingURL=Upload.js.map