Skip to content

Commit 2cfdbba

Browse files
authored
feat(content-uploader): batching onComplete for resumable uploads (#1791)
* feat(content-uploader): batching onComplete uploads under FF * feat(content-uploader): added tests for batching onComplete * refactor(content-uploader): updateViewAndCollections test refactored
1 parent 1fe868f commit 2cfdbba

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

src/elements/content-uploader/ContentUploader.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -854,13 +854,17 @@ class ContentUploader extends Component<Props, State> {
854854
* @return {void}
855855
*/
856856
updateViewAndCollection(items: UploadItem[], callback?: Function) {
857-
const { onComplete, useUploadsManager }: Props = this.props;
857+
const { onComplete, useUploadsManager, isResumableUploadsEnabled }: Props = this.props;
858858
const someUploadIsInProgress = items.some(uploadItem => uploadItem.status !== STATUS_COMPLETE);
859859
const someUploadHasFailed = items.some(uploadItem => uploadItem.status === STATUS_ERROR);
860860
const allItemsArePending = !items.some(uploadItem => uploadItem.status !== STATUS_PENDING);
861+
const noFileIsPendingOrInProgress = items.every(
862+
uploadItem => uploadItem.status !== STATUS_PENDING && uploadItem.status !== STATUS_IN_PROGRESS,
863+
);
861864
const areAllItemsFinished = items.every(
862865
uploadItem => uploadItem.status === STATUS_COMPLETE || uploadItem.status === STATUS_ERROR,
863866
);
867+
const uploadItemsStatus = isResumableUploadsEnabled ? areAllItemsFinished : noFileIsPendingOrInProgress;
864868

865869
let view = '';
866870
if ((items && items.length === 0) || allItemsArePending) {
@@ -879,7 +883,7 @@ class ContentUploader extends Component<Props, State> {
879883
}
880884
}
881885

882-
if (areAllItemsFinished && useUploadsManager) {
886+
if (uploadItemsStatus && useUploadsManager) {
883887
if (this.isAutoExpanded) {
884888
this.resetUploadManagerExpandState();
885889
} // Else manually expanded so don't close

src/elements/content-uploader/__tests__/ContentUploader.test.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,40 @@ describe('elements/content-uploader/ContentUploader', () => {
6262
test('should set itemIds to be an empty when method is called with an empty array', () => {
6363
const onComplete = jest.fn();
6464
const useUploadsManager = false;
65+
const isResumableUploadsEnabled = false;
6566
const wrapper = getWrapper({
6667
onComplete,
6768
useUploadsManager,
69+
isResumableUploadsEnabled,
6870
});
6971

7072
wrapper.instance().updateViewAndCollection([], null);
7173

7274
expect(wrapper.state().itemIds).toEqual({});
7375
});
76+
77+
test.each([
78+
['not', true, 'not', STATUS_PENDING, 0],
79+
['', true, '', STATUS_COMPLETE, 1],
80+
['', false, 'not', STATUS_STAGED, 1],
81+
])(
82+
'should %s call onComplete when isResumableUploadsEnabled is %s and %s all items are finished',
83+
(a, isResumableUploadsEnabled, b, status, expected) => {
84+
const onComplete = jest.fn();
85+
const useUploadsManager = true;
86+
const wrapper = getWrapper({
87+
onComplete,
88+
useUploadsManager,
89+
isResumableUploadsEnabled,
90+
});
91+
const instance = wrapper.instance();
92+
const items = [{ status }, { status: STATUS_COMPLETE }, { status: STATUS_ERROR }];
93+
94+
instance.updateViewAndCollection(items, null);
95+
96+
expect(onComplete).toHaveBeenCalledTimes(expected);
97+
},
98+
);
7499
});
75100

76101
describe('addFilesToUploadQueue()', () => {

0 commit comments

Comments
 (0)