diff --git a/src/elements/content-uploader/ContentUploader.tsx b/src/elements/content-uploader/ContentUploader.tsx index fc854b3641..bb7f84ae05 100644 --- a/src/elements/content-uploader/ContentUploader.tsx +++ b/src/elements/content-uploader/ContentUploader.tsx @@ -120,6 +120,7 @@ export interface ContentUploaderProps { isExpanded?: boolean; onToggle?: (isExpanded: boolean) => void; maxFileSize?: number; + modernizedDismissDelayMs?: number; } type ModernizedPanelState = 'hidden' | 'shown' | 'dismissing'; @@ -203,6 +204,7 @@ class ContentUploader extends Component { useUploadsManager: false, enableModernizedUploads: false, isUpgradeModalEnabled: false, + modernizedDismissDelayMs: HIDE_MODERNIZED_UPLOAD_MANAGER_DELAY_MS, }; /** @@ -893,7 +895,7 @@ class ContentUploader extends Component { upload = () => { const { enableModernizedUploads, isUpgradeModalEnabled, maxFileSize } = this.props; - if (this.isCancelAllPaused) { + if (this.isCancelAllPaused) { return; } @@ -1637,6 +1639,7 @@ class ContentUploader extends Component { startModernizedDismissTimer = (): void => { this.clearModernizedDismissTimer(); + const { modernizedDismissDelayMs } = this.props; const { modernizedPanelState, items } = this.state; const isUploadsBatchSuccessfullyComplete = items.every( item => item.status === STATUS_COMPLETE || item.status === STATUS_CANCELED, @@ -1654,7 +1657,7 @@ class ContentUploader extends Component { this.modernizedDismissTimer = setTimeout(() => { this.setState({ modernizedPanelState: 'dismissing' }); this.modernizedDismissTimer = null; - }, HIDE_MODERNIZED_UPLOAD_MANAGER_DELAY_MS); + }, modernizedDismissDelayMs); }; finalizeModernizedDismiss = (): void => { diff --git a/src/elements/content-uploader/__tests__/ContentUploader.test.js b/src/elements/content-uploader/__tests__/ContentUploader.test.js index c57b8fa922..b238206c56 100644 --- a/src/elements/content-uploader/__tests__/ContentUploader.test.js +++ b/src/elements/content-uploader/__tests__/ContentUploader.test.js @@ -1787,6 +1787,22 @@ describe('elements/content-uploader/ContentUploader', () => { expect(wrapper.state('modernizedPanelState')).toBe('dismissing'); }); + test('honors a custom modernizedDismissDelayMs', () => { + const CUSTOM_DELAY_MS = 3000; + const setTimeoutSpy = jest.spyOn(global, 'setTimeout'); + const wrapper = getWrapper({ enableModernizedUploads: true, modernizedDismissDelayMs: CUSTOM_DELAY_MS }); + armDismissTimer(wrapper); + + expect(setTimeoutSpy).toHaveBeenCalledWith(expect.any(Function), CUSTOM_DELAY_MS); + + jest.advanceTimersByTime(CUSTOM_DELAY_MS - 1); + expect(wrapper.state('modernizedPanelState')).toBe('shown'); + + jest.advanceTimersByTime(1); + expect(wrapper.state('modernizedPanelState')).toBe('dismissing'); + setTimeoutSpy.mockRestore(); + }); + test('clears timer when a new in-progress item is added mid-wait', () => { const wrapper = getWrapper({ enableModernizedUploads: true }); const instance = armDismissTimer(wrapper);