"use strict";

exports.__esModule = true;
exports.default = void 0;
var _babelRuntimeJsxStyleTransform = require("babel-runtime-jsx-style-transform");
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _meetReactComponentOne = require("@alifd/meet-react-component-one");
var _universalChooseImage = _interopRequireDefault(require("universal-choose-image"));
var _view = _interopRequireDefault(require("../view"));
var _icon = _interopRequireDefault(require("../icon"));
var _message = _interopRequireDefault(require("../message"));
var _card = _interopRequireDefault(require("./item/card"));
var _locale = require("../locale");
var _zhCn = _interopRequireDefault(require("../locale/lang/zh-cn"));
var _request = _interopRequireDefault(require("./request"));
var _utils = require("../utils");
var _hooks = require("../utils/hooks");
var _utils2 = require("./utils");
var _types = require("../utils/types");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof 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; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function () { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function (t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : "suspendedYield", p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(typeof e + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
var FILE_CACHAE = {};
var updateFileStatus = function (files) {
  if (files === void 0) {
    files = [];
  }
  if (!(0, _utils.isValidArray)(files)) {
    return [];
  }
  return [].concat(files).map(function (file) {
    var uid = file.uid,
      state = file.state;
    if (FILE_CACHAE[uid] === 'done' && state === 'uploading') {
      file.state = 'done';
    }
    return file;
  });
};
var Upload = function (props, ref) {
  var _props$prefix = props.prefix,
    prefix = _props$prefix === void 0 ? 'mt-' : _props$prefix,
    extraIcon = props.extraIcon,
    className = props.className,
    action = props.action,
    _props$limit = props.limit,
    limit = _props$limit === void 0 ? 1 : _props$limit,
    _props$label = props.label,
    label = _props$label === void 0 ? '' : _props$label,
    valueProp = props.value,
    defaultValue = props.defaultValue,
    dataProp = props.data,
    headers = props.headers,
    request = props.request,
    formatter = props.formatter,
    disabled = props.disabled,
    _props$cols = props.cols,
    cols = _props$cols === void 0 ? 4 : _props$cols,
    _props$size = props.size,
    size = _props$size === void 0 ? 'medium' : _props$size,
    _props$listType = props.listType,
    listType = _props$listType === void 0 ? 'card' : _props$listType,
    _props$name = props.name,
    nameProp = _props$name === void 0 ? 'file' : _props$name,
    filePicker = props.filePicker,
    withCredentials = props.withCredentials,
    fileKeyName = props.fileKeyName,
    _props$fileType = props.fileType,
    fileType = _props$fileType === void 0 ? 'image' : _props$fileType,
    _props$accept = props.accept,
    accept = _props$accept === void 0 ? 'image/*' : _props$accept,
    _props$useDataURL = props.useDataURL,
    useDataURL = _props$useDataURL === void 0 ? true : _props$useDataURL,
    _props$autoUpload = props.autoUpload,
    autoUpload = _props$autoUpload === void 0 ? true : _props$autoUpload,
    _props$hasRemove = props.hasRemove,
    hasRemove = _props$hasRemove === void 0 ? true : _props$hasRemove,
    _props$showAddButton = props.showAddButton,
    showAddButton = _props$showAddButton === void 0 ? true : _props$showAddButton,
    _props$singleLimit = props.singleLimit,
    singleLimit = _props$singleLimit === void 0 ? 9 : _props$singleLimit,
    beforeUpload = props.beforeUpload,
    afterSelect = props.afterSelect,
    onProgress = props.onProgress,
    _onSuccess = props.onSuccess,
    _onError = props.onError,
    progressProps = props.progressProps,
    onSelect = props.onSelect,
    onChange = props.onChange,
    onRemove = props.onRemove,
    onPreview = props.onPreview,
    _props$sizeType = props.sizeType,
    sizeType = _props$sizeType === void 0 ? ['original', 'compressed'] : _props$sizeType,
    _props$sourceType = props.sourceType,
    sourceType = _props$sourceType === void 0 ? ['album', 'camera'] : _props$sourceType,
    children = props.children,
    style = props.style,
    others = (0, _tslib.__rest)(props, ["prefix", "extraIcon", "className", "action", "limit", "label", "value", "defaultValue", "data", "headers", "request", "formatter", "disabled", "cols", "size", "listType", "name", "filePicker", "withCredentials", "fileKeyName", "fileType", "accept", "useDataURL", "autoUpload", "hasRemove", "showAddButton", "singleLimit", "beforeUpload", "afterSelect", "onProgress", "onSuccess", "onError", "progressProps", "onSelect", "onChange", "onRemove", "onPreview", "sizeType", "sourceType", "children", "style"]);
  var locale = (0, _locale.useLocale)('Upload', others, _zhCn.default.Upload);
  var _useState = (0, _react.useState)('0px'),
    itemSize = _useState[0],
    setItemSize = _useState[1];
  var _useState2 = (0, _react.useState)(valueProp || defaultValue || []),
    value = _useState2[0],
    setValue = _useState2[1];
  var newestValue = (0, _react.useRef)(value);
  var timerQueue = (0, _react.useRef)([]);
  var uploadRef = (0, _react.useRef)();
  var uploadId = (0, _hooks.useGuid)('mtUpload');
  var uploadStyle = Object.assign({
    gridTemplateColumns: "repeat(" + cols + ", 1fr)"
  }, style);
  (0, _react.useEffect)(function () {
    if ((0, _utils.isValidArray)(valueProp)) {
      valueProp.forEach(function (file) {
        if (file.state && file.uid) {
          FILE_CACHAE[file.uid] = file.state;
        }
      });
    }
    setTimeout(function () {
      (function () {
        return (0, _tslib.__awaiter)(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
          var width, newCardSize;
          return _regeneratorRuntime().wrap(function _callee$(_context) {
            while (1) switch (_context.prev = _context.next) {
              case 0:
                _context.next = 2;
                return (0, _utils.getWidth)(uploadId);
              case 2:
                width = _context.sent;
                newCardSize = "calc(((" + width + "px - var(--upload-card-spacing)*" + (cols - 1) + " )) / " + cols + ")";
                setItemSize(newCardSize);
              case 5:
              case "end":
                return _context.stop();
            }
          }, _callee);
        }));
      })();
    }, 200);
    return function () {
      timerQueue.current.forEach(function (x) {
        return clearInterval(x);
      });
      timerQueue.current = [];
    };
  }, []);
  var getFile = (0, _react.useCallback)(function (uid) {
    var item = newestValue.current.find(function (it) {
      return it.uid === uid;
    });
    if (item) {
      return {
        file: item,
        index: newestValue.current.indexOf(item)
      };
    }
    return undefined;
  }, []);
  var updateFile = (0, _react.useCallback)(function (uid, mod) {
    var gotFile = getFile(uid);
    if (!gotFile) {
      throw new Error("File id " + uid + " not found");
    }
    var file = gotFile.file,
      index = gotFile.index;
    if (mod.state) {
      FILE_CACHAE[uid] = mod.state;
    }
    var isSame = true;
    for (var k in mod) {
      if (mod.hasOwnProperty(k) && file[k] !== mod[k]) {
        isSame = false;
        break;
      }
    }
    if (isSame) {
      return file;
    }
    var newFile = Object.assign(Object.assign({}, file), mod);
    var newValue = [].concat(newestValue.current);
    newValue.splice(index, 1, newFile);
    newestValue.current = newValue;
    if (onChange) {
      onChange(newValue);
    }
    if (!('value' in props)) {
      setValue(newValue);
    }
    return newFile;
  }, [valueProp, onChange]);
  var uploadFiles = (0, _react.useCallback)(function (files) {
    var uploadFile = function uploadFile(it) {
      return (0, _tslib.__awaiter)(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
        var uid, options, res, curFile, timer, clearTimer, complete, newProcess;
        return _regeneratorRuntime().wrap(function _callee2$(_context2) {
          while (1) switch (_context2.prev = _context2.next) {
            case 0:
              if (!(it.state !== 'selected')) {
                _context2.next = 2;
                break;
              }
              return _context2.abrupt("return");
            case 2:
              uid = it.uid;
              updateFile(uid, {
                state: 'pending'
              });
              options = {
                action: action,
                data: dataProp || {},
                headers: headers || {}
              };
              if ((0, _utils.isFunction)(options.data)) {
                options.data = options.data();
              }
              if (!beforeUpload) {
                _context2.next = 29;
                break;
              }
              _context2.prev = 7;
              res = beforeUpload(it, options);
              if (!(0, _utils.isBoolean)(res)) {
                _context2.next = 15;
                break;
              }
              if (!(res === false)) {
                _context2.next = 13;
                break;
              }
              updateFile(uid, {
                state: 'uploading'
              });
              return _context2.abrupt("return");
            case 13:
              _context2.next = 22;
              break;
            case 15:
              if (!(0, _types.isPromise)(res)) {
                _context2.next = 21;
                break;
              }
              _context2.next = 18;
              return res;
            case 18:
              options = _context2.sent;
              _context2.next = 22;
              break;
            case 21:
              options = res;
            case 22:
              _context2.next = 29;
              break;
            case 24:
              _context2.prev = 24;
              _context2.t0 = _context2["catch"](7);
              updateFile(uid, {
                state: 'error'
              });
              console.error(_context2.t0);
              return _context2.abrupt("return");
            case 29:
              curFile = updateFile(uid, {
                state: 'uploading'
              });
              if (onProgress) {
                onProgress();
              }
              if (options === null || options === void 0 ? void 0 : options.action) {
                _context2.next = 36;
                break;
              }
              console.warn('Upload request failed,  action prop is required');
              curFile = updateFile(uid, {
                state: 'error'
              });
              if (_onError) {
                _onError(curFile, newestValue.current);
              }
              return _context2.abrupt("return");
            case 36:
              timer = null;
              clearTimer = function clearTimer() {
                if (timer && timerQueue.current.includes(timer)) {
                  clearInterval(timer);
                  timerQueue.current.splice(timerQueue.current.indexOf(timer), 1);
                }
                timer = null;
              };
              complete = function complete() {
                return clearTimer();
              };
              newProcess = 0;
              _context2.next = 42;
              return new Promise(function (resolve, reject) {
                var requestObj = {
                  onProgress: function onProgress(ev) {
                    if (curFile.state !== 'uploading') {
                      return;
                    }
                    if (!timer) {
                      timer = setInterval(function () {
                        if (curFile.state !== 'uploading') {
                          clearTimer();
                          return;
                        }
                        curFile = updateFile(uid, {
                          state: 'uploading',
                          percent: newProcess
                        });
                        if (newProcess === 100) {
                          clearTimer();
                        }
                      }, _utils2.UPLOAD_THROTTLE);
                      timerQueue.current.push(timer);
                    }
                    newProcess = ev.percent;
                  },
                  onError: function onError(err, body) {
                    console.error('Upload request failed', err);
                    curFile = updateFile(uid, {
                      state: 'error',
                      response: body
                    });
                    if (_onError) {
                      _onError(curFile, newestValue.current);
                    }
                    resolve('error');
                    complete();
                  },
                  onSuccess: function onSuccess(res) {
                    res.status = res.statusCode;
                    if ((0, _utils.isString)(res.data)) {
                      try {
                        res.data = JSON.parse(res.data);
                      } catch (e) {}
                    }
                    var result = formatter ? formatter(res, it) : res.data;
                    if (typeof result !== 'object') {
                      console.error("Expect a json object response, " + result + " got");
                      curFile = updateFile(uid, {
                        state: 'error'
                      });
                      if (_onError) {
                        _onError(curFile, newestValue.current);
                      }
                      resolve('error');
                      return;
                    }
                    var finalState = {
                      response: result,
                      percent: 100,
                      state: result.success ? 'done' : 'error'
                    };
                    if (result.success && result.url) {
                      finalState.url = result.url;
                      finalState.imgURL = result.imgURL || result.url;
                      finalState.downloadURL = result.downloadURL || result.url;
                    }
                    curFile = updateFile(uid, finalState);
                    if (finalState.state === 'done' && _onSuccess) {
                      _onSuccess(curFile, newestValue.current);
                    }
                    if (finalState.state === 'error' && _onError) {
                      _onError(curFile, newestValue.current);
                    }
                    clearTimer();
                    resolve('success');
                  },
                  fileType: fileType,
                  data: options.data,
                  filename: fileKeyName || nameProp,
                  file: it.file,
                  withCredentials: withCredentials,
                  action: options.action,
                  method: 'post',
                  timeout: 0,
                  headers: options.headers
                };
                if (request) {
                  request(requestObj);
                } else {
                  (0, _request.default)(requestObj);
                }
              });
            case 42:
            case "end":
              return _context2.stop();
          }
        }, _callee2, null, [[7, 24]]);
      }));
    };
    if (!(0, _utils.isValidArray)(files)) {
      return;
    }
    try {
      Promise.all(files.map(function (it) {
        return uploadFile(it);
      })).then(function () {
        var arr = updateFileStatus(newestValue.current);
        if (arr) {
          if ((0, _utils.isFunction)(onChange)) {
            onChange(arr);
          }
          if (!('value' in props)) {
            setValue(arr);
            newestValue.current = arr;
          }
        }
      });
    } catch (e) {
      console.warn('上传失败');
    }
  }, [action, dataProp, headers, beforeUpload, onProgress, formatter, _onSuccess, _onError, request]);
  var doUpload = (0, _react.useCallback)(function () {
    return uploadFiles(newestValue.current.filter(function (it) {
      return it.state === 'selected';
    }));
  }, []);
  var doReUpload = (0, _react.useCallback)(function (it) {
    updateFile(it.uid, {
      state: 'selected',
      percent: 0
    });
    doUpload();
  }, []);
  var handleAdd = (0, _react.useCallback)(function () {
    return (0, _tslib.__awaiter)(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
      var file, defaultSizeType, defaultSourceType, mediaType, fileItems, newValue;
      return _regeneratorRuntime().wrap(function _callee3$(_context3) {
        while (1) switch (_context3.prev = _context3.next) {
          case 0:
            if (!(limit <= newestValue.current.length || disabled)) {
              _context3.next = 3;
              break;
            }
            _message.default.notice((0, _utils.replaceMessage)(locale.limit, {
              limit: limit
            }));
            return _context3.abrupt("return");
          case 3:
            defaultSizeType = ['original', 'compressed'];
            defaultSourceType = ['album', 'camera'];
            _context3.prev = 5;
            if (!(0, _utils.isFunction)(filePicker)) {
              _context3.next = 12;
              break;
            }
            _context3.next = 9;
            return filePicker();
          case 9:
            file = _context3.sent;
            _context3.next = 23;
            break;
          case 12:
            if (!_utils.isStrictWechatMiniProgram) {
              _context3.next = 20;
              break;
            }
            mediaType = ['video', 'image'];
            if (accept === 'image/*') {
              mediaType = ['image'];
            } else if (accept === 'video/*') {
              mediaType = ['video'];
            }
            _context3.next = 17;
            return (0, _utils2.chooseImageForWechat)({
              count: Math.min(singleLimit, limit - newestValue.current.length),
              mediaType: mediaType,
              sizeType: sizeType || defaultSizeType,
              sourceType: sourceType || defaultSourceType
            });
          case 17:
            file = _context3.sent;
            _context3.next = 23;
            break;
          case 20:
            _context3.next = 22;
            return (0, _universalChooseImage.default)({
              count: Math.min(singleLimit, limit - newestValue.current.length),
              accept: accept,
              sizeType: sizeType || defaultSizeType,
              sourceType: sourceType || defaultSourceType
            });
          case 22:
            file = _context3.sent;
          case 23:
            _context3.next = 28;
            break;
          case 25:
            _context3.prev = 25;
            _context3.t0 = _context3["catch"](5);
            console.error(_context3.t0);
          case 28:
            if (!(!file || !Array.isArray(file === null || file === void 0 ? void 0 : file.data))) {
              _context3.next = 30;
              break;
            }
            return _context3.abrupt("return");
          case 30:
            fileItems = file.data.map(function (it, index) {
              return (0, _utils2.createFileItem)(it, file.files ? file.files[index] : null);
            });
            if (afterSelect) {
              fileItems = fileItems.filter(function (it) {
                return afterSelect(it) !== false;
              });
            }
            if (useDataURL) {
              fileItems.forEach(function (it) {
                if (it.dataURL && it.isImage) {
                  it.imgURL = it.dataURL;
                }
              });
            }
            if (onSelect) {
              onSelect();
            }
            newValue = [].concat(newestValue.current, fileItems);
            if (onChange) {
              onChange(newValue);
            }
            if (!('value' in props)) {
              setValue(newValue);
              newestValue.current = newValue;
            }
            if (autoUpload) {
              doUpload();
            }
          case 38:
          case "end":
            return _context3.stop();
        }
      }, _callee3, null, [[5, 25]]);
    }));
  }, [limit, disabled, locale, sizeType, sourceType, afterSelect, autoUpload, onSelect, onChange]);
  var handleRemove = (0, _react.useCallback)(function (file) {
    var doRemove = function doRemove() {
      var index = newestValue.current.indexOf(file);
      if (index === -1) {
        return;
      }
      var newValue = [].concat(newestValue.current);
      newValue.splice(index, 1);
      if (onChange) {
        onChange(newValue);
      }
      if (!('value' in props)) {
        setValue(newValue);
        newestValue.current = newValue;
      }
    };
    if (!onRemove) {
      doRemove();
      return;
    }
    var result = onRemove(file);
    if ((0, _utils.isBoolean)(result)) {
      if (result === true) {
        doRemove();
      }
      return;
    }
    if ((0, _types.isPromise)(result)) {
      result.then(function (should) {
        return should && doRemove();
      }).catch(function () {});
    }
  }, [onChange, onRemove]);
  var handleItemClick = (0, _react.useCallback)(function (file, e) {
    if (onPreview) {
      onPreview(file, Object.assign(Object.assign({}, e), {
        fileList: value
      }));
    }
  }, [onPreview]);
  (0, _react.useEffect)(function () {
    if ('value' in props) {
      newestValue.current = updateFileStatus(valueProp || defaultValue || []);
      setValue(newestValue.current);
      if (autoUpload) {
        doUpload();
      }
    }
  }, [valueProp]);
  (0, _react.useImperativeHandle)(ref, function () {
    return Object.assign(uploadRef.current, {
      add: handleAdd,
      upload: doUpload,
      getInstance: function getInstance() {
        return {
          startUpload: doUpload
        };
      }
    });
  });
  var clsPrefix = prefix + "upload";
  var hasAdd = showAddButton && limit > value.length && !disabled;
  return /*#__PURE__*/(0, _react.createElement)(_view.default, {
    id: uploadId,
    ref: uploadRef
  }, label || extraIcon ? /*#__PURE__*/(0, _react.createElement)(_view.default, {
    className: clsPrefix + "-header"
  }, /*#__PURE__*/(0, _react.createElement)(_meetReactComponentOne.Text, {
    className: clsPrefix + "-label " + clsPrefix + "-label--" + size
  }, label), extraIcon ? /*#__PURE__*/(0, _react.createElement)(_view.default, {
    className: clsPrefix + "-extra"
  }, /*#__PURE__*/(0, _react.createElement)(_meetReactComponentOne.Text, {
    className: clsPrefix + "-counter"
  }, value.length || 0, "/", limit), /*#__PURE__*/(0, _react.createElement)(_icon.default, {
    className: clsPrefix + "-extra-icon",
    size: size,
    onClick: handleAdd,
    name: extraIcon
  })) : null) : null, /*#__PURE__*/(0, _react.createElement)(_view.default, _extends({
    className: (0, _classnames.default)(clsPrefix, clsPrefix + "--" + listType, className),
    style: (0, _babelRuntimeJsxStyleTransform.rpx2vw4style)(uploadStyle)
  }, others), value.map(function (file) {
    return /*#__PURE__*/(0, _react.createElement)(_card.default, {
      key: file.uid,
      file: file,
      prefix: clsPrefix,
      progressProps: progressProps,
      onClick: handleItemClick,
      reUpload: locale.reupload,
      onReUpload: doReUpload,
      hasRemove: hasRemove && !disabled,
      onRemove: handleRemove,
      style: (0, _babelRuntimeJsxStyleTransform.rpx2vw4style)({
        width: "" + itemSize,
        height: "" + itemSize
      })
    });
  }), hasAdd && /*#__PURE__*/(0, _react.createElement)(_view.default, {
    className: (0, _classnames.default)(clsPrefix + "-item", clsPrefix + "-item--add", clsPrefix + "-item--" + listType),
    onClick: handleAdd,
    style: (0, _babelRuntimeJsxStyleTransform.rpx2vw4style)({
      width: "" + itemSize,
      height: "" + itemSize
    })
  }, children ? children : /*#__PURE__*/(0, _react.createElement)(_icon.default, {
    className: clsPrefix + "-item-icon",
    name: "add"
  }))));
};
Upload.displayName = 'Upload';
var _default = /*#__PURE__*/(0, _react.forwardRef)(Upload);
exports.default = _default;