UNPKG

9.76 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _react = require('react');
8
9var _react2 = _interopRequireDefault(_react);
10
11var _beeAnimate = require('bee-animate');
12
13var _beeAnimate2 = _interopRequireDefault(_beeAnimate);
14
15var _beeIcon = require('bee-icon');
16
17var _beeIcon2 = _interopRequireDefault(_beeIcon);
18
19var _beeProgressBar = require('bee-progress-bar');
20
21var _beeProgressBar2 = _interopRequireDefault(_beeProgressBar);
22
23var _classnames = require('classnames');
24
25var _classnames2 = _interopRequireDefault(_classnames);
26
27var _propTypes = require('prop-types');
28
29var _propTypes2 = _interopRequireDefault(_propTypes);
30
31function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
32
33function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
34
35function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
36
37function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
38
39function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
40
41function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
42
43//import { UploadListProps } from './interface';
44
45// https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL
46var previewFile = function previewFile(file, callback) {
47 var reader = new FileReader();
48 reader.onloadend = function () {
49 return callback(reader.result);
50 };
51 reader.readAsDataURL(file);
52};
53
54var propTypes = {
55 listType: _propTypes2["default"].oneOf(['text', 'picture', 'picture-card']),
56 onPreview: _propTypes2["default"].func,
57 onRemove: _propTypes2["default"].func,
58 items: _propTypes2["default"].array,
59 progressAttr: _propTypes2["default"].object,
60 clsPrefix: _propTypes2["default"].string
61};
62
63var defaultProps = {
64 listType: 'text', // or picture
65 progressAttr: {
66 strokeWidth: 3,
67 showInfo: false
68 },
69 clsPrefix: 'u-upload',
70 showRemoveIcon: true,
71 showPreviewIcon: true
72};
73
74var UploadList = function (_Component) {
75 _inherits(UploadList, _Component);
76
77 function UploadList() {
78 var _temp, _this, _ret;
79
80 _classCallCheck(this, UploadList);
81
82 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
83 args[_key] = arguments[_key];
84 }
85
86 return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.handleClose = function (file) {
87 var onRemove = _this.props.onRemove;
88 if (onRemove) {
89 onRemove(file);
90 }
91 }, _this.handlePreview = function (file, e) {
92 var onPreview = _this.props.onPreview;
93
94 if (!onPreview) {
95 return;
96 }
97 e.preventDefault();
98 return onPreview(file);
99 }, _temp), _possibleConstructorReturn(_this, _ret);
100 }
101
102 UploadList.prototype.componentDidUpdate = function componentDidUpdate() {
103 var _this2 = this;
104
105 if (this.props.listType !== 'picture' && this.props.listType !== 'picture-card') {
106 return;
107 }
108 (this.props.items || []).forEach(function (file) {
109 if (typeof document === 'undefined' || typeof window === 'undefined' ||
110 //!(window as any).FileReader || !(window as any).File ||
111 !window.FileReader || !window.File || !(file.originFileObj instanceof File) || file.thumbUrl !== undefined) {
112 return;
113 }
114 /*eslint-disable */
115 file.thumbUrl = '';
116 /*eslint-enable */
117 previewFile(file.originFileObj, function (previewDataUrl) {
118 /*eslint-disable */
119 file.thumbUrl = previewDataUrl;
120 /*eslint-enable */
121 _this2.forceUpdate();
122 });
123 });
124 };
125
126 UploadList.prototype.render = function render() {
127 var _this3 = this,
128 _classNames2;
129
130 var _props = this.props,
131 clsPrefix = _props.clsPrefix,
132 _props$items = _props.items,
133 items = _props$items === undefined ? [] : _props$items,
134 listType = _props.listType,
135 showRemoveIcon = _props.showRemoveIcon,
136 showPreviewIcon = _props.showPreviewIcon;
137
138 var list = items.map(function (file) {
139 var _classNames;
140
141 var progress = void 0;
142 var icon = _react2["default"].createElement(_beeIcon2["default"], { type: 'uf-link' });
143
144 if (listType === 'picture' || listType === 'picture-card') {
145 if (file.status === 'uploading' || !file.thumbUrl && !file.url) {
146 if (listType === 'picture-card') {
147 icon = _react2["default"].createElement(
148 'div',
149 { className: clsPrefix + '-list-item-uploading-text' },
150 '\u6587\u4EF6\u4E0A\u4F20\u4E2D'
151 );
152 } else {
153 icon = _react2["default"].createElement(_beeIcon2["default"], { className: clsPrefix + '-list-item-thumbnail', type: 'picture' });
154 }
155 } else {
156 icon = _react2["default"].createElement(
157 'a',
158 {
159 className: clsPrefix + '-list-item-thumbnail',
160 onClick: function onClick(e) {
161 return _this3.handlePreview(file, e);
162 },
163 href: file.url || file.thumbUrl,
164 target: '_blank',
165 rel: 'noopener noreferrer'
166 },
167 _react2["default"].createElement('img', { src: file.url || file.thumbUrl, alt: file.name })
168 );
169 }
170 }
171
172 if (file.status === 'uploading') {
173 progress = _react2["default"].createElement(_beeProgressBar2["default"], { colors: 'success', size: 'sm', now: file.percent });
174 }
175 var infoUploadingClass = (0, _classnames2["default"])((_classNames = {}, _defineProperty(_classNames, clsPrefix + '-list-item', true), _defineProperty(_classNames, clsPrefix + '-list-item-' + file.status, true), _classNames));
176 var preview = file.url ? _react2["default"].createElement(
177 'a',
178 {
179 href: file.url,
180 target: '_blank',
181 rel: 'noopener noreferrer',
182 className: clsPrefix + '-list-item-name',
183 onClick: function onClick(e) {
184 return _this3.handlePreview(file, e);
185 }
186 },
187 file.name
188 ) : _react2["default"].createElement(
189 'span',
190 {
191 className: clsPrefix + '-list-item-name',
192 onClick: function onClick(e) {
193 return _this3.handlePreview(file, e);
194 }
195 },
196 file.name
197 );
198 var style = file.url || file.thumbUrl ? undefined : {
199 pointerEvents: 'none',
200 opacity: 0.5
201 };
202 var previewIcon = showPreviewIcon ? _react2["default"].createElement(
203 'a',
204 {
205 href: file.url || file.thumbUrl,
206 target: '_blank',
207 rel: 'noopener noreferrer',
208 style: style,
209 onClick: function onClick(e) {
210 return _this3.handlePreview(file, e);
211 }
212 },
213 _react2["default"].createElement(_beeIcon2["default"], { type: 'uf-eye-o' })
214 ) : null;
215 var removeIcon = showRemoveIcon ? _react2["default"].createElement(_beeIcon2["default"], { type: 'uf-del', title: _this3.props.removeText || "移除文件", onClick: function onClick() {
216 return _this3.handleClose(file);
217 } }) : null;
218 var removeIconClose = showRemoveIcon ? _react2["default"].createElement(_beeIcon2["default"], { type: 'uf-close', title: _this3.props.removeText || "移除文件", onClick: function onClick() {
219 return _this3.handleClose(file);
220 } }) : null;
221 var actions = listType === 'picture-card' && file.status !== 'uploading' ? _react2["default"].createElement(
222 'span',
223 { className: clsPrefix + '-list-item-actions' },
224 previewIcon,
225 removeIcon
226 ) : removeIconClose;
227
228 return _react2["default"].createElement(
229 'div',
230 { className: infoUploadingClass, key: file.uid },
231 _react2["default"].createElement(
232 'div',
233 { className: clsPrefix + '-list-item-info' },
234 icon,
235 preview,
236 actions
237 ),
238 progress
239 );
240 });
241 var listClassNames = (0, _classnames2["default"])((_classNames2 = {}, _defineProperty(_classNames2, clsPrefix + '-list', true), _defineProperty(_classNames2, clsPrefix + '-list-' + listType, true), _classNames2));
242 return _react2["default"].createElement(
243 _beeAnimate2["default"],
244 {
245 transitionName: clsPrefix + '-margin-top',
246 component: 'div',
247 className: listClassNames
248 },
249 list
250 );
251 };
252
253 return UploadList;
254}(_react.Component);
255
256UploadList.propTypes = propTypes;
257UploadList.defaultProps = defaultProps;
258exports["default"] = UploadList;
259module.exports = exports['default'];
\No newline at end of file