tdesign-mobile-vue
Version:
tdesign-mobile-vue
516 lines (508 loc) • 19.4 kB
JavaScript
/**
* tdesign v1.7.0
* (c) 2024 TDesign Group
* @license MIT
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var _toArray = require('@babel/runtime/helpers/toArray');
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var isFunction = require('lodash/isFunction');
var isNumber = require('lodash/isNumber');
var _common_js_upload_utils = require('./utils.js');
var _common_js_upload_xhr = require('./xhr.js');
var _common_js_log_log = require('../log/log.js');
require('@babel/runtime/helpers/toConsumableArray');
require('@babel/runtime/helpers/typeof');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var _toArray__default = /*#__PURE__*/_interopDefaultLegacy(_toArray);
var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
var isFunction__default = /*#__PURE__*/_interopDefaultLegacy(isFunction);
var isNumber__default = /*#__PURE__*/_interopDefaultLegacy(isNumber);
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty__default["default"](e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function handleBeforeUpload(file, params) {
var sizeLimit = params.sizeLimit,
beforeUpload = params.beforeUpload;
var sizePromise = new Promise(function (resolve) {
var result = null;
if (sizeLimit) {
var sizeLimitObj = isNumber__default["default"](sizeLimit) ? {
size: sizeLimit,
unit: "KB"
} : sizeLimit;
var limit = _common_js_upload_utils.isOverSizeLimit(file.size, sizeLimitObj.size, sizeLimitObj.unit);
if (limit) {
result = sizeLimitObj;
}
}
resolve(result);
});
var promiseList = [sizePromise, void 0];
if (isFunction__default["default"](beforeUpload)) {
var r = beforeUpload(file);
var p = r instanceof Promise ? r : new Promise(function (resolve) {
return resolve(r);
});
promiseList[1] = p;
}
return new Promise(function (resolve) {
Promise.all(promiseList).then(function (r) {
resolve(r);
});
});
}
function handleError(options) {
var event = options.event,
files = options.files,
response = options.response,
XMLHttpRequest = options.XMLHttpRequest,
formatResponse = options.formatResponse;
var res = response;
if (isFunction__default["default"](formatResponse)) {
res = formatResponse(response, {
file: files[0],
currentFiles: files
});
}
files.forEach(function (file) {
file.status = "fail";
file.response = res;
});
return {
response: res,
event: event,
files: files,
XMLHttpRequest: XMLHttpRequest
};
}
function handleSuccess(params) {
var event = params.event,
files = params.files,
response = params.response,
XMLHttpRequest = params.XMLHttpRequest;
if ((files === null || files === void 0 ? void 0 : files.length) <= 0) {
_common_js_log_log["default"].error("Upload", "Empty File in Success Callback");
}
files.forEach(function (file) {
var _file$response;
file.percent = 100;
file.status = "success";
(_file$response = file.response) === null || _file$response === void 0 || delete _file$response.error;
});
var res = response;
files[0].url = res.url || files[0].url;
return {
response: res,
event: event,
files: files,
XMLHttpRequest: XMLHttpRequest
};
}
function handleRequestMethodResponse(res) {
if (!res) {
_common_js_log_log["default"].error("Upload", "`requestMethodResponse` is required.");
return false;
}
if (!res.status) {
_common_js_log_log["default"].error("Upload", "`requestMethodResponse.status` is missing, which value only can be `success` or `fail`");
return false;
}
if (!["success", "fail"].includes(res.status)) {
_common_js_log_log["default"].error("Upload", "`requestMethodResponse.status` must be `success` or `fail`, examples `{ status: 'success', response: { url: '' } }`");
return false;
}
if (res.status === "success" && (!res.response || !res.response.url && !res.response.files)) {
_common_js_log_log["default"].warn("Upload", "`requestMethodResponse.response.url` or `requestMethodResponse.response.files` is required if `status` is `success`");
}
return true;
}
function uploadOneRequest(params) {
var action = params.action,
toUploadFiles = params.toUploadFiles,
requestMethod = params.requestMethod;
return new Promise(function (resolve) {
if (!action && !requestMethod) {
_common_js_log_log["default"].error("Upload", "one of action and requestMethod must be exist.");
resolve({});
return;
}
if (!toUploadFiles || !toUploadFiles.length) {
_common_js_log_log["default"].warn("Upload", "No files need to be uploaded");
resolve({});
return;
}
toUploadFiles.forEach(function (file) {
file.status = "progress";
});
if (requestMethod) {
requestMethod(params.multiple ? toUploadFiles : toUploadFiles[0]).then(function (res) {
if (!handleRequestMethodResponse(res)) {
resolve({});
return;
}
var response = res.response || {};
if (isFunction__default["default"](params.formatResponse)) {
response = params.formatResponse(response, {
file: toUploadFiles[0],
currentFiles: toUploadFiles
});
}
if (res.status === "fail") {
response.error = res.error || response.error;
}
var resultFiles = [];
if (res.status === "success" && response.files) {
resultFiles = response.files.map(function (file) {
var fileInfo = toUploadFiles.find(function (toFile) {
return file.name && toFile.name === file.name || file.raw && toFile.raw === file.raw;
});
return _objectSpread(_objectSpread(_objectSpread({}, fileInfo), file), {}, {
status: res.status,
response: response
});
});
} else {
toUploadFiles.forEach(function (file) {
var _response;
file.status = res.status;
file.response = response;
file.url = response.url;
file.percent = res.status === "success" ? 100 : 0;
file.uploadTime = ((_response = response) === null || _response === void 0 ? void 0 : _response.uploadTime) || _common_js_upload_utils.getCurrentDate();
});
resultFiles = toUploadFiles;
}
var result = {
response: response,
file: resultFiles[0],
files: resultFiles
};
if (res.status === "success") {
var _params$onResponseSuc;
(_params$onResponseSuc = params.onResponseSuccess) === null || _params$onResponseSuc === void 0 || _params$onResponseSuc.call(params, result);
} else if (res.status === "fail") {
var _params$onResponseErr;
(_params$onResponseErr = params.onResponseError) === null || _params$onResponseErr === void 0 || _params$onResponseErr.call(params, result);
}
resolve({
status: res.status,
data: result
});
});
} else {
var _params$setXhrObject;
var xhrReq = _common_js_upload_xhr["default"]({
action: params.action,
files: params.toUploadFiles,
useMockProgress: params.useMockProgress,
mockProgressDuration: params.mockProgressDuration,
onError: function onError(p) {
var _params$onResponseErr2;
var r = handleError(_objectSpread(_objectSpread({}, p), {}, {
formatResponse: params.formatResponse
}));
(_params$onResponseErr2 = params.onResponseError) === null || _params$onResponseErr2 === void 0 || _params$onResponseErr2.call(params, r);
resolve({
status: "fail",
data: r
});
},
onProgress: params.onResponseProgress,
onSuccess: function onSuccess(p) {
var formatResponse = params.formatResponse;
var res = p.response;
if (isFunction__default["default"](formatResponse)) {
res = formatResponse(p.response, {
file: p.file,
currentFiles: p.files
});
}
if (res.error) {
var _params$onResponseErr3;
var r = handleError(_objectSpread(_objectSpread({}, p), {}, {
response: res
}));
(_params$onResponseErr3 = params.onResponseError) === null || _params$onResponseErr3 === void 0 || _params$onResponseErr3.call(params, r);
resolve({
status: "fail",
data: r
});
} else {
var _params$onResponseSuc2;
p.file.response = res;
p.files[0].response = res;
var _r = handleSuccess(_objectSpread(_objectSpread({}, p), {}, {
response: res
}));
(_params$onResponseSuc2 = params.onResponseSuccess) === null || _params$onResponseSuc2 === void 0 || _params$onResponseSuc2.call(params, _r);
resolve({
status: "success",
data: _r
});
}
},
formatRequest: params.formatRequest,
data: params.data,
name: params.name,
headers: params.headers,
withCredentials: params.withCredentials,
method: params.method
});
(_params$setXhrObject = params.setXhrObject) === null || _params$setXhrObject === void 0 || _params$setXhrObject.call(params, {
files: params.toUploadFiles,
xhrReq: xhrReq
});
}
});
}
function updateUploadedFiles(uploadFiles, resultFiles) {
var existFiles = uploadFiles.filter(function (t) {
return t.url;
});
var newFiles = existFiles;
var _loop = function _loop() {
var file = resultFiles[i];
var index = uploadFiles.findIndex(function (item) {
return item.raw && item.raw === file.raw || item.name && item.name === file.name;
});
var tmpFile = index >= 0 ? _objectSpread(_objectSpread({}, uploadFiles[index]), file) : file;
newFiles.push(tmpFile);
};
for (var i = 0, len = resultFiles.length; i < len; i++) {
_loop();
}
return newFiles;
}
function upload(params) {
var uploadAllFilesInOneRequest = params.uploadAllFilesInOneRequest,
toUploadFiles = params.toUploadFiles,
uploadedFiles = params.uploadedFiles,
isBatchUpload = params.isBatchUpload;
var thisUploadFiles = toUploadFiles.filter(function (t) {
return !t.response || t.response && !t.response.error;
});
return new Promise(function (resolve) {
if (uploadAllFilesInOneRequest || !params.multiple) {
uploadOneRequest(params).then(function (r) {
if (r.status === "success") {
r.data.files = isBatchUpload || !params.multiple ? r.data.files : updateUploadedFiles(uploadedFiles, r.data.files);
}
var failedFiles = r.status === "fail" ? r.data.files : [];
resolve(_objectSpread(_objectSpread({}, r), {}, {
failedFiles: failedFiles
}));
});
return;
}
var list = thisUploadFiles.map(function (file) {
return uploadOneRequest(_objectSpread(_objectSpread({}, params), {}, {
toUploadFiles: [file]
}));
});
Promise.all(list).then(function (arr) {
var files = [];
var failedFiles = [];
arr.forEach(function (one) {
if (one.status === "success") {
files.push(one.data.files[0]);
} else if (one.status === "fail") {
failedFiles.push(one.data.files[0]);
}
});
var tFiles = params.autoUpload ? uploadedFiles.concat(files) : uploadedFiles;
var newFiles = isBatchUpload || !params.multiple ? files : tFiles;
resolve({
status: files.length ? "success" : "fail",
data: {
files: newFiles
},
failedFiles: failedFiles,
list: arr
});
});
});
}
function formatToUploadFile(files, format) {
var status = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : void 0;
var percent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
return files.map(function (fileRaw) {
var file = fileRaw;
if (isFunction__default["default"](format)) {
file = format(fileRaw);
}
var uploadFile = _objectSpread({
raw: fileRaw,
lastModified: fileRaw.lastModified,
name: fileRaw.name,
size: fileRaw.size,
type: fileRaw.type,
percent: percent,
status: status
}, file);
return uploadFile;
});
}
function validateFile(params) {
var files = params.files,
uploadValue = params.uploadValue,
max = params.max,
allowUploadDuplicateFile = params.allowUploadDuplicateFile;
return new Promise(function (resolve) {
var tmpFiles = files.filter(function (file) {
var sameNameFile = uploadValue.find(function (t) {
return t.name === file.name;
});
return allowUploadDuplicateFile || !sameNameFile;
});
var hasSameNameFile = false;
if (tmpFiles.length < files.length) {
hasSameNameFile = true;
}
if (!tmpFiles.length) {
var tFiles = formatToUploadFile(files, params.format, params.autoUpload ? "progress" : "waiting");
resolve({
hasSameNameFile: hasSameNameFile,
file: tFiles === null || tFiles === void 0 ? void 0 : tFiles[0],
files: tFiles,
validateResult: {
type: "FILTER_FILE_SAME_NAME"
}
});
return;
}
var lengthOverLimit = false;
if (max && tmpFiles.length && !params.isBatchUpload) {
var tmpFilesLenToBeAdded = tmpFiles.length;
tmpFiles = tmpFiles.slice(0, max - uploadValue.length);
if (tmpFilesLenToBeAdded + uploadValue.length > max) {
lengthOverLimit = true;
}
}
var formattedFiles = formatToUploadFile(tmpFiles, params.format, params.autoUpload ? "progress" : "waiting");
var allFileValidatePromise;
if (params.beforeAllFilesUpload) {
var _params$beforeAllFile;
var r = (_params$beforeAllFile = params.beforeAllFilesUpload) === null || _params$beforeAllFile === void 0 ? void 0 : _params$beforeAllFile.call(params, formattedFiles);
allFileValidatePromise = r instanceof Promise ? r : new Promise(function (resolve2) {
return resolve2(r);
});
}
var promiseList = formattedFiles.map(function (file) {
return new Promise(function (resolve2) {
handleBeforeUpload(file, {
beforeUpload: params.beforeUpload,
sizeLimit: params.sizeLimit
}).then(function (_ref) {
var _ref2 = _slicedToArray__default["default"](_ref, 2),
sizeResult = _ref2[0],
customResult = _ref2[1];
if (sizeResult) {
resolve2({
file: file,
validateResult: {
type: "FILE_OVER_SIZE_LIMIT",
extra: sizeResult
}
});
} else if (customResult === false) {
resolve2({
file: file,
validateResult: {
type: "CUSTOM_BEFORE_UPLOAD"
}
});
}
resolve2({
file: file
});
});
});
});
Promise.all([allFileValidatePromise].concat(promiseList)).then(function (results) {
var _results = _toArray__default["default"](results),
allFilesResult = _results[0],
others = _results.slice(1);
if (allFilesResult === false) {
resolve({
lengthOverLimit: lengthOverLimit,
hasSameNameFile: hasSameNameFile,
validateResult: {
type: "BEFORE_ALL_FILES_UPLOAD"
},
files: formattedFiles
});
} else {
resolve({
lengthOverLimit: lengthOverLimit,
hasSameNameFile: hasSameNameFile,
fileValidateList: others,
files: formattedFiles
});
}
});
});
}
function getFilesAndErrors(fileValidateList, getError) {
var sizeLimitErrors = [];
var beforeUploadErrorFiles = [];
var toFiles = [];
fileValidateList.forEach(function (oneFile) {
var _oneFile$validateResu, _oneFile$validateResu2;
if (((_oneFile$validateResu = oneFile.validateResult) === null || _oneFile$validateResu === void 0 ? void 0 : _oneFile$validateResu.type) === "CUSTOM_BEFORE_UPLOAD") {
beforeUploadErrorFiles.push(oneFile.file);
return;
}
if (((_oneFile$validateResu2 = oneFile.validateResult) === null || _oneFile$validateResu2 === void 0 ? void 0 : _oneFile$validateResu2.type) === "FILE_OVER_SIZE_LIMIT") {
if (!oneFile.file.response) {
oneFile.file.response = {};
}
oneFile.file.response.error = oneFile.file.response.error || getError(oneFile.validateResult.extra);
sizeLimitErrors.push(oneFile);
return;
}
toFiles.push(oneFile.file);
});
return {
sizeLimitErrors: sizeLimitErrors,
beforeUploadErrorFiles: beforeUploadErrorFiles,
toFiles: toFiles
};
}
function getTriggerTextField(p) {
if (p.isBatchUpload && p.status) return "reupload";
if (p.status === "fail") return "reupload";
if (p.status === "progress") return "uploading";
if (p.status === "success" || !p.autoUpload && p.status === "waiting") {
return p.multiple ? "continueUpload" : "reupload";
}
return "fileInput";
}
function getDisplayFiles(params) {
var multiple = params.multiple,
uploadValue = params.uploadValue,
toUploadFiles = params.toUploadFiles,
autoUpload = params.autoUpload;
var waitingUploadFiles = autoUpload ? toUploadFiles : toUploadFiles.filter(function (file) {
return file.status !== "success";
});
if (multiple && !params.isBatchUpload) {
if (!autoUpload) return uploadValue;
return (waitingUploadFiles.length ? uploadValue.concat(waitingUploadFiles) : uploadValue) || [];
}
return (waitingUploadFiles.length ? waitingUploadFiles : uploadValue) || [];
}
exports.formatToUploadFile = formatToUploadFile;
exports.getDisplayFiles = getDisplayFiles;
exports.getFilesAndErrors = getFilesAndErrors;
exports.getTriggerTextField = getTriggerTextField;
exports.handleBeforeUpload = handleBeforeUpload;
exports.handleError = handleError;
exports.handleRequestMethodResponse = handleRequestMethodResponse;
exports.handleSuccess = handleSuccess;
exports.upload = upload;
exports.uploadOneRequest = uploadOneRequest;
exports.validateFile = validateFile;
//# sourceMappingURL=main.js.map