UNPKG

ultra-design

Version:
368 lines (299 loc) 14 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray'); var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator'); var _defineProperty = require('@babel/runtime/helpers/defineProperty'); var _slicedToArray = require('@babel/runtime/helpers/slicedToArray'); var _regeneratorRuntime = require('@babel/runtime/regenerator'); var react = require('@icon-park/react'); var _ = require('lodash-es'); var React = require('react'); var tooltip = require('../tooltip/tooltip.js'); var mergeProps = require('../utils/mergeProps.js'); var withStyle = require('../utils/withStyle.js'); var uploadStyles = require('./upload-styles.js'); var jsxRuntime = require('@emotion/react/jsx-runtime'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray); var _asyncToGenerator__default = /*#__PURE__*/_interopDefaultLegacy(_asyncToGenerator); var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty); var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray); var _regeneratorRuntime__default = /*#__PURE__*/_interopDefaultLegacy(_regeneratorRuntime); function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var defaultProps = { maxSize: 5242880, maxCount: 10, fileList: [], extensions: ['.jpg', '.jpeg', '.gif', '.png'], multiple: true }; var ErrorType; (function (ErrorType) { ErrorType[ErrorType["OVER_COUNT"] = 0] = "OVER_COUNT"; ErrorType[ErrorType["OVER_SIZE"] = 1] = "OVER_SIZE"; ErrorType[ErrorType["OVER_EXTENSTIONS"] = 2] = "OVER_EXTENSTIONS"; ErrorType[ErrorType["SERVER_ERROR"] = 3] = "SERVER_ERROR"; })(ErrorType || (ErrorType = {})); var uuid = function uuid() { return URL.createObjectURL(new Blob()).substr(-36); }; var UploadCompoent = /*#__PURE__*/React.forwardRef(function (p, ref) { var props = mergeProps.useMergeProps(defaultProps, p); var fileList = props.fileList, onChange = props.onChange, onRemove = props.onRemove, name = props.name, maxCount = props.maxCount, onOverCount = props.onOverCount, onOverSize = props.onOverSize, onOverExtensions = props.onOverExtensions, extensions = props.extensions, multiple = props.multiple, maxSize = props.maxSize, renderError = props.renderError, children = props.children; var _useState = React.useState(function () { return fileList.map(function (f) { return _objectSpread(_objectSpread({}, f), {}, { name: f.url.substring(f.url.lastIndexOf('/') + 1) }); }); }), _useState2 = _slicedToArray__default["default"](_useState, 2), imageList = _useState2[0], setImageList = _useState2[1]; var inputRef = React.useRef(null); React.useImperativeHandle(ref, function () { return { imageList: imageList }; }, [imageList]); var overCountNum = React.useMemo(function () { return imageList.filter(function (images) { return _.isNil(images.errorCode); }).length - maxCount; }, [imageList, maxCount]); var onSelectFiles = /*#__PURE__*/function () { var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(e) { var files, allFilePromises, fileErrorList, _iterator, _step, file, overExtensions, overSize, thisTimeOverCount, overCount, startIndex; return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: files = e.target.files; allFilePromises = []; fileErrorList = []; _iterator = _createForOfIteratorHelper(files); _context.prev = 4; _iterator.s(); case 6: if ((_step = _iterator.n()).done) { _context.next = 37; break; } file = _step.value; if (hasExtension(file.name)) { _context.next = 22; break; } fileErrorList.push('OVER_EXTENSTIONS'); if (!(typeof onOverExtensions === 'function')) { _context.next = 20; break; } _context.next = 13; return onOverExtensions(file.name, extensions); case 13: overExtensions = _context.sent; if (!(overExtensions === 'continue')) { _context.next = 18; break; } return _context.abrupt("continue", 35); case 18: if (!(overExtensions === 'break')) { _context.next = 20; break; } return _context.abrupt("break", 37); case 20: _context.next = 34; break; case 22: if (!(file.size > maxSize)) { _context.next = 34; break; } fileErrorList.push('OVER_SIZE'); if (!(typeof onOverSize === 'function')) { _context.next = 34; break; } _context.next = 27; return onOverSize(file.size, maxSize); case 27: overSize = _context.sent; if (!(overSize === 'continue')) { _context.next = 32; break; } return _context.abrupt("continue", 35); case 32: if (!(overSize === 'break')) { _context.next = 34; break; } return _context.abrupt("break", 37); case 34: allFilePromises.push(readFile(file)); case 35: _context.next = 6; break; case 37: _context.next = 42; break; case 39: _context.prev = 39; _context.t0 = _context["catch"](4); _iterator.e(_context.t0); case 42: _context.prev = 42; _iterator.f(); return _context.finish(42); case 45: thisTimeOverCount = imageList.length + files.length - maxCount; if (!(thisTimeOverCount > 0)) { _context.next = 55; break; } if (!(typeof onOverCount === 'function')) { _context.next = 53; break; } _context.next = 50; return onOverCount(maxCount + thisTimeOverCount, thisTimeOverCount); case 50: overCount = _context.sent; if (!(overCount === false)) { _context.next = 53; break; } return _context.abrupt("return"); case 53: startIndex = files.length - thisTimeOverCount; allFilePromises.splice(startIndex - 1, thisTimeOverCount); case 55: Promise.all(allFilePromises).then(function (newFilesData) { var data = newFilesData.map(function (item, i) { return { file: item.file, url: item.url, name: item.file.name, errorCode: fileErrorList[i] }; }); var list = [].concat(_toConsumableArray__default["default"](imageList), _toConsumableArray__default["default"](data)); onChange === null || onChange === void 0 ? void 0 : onChange(list); setImageList(list); }); case 56: case "end": return _context.stop(); } } }, _callee, null, [[4, 39, 42, 45]]); })); return function onSelectFiles(_x) { return _ref.apply(this, arguments); }; }(); var onDelete = function onDelete(index) { var list = _toConsumableArray__default["default"](imageList); onRemove === null || onRemove === void 0 ? void 0 : onRemove(list[index]); list.splice(index, 1); onChange === null || onChange === void 0 ? void 0 : onChange(list); setImageList(list); }; var simulatorClick = function simulatorClick() { var _inputRef$current; (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.click(); }; var hasExtension = function hasExtension(fileName) { if (!extensions.length) return false; var pattern = '(' + extensions.join('|').replace(/\./g, '\\.') + ')$'; return new RegExp(pattern, 'i').test(fileName); }; var readFile = function readFile(file) { return new Promise(function (resolve, reject) { var reader = new FileReader(); reader.onload = function (e) { var r = e.target; if (!r) return reject(); if (!r.result) return reject(); var dataURL = r.result; dataURL = dataURL.replace(';base64', ";name=".concat(file.name, ";base64")); resolve({ file: file, url: dataURL }); }; reader.readAsDataURL(file); }); }; var customAdd = children || jsxRuntime.jsx(react.Plus, {}); return jsxRuntime.jsxs("div", { className: "ultra-upload", css: uploadStyles.uploadStyles(props), children: [props.header, jsxRuntime.jsxs("div", { className: "ultra-uplopd-content", children: [imageList.map(function (img, index) { return jsxRuntime.jsxs("div", { className: "ultra-uplopd-item", children: [jsxRuntime.jsx("img", { className: "ultra-uplopd-item__img", src: img.url }), jsxRuntime.jsx("span", { className: "ultra-uplopd-item__remove", onClick: function onClick() { return onDelete(index); }, children: jsxRuntime.jsx(react.Close, {}) }), img.errorCode && jsxRuntime.jsx(tooltip["default"], { title: renderError === null || renderError === void 0 ? void 0 : renderError(img), children: jsxRuntime.jsxs("div", { className: "ultra-uplopd-item__error", children: [jsxRuntime.jsx(react.Info, {}), jsxRuntime.jsx("div", { className: "ultra-uplopd-item__error_text", children: renderError === null || renderError === void 0 ? void 0 : renderError(img) })] }) })] }, img.name + uuid()); }), overCountNum < 0 && jsxRuntime.jsx("div", { className: "ultra-uplopd-item ultra-uplopd-item--add", onClick: simulatorClick, children: customAdd }), jsxRuntime.jsx("input", { className: "ultra-uplopd-input", type: "file", ref: inputRef, name: name, multiple: multiple // onChange={this.onDropFile} , onClick: function onClick(e) { e.target.value = null; }, onChange: onSelectFiles, accept: "image/*" })] }), props.footer] }); }); UploadCompoent.displayName = 'UltraUpload'; var Upload = withStyle["default"](UploadCompoent); var Upload$1 = Upload; exports["default"] = Upload$1;