UNPKG

7.3 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4exports.default = undefined;
5
6var _extends2 = require('babel-runtime/helpers/extends');
7
8var _extends3 = _interopRequireDefault(_extends2);
9
10var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
11
12var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
13
14var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
15
16var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
17
18var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
19
20var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
21
22var _inherits2 = require('babel-runtime/helpers/inherits');
23
24var _inherits3 = _interopRequireDefault(_inherits2);
25
26var _class, _temp2;
27
28var _react = require('react');
29
30var _react2 = _interopRequireDefault(_react);
31
32var _propTypes = require('prop-types');
33
34var _propTypes2 = _interopRequireDefault(_propTypes);
35
36var _util = require('../../util');
37
38var _uploader = require('./uploader');
39
40var _uploader2 = _interopRequireDefault(_uploader);
41
42var _selecter = require('./selecter');
43
44var _selecter2 = _interopRequireDefault(_selecter);
45
46function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
47
48var Html5Uploader = (_temp2 = _class = function (_Component) {
49 (0, _inherits3.default)(Html5Uploader, _Component);
50
51 function Html5Uploader() {
52 var _temp, _this, _ret;
53
54 (0, _classCallCheck3.default)(this, Html5Uploader);
55
56 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
57 args[_key] = arguments[_key];
58 }
59
60 return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.getUploadOptions = function (props) {
61 return {
62 action: props.action,
63 name: props.name,
64 timeout: props.timeout,
65 method: props.method,
66 beforeUpload: props.beforeUpload,
67 onProgress: props.onProgress,
68 onSuccess: props.onSuccess,
69 onError: props.onError,
70 withCredentials: props.withCredentials,
71 headers: props.headers,
72 data: props.data,
73 request: props.request
74 };
75 }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
76 }
77
78 Html5Uploader.prototype.componentDidMount = function componentDidMount() {
79 var props = this.props;
80
81 var options = this.getUploadOptions(props);
82 this.uploader = new _uploader2.default(options);
83 };
84
85 Html5Uploader.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {
86 var preOptions = this.getUploadOptions(prevProps);
87 var options = this.getUploadOptions(this.props);
88
89 var keys = Object.keys(options);
90
91 for (var i = 0; i < keys.length; i++) {
92 var key = keys[i];
93 if (options[key] !== preOptions[key]) {
94 this.uploader.setOptions(options);
95 return;
96 }
97 }
98 };
99
100 Html5Uploader.prototype.componentWillUnmount = function componentWillUnmount() {
101 this.abort();
102 };
103
104 Html5Uploader.prototype.abort = function abort(file) {
105 this.uploader.abort(file);
106 };
107
108 Html5Uploader.prototype.startUpload = function startUpload(fileList) {
109 this.uploader.startUpload(fileList);
110 };
111
112 Html5Uploader.prototype.render = function render() {
113 var _props = this.props,
114 accept = _props.accept,
115 multiple = _props.multiple,
116 webkitdirectory = _props.webkitdirectory,
117 children = _props.children,
118 id = _props.id,
119 disabled = _props.disabled,
120 dragable = _props.dragable,
121 style = _props.style,
122 className = _props.className,
123 onSelect = _props.onSelect,
124 onDragOver = _props.onDragOver,
125 onDragLeave = _props.onDragLeave,
126 onDrop = _props.onDrop,
127 name = _props.name,
128 others = (0, _objectWithoutProperties3.default)(_props, ['accept', 'multiple', 'webkitdirectory', 'children', 'id', 'disabled', 'dragable', 'style', 'className', 'onSelect', 'onDragOver', 'onDragLeave', 'onDrop', 'name']);
129
130
131 return _react2.default.createElement(
132 _selecter2.default,
133 (0, _extends3.default)({}, others, {
134 id: id,
135 accept: accept,
136 multiple: multiple,
137 webkitdirectory: webkitdirectory,
138 dragable: dragable,
139 disabled: disabled,
140 className: className,
141 style: style,
142 onSelect: onSelect,
143 onDragOver: onDragOver,
144 onDragLeave: onDragLeave,
145 onDrop: onDrop,
146 name: name
147 }),
148 children
149 );
150 };
151
152 return Html5Uploader;
153}(_react.Component), _class.propTypes = (0, _extends3.default)({}, _selecter2.default.propTypes, {
154 /**
155 * 上传的地址
156 */
157 action: _propTypes2.default.string,
158 /**
159 * 接受上传的文件类型 (image/png, image/jpg, .doc, .ppt) 详见 [input accept attribute](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input#attr-accept)
160 */
161 accept: _propTypes2.default.string,
162 /**
163 * 上传额外传参
164 */
165 data: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.func]),
166 /**
167 * 设置上传的请求头部
168 */
169 headers: _propTypes2.default.object,
170 /**
171 * 是否允许请求携带 cookie
172 */
173 withCredentials: _propTypes2.default.bool,
174 /**
175 * 上传文件之前
176 * @param {Object} file 文件对象
177 * @return {Boolean} `false` 停止上传
178 */
179 beforeUpload: _propTypes2.default.func,
180 /**
181 * 正在上传文件的钩子,参数为上传的事件以及文件
182 */
183 onProgress: _propTypes2.default.func,
184 /**
185 * 上传成功回调函数,参数为请求下响应信息以及文件
186 */
187 onSuccess: _propTypes2.default.func,
188 /**
189 * 上传失败回调函数,参数为上传失败的信息、响应信息以及文件
190 */
191 onError: _propTypes2.default.func,
192 children: _propTypes2.default.node,
193 /**
194 * 上传超时,单位ms
195 */
196 timeout: _propTypes2.default.number,
197 /**
198 * 上传方法
199 */
200 method: _propTypes2.default.oneOf(['post', 'put']),
201 request: _propTypes2.default.func
202}), _class.defaultProps = (0, _extends3.default)({}, _selecter2.default.defaultProps, {
203 name: 'file',
204 multiple: false,
205 withCredentials: true,
206 beforeUpload: _util.func.noop,
207 onSelect: _util.func.noop,
208 onDragOver: _util.func.noop,
209 onDragLeave: _util.func.noop,
210 onDrop: _util.func.noop,
211 onProgress: _util.func.noop,
212 onSuccess: _util.func.noop,
213 onError: _util.func.noop,
214 onAbort: _util.func.noop,
215 method: 'post'
216}), _temp2);
217Html5Uploader.displayName = 'Html5Uploader';
218exports.default = Html5Uploader;
219module.exports = exports['default'];
\No newline at end of file