"use strict"; var _baseComponent = _interopRequireDefault(require("../helpers/baseComponent")), _classNames2 = _interopRequireDefault(require("../helpers/classNames")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e } } function _toConsumableArray(e) { return _arrayWithoutHoles(e) || _iterableToArray(e) || _nonIterableSpread() } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance") } function _iterableToArray(e) { if (Symbol.iterator in Object(e) || "[object Arguments]" === Object.prototype.toString.call(e)) return Array.from(e) } function _arrayWithoutHoles(e) { if (Array.isArray(e)) { for (var t = 0, a = new Array(e.length); t < e.length; t++) a[t] = e[t]; return a } } function ownKeys(t, e) { var a = Object.keys(t); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(t); e && (r = r.filter(function(e) { return Object.getOwnPropertyDescriptor(t, e).enumerable })), a.push.apply(a, r) } return a } function _objectSpread(t) { for (var e = 1; e < arguments.length; e++) { var a = null != arguments[e] ? arguments[e] : {}; e % 2 ? ownKeys(a, !0).forEach(function(e) { _defineProperty(t, e, a[e]) }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(a)) : ownKeys(a).forEach(function(e) { Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(a, e)) }) } return t } function _defineProperty(e, t, a) { return t in e ? Object.defineProperty(e, t, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = a, e }(0, _baseComponent.default)({ properties: { prefixCls: { type: String, value: "wux-upload" }, max: { type: Number, value: -1, observer: "updated" }, count: { type: Number, value: 9, observer: "updated" }, defaultFileType: { type: String, value: "image" }, compressed: { type: Boolean, value: !0 }, maxDuration: { type: Number, value: 60 }, camera: { type: String, value: "back" }, sizeType: { type: Array, value: ["original", "compressed"] }, sourceType: { type: Array, value: ["album", "camera"] }, url: { type: String, value: "" }, name: { type: String, value: "file" }, header: { type: Object, value: {} }, formData: { type: Object, value: {} }, uploaded: { type: Boolean, value: !0 }, disabled: { type: Boolean, value: !1 }, progress: { type: Boolean, value: !1 }, listType: { type: String, value: "text" }, defaultFileList: { type: Array, value: [] }, fileList: { type: Array, value: [], observer: function(e) { this.data.controlled && this.setData({ uploadFileList: e }) } }, controlled: { type: Boolean, value: !1 }, showUploadList: { type: Boolean, value: !0 }, showRemoveIcon: { type: Boolean, value: !0 }, showUploadIcon: { type: Boolean, value: !0 } }, data: { uploadMax: -1, uploadCount: 9, uploadFileList: [], isVideo: !1 }, computed: { classes: ["prefixCls, disabled, listType", function(e, t, a) { var r; return { wrap: (0, _classNames2.default)(e, (_defineProperty(r = {}, "".concat(e, "--").concat(a), a), _defineProperty(r, "".concat(e, "--disabled"), t), r)), files: "".concat(e, "__files"), file: "".concat(e, "__file"), thumb: "".concat(e, "__thumb"), remove: "".concat(e, "__remove"), select: "".concat(e, "__select"), button: "".concat(e, "__button") } }] }, methods: { updated: function() { var e = this.data, t = e.count, a = e.max, r = this.calcValue(t, a), o = r.uploadMax, i = r.uploadCount; this.data.uploadMax === o && this.data.uploadCount === i || this.setData({ uploadMax: o, uploadCount: i }) }, calcValue: function(e, t) { var a = parseInt(e), r = -1 < parseInt(t) ? parseInt(t) : -1, o = a; return -1 !== r && r <= 9 && r < a && (o = r), { uploadMax: r, uploadCount: o } }, onSelect: function() { function e(e) { e.tempFilePaths = e.tempFilePaths || [e.tempFilePath], t.tempFilePaths = e.tempFilePaths.map(function(e) { return { url: e, uid: t.getUid() } }), t.triggerEvent("before", _objectSpread({}, e, { fileList: u })), s && t.uploadFile() } var t = this, a = this.data, r = a.uploadCount, o = a.uploadMax, i = a.sizeType, n = a.sourceType, s = a.uploaded, l = a.disabled, u = a.uploadFileList, c = a.isVideo, p = a.compressed, d = a.maxDuration, f = a.camera, h = this.calcValue(r, o - u.length).uploadCount; l || (c ? wx.chooseVideo({ sourceType: n, compressed: p, maxDuration: d, camera: f, success: e }) : wx.chooseImage({ count: h, sizeType: i, sourceType: n, success: e })) }, onChange: function(e) { var t = 0 < arguments.length && void 0 !== e ? e : {}; this.data.controlled || this.setData({ uploadFileList: t.fileList }), this.triggerEvent("change", t) }, onStart: function(e) { var t = _objectSpread({}, e, { status: "uploading" }); this.onChange({ file: t, fileList: [].concat(_toConsumableArray(this.data.uploadFileList), [t]) }) }, onSuccess: function(e, t) { var a = _toConsumableArray(this.data.uploadFileList), r = a.map(function(e) { return e.uid }).indexOf(e.uid); if (-1 !== r) { var o = _objectSpread({}, e, { status: "done", res: t }), i = { file: o, fileList: a }; a.splice(r, 1, o), this.triggerEvent("success", i), this.onChange(i) } }, onFail: function(e, t) { var a = _toConsumableArray(this.data.uploadFileList), r = a.map(function(e) { return e.uid }).indexOf(e.uid); if (-1 !== r) { var o = _objectSpread({}, e, { status: "error", res: t }), i = { file: o, fileList: a }; a.splice(r, 1, o), this.triggerEvent("fail", i), this.onChange(i) } }, onProgress: function(e, t) { var a = _toConsumableArray(this.data.uploadFileList), r = a.map(function(e) { return e.uid }).indexOf(e.uid); if (-1 !== r) { var o = _objectSpread({}, e, { progress: t.progress, res: t }), i = { file: o, fileList: a }; a.splice(r, 1, o), this.triggerEvent("progress", i), this.onChange(i) } }, uploadFile: function() { var t = this; if (this.tempFilePaths.length) { var e = this.data, a = e.url, r = e.name, o = e.header, i = e.formData, n = e.disabled, s = e.progress, l = this.tempFilePaths.shift(), u = l.uid, c = l.url; a && c && !n && (this.onStart(l), this.uploadTask[u] = wx.uploadFile({ url: a, filePath: c, name: r, header: o, formData: i, success: function(e) { return t.onSuccess(l, e) }, fail: function(e) { return t.onFail(l, e) }, complete: function(e) { delete t.uploadTask[u], t.triggerEvent("complete", e), t.uploadFile() } }), s && this.uploadTask[u].onProgressUpdate(function(e) { return t.onProgress(l, e) })) } }, onPreview: function(e) { this.triggerEvent("preview", _objectSpread({}, e.currentTarget.dataset, { fileList: this.data.uploadFileList })) }, onRemove: function(e) { var t = e.currentTarget.dataset.file, a = _toConsumableArray(this.data.uploadFileList), r = a.map(function(e) { return e.uid }).indexOf(t.uid); if (-1 !== r) { var o = { file: _objectSpread({}, t, { status: "remove" }), fileList: a }; a.splice(r, 1), this.triggerEvent("remove", _objectSpread({}, e.currentTarget.dataset, {}, o)), this.onChange(o) } }, abort: function(e) { var t = this.uploadTask; e ? t[e] && (t[e].abort(), delete t[e]) : Object.keys(t).forEach(function(e) { t[e] && (t[e].abort(), delete t[e]) }) } }, created: function() { var e = this; this.index = 0, this.createdAt = Date.now(), this.getUid = function() { return "wux-upload--".concat(e.createdAt, "-").concat(++e.index) }, this.uploadTask = {}, this.tempFilePaths = [] }, attached: function() { var e = this.data, t = e.defaultFileType, a = e.defaultFileList, r = e.fileList, o = e.controlled ? r : a, i = "video" === t; this.setData({ uploadFileList: o, isVideo: i }) }, detached: function() { this.abort() } });