diff --git a/src/ParseFile.js b/src/ParseFile.js index eb69c6289..6c7030485 100644 --- a/src/ParseFile.js +++ b/src/ParseFile.js @@ -233,7 +233,17 @@ class ParseFile { * be used for this request. *
+ * let parseFile = new Parse.File(name, file);
+ * parseFile.save({
+ * progress: (progressValue, loaded, total, { type }) => {
+ * if (type === "upload" && progressValue !== null) {
+ * // Update the UI using progressValue
+ * }
+ * }
+ * });
+ *
*
* @return {Promise} Promise that is resolved when the save finishes.
*/
diff --git a/src/RESTController.js b/src/RESTController.js
index d24226b15..1b3006a6d 100644
--- a/src/RESTController.js
+++ b/src/RESTController.js
@@ -159,27 +159,28 @@ const RESTController = {
headers[key] = customHeaders[key];
}
- function handleProgress(event) {
+ function handleProgress(type, event) {
if (options && typeof options.progress === 'function') {
if (event.lengthComputable) {
options.progress(
event.loaded / event.total,
event.loaded,
- event.total
+ event.total,
+ { type }
);
} else {
- options.progress(null);
+ options.progress(null, null, null, { type });
}
}
}
xhr.onprogress = (event) => {
- handleProgress(event);
+ handleProgress('download', event);
};
if (xhr.upload) {
xhr.upload.onprogress = (event) => {
- handleProgress(event);
+ handleProgress('upload', event);
}
}
diff --git a/src/__tests__/ParseFile-test.js b/src/__tests__/ParseFile-test.js
index 4c14d50ee..5497c521c 100644
--- a/src/__tests__/ParseFile-test.js
+++ b/src/__tests__/ParseFile-test.js
@@ -30,7 +30,7 @@ jest.setMock('../LocalDatastore', mockLocalDatastore);
function generateSaveMock(prefix) {
return function(name, payload, options) {
if (options && typeof options.progress === 'function') {
- options.progress(0.5, 5, 10);
+ options.progress(0.5, 5, 10, { type: 'upload' });
}
return Promise.resolve({
name: name,
@@ -236,7 +236,7 @@ describe('ParseFile', () => {
jest.spyOn(options, 'progress');
return file.save(options).then(function(f) {
- expect(options.progress).toHaveBeenCalledWith(0.5, 5, 10);
+ expect(options.progress).toHaveBeenCalledWith(0.5, 5, 10, { type: 'upload' });
expect(f).toBe(file);
expect(f.name()).toBe('progress.txt');
expect(f.url()).toBe('http://files.parsetfss.com/a/progress.txt');
diff --git a/src/__tests__/RESTController-test.js b/src/__tests__/RESTController-test.js
index 7859a1289..89352ab13 100644
--- a/src/__tests__/RESTController-test.js
+++ b/src/__tests__/RESTController-test.js
@@ -444,8 +444,8 @@ describe('RESTController', () => {
jest.spyOn(options, 'progress');
RESTController.ajax('POST', 'files/upload.txt', {}, {}, options).then(({ response, status }) => {
- expect(options.progress).toHaveBeenCalledWith(0.5, 5, 10);
- expect(options.progress).toHaveBeenCalledTimes(2);
+ expect(options.progress).toHaveBeenCalledWith(0.5, 5, 10, { type: 'download' });
+ expect(options.progress).toHaveBeenCalledWith(0.5, 5, 10, { type: 'upload' });
expect(response).toEqual({ success: true });
expect(status).toBe(200);
done();
@@ -468,7 +468,7 @@ describe('RESTController', () => {
jest.spyOn(options, 'progress');
RESTController.ajax('POST', 'files/upload.txt', {}, {}, options).then(({ response, status }) => {
- expect(options.progress).toHaveBeenCalledWith(null);
+ expect(options.progress).toHaveBeenCalledWith(null, null, null, { type: 'upload' });
expect(response).toEqual({ success: true });
expect(status).toBe(200);
done();