- Fix router import path in main.js - Handle Django REST Framework pagination format in API calls - Add getTemplates function to project API - Restart frontend development server
130 lines
3.9 KiB
JavaScript
130 lines
3.9 KiB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
require("../../../_virtual/_rolldown/runtime.js");
|
|
const require_error = require("../../../utils/error.js");
|
|
const require_upload = require("./upload.js");
|
|
let _vueuse_core = require("@vueuse/core");
|
|
let lodash_unified = require("lodash-unified");
|
|
let vue = require("vue");
|
|
//#region ../../packages/components/upload/src/use-handlers.ts
|
|
const SCOPE = "ElUpload";
|
|
const revokeFileObjectURL = (file) => {
|
|
if (file.url?.startsWith("blob:")) URL.revokeObjectURL(file.url);
|
|
};
|
|
const useHandlers = (props, uploadRef) => {
|
|
const uploadFiles = (0, _vueuse_core.useVModel)(props, "fileList", void 0, { passive: true });
|
|
const getFile = (rawFile) => uploadFiles.value.find((file) => file.uid === rawFile.uid);
|
|
function abort(file) {
|
|
uploadRef.value?.abort(file);
|
|
}
|
|
function clearFiles(states = [
|
|
"ready",
|
|
"uploading",
|
|
"success",
|
|
"fail"
|
|
]) {
|
|
uploadFiles.value = uploadFiles.value.filter((row) => !states.includes(row.status));
|
|
}
|
|
function removeFile(file) {
|
|
uploadFiles.value = uploadFiles.value.filter((uploadFile) => uploadFile.uid !== file.uid);
|
|
}
|
|
const emitChange = (file) => {
|
|
(0, vue.nextTick)(() => props.onChange(file, uploadFiles.value));
|
|
};
|
|
const handleError = (err, rawFile) => {
|
|
const file = getFile(rawFile);
|
|
if (!file) return;
|
|
console.error(err);
|
|
file.status = "fail";
|
|
removeFile(file);
|
|
props.onError(err, file, uploadFiles.value);
|
|
emitChange(file);
|
|
};
|
|
const handleProgress = (evt, rawFile) => {
|
|
const file = getFile(rawFile);
|
|
if (!file) return;
|
|
props.onProgress(evt, file, uploadFiles.value);
|
|
file.status = "uploading";
|
|
file.percentage = Math.round(evt.percent);
|
|
};
|
|
const handleSuccess = (response, rawFile) => {
|
|
const file = getFile(rawFile);
|
|
if (!file) return;
|
|
file.status = "success";
|
|
file.response = response;
|
|
props.onSuccess(response, file, uploadFiles.value);
|
|
emitChange(file);
|
|
};
|
|
const handleStart = (file) => {
|
|
if ((0, lodash_unified.isNil)(file.uid)) file.uid = require_upload.genFileId();
|
|
const uploadFile = {
|
|
name: file.name,
|
|
percentage: 0,
|
|
status: "ready",
|
|
size: file.size,
|
|
raw: file,
|
|
uid: file.uid
|
|
};
|
|
if (props.listType === "picture-card" || props.listType === "picture") try {
|
|
uploadFile.url = URL.createObjectURL(file);
|
|
} catch (err) {
|
|
require_error.debugWarn(SCOPE, err.message);
|
|
props.onError(err, uploadFile, uploadFiles.value);
|
|
}
|
|
uploadFiles.value = [...uploadFiles.value, uploadFile];
|
|
emitChange(uploadFile);
|
|
};
|
|
const handleRemove = async (file) => {
|
|
const uploadFile = file instanceof File ? getFile(file) : file;
|
|
if (!uploadFile) require_error.throwError(SCOPE, "file to be removed not found");
|
|
const doRemove = (file) => {
|
|
abort(file);
|
|
removeFile(file);
|
|
props.onRemove(file, uploadFiles.value);
|
|
revokeFileObjectURL(file);
|
|
};
|
|
if (props.beforeRemove) {
|
|
if (await props.beforeRemove(uploadFile, uploadFiles.value) !== false) doRemove(uploadFile);
|
|
} else doRemove(uploadFile);
|
|
};
|
|
function submit() {
|
|
uploadFiles.value.filter(({ status }) => status === "ready").forEach(({ raw }) => raw && uploadRef.value?.upload(raw));
|
|
}
|
|
(0, vue.watch)(() => props.listType, (val) => {
|
|
if (val !== "picture-card" && val !== "picture") return;
|
|
uploadFiles.value = uploadFiles.value.map((file) => {
|
|
const { raw, url } = file;
|
|
if (!url && raw) try {
|
|
file.url = URL.createObjectURL(raw);
|
|
} catch (err) {
|
|
props.onError(err, file, uploadFiles.value);
|
|
}
|
|
return file;
|
|
});
|
|
});
|
|
(0, vue.watch)(uploadFiles, (files) => {
|
|
for (const file of files) {
|
|
file.uid ||= require_upload.genFileId();
|
|
file.status ||= "success";
|
|
}
|
|
}, {
|
|
immediate: true,
|
|
deep: true
|
|
});
|
|
return {
|
|
/** @description two-way binding ref from props `fileList` */
|
|
uploadFiles,
|
|
abort,
|
|
clearFiles,
|
|
handleError,
|
|
handleProgress,
|
|
handleStart,
|
|
handleSuccess,
|
|
handleRemove,
|
|
submit,
|
|
revokeFileObjectURL
|
|
};
|
|
};
|
|
//#endregion
|
|
exports.useHandlers = useHandlers;
|
|
|
|
//# sourceMappingURL=use-handlers.js.map
|