aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/Network.ts16
-rw-r--r--src/client/documents/Documents.ts18
-rw-r--r--src/server/ApiManagers/UploadManager.ts2
-rw-r--r--src/server/DashUploadUtils.ts2
4 files changed, 31 insertions, 7 deletions
diff --git a/src/client/Network.ts b/src/client/Network.ts
index 28825823d..9c293f9af 100644
--- a/src/client/Network.ts
+++ b/src/client/Network.ts
@@ -17,19 +17,26 @@ export namespace Networking {
return requestPromise.post(options);
}
+ /**
+ * FileGuidPair attaches a guid to a file that is being uploaded,
+ * allowing the client to track the upload progress.
+ *
+ * When files are dragged to the canvas, the overWriteDoc's ID is
+ * used as the guid. Otherwise, a new guid is generated.
+ */
export interface FileGuidPair {
file: File;
guid?: string;
}
/**
* Handles uploading basic file types to server and makes the API call to "/uploadFormData" endpoint
- * with the mapping of GUID to filem as parameters.
+ * with the mapping of guid to filem as parameters.
*
- * @param fileguidpairs the files to be uploaded to the server
+ * @param fileguidpairs the files and corresponding guids to be uploaded to the server
* @returns the response as a json from the server
*/
export async function UploadFilesToServer<T extends Upload.FileInformation = Upload.FileInformation>(fileguidpairs: FileGuidPair | FileGuidPair[]): Promise<Upload.FileResponse<T>[]> {
- const formData = new FormData();
+ const formData = new FormData();
if (Array.isArray(fileguidpairs)) {
if (!fileguidpairs.length) {
return [];
@@ -45,8 +52,11 @@ export namespace Networking {
])
);
}
+ // If the fileguidpair has a guid to use (From the overwriteDoc) use that guid. Otherwise,
+ // generate a new guid.
fileguidpairs.forEach(fileguidpair => formData.append(fileguidpair.guid ?? Utils.GenerateGuid(), fileguidpair.file));
} else {
+ // Handle the case where fileguidpairs is a single file.
formData.append(fileguidpairs.guid ?? Utils.GenerateGuid(), fileguidpairs.file);
}
const parameters = {
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 0030af982..06b48fe96 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -1841,10 +1841,22 @@ export namespace DocUtils {
});
}
+ /**
+ * uploadFilesToDocs will take in an array of Files, and creates documents for the
+ * new files.
+ *
+ * @param files an array of files that will be uploaded
+ * @param options options to use while uploading
+ * @returns
+ */
export async function uploadFilesToDocs(files: File[], options: DocumentOptions) {
const generatedDocuments: Doc[] = [];
- const fileNoGuidPairs: Networking.FileGuidPair[] = [];
- files.map(file => fileNoGuidPairs.push({file}));
+
+ // UploadFilesToServer takes an array of FileGuidPairs,
+ // but these files do not have overwriteDocs, so
+ // we do not set guid, allowing the client to generate one.
+ const fileNoGuidPairs: Networking.FileGuidPair[] = files.map(file => ({file}));
+
const upfiles = await Networking.UploadFilesToServer(fileNoGuidPairs);
for (const {
source: { name, type },
@@ -1857,6 +1869,8 @@ export namespace DocUtils {
export function uploadFileToDoc(file: File, options: DocumentOptions, overwriteDoc: Doc) {
const generatedDocuments: Doc[] = [];
+ // Since this file has an overwriteDoc, we can set the client tracking guid
+ // to the overwriteDoc's guid.
Networking.UploadFilesToServer([{file, guid: overwriteDoc[Id]}]).then(upfiles => {
const {
source: { name, type },
diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts
index 94f744848..ba6d7acfe 100644
--- a/src/server/ApiManagers/UploadManager.ts
+++ b/src/server/ApiManagers/UploadManager.ts
@@ -75,7 +75,7 @@ export default class UploadManager extends ApiManager {
for (const key in files) {
const f = files[key];
if (!Array.isArray(f)) {
- const result = await DashUploadUtils.upload(f, key);
+ const result = await DashUploadUtils.upload(f, key); // key is the guid used by the client to track upload progress.
result && !(result.result instanceof Error) && results.push(result);
}
}
diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts
index 971fefb5a..eaaac4e6d 100644
--- a/src/server/DashUploadUtils.ts
+++ b/src/server/DashUploadUtils.ts
@@ -184,7 +184,7 @@ export namespace DashUploadUtils {
export async function upload(file: File, overwriteGuid?: string): Promise<Upload.FileResponse> {
const { type, path, name } = file;
const types = type?.split('/') ?? [];
- uploadProgress.set(overwriteGuid ?? name, 'uploading');
+ uploadProgress.set(overwriteGuid ?? name, 'uploading'); // If the client sent a guid it uses to track upload progress, use that guid. Otherwise, use the file's name.
const category = types[0];
let format = `.${types[1]}`;