diff --git a/src/files-ui/core/index.ts b/src/files-ui/core/index.ts index e76085c5ebbd5f35e0d87965dee23db775d95d3f..8d276ea53da35f4a9e3ff85c1f9fe40d25f32083 100644 --- a/src/files-ui/core/index.ts +++ b/src/files-ui/core/index.ts @@ -104,7 +104,6 @@ export { sleepTransition, toUploadableExtFileList, unableToUploadResult, - uploadOnePromiseXHR, makeServerResponse, uploadFile, uploadFormData, @@ -117,7 +116,9 @@ export { makeErrorUploadResponse, makeSuccessUploadResponse, addExtraData, - addHeaders + addHeaders, + sanitizeArrExtFile, + unexpectedErrorUploadResult } from "./upload"; export { diff --git a/src/files-ui/core/upload/index.ts b/src/files-ui/core/upload/index.ts index 9977205eba298f77fd98096128c871052d241397..514079648c4726a5fbe13c5fc831139150f9e2bd 100644 --- a/src/files-ui/core/upload/index.ts +++ b/src/files-ui/core/upload/index.ts @@ -2,9 +2,6 @@ export { uploadExtFile, FuiUpload, - completeUploadResult, - unableToUploadResult, - uploadOnePromiseXHR, uploadFile, uploadFormData, } from "./upload"; @@ -30,15 +27,8 @@ export { preparingToUploadOne, sleepTransition, toUploadableExtFileList, -} from "./utils.upload"; -/* export { - FuiUpload, completeUploadResult, - instantPreparingToUploadOne, - preparingToUploadOne, - sleepTransition, - toUploadableExtFileList, + sanitizeArrExtFile, unableToUploadResult, - unexpectedErrorUploadResult, - uploadOnePromiseXHR -} from "./upload.utils"; */ \ No newline at end of file + unexpectedErrorUploadResult +} from "./utils.upload"; diff --git a/src/files-ui/core/upload/upload.ts b/src/files-ui/core/upload/upload.ts index 2c4dfcdb6ea620de35e6ed60677bfd294f6c9949..236c2fbf019f4e983ee8a79ce3f8663f3f5bf249 100644 --- a/src/files-ui/core/upload/upload.ts +++ b/src/files-ui/core/upload/upload.ts @@ -4,6 +4,7 @@ import addExtraDataUpload from "./addExtraData.upload"; import addHeaders from "./addheaders.upload"; import { ABORTED_ERROR_RESPONSE, NO_XHR_PROVIDED_ERROR, TIMEOUT_ERROR_RESPONSE, UNEXPECTED_ERROR_RESPONSE } from "./errors.upload"; import { JsonParseResponse, makeErrorUploadResponse, makeSuccessUploadResponse } from "./response.upload"; +import { completeUploadResult, unableToUploadResult } from "./utils.upload"; /** @@ -23,30 +24,55 @@ export const uploadFormData = ( headers: Record<string, string> | undefined ) => { return new Promise<ServerResponse>((resolve, reject) => { - console.log("uploadFile", xhr, method, endpoint, data, headers); + console.log("Fui_uploadFormData uploadFile", xhr, method, endpoint, data, headers); const finalMethod: Method = ["POST", "PUT", "PATCH"].includes(method.toUpperCase()) ? method : "POST"; + let lastLastState: number = -1; + let lastState: number = 0; + let jumped: boolean = false; + xhr.upload.onload = () => { - console.log("uploadFile onLoad", xhr.readyState, xhr.response); + console.log("Fui_uploadFormData uploadFile onLoad", xhr.readyState, xhr.response); }; xhr.upload.ontimeout = () => resolve(TIMEOUT_ERROR_RESPONSE); - xhr.upload.onabort = () => resolve(ABORTED_ERROR_RESPONSE); + xhr.upload.onabort = () => { + console.log("Fui_uploadFormData ABORTEEEEDDDD"); + resolve(ABORTED_ERROR_RESPONSE); + }; + xhr.onloadend = async (e) => { + console.log("onloadend loaded", e.loaded); + console.log("onloadend total", e.total); + console.log("onloadend lengthComputable", e.lengthComputable); + + } // listen for `progress` event //currently listening on FileItem component hook xhr.onreadystatechange = async (e) => { //console.log("Finished", xhr); - console.log("uploadFile onreadystatechange", xhr.readyState, xhr.response); + + console.log("Fui_uploadFormData uploadFile onreadystatechange e.type", e.type); + console.log("Fui_uploadFormData uploadFile onreadystatechange", xhr.readyState, xhr.response); + + lastLastState = lastState; + lastState = xhr.readyState; + if (xhr.readyState === 4) { if (xhr.response !== "") { //there is th answer resolve(JsonParseResponse(xhr)); } else { //error unexpected - resolve(UNEXPECTED_ERROR_RESPONSE); + console.log("Fui_uploadFormData EMPTY status", xhr.status); + console.log("Fui_uploadFormData EMPTY readyState", xhr.readyState); + console.log("Fui_uploadFormData EMPTY upload", xhr.upload); + //console.log("Fui_uploadFormData EMPTY abort", xhr.abort); + //const jumped = lastLastState - lastLastState !== 1; + resolve(ABORTED_ERROR_RESPONSE); + } } else { - console.log("FuiUpload NOT YET" + xhr.readyState); + console.log("Fui_uploadFormData FuiUpload NOT YET" + xhr.readyState); } }; // open request @@ -152,102 +178,11 @@ export function uploadFile( }); } -export const unableToUploadResult = ( - extFile: ExtFile -): UploadResponse => { - return { - id: extFile.id, - uploadedFile: { - ...extFile, - uploadMessage: "Unable to upload. XHR was not provided", - uploadStatus: "error" - }, - serverResponse: { - } - } -} - -export const completeUploadResult = ( - extFile: ExtFile, - serverResponse: ServerResponse, - result: UPLOADSTATUS -): UploadResponse => { - return { - id: extFile.id, - uploadedFile: { - ...extFile, - uploadMessage: serverResponse.message, - uploadStatus: result - }, - serverResponse: serverResponse - } -} - -/** - * @deprecated - */ -export const uploadOnePromiseXHR = async ( - extFile: ExtFile, - url: string, - method?: Method, - headers?: Record<string, string>, - uploadLabel?: string, - extraData?: Record<string, any> -): Promise<UploadResponse> => { - return new Promise(async (resolve, reject) => { - try { - const uploader: XMLHttpRequest | undefined = extFile.xhr; - if (!uploader) { - const duiUploadResponse: UploadResponse = unableToUploadResult(extFile); - resolve(duiUploadResponse); - return; - } - const localMethod: Method = (method) || "POST"; - const fileToUpload: File = extFile.file as File; - - const formData = new FormData(); - if (typeof uploadLabel === "string" && uploadLabel.length > 0) { - formData.append(uploadLabel, fileToUpload - //, extFile.file?.name - ); - //add extraData that will be obtained from req.body - } else - formData.append("file", fileToUpload); - const finalExtraData: Record<string, any> = - { otherValue: "other valueee haaaa", param2: { tecnica: "KIKOHUUUU", friend: "Chaos", age: 25 }, ...extraData }; - - - if (finalExtraData) { - const extraDataKeys: string[] = Object.keys(finalExtraData); - extraDataKeys.forEach(key => { - const finalValue: string = typeof finalExtraData[key] === "string" ? finalExtraData[key] : JSON.stringify(finalExtraData[key]); - formData.append(key, finalValue); - }); - } - let serverResponse: ServerResponse; - //console.log(); - serverResponse = await FuiUpload(uploader, localMethod, url, formData, headers || {}); - if (serverResponse.success) { - const duiUploadResponse: UploadResponse = completeUploadResult(extFile, serverResponse, "success"); - resolve(duiUploadResponse); - } else { - // success is false - const duiUploadResponse: UploadResponse = completeUploadResult(extFile, serverResponse, "error"); - resolve(duiUploadResponse); - } - } catch (error) { - // on error - console.log("uploadOnePromiseXHR ERROR", error); - const duiUploadResponse: UploadResponse = unableToUploadResult(extFile); - resolve(duiUploadResponse); - } - }); -}; /** * @deprecated diff --git a/src/files-ui/core/upload/utils.upload.ts b/src/files-ui/core/upload/utils.upload.ts index 1d58d63a1d913949642c886f4f2fecc5d54b3f76..2c07d1a37581b01825c94bbeaf386edd10bdc36d 100644 --- a/src/files-ui/core/upload/utils.upload.ts +++ b/src/files-ui/core/upload/utils.upload.ts @@ -115,3 +115,22 @@ export const sleepTransition = ( }); } +export const sanitizeArrExtFile = (arrExtFile: ExtFileInstance[]): ExtFile[] => { + /* console.log("sanitizeArrExtFile", arrExtFile.length, arrExtFile.filter((extFileInstance: ExtFileInstance) => extFileInstance.extraData?.deleted) + .map((extFileInstance: ExtFileInstance) => extFileInstance.toExtFile()).length); + */ + + return arrExtFile.filter((extFileInstance: ExtFileInstance) => + !extFileInstance.extraData?.deleted) + .map((extFileInstance: ExtFileInstance) => { + if (extFileInstance.uploadStatus === "aborted") { + if(!extFileInstance.uploadMessage){ + extFileInstance.uploadMessage="Upload aborted"; + } + extFileInstance.uploadStatus = "error"; + } + + return extFileInstance.toExtFile() + }); + +} \ No newline at end of file diff --git a/src/files-ui/core/utils/fileListParser.ts b/src/files-ui/core/utils/fileListParser.ts index 3e88083c8dd081cd83ad1a7936d149aa8cf6e5bf..46f4b4ad08d99d050434527d3eb14cc480e3e7a9 100644 --- a/src/files-ui/core/utils/fileListParser.ts +++ b/src/files-ui/core/utils/fileListParser.ts @@ -7,11 +7,11 @@ import { FileIdGenerator } from "./IdGenerator"; * @returns an array of ExtFile objects */ export const fileListToExtFileArray = (fileList: FileList): ExtFile[] => { - let filesValidated: ExtFile[] = []; + let extFileArray: ExtFile[] = []; for (let i = 0, f: File; (f = fileList[i]); i++) { - filesValidated.push({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type }); + extFileArray.push({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type }); } - return filesValidated; + return extFileArray; }; /** @@ -20,9 +20,9 @@ export const fileListToExtFileArray = (fileList: FileList): ExtFile[] => { * @returns an array of ExtFile instances */ export const fileListToExtFileInstanceArray = (fileList: FileList): ExtFileInstance[] => { - let filesValidated: ExtFileInstance[] = []; + let extFileArray: ExtFileInstance[] = []; for (let i = 0, f: File; (f = fileList[i]); i++) { - filesValidated.push(new ExtFileInstance({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type })); + extFileArray.push(new ExtFileInstance({ id: FileIdGenerator.getNextId(), file: f, name: f.name, size: f.size, type: f.type })); } - return filesValidated; + return extFileArray; }; \ No newline at end of file