box-ui-elements 23.4.0-beta.23 → 23.4.0-beta.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/explorer.js +1 -1
- package/dist/openwith.js +1 -1
- package/dist/picker.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sharing.js +1 -1
- package/dist/sidebar.js +1 -1
- package/dist/uploader.js +1 -1
- package/es/api/uploads/BaseUpload.js +4 -0
- package/es/api/uploads/BaseUpload.js.flow +5 -1
- package/es/api/uploads/BaseUpload.js.map +1 -1
- package/es/api/uploads/MultiputUpload.js +7 -0
- package/es/api/uploads/MultiputUpload.js.flow +11 -6
- package/es/api/uploads/MultiputUpload.js.map +1 -1
- package/es/api/uploads/PlainUpload.js +2 -1
- package/es/api/uploads/PlainUpload.js.flow +3 -2
- package/es/api/uploads/PlainUpload.js.map +1 -1
- package/es/elements/content-uploader/ContentUploader.js +7 -3
- package/es/elements/content-uploader/ContentUploader.js.map +1 -1
- package/es/elements/content-uploader/ItemAction.js +8 -3
- package/es/elements/content-uploader/ItemAction.js.map +1 -1
- package/es/src/elements/content-uploader/ContentUploader.d.ts +1 -1
- package/package.json +1 -1
- package/src/api/uploads/BaseUpload.js +5 -1
- package/src/api/uploads/MultiputUpload.js +11 -6
- package/src/api/uploads/PlainUpload.js +3 -2
- package/src/api/uploads/__tests__/BaseUpload.test.js +14 -0
- package/src/elements/content-uploader/ContentUploader.tsx +7 -3
- package/src/elements/content-uploader/ItemAction.tsx +8 -2
|
@@ -116,7 +116,7 @@ class PlainUpload extends BaseUpload {
|
|
|
116
116
|
* @param {Function} [options.errorCallback] - Function to call with errors
|
|
117
117
|
* @param {Function} [options.progressCallback] - Function to call with progress
|
|
118
118
|
* @param {Function} [options.conflictCallback] - Function to call on conflicting file names
|
|
119
|
-
* @param {boolean} [overwrite] - Should upload overwrite file with same name
|
|
119
|
+
* @param {boolean|'error'} [overwrite] - Should upload overwrite file with same name, throw error, or call conflictCallback to rename
|
|
120
120
|
* @return {void}
|
|
121
121
|
*/
|
|
122
122
|
upload({
|
|
@@ -128,6 +128,7 @@ class PlainUpload extends BaseUpload {
|
|
|
128
128
|
errorCallback = noop,
|
|
129
129
|
progressCallback = noop,
|
|
130
130
|
conflictCallback,
|
|
131
|
+
// $FlowFixMe
|
|
131
132
|
overwrite = true,
|
|
132
133
|
}: {
|
|
133
134
|
conflictCallback?: Function,
|
|
@@ -136,7 +137,7 @@ class PlainUpload extends BaseUpload {
|
|
|
136
137
|
fileDescription: ?string,
|
|
137
138
|
fileId: ?string,
|
|
138
139
|
folderId: string,
|
|
139
|
-
overwrite: boolean,
|
|
140
|
+
overwrite: boolean | 'error',
|
|
140
141
|
progressCallback: Function,
|
|
141
142
|
successCallback: Function,
|
|
142
143
|
}): void {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlainUpload.js","names":["noop","digest","getFileLastModifiedAsISONoMSIfPossible","BaseUpload","CONTENT_MD5_HEADER","PlainUpload","constructor","args","_defineProperty","data","entries","isDestroyed","successCallback","event","progressCallback","uploadUrl","upload_url","getBaseUploadUrl","fileId","replace","attributes","JSON","stringify","name","fileName","parent","id","folderId","description","fileDescription","content_modified_at","file","options","url","headers","successHandler","uploadSuccessHandler","errorHandler","preflightErrorHandler","progressHandler","uploadProgressHandler","sha1","computeSHA1","xhr","uploadFile","upload","errorCallback","conflictCallback","overwrite","makePreflightRequest","cancel","clearTimeout","retryTimeout","destroy","reader","window","FileReader","buffer","readFile","hashBuffer","hashArray","Array","from","Uint8Array","map","b","toString","slice","join","e"],"sources":["../../../src/api/uploads/PlainUpload.js"],"sourcesContent":["/**\n * @flow\n * @file Helper for the plain Box Upload API\n * @author Box\n */\n\nimport noop from 'lodash/noop';\nimport { digest } from '../../utils/webcrypto';\nimport { getFileLastModifiedAsISONoMSIfPossible } from '../../utils/uploads';\nimport BaseUpload from './BaseUpload';\nimport type { BoxItem } from '../../common/types/core';\n\nconst CONTENT_MD5_HEADER = 'Content-MD5';\n\nclass PlainUpload extends BaseUpload {\n successCallback: Function;\n\n progressCallback: Function;\n\n /**\n * Handles an upload success response\n *\n * @param {Object} data - Upload success data\n * @return {void}\n */\n uploadSuccessHandler = ({ data }: Object): void => {\n const { entries }: { entries: BoxItem[] } = data;\n if (this.isDestroyed()) {\n return;\n }\n\n if (typeof this.successCallback === 'function') {\n // Response entries are the successfully created Box File objects\n this.successCallback(entries);\n }\n };\n\n /**\n * Handles an upload progress event\n *\n * @param {Object} event - Progress event\n * @return {void}\n */\n uploadProgressHandler = (event: ProgressEvent): void => {\n if (this.isDestroyed()) {\n return;\n }\n\n if (typeof this.progressCallback === 'function') {\n this.progressCallback(event);\n }\n };\n\n /**\n * Uploads a file. If a file ID is supplied, use the Upload File\n * Version API to replace the file.\n *\n * @param {Object} - Request options\n * @param {boolean} [options.url] - Upload URL to use\n * @return {Promise} Async function promise\n */\n preflightSuccessHandler = async ({ data }: { data: { upload_url?: string } }): Promise<any> => {\n if (this.isDestroyed()) {\n return;\n }\n\n // Use provided upload URL if passed in, otherwise construct\n let uploadUrl = data.upload_url;\n if (!uploadUrl) {\n uploadUrl = `${this.getBaseUploadUrl()}/files/content`;\n\n if (this.fileId) {\n uploadUrl = uploadUrl.replace('content', `${this.fileId}/content`);\n }\n }\n\n const attributes = JSON.stringify({\n name: this.fileName,\n parent: { id: this.folderId },\n description: this.fileDescription,\n content_modified_at: getFileLastModifiedAsISONoMSIfPossible(this.file),\n });\n\n const options = {\n url: uploadUrl,\n data: {\n attributes,\n file: this.file,\n },\n headers: {},\n successHandler: this.uploadSuccessHandler,\n errorHandler: this.preflightErrorHandler,\n progressHandler: this.uploadProgressHandler,\n };\n\n // Calculate SHA1 for file consistency check\n const sha1 = await this.computeSHA1(this.file);\n if (sha1) {\n options.headers = {\n [CONTENT_MD5_HEADER]: sha1,\n };\n }\n\n this.xhr.uploadFile(options);\n };\n\n /**\n * Uploads a file. If there is a conflict and overwrite is true, replace the file.\n * Otherwise, re-upload with a different name.\n *\n * @param {Object} options - Upload options\n * @param {string} options.folderId - untyped folder id\n * @param {string} [options.fileId] - Untyped file id (e.g. no \"file_\" prefix)\n * @param {File} options.file - File blob object\n * @param {Function} [options.successCallback] - Function to call with response\n * @param {Function} [options.errorCallback] - Function to call with errors\n * @param {Function} [options.progressCallback] - Function to call with progress\n * @param {Function} [options.conflictCallback] - Function to call on conflicting file names\n * @param {boolean} [overwrite] - Should upload overwrite file with same name\n * @return {void}\n */\n upload({\n folderId,\n fileId,\n file,\n fileDescription,\n successCallback = noop,\n errorCallback = noop,\n progressCallback = noop,\n conflictCallback,\n overwrite = true,\n }: {\n conflictCallback?: Function,\n errorCallback: Function,\n file: File,\n fileDescription: ?string,\n fileId: ?string,\n folderId: string,\n overwrite: boolean,\n progressCallback: Function,\n successCallback: Function,\n }): void {\n if (this.isDestroyed()) {\n return;\n }\n\n // Save references\n this.folderId = folderId;\n this.fileId = fileId;\n this.file = file;\n this.fileDescription = fileDescription;\n this.fileName = this.file.name;\n this.successCallback = successCallback;\n this.errorCallback = errorCallback;\n this.progressCallback = progressCallback;\n this.overwrite = overwrite;\n this.conflictCallback = conflictCallback;\n\n this.makePreflightRequest();\n }\n\n /**\n * Cancels upload of a file.\n *\n * @return {void}\n */\n cancel() {\n if (this.isDestroyed()) {\n return;\n }\n\n clearTimeout(this.retryTimeout);\n this.destroy();\n }\n\n /**\n * Calculates SHA1 of a file\n *\n * @param {File} file\n * @return {Promise} Promise that resolves with SHA1 digest\n */\n async computeSHA1(file: File): Promise<any> {\n let sha1 = '';\n\n try {\n // Adapted from https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest\n const reader = new window.FileReader();\n const { buffer } = await this.readFile(reader, file);\n const hashBuffer: ArrayBuffer = await digest('SHA-1', buffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n sha1 = hashArray.map(b => `00${b.toString(16)}`.slice(-2)).join('');\n } catch (e) {\n // Return empty sha1 if hashing fails\n }\n\n return sha1;\n }\n}\n\nexport default PlainUpload;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PlainUpload.js","names":["noop","digest","getFileLastModifiedAsISONoMSIfPossible","BaseUpload","CONTENT_MD5_HEADER","PlainUpload","constructor","args","_defineProperty","data","entries","isDestroyed","successCallback","event","progressCallback","uploadUrl","upload_url","getBaseUploadUrl","fileId","replace","attributes","JSON","stringify","name","fileName","parent","id","folderId","description","fileDescription","content_modified_at","file","options","url","headers","successHandler","uploadSuccessHandler","errorHandler","preflightErrorHandler","progressHandler","uploadProgressHandler","sha1","computeSHA1","xhr","uploadFile","upload","errorCallback","conflictCallback","overwrite","makePreflightRequest","cancel","clearTimeout","retryTimeout","destroy","reader","window","FileReader","buffer","readFile","hashBuffer","hashArray","Array","from","Uint8Array","map","b","toString","slice","join","e"],"sources":["../../../src/api/uploads/PlainUpload.js"],"sourcesContent":["/**\n * @flow\n * @file Helper for the plain Box Upload API\n * @author Box\n */\n\nimport noop from 'lodash/noop';\nimport { digest } from '../../utils/webcrypto';\nimport { getFileLastModifiedAsISONoMSIfPossible } from '../../utils/uploads';\nimport BaseUpload from './BaseUpload';\nimport type { BoxItem } from '../../common/types/core';\n\nconst CONTENT_MD5_HEADER = 'Content-MD5';\n\nclass PlainUpload extends BaseUpload {\n successCallback: Function;\n\n progressCallback: Function;\n\n /**\n * Handles an upload success response\n *\n * @param {Object} data - Upload success data\n * @return {void}\n */\n uploadSuccessHandler = ({ data }: Object): void => {\n const { entries }: { entries: BoxItem[] } = data;\n if (this.isDestroyed()) {\n return;\n }\n\n if (typeof this.successCallback === 'function') {\n // Response entries are the successfully created Box File objects\n this.successCallback(entries);\n }\n };\n\n /**\n * Handles an upload progress event\n *\n * @param {Object} event - Progress event\n * @return {void}\n */\n uploadProgressHandler = (event: ProgressEvent): void => {\n if (this.isDestroyed()) {\n return;\n }\n\n if (typeof this.progressCallback === 'function') {\n this.progressCallback(event);\n }\n };\n\n /**\n * Uploads a file. If a file ID is supplied, use the Upload File\n * Version API to replace the file.\n *\n * @param {Object} - Request options\n * @param {boolean} [options.url] - Upload URL to use\n * @return {Promise} Async function promise\n */\n preflightSuccessHandler = async ({ data }: { data: { upload_url?: string } }): Promise<any> => {\n if (this.isDestroyed()) {\n return;\n }\n\n // Use provided upload URL if passed in, otherwise construct\n let uploadUrl = data.upload_url;\n if (!uploadUrl) {\n uploadUrl = `${this.getBaseUploadUrl()}/files/content`;\n\n if (this.fileId) {\n uploadUrl = uploadUrl.replace('content', `${this.fileId}/content`);\n }\n }\n\n const attributes = JSON.stringify({\n name: this.fileName,\n parent: { id: this.folderId },\n description: this.fileDescription,\n content_modified_at: getFileLastModifiedAsISONoMSIfPossible(this.file),\n });\n\n const options = {\n url: uploadUrl,\n data: {\n attributes,\n file: this.file,\n },\n headers: {},\n successHandler: this.uploadSuccessHandler,\n errorHandler: this.preflightErrorHandler,\n progressHandler: this.uploadProgressHandler,\n };\n\n // Calculate SHA1 for file consistency check\n const sha1 = await this.computeSHA1(this.file);\n if (sha1) {\n options.headers = {\n [CONTENT_MD5_HEADER]: sha1,\n };\n }\n\n this.xhr.uploadFile(options);\n };\n\n /**\n * Uploads a file. If there is a conflict and overwrite is true, replace the file.\n * Otherwise, re-upload with a different name.\n *\n * @param {Object} options - Upload options\n * @param {string} options.folderId - untyped folder id\n * @param {string} [options.fileId] - Untyped file id (e.g. no \"file_\" prefix)\n * @param {File} options.file - File blob object\n * @param {Function} [options.successCallback] - Function to call with response\n * @param {Function} [options.errorCallback] - Function to call with errors\n * @param {Function} [options.progressCallback] - Function to call with progress\n * @param {Function} [options.conflictCallback] - Function to call on conflicting file names\n * @param {boolean|'error'} [overwrite] - Should upload overwrite file with same name, throw error, or call conflictCallback to rename\n * @return {void}\n */\n upload({\n folderId,\n fileId,\n file,\n fileDescription,\n successCallback = noop,\n errorCallback = noop,\n progressCallback = noop,\n conflictCallback,\n // $FlowFixMe\n overwrite = true,\n }: {\n conflictCallback?: Function,\n errorCallback: Function,\n file: File,\n fileDescription: ?string,\n fileId: ?string,\n folderId: string,\n overwrite: boolean | 'error',\n progressCallback: Function,\n successCallback: Function,\n }): void {\n if (this.isDestroyed()) {\n return;\n }\n\n // Save references\n this.folderId = folderId;\n this.fileId = fileId;\n this.file = file;\n this.fileDescription = fileDescription;\n this.fileName = this.file.name;\n this.successCallback = successCallback;\n this.errorCallback = errorCallback;\n this.progressCallback = progressCallback;\n this.overwrite = overwrite;\n this.conflictCallback = conflictCallback;\n\n this.makePreflightRequest();\n }\n\n /**\n * Cancels upload of a file.\n *\n * @return {void}\n */\n cancel() {\n if (this.isDestroyed()) {\n return;\n }\n\n clearTimeout(this.retryTimeout);\n this.destroy();\n }\n\n /**\n * Calculates SHA1 of a file\n *\n * @param {File} file\n * @return {Promise} Promise that resolves with SHA1 digest\n */\n async computeSHA1(file: File): Promise<any> {\n let sha1 = '';\n\n try {\n // Adapted from https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest\n const reader = new window.FileReader();\n const { buffer } = await this.readFile(reader, file);\n const hashBuffer: ArrayBuffer = await digest('SHA-1', buffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n sha1 = hashArray.map(b => `00${b.toString(16)}`.slice(-2)).join('');\n } catch (e) {\n // Return empty sha1 if hashing fails\n }\n\n return sha1;\n }\n}\n\nexport default PlainUpload;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,7 +22,7 @@ import ThemingStyles from '../common/theming';
|
|
|
22
22
|
import FolderUpload from '../../api/uploads/FolderUpload';
|
|
23
23
|
import { getTypedFileId, getTypedFolderId } from '../../utils/file';
|
|
24
24
|
import { getDataTransferItemId, getFile, getFileAPIOptions, getFileFromDataTransferItem, getFileId, getDataTransferItemAPIOptions, getPackageFileFromDataTransferItem, isDataTransferItemAFolder, isDataTransferItemAPackage, isMultiputSupported } from '../../utils/uploads';
|
|
25
|
-
import { DEFAULT_ROOT, CLIENT_NAME_CONTENT_UPLOADER, DEFAULT_HOSTNAME_API, DEFAULT_HOSTNAME_UPLOAD, ERROR_CODE_UPLOAD_FILE_LIMIT, STATUS_COMPLETE, STATUS_ERROR, STATUS_IN_PROGRESS, STATUS_PENDING, STATUS_STAGED, VIEW_ERROR, VIEW_UPLOAD_EMPTY, VIEW_UPLOAD_IN_PROGRESS, VIEW_UPLOAD_SUCCESS } from '../../constants';
|
|
25
|
+
import { DEFAULT_ROOT, CLIENT_NAME_CONTENT_UPLOADER, DEFAULT_HOSTNAME_API, DEFAULT_HOSTNAME_UPLOAD, ERROR_CODE_ITEM_NAME_IN_USE, ERROR_CODE_UPLOAD_FILE_LIMIT, STATUS_COMPLETE, STATUS_ERROR, STATUS_IN_PROGRESS, STATUS_PENDING, STATUS_STAGED, VIEW_ERROR, VIEW_UPLOAD_EMPTY, VIEW_UPLOAD_IN_PROGRESS, VIEW_UPLOAD_SUCCESS } from '../../constants';
|
|
26
26
|
import '../common/fonts.scss';
|
|
27
27
|
import '../common/base.scss';
|
|
28
28
|
const CHUNKED_UPLOAD_MIN_SIZE_BYTES = 104857600; // 100MB
|
|
@@ -581,7 +581,8 @@ class ContentUploader extends Component {
|
|
|
581
581
|
} = this.props;
|
|
582
582
|
const {
|
|
583
583
|
file,
|
|
584
|
-
status
|
|
584
|
+
status,
|
|
585
|
+
error
|
|
585
586
|
} = item;
|
|
586
587
|
const isChunkedUpload = chunked && !item.isFolder && file.size > CHUNKED_UPLOAD_MIN_SIZE_BYTES && isMultiputSupported();
|
|
587
588
|
const isResumable = isResumableUploadsEnabled && isChunkedUpload && item.api.sessionId;
|
|
@@ -594,7 +595,10 @@ class ContentUploader extends Component {
|
|
|
594
595
|
onClickCancel(item);
|
|
595
596
|
break;
|
|
596
597
|
case STATUS_ERROR:
|
|
597
|
-
if (
|
|
598
|
+
if (error?.code === ERROR_CODE_ITEM_NAME_IN_USE) {
|
|
599
|
+
this.removeFileFromUploadQueue(item);
|
|
600
|
+
onClickCancel(item);
|
|
601
|
+
} else if (isResumable) {
|
|
598
602
|
item.bytesUploadedOnLastResume = item.api.totalUploadedBytes;
|
|
599
603
|
this.resumeFile(item);
|
|
600
604
|
onClickResume(item);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentUploader.js","names":["React","Component","classNames","cloneDeep","getProp","noop","uniqueid","TooltipProvider","DroppableContent","Footer","UploadsManager","API","Browser","Internationalize","makeResponsive","ThemingStyles","FolderUpload","getTypedFileId","getTypedFolderId","getDataTransferItemId","getFile","getFileAPIOptions","getFileFromDataTransferItem","getFileId","getDataTransferItemAPIOptions","getPackageFileFromDataTransferItem","isDataTransferItemAFolder","isDataTransferItemAPackage","isMultiputSupported","DEFAULT_ROOT","CLIENT_NAME_CONTENT_UPLOADER","DEFAULT_HOSTNAME_API","DEFAULT_HOSTNAME_UPLOAD","ERROR_CODE_UPLOAD_FILE_LIMIT","STATUS_COMPLETE","STATUS_ERROR","STATUS_IN_PROGRESS","STATUS_PENDING","STATUS_STAGED","VIEW_ERROR","VIEW_UPLOAD_EMPTY","VIEW_UPLOAD_IN_PROGRESS","VIEW_UPLOAD_SUCCESS","CHUNKED_UPLOAD_MIN_SIZE_BYTES","FILE_LIMIT_DEFAULT","HIDE_UPLOAD_MANAGER_DELAY_MS_DEFAULT","EXPAND_UPLOADS_MANAGER_ITEMS_NUM_THRESHOLD","UPLOAD_CONCURRENCY","ContentUploader","constructor","props","_defineProperty","apiHost","clientName","requestInterceptor","responseInterceptor","sharedLink","sharedLinkPassword","token","uploadHost","files","rootFolderId","Array","from","filter","file","itemIdsRef","current","items","item","itemUpdateCallback","isRelativePathIgnored","isPrepopulateFilesEnabled","onBeforeUpload","length","newFiles","getNewFiles","newItemIds","forEach","clearTimeout","resetItemsTimeout","firstFile","newItemIdsState","_objectSpread","setState","itemIds","webkitRelativePath","addFilesWithRelativePathToQueue","addFilesWithoutRelativePathToQueue","upload","droppedItems","addDataTransferItemsToUploadQueue","addFilesToUploadQueue","dataTransferItems","isFolderUploadEnabled","folderItems","fileItems","packageItems","isDirectory","isSafari","push","addFileDataTransferItemsToUploadQueue","addPackageDataTransferItemsToUploadQueue","addFolderDataTransferItemsToUploadQueue","Promise","all","map","packageFiles","packageFile","newItems","getNewDataTransferItems","fileAPIOptions","folderId","folderUploads","folderUpload","getFolderUploadAPI","buildFolderTreeFromDataTransferItem","api","extension","isFolder","name","folder","options","progress","size","status","addToQueue","uploadBaseAPIOptions","getBaseAPIOptions","apiOptions","uploadFile","uploadAPIOptions","substr","lastIndexOf","getUploadAPI","uploadItem","fileLimit","useUploadsManager","isUploadsManagerExpanded","state","updatedItems","prevItemsNum","itemsRef","totalNumOfItems","concat","slice","errorCode","isAutoExpanded","expandUploadsManager","updateViewAndCollection","view","onCancel","cancel","itemIndex","indexOf","minimizeUploadsManager","entries","onUpload","error","boxFile","checkClearUploadItems","onError","index","findIndex","singleItem","errorData","event","total","Math","min","round","loaded","onProgress","chunked","isResumableUploadsEnabled","onClickCancel","onClickResume","onClickRetry","isChunkedUpload","isResumable","sessionId","removeFileFromUploadQueue","bytesUploadedOnLastResume","totalUploadedBytes","resumeFile","resetFile","onClick","onMinimize","resetUploadManagerExpandState","setTimeout","resetUploadsManagerItemsWhenUploadsComplete","id","createRef","componentDidMount","rootElement","document","getElementById","appElement","componentWillUnmount","componentDidUpdate","hasFiles","isArray","hasItems","hasUploads","addFilesWithOptionsToUploadQueueAndStartUpload","createAPIFactory","fileId","itemFolderId","itemFileId","buildFolderTreeFromWebkitRelativePath","addFolderToUploadQueue","isUploadFallbackLogicEnabled","factory","chunkedUploadAPI","getChunkedUploadAPI","console","warn","plainUploadAPI","getPlainUploadAPI","overwrite","numItemsUploading","item_t","uploadOptions","errorCallback","handleUploadError","progressCallback","handleUploadProgress","successCallback","handleUploadSuccess","onResume","resumeOptions","resume","callback","isPartialUploadEnabled","onComplete","someUploadIsInProgress","some","someUploadHasFailed","allItemsArePending","noFileIsPendingOrInProgress","every","areAllItemsFinished","uploadItemsStatus","filesToBeUploaded","render","className","isDraggingItemsToUploadsManager","isTouch","language","measureRef","messages","onClose","onUpgradeCTAClick","theme","isEmpty","isVisible","isLoading","isDone","styleClassName","be","createElement","ref","selector","isDragging","isExpanded","onItemActionClick","onRemoveActionClick","onUploadsManagerActionClick","clickAllWithStatus","toggleUploadsManager","addDroppedItemsToUploadQueue","addFiles","allowedTypes","ContentUploaderComponent"],"sources":["../../../src/elements/content-uploader/ContentUploader.tsx"],"sourcesContent":["import 'regenerator-runtime/runtime';\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport cloneDeep from 'lodash/cloneDeep';\nimport getProp from 'lodash/get';\nimport noop from 'lodash/noop';\nimport uniqueid from 'lodash/uniqueId';\nimport { TooltipProvider } from '@box/blueprint-web';\nimport { AxiosRequestConfig, AxiosResponse } from 'axios';\nimport DroppableContent from './DroppableContent';\nimport Footer from './Footer';\nimport UploadsManager from './UploadsManager';\nimport API from '../../api';\nimport Browser from '../../utils/Browser';\nimport Internationalize from '../common/Internationalize';\nimport makeResponsive from '../common/makeResponsive';\nimport ThemingStyles, { Theme } from '../common/theming';\nimport FolderUpload from '../../api/uploads/FolderUpload';\nimport { getTypedFileId, getTypedFolderId } from '../../utils/file';\nimport {\n getDataTransferItemId,\n getFile,\n getFileAPIOptions,\n getFileFromDataTransferItem,\n getFileId,\n getDataTransferItemAPIOptions,\n getPackageFileFromDataTransferItem,\n isDataTransferItemAFolder,\n isDataTransferItemAPackage,\n isMultiputSupported,\n} from '../../utils/uploads';\nimport {\n DEFAULT_ROOT,\n CLIENT_NAME_CONTENT_UPLOADER,\n DEFAULT_HOSTNAME_API,\n DEFAULT_HOSTNAME_UPLOAD,\n ERROR_CODE_UPLOAD_FILE_LIMIT,\n STATUS_COMPLETE,\n STATUS_ERROR,\n STATUS_IN_PROGRESS,\n STATUS_PENDING,\n STATUS_STAGED,\n VIEW_ERROR,\n VIEW_UPLOAD_EMPTY,\n VIEW_UPLOAD_IN_PROGRESS,\n VIEW_UPLOAD_SUCCESS,\n} from '../../constants';\nimport type { BoxItem, StringMap, Token, View } from '../../common/types/core';\nimport type {\n UploadDataTransferItemWithAPIOptions,\n UploadFile,\n UploadFileWithAPIOptions,\n UploadItem,\n UploadItemAPIOptions,\n UploadStatus,\n} from '../../common/types/upload';\nimport '../common/fonts.scss';\nimport '../common/base.scss';\n\nexport interface ContentUploaderProps {\n apiHost: string;\n chunked: boolean;\n className: string;\n clientName: string;\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>;\n fileLimit: number;\n files?: Array<UploadFileWithAPIOptions | File>;\n isDraggingItemsToUploadsManager?: boolean;\n isFolderUploadEnabled: boolean;\n isLarge: boolean;\n isPartialUploadEnabled: boolean;\n isPrepopulateFilesEnabled?: boolean;\n isResumableUploadsEnabled: boolean;\n isSmall: boolean;\n isTouch: boolean;\n isUploadFallbackLogicEnabled: boolean;\n language?: string;\n measureRef: (ref: Element | null) => void;\n messages?: StringMap;\n onBeforeUpload: (file: Array<UploadFileWithAPIOptions | File>) => void;\n onCancel: (items?: UploadItem[]) => void;\n onClickCancel: (item: UploadItem) => void;\n onClickResume: (item: UploadItem) => void;\n onClickRetry: (item: UploadItem) => void;\n onClose: () => void;\n onComplete: (items: UploadItem[]) => void;\n onError: Function;\n onMinimize?: () => void;\n onProgress: (item: UploadItem) => void;\n onResume: (item: UploadItem) => void;\n onUpgradeCTAClick?: () => void;\n onUpload: (item?: UploadItem | BoxItem) => void;\n overwrite: boolean;\n requestInterceptor?: (response: AxiosResponse) => void;\n responseInterceptor?: (config: AxiosRequestConfig) => void;\n rootFolderId: string;\n sharedLink?: string;\n sharedLinkPassword?: string;\n theme?: Theme;\n token?: Token;\n uploadHost: string;\n useUploadsManager?: boolean;\n}\n\ntype State = {\n errorCode?: string;\n isUploadsManagerExpanded: boolean;\n itemIds: Object;\n items: UploadItem[];\n view: View;\n};\n\nconst CHUNKED_UPLOAD_MIN_SIZE_BYTES = 104857600; // 100MB\nconst FILE_LIMIT_DEFAULT = 100; // Upload at most 100 files at once by default\nconst HIDE_UPLOAD_MANAGER_DELAY_MS_DEFAULT = 8000;\nconst EXPAND_UPLOADS_MANAGER_ITEMS_NUM_THRESHOLD = 5;\nconst UPLOAD_CONCURRENCY = 6;\n\nclass ContentUploader extends Component<ContentUploaderProps, State> {\n id: string;\n\n props: ContentUploaderProps;\n\n state: State;\n\n rootElement: HTMLElement;\n\n appElement: HTMLElement;\n\n resetItemsTimeout: ReturnType<typeof setTimeout>;\n\n isAutoExpanded: boolean = false;\n\n itemsRef: React.MutableRefObject<UploadItem[]>;\n\n itemIdsRef: React.MutableRefObject<Object>;\n\n static defaultProps = {\n apiHost: DEFAULT_HOSTNAME_API,\n chunked: true,\n className: '',\n clientName: CLIENT_NAME_CONTENT_UPLOADER,\n dataTransferItems: [],\n files: [],\n fileLimit: FILE_LIMIT_DEFAULT,\n isDraggingItemsToUploadsManager: false,\n isFolderUploadEnabled: false,\n isPartialUploadEnabled: false,\n isPrepopulateFilesEnabled: false,\n isResumableUploadsEnabled: false,\n isUploadFallbackLogicEnabled: false,\n onBeforeUpload: noop,\n onCancel: noop,\n onClickCancel: noop,\n onClickResume: noop,\n onClickRetry: noop,\n onClose: noop,\n onComplete: noop,\n onError: noop,\n onMinimize: noop,\n onProgress: noop,\n onResume: noop,\n onUpload: noop,\n overwrite: true,\n rootFolderId: DEFAULT_ROOT,\n uploadHost: DEFAULT_HOSTNAME_UPLOAD,\n useUploadsManager: false,\n };\n\n /**\n * [constructor]\n *\n * @return {ContentUploader}\n */\n constructor(props: ContentUploaderProps) {\n super(props);\n\n const { rootFolderId, token, useUploadsManager } = props;\n this.state = {\n view: (rootFolderId && token) || useUploadsManager ? VIEW_UPLOAD_EMPTY : VIEW_ERROR,\n items: [],\n errorCode: '',\n itemIds: {},\n isUploadsManagerExpanded: false,\n };\n this.id = uniqueid('bcu_');\n\n this.itemsRef = React.createRef();\n this.itemsRef.current = [];\n\n this.itemIdsRef = React.createRef();\n this.itemIdsRef.current = {};\n }\n\n /**\n * Fetches the root folder on load\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentDidMount() {\n this.rootElement = document.getElementById(this.id);\n this.appElement = this.rootElement;\n const { files, isPrepopulateFilesEnabled } = this.props;\n // isPrepopulateFilesEnabled is a prop used to pre-populate files without clicking upload button.\n if (isPrepopulateFilesEnabled && files && files.length > 0) {\n this.addFilesToUploadQueue(files, this.upload);\n }\n }\n\n /**\n * Cancels pending uploads\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentWillUnmount() {\n this.cancel();\n }\n\n /**\n * Adds new items to the queue when files prop gets updated in window view\n *\n * @return {void}\n */\n componentDidUpdate() {\n const { files, dataTransferItems, useUploadsManager } = this.props;\n\n const hasFiles = Array.isArray(files) && files.length > 0;\n const hasItems = Array.isArray(dataTransferItems) && dataTransferItems.length > 0;\n const hasUploads = hasFiles || hasItems;\n\n if (!useUploadsManager || !hasUploads) {\n return;\n }\n\n // TODO: this gets called unnecessarily (upon each render regardless of the queue not changing)\n this.addFilesWithOptionsToUploadQueueAndStartUpload(files, dataTransferItems);\n }\n\n /**\n * Create and return new instance of API creator\n *\n * @param {UploadItemAPIOptions} [uploadAPIOptions]\n * @return {API}\n */\n createAPIFactory(uploadAPIOptions?: UploadItemAPIOptions): API {\n const { rootFolderId } = this.props;\n const folderId = getProp(uploadAPIOptions, 'folderId') || rootFolderId;\n const fileId = getProp(uploadAPIOptions, 'fileId');\n const itemFolderId = getTypedFolderId(folderId);\n const itemFileId = fileId ? getTypedFileId(fileId) : null;\n\n return new API({\n ...this.getBaseAPIOptions(),\n id: itemFileId || itemFolderId,\n ...uploadAPIOptions,\n });\n }\n\n /**\n * Return base API options from props\n *\n * @private\n * @returns {Object}\n */\n getBaseAPIOptions = (): Object => {\n const {\n apiHost,\n clientName,\n requestInterceptor,\n responseInterceptor,\n sharedLink,\n sharedLinkPassword,\n token,\n uploadHost,\n } = this.props;\n\n return {\n apiHost,\n clientName,\n requestInterceptor,\n responseInterceptor,\n sharedLink,\n sharedLinkPassword,\n token,\n uploadHost,\n };\n };\n\n /**\n * Given an array of files, return the files that are new to the Content Uploader\n *\n * @param {Array<UploadFileWithAPIOptions | File>} files\n */\n getNewFiles = (files: Array<UploadFileWithAPIOptions | File>): Array<UploadFileWithAPIOptions | File> => {\n const { rootFolderId } = this.props;\n\n return Array.from(files).filter(file => !this.itemIdsRef.current[getFileId(file, rootFolderId)]);\n };\n\n /**\n * Given an array of files, return the files that are new to the Content Uploader\n *\n * @param {Array<UploadFileWithAPIOptions | File>} files\n */\n getNewDataTransferItems = (\n items: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n ): Array<DataTransferItem | UploadDataTransferItemWithAPIOptions> => {\n const { rootFolderId } = this.props;\n\n return Array.from(items).filter(item => !this.itemIdsRef.current[getDataTransferItemId(item, rootFolderId)]);\n };\n\n /**\n * Converts File API to upload items and adds to upload queue.\n *\n * @private\n * @param {Array<UploadFileWithAPIOptions | UploadFile>} files - Files to be added to upload queue\n * @param {Function} itemUpdateCallback - function to be invoked after items status are updated\n * @param {boolean} [isRelativePathIgnored] - if true webkitRelativePath property is ignored\n * @return {void}\n */\n addFilesToUploadQueue = (\n files: Array<UploadFileWithAPIOptions | UploadFile>,\n itemUpdateCallback?: Function,\n isRelativePathIgnored: boolean = false,\n ) => {\n const { isPrepopulateFilesEnabled, onBeforeUpload, rootFolderId } = this.props;\n\n if (!files || files.length === 0) {\n return;\n }\n\n const newFiles = this.getNewFiles(files);\n if (newFiles.length === 0) {\n return;\n }\n\n const newItemIds = {};\n newFiles.forEach(file => {\n newItemIds[getFileId(file, rootFolderId)] = true;\n });\n\n clearTimeout(this.resetItemsTimeout);\n\n const firstFile = getFile(newFiles[0]);\n\n const newItemIdsState = { ...this.itemIdsRef.current, ...newItemIds };\n\n this.itemIdsRef.current = newItemIdsState;\n\n this.setState({ itemIds: newItemIdsState }, () => {\n onBeforeUpload(newFiles);\n if (firstFile.webkitRelativePath && !isRelativePathIgnored) {\n // webkitRelativePath should be ignored when the upload destination folder is known\n this.addFilesWithRelativePathToQueue(newFiles, itemUpdateCallback);\n } else {\n this.addFilesWithoutRelativePathToQueue(\n newFiles,\n isPrepopulateFilesEnabled ? this.upload : itemUpdateCallback,\n );\n }\n });\n };\n\n /**\n * Add dropped items to the upload queue\n *\n * @private\n * @param {DataTransfer} droppedItems\n * @param {Function} itemUpdateCallback\n * @returns {void}\n */\n addDroppedItemsToUploadQueue = (droppedItems: DataTransfer, itemUpdateCallback: Function): void => {\n if (droppedItems.items) {\n this.addDataTransferItemsToUploadQueue(droppedItems.items, itemUpdateCallback);\n } else {\n this.addFilesToUploadQueue(Array.from(droppedItems.files), itemUpdateCallback);\n }\n };\n\n /**\n * Add dataTransferItems to the upload queue\n *\n * @private\n * @param {DataTransferItemList} dataTransferItems\n * @param {Function} itemUpdateCallback\n * @returns {void}\n */\n addDataTransferItemsToUploadQueue = (\n dataTransferItems: DataTransferItemList | Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): void => {\n const { isFolderUploadEnabled } = this.props;\n\n if (!dataTransferItems || dataTransferItems.length === 0) {\n return;\n }\n\n const folderItems = [];\n const fileItems = [];\n const packageItems = [];\n\n Array.from(dataTransferItems).forEach(item => {\n const isDirectory = isDataTransferItemAFolder(item);\n if (Browser.isSafari() && isDataTransferItemAPackage(item)) {\n packageItems.push(item);\n } else if (isDirectory && isFolderUploadEnabled) {\n folderItems.push(item);\n } else if (!isDirectory) {\n fileItems.push(item);\n }\n });\n\n this.addFileDataTransferItemsToUploadQueue(fileItems, itemUpdateCallback);\n this.addPackageDataTransferItemsToUploadQueue(packageItems, itemUpdateCallback);\n this.addFolderDataTransferItemsToUploadQueue(folderItems, itemUpdateCallback);\n };\n\n /**\n * Add dataTransferItem of file type to the upload queue\n *\n * @private\n * @param {Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>} dataTransferItems\n * @param {Function} itemUpdateCallback\n * @returns {Promise<void>}\n */\n addFileDataTransferItemsToUploadQueue = async (\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): Promise<void> => {\n const files = await Promise.all(dataTransferItems.map(item => getFileFromDataTransferItem(item)));\n this.addFilesToUploadQueue(\n files.filter(file => file),\n itemUpdateCallback,\n );\n };\n\n /**\n * Add dataTransferItem of package type to the upload queue\n *\n * @private\n * @param {Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>} dataTransferItems\n * @param {Function} itemUpdateCallback\n * @returns {void}\n */\n addPackageDataTransferItemsToUploadQueue = (\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): void => {\n const packageFiles = dataTransferItems.map(item => getPackageFileFromDataTransferItem(item));\n this.addFilesToUploadQueue(\n packageFiles.filter(packageFile => packageFile),\n itemUpdateCallback,\n );\n };\n\n /**\n * Add dataTransferItem of folder type to the upload queue\n *\n * @private\n * @param {Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>} dataTransferItems\n * @param {Function} itemUpdateCallback\n * @returns {void}\n */\n addFolderDataTransferItemsToUploadQueue = (\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): void => {\n const { rootFolderId } = this.props;\n\n if (dataTransferItems.length === 0) {\n return;\n }\n\n const newItems = this.getNewDataTransferItems(dataTransferItems);\n newItems.forEach(item => {\n this.itemIdsRef.current[getDataTransferItemId(item, rootFolderId)] = true;\n });\n\n if (newItems.length === 0) {\n return;\n }\n\n const fileAPIOptions = getDataTransferItemAPIOptions(newItems[0]);\n const { folderId = rootFolderId } = fileAPIOptions;\n const folderUploads = newItems.map(item => {\n const folderUpload = this.getFolderUploadAPI(folderId);\n folderUpload.buildFolderTreeFromDataTransferItem(item);\n return {\n api: folderUpload,\n extension: '',\n isFolder: true,\n name: folderUpload.folder.name,\n options: fileAPIOptions,\n progress: 0,\n size: 1,\n status: STATUS_PENDING,\n };\n });\n\n this.addToQueue(folderUploads, itemUpdateCallback);\n };\n\n /**\n * Converts File API to upload items and adds to upload queue for files with webkitRelativePath.\n *\n * @private\n * @param {Array<UploadFileWithAPIOptions | File>} files - Files to be added to upload queue\n * @param {Function} itemUpdateCallback - function to be invoked after items status are updated\n * @return {void}\n */\n addFilesWithRelativePathToQueue(files: Array<UploadFileWithAPIOptions | File>, itemUpdateCallback: Function) {\n if (files.length === 0) {\n return;\n }\n\n const { rootFolderId } = this.props;\n const fileAPIOptions = getFileAPIOptions(files[0]);\n const { folderId = rootFolderId } = fileAPIOptions;\n const folderUpload = this.getFolderUploadAPI(folderId);\n\n // Only 1 folder tree can be built with files having webkitRelativePath properties\n folderUpload.buildFolderTreeFromWebkitRelativePath(files);\n\n this.addFolderToUploadQueue(folderUpload, itemUpdateCallback, fileAPIOptions);\n }\n\n /**\n * Get folder upload API instance\n *\n * @private\n * @param {string} folderId\n * @return {FolderUpload}\n */\n getFolderUploadAPI = (folderId: string): FolderUpload => {\n const uploadBaseAPIOptions = this.getBaseAPIOptions();\n\n return new FolderUpload(this.addFilesToUploadQueue, folderId, this.addToQueue, uploadBaseAPIOptions);\n };\n\n /**\n * Add folder to upload queue\n *\n * @private\n * @param {FolderUpload} folderUpload\n * @param {Function} itemUpdateCallback\n * @param {Object} apiOptions\n * @return {void}\n */\n addFolderToUploadQueue = (folderUpload: FolderUpload, itemUpdateCallback: Function, apiOptions: Object): void => {\n this.addToQueue(\n [\n // $FlowFixMe no file property\n {\n api: folderUpload,\n extension: '',\n isFolder: true,\n name: folderUpload.folder.name,\n options: apiOptions,\n progress: 0,\n size: 1,\n status: STATUS_PENDING,\n },\n ],\n itemUpdateCallback,\n );\n };\n\n /**\n * Converts File API to upload items and adds to upload queue for files with webkitRelativePath missing or ignored.\n *\n * @private\n * @param {Array<UploadFileWithAPIOptions | File>} files - Files to be added to upload queue\n * @param {Function} itemUpdateCallback - function to be invoked after items status are updated\n * @return {void}\n */\n addFilesWithoutRelativePathToQueue = (\n files: Array<UploadFileWithAPIOptions | File>,\n itemUpdateCallback: Function,\n ) => {\n const { rootFolderId } = this.props;\n\n // Convert files from the file API to upload items\n const newItems = files.map(file => {\n const uploadFile = getFile(file);\n const uploadAPIOptions = getFileAPIOptions(file);\n const { name, size } = uploadFile;\n\n // Extract extension or use empty string if file has no extension\n let extension = name.substr(name.lastIndexOf('.') + 1);\n if (extension.length === name.length) {\n extension = '';\n }\n\n const api = this.getUploadAPI(uploadFile, uploadAPIOptions);\n const uploadItem: UploadItem = {\n api,\n extension,\n file: uploadFile,\n name,\n progress: 0,\n size,\n status: STATUS_PENDING,\n };\n\n if (uploadAPIOptions) {\n uploadItem.options = uploadAPIOptions;\n }\n\n this.itemIdsRef.current[getFileId(uploadItem, rootFolderId)] = true;\n\n return uploadItem;\n });\n\n if (newItems.length === 0) {\n return;\n }\n\n this.setState({\n itemIds: this.itemIdsRef.current,\n });\n this.addToQueue(newItems, itemUpdateCallback);\n };\n\n /**\n * Add new items to the upload queue\n *\n * @private\n * @param {Array<UploadFileWithAPIOptions | File>} newItems - Files to be added to upload queue\n * @param {Function} itemUpdateCallback - function to be invoked after items status are updated\n * @return {void}\n */\n addToQueue = (newItems: UploadItem[], itemUpdateCallback: Function) => {\n const { fileLimit, useUploadsManager } = this.props;\n const { isUploadsManagerExpanded } = this.state;\n\n let updatedItems = [];\n const prevItemsNum = this.itemsRef.current.length;\n const totalNumOfItems = prevItemsNum + newItems.length;\n\n // Don't add more than fileLimit # of items\n if (totalNumOfItems > fileLimit) {\n updatedItems = this.itemsRef.current.concat(newItems.slice(0, fileLimit - prevItemsNum));\n this.setState({\n errorCode: ERROR_CODE_UPLOAD_FILE_LIMIT,\n });\n } else {\n updatedItems = this.itemsRef.current.concat(newItems);\n this.setState({ errorCode: '' });\n\n // If the number of items being uploaded passes the threshold, expand the upload manager\n if (\n prevItemsNum < EXPAND_UPLOADS_MANAGER_ITEMS_NUM_THRESHOLD &&\n totalNumOfItems >= EXPAND_UPLOADS_MANAGER_ITEMS_NUM_THRESHOLD &&\n useUploadsManager &&\n !isUploadsManagerExpanded\n ) {\n this.isAutoExpanded = true;\n this.expandUploadsManager();\n }\n }\n\n this.updateViewAndCollection(updatedItems, () => {\n if (itemUpdateCallback) {\n itemUpdateCallback();\n }\n\n const { view } = this.state;\n // Automatically start upload if other files are being uploaded\n if (view === VIEW_UPLOAD_IN_PROGRESS) {\n this.upload();\n }\n });\n };\n\n /**\n * Returns a new API instance for the given file.\n *\n * @private\n * @param {File} file - File to get a new API instance for\n * @param {UploadItemAPIOptions} [uploadAPIOptions]\n * @return {UploadAPI} - Instance of Upload API\n */\n getUploadAPI(file: File, uploadAPIOptions?: UploadItemAPIOptions) {\n const { chunked, isResumableUploadsEnabled, isUploadFallbackLogicEnabled } = this.props;\n const { size } = file;\n const factory = this.createAPIFactory(uploadAPIOptions);\n\n if (chunked && size > CHUNKED_UPLOAD_MIN_SIZE_BYTES) {\n if (isMultiputSupported()) {\n const chunkedUploadAPI = factory.getChunkedUploadAPI();\n if (isResumableUploadsEnabled) {\n chunkedUploadAPI.isResumableUploadsEnabled = true;\n }\n if (isUploadFallbackLogicEnabled) {\n chunkedUploadAPI.isUploadFallbackLogicEnabled = true;\n }\n return chunkedUploadAPI;\n }\n\n /* eslint-disable no-console */\n console.warn(\n 'Chunked uploading is enabled, but not supported by your browser. You may need to enable HTTPS.',\n );\n /* eslint-enable no-console */\n }\n\n const plainUploadAPI = factory.getPlainUploadAPI();\n if (isUploadFallbackLogicEnabled) {\n plainUploadAPI.isUploadFallbackLogicEnabled = true;\n }\n\n return plainUploadAPI;\n }\n\n /**\n * Removes an item from the upload queue. Cancels upload if in progress.\n *\n * @param {UploadItem} item - Item to remove\n * @return {void}\n */\n removeFileFromUploadQueue = (item: UploadItem) => {\n const { onCancel, useUploadsManager } = this.props;\n // Clear any error errorCode in footer\n this.setState({ errorCode: '' });\n\n const { api } = item;\n api.cancel();\n\n const itemIndex = this.itemsRef.current.indexOf(item);\n const updatedItems = this.itemsRef.current\n .slice(0, itemIndex)\n .concat(this.itemsRef.current.slice(itemIndex + 1));\n\n onCancel([item]);\n this.updateViewAndCollection(updatedItems, () => {\n // Minimize uploads manager if there are no more items\n if (useUploadsManager && !updatedItems.length) {\n this.minimizeUploadsManager();\n }\n\n const { view } = this.state;\n if (view === VIEW_UPLOAD_IN_PROGRESS) {\n this.upload();\n }\n });\n };\n\n /**\n * Aborts uploads in progress and clears upload list.\n *\n * @private\n * @return {void}\n */\n cancel = () => {\n this.itemsRef.current.forEach(uploadItem => {\n const { api, status } = uploadItem;\n if (status === STATUS_IN_PROGRESS) {\n api.cancel();\n }\n });\n\n // Reset upload collection\n this.updateViewAndCollection([]);\n };\n\n /**\n * Uploads all items in the upload collection.\n *\n * @private\n * @return {void}\n */\n upload = () => {\n this.itemsRef.current.forEach(uploadItem => {\n if (uploadItem.status === STATUS_PENDING) {\n this.uploadFile(uploadItem);\n }\n });\n };\n\n /**\n * Helper to upload a single file.\n *\n * @param {UploadItem} item - Upload item object\n * @return {void}\n */\n uploadFile(item: UploadItem) {\n const { overwrite, rootFolderId } = this.props;\n const { api, file, options } = item;\n\n const numItemsUploading = this.itemsRef.current.filter(item_t => item_t.status === STATUS_IN_PROGRESS).length;\n\n if (numItemsUploading >= UPLOAD_CONCURRENCY) {\n return;\n }\n\n const uploadOptions: Object = {\n file,\n folderId: options && options.folderId ? options.folderId : rootFolderId,\n errorCallback: error => this.handleUploadError(item, error),\n progressCallback: event => this.handleUploadProgress(item, event),\n successCallback: entries => this.handleUploadSuccess(item, entries),\n overwrite,\n fileId: options && options.fileId ? options.fileId : null,\n };\n\n item.status = STATUS_IN_PROGRESS;\n const updatedItems = [...this.itemsRef.current];\n updatedItems[this.itemsRef.current.indexOf(item)] = item;\n\n api.upload(uploadOptions);\n\n this.updateViewAndCollection(updatedItems);\n }\n\n /**\n * Helper to resume uploading a single file.\n *\n * @param {UploadItem} item - Upload item object\n * @return {void}\n */\n resumeFile(item: UploadItem) {\n const { onResume, overwrite, rootFolderId } = this.props;\n const { api, file, options } = item;\n\n const numItemsUploading = this.itemsRef.current.filter(item_t => item_t.status === STATUS_IN_PROGRESS).length;\n\n if (numItemsUploading >= UPLOAD_CONCURRENCY) {\n return;\n }\n\n const resumeOptions: Object = {\n file,\n folderId: options && options.folderId ? options.folderId : rootFolderId,\n errorCallback: error => this.handleUploadError(item, error),\n progressCallback: event => this.handleUploadProgress(item, event),\n successCallback: entries => this.handleUploadSuccess(item, entries),\n overwrite,\n sessionId: api && api.sessionId ? api.sessionId : null,\n fileId: options && options.fileId ? options.fileId : null,\n };\n\n item.status = STATUS_IN_PROGRESS;\n delete item.error;\n\n const updatedItems = [...this.itemsRef.current];\n updatedItems[this.itemsRef.current.indexOf(item)] = item;\n\n onResume(item);\n api.resume(resumeOptions);\n\n this.updateViewAndCollection(updatedItems);\n }\n\n /**\n * Helper to reset a file. Cancels any current upload and resets progress.\n *\n * @param {UploadItem} item - Upload item to reset\n * @return {void}\n */\n resetFile(item: UploadItem) {\n const { api, file, options } = item;\n if (api && typeof api.cancel === 'function') {\n api.cancel();\n }\n\n // Reset API, progress & status\n item.api = this.getUploadAPI(file, options);\n item.progress = 0;\n item.status = STATUS_PENDING;\n delete item.error;\n\n const updatedItems = [...this.itemsRef.current];\n updatedItems[this.itemsRef.current.indexOf(item)] = item;\n\n this.updateViewAndCollection(updatedItems);\n }\n\n /**\n * Handles a successful upload.\n *\n * @private\n * @param {UploadItem} item - Upload item corresponding to success event\n * @param {BoxItem[]} entries - Successfully uploaded Box File objects\n * @return {void}\n */\n handleUploadSuccess = (item: UploadItem, entries?: BoxItem[]) => {\n const { onUpload, useUploadsManager } = this.props;\n\n item.progress = 100;\n if (!item.error) {\n item.status = STATUS_COMPLETE;\n }\n\n // Cache Box File object of successfully uploaded item\n if (entries && entries.length === 1) {\n const [boxFile] = entries;\n item.boxFile = boxFile;\n }\n\n const updatedItems = [...this.itemsRef.current];\n updatedItems[this.itemsRef.current.indexOf(item)] = item;\n\n // Broadcast that a file has been uploaded\n if (useUploadsManager) {\n onUpload(item);\n this.checkClearUploadItems();\n } else {\n onUpload(item.boxFile);\n }\n\n this.updateViewAndCollection(updatedItems, () => {\n const { view } = this.state;\n if (view === VIEW_UPLOAD_IN_PROGRESS) {\n this.upload();\n }\n });\n };\n\n resetUploadManagerExpandState = () => {\n this.isAutoExpanded = false;\n this.setState({\n isUploadsManagerExpanded: false,\n });\n };\n\n /**\n * Updates view and internal upload collection with provided items.\n *\n * @private\n * @param {UploadItem[]} item - Items to update collection with\n * @param {Function} callback\n * @return {void}\n */\n updateViewAndCollection(items: UploadItem[], callback?: () => void) {\n const {\n isPartialUploadEnabled,\n isResumableUploadsEnabled,\n onComplete,\n useUploadsManager,\n }: ContentUploaderProps = this.props;\n const someUploadIsInProgress = items.some(uploadItem => uploadItem.status !== STATUS_COMPLETE);\n const someUploadHasFailed = items.some(uploadItem => uploadItem.status === STATUS_ERROR);\n const allItemsArePending = !items.some(uploadItem => uploadItem.status !== STATUS_PENDING);\n const noFileIsPendingOrInProgress = items.every(\n uploadItem => uploadItem.status !== STATUS_PENDING && uploadItem.status !== STATUS_IN_PROGRESS,\n );\n const areAllItemsFinished = items.every(\n uploadItem => uploadItem.status === STATUS_COMPLETE || uploadItem.status === STATUS_ERROR,\n );\n const uploadItemsStatus = isResumableUploadsEnabled ? areAllItemsFinished : noFileIsPendingOrInProgress;\n\n let view = '';\n if ((items && items.length === 0) || allItemsArePending) {\n view = VIEW_UPLOAD_EMPTY;\n } else if (isPartialUploadEnabled && areAllItemsFinished) {\n const filesToBeUploaded = items.filter(item => item.status === STATUS_COMPLETE);\n view = VIEW_UPLOAD_SUCCESS;\n\n if (!useUploadsManager) {\n onComplete(cloneDeep(filesToBeUploaded.map(item => item.boxFile)));\n // Reset item collection after successful upload\n items = [];\n }\n } else if (someUploadHasFailed && useUploadsManager) {\n view = VIEW_ERROR;\n } else if (someUploadIsInProgress) {\n view = VIEW_UPLOAD_IN_PROGRESS;\n } else {\n view = VIEW_UPLOAD_SUCCESS;\n\n if (!useUploadsManager) {\n onComplete(cloneDeep(items.map(item => item.boxFile)));\n // Reset item collection after successful upload\n items = [];\n }\n }\n\n if (uploadItemsStatus && useUploadsManager) {\n if (this.isAutoExpanded) {\n this.resetUploadManagerExpandState();\n } // Else manually expanded so don't close\n onComplete(items);\n }\n\n const state: Partial<State> = {\n items,\n view,\n };\n\n if (items.length === 0) {\n this.itemIdsRef.current = {};\n state.itemIds = {};\n state.errorCode = '';\n }\n\n this.itemsRef.current = items;\n\n this.setState(state as Pick<State, keyof State>, callback);\n }\n\n /**\n * Handles an upload error.\n *\n * @private\n * @param {UploadItem} item - Upload item corresponding to error\n * @param {Error} error - Upload error\n * @return {void}\n */\n handleUploadError = (item: UploadItem, error: Error) => {\n const { onError, useUploadsManager } = this.props;\n const { file } = item;\n\n item.status = STATUS_ERROR;\n item.error = error;\n\n const newItems = [...this.itemsRef.current];\n const index = newItems.findIndex(singleItem => singleItem === item);\n if (index !== -1) {\n newItems[index] = item;\n }\n\n // Broadcast that there was an error uploading a file\n const errorData = useUploadsManager\n ? {\n item,\n error,\n }\n : {\n file,\n error,\n };\n\n onError(errorData);\n\n this.updateViewAndCollection(newItems, () => {\n if (useUploadsManager) {\n this.isAutoExpanded = true;\n this.expandUploadsManager();\n }\n const { view } = this.state;\n if (view === VIEW_UPLOAD_IN_PROGRESS) {\n this.upload();\n }\n });\n };\n\n /**\n * Handles an upload progress event.\n *\n * @private\n * @param {UploadItem} item - Upload item corresponding to progress event\n * @param {ProgressEvent} event - Progress event\n * @return {void}\n */\n handleUploadProgress = (item: UploadItem, event: ProgressEvent) => {\n if (!event.total || item.status === STATUS_COMPLETE || item.status === STATUS_STAGED) {\n return;\n }\n\n item.progress = Math.min(Math.round((event.loaded / event.total) * 100), 100);\n item.status = item.progress === 100 ? STATUS_STAGED : STATUS_IN_PROGRESS;\n\n const { onProgress } = this.props;\n onProgress(item);\n\n const updatedItems = [...this.itemsRef.current];\n updatedItems[this.itemsRef.current.indexOf(item)] = item;\n\n this.updateViewAndCollection(updatedItems);\n };\n\n /**\n * Updates item based on its status.\n *\n * @private\n * @param {UploadItem} item - The upload item to update\n * @return {void}\n */\n onClick = (item: UploadItem) => {\n const { chunked, isResumableUploadsEnabled, onClickCancel, onClickResume, onClickRetry } = this.props;\n const { file, status } = item;\n const isChunkedUpload =\n chunked && !item.isFolder && file.size > CHUNKED_UPLOAD_MIN_SIZE_BYTES && isMultiputSupported();\n const isResumable = isResumableUploadsEnabled && isChunkedUpload && item.api.sessionId;\n\n switch (status) {\n case STATUS_IN_PROGRESS:\n case STATUS_STAGED:\n case STATUS_COMPLETE:\n case STATUS_PENDING:\n this.removeFileFromUploadQueue(item);\n onClickCancel(item);\n break;\n case STATUS_ERROR:\n if (isResumable) {\n item.bytesUploadedOnLastResume = item.api.totalUploadedBytes;\n this.resumeFile(item);\n onClickResume(item);\n } else {\n this.resetFile(item);\n this.uploadFile(item);\n onClickRetry(item);\n }\n break;\n default:\n break;\n }\n };\n\n /**\n * Click action button for all uploads in the Uploads Manager with the given status.\n *\n * @private\n * @param {UploadStatus} - the status that items should have for their action button to be clicked\n * @return {void}\n */\n clickAllWithStatus = (status?: UploadStatus) => {\n this.itemsRef.current.forEach(item => {\n if (!status || item.status === status) {\n this.onClick(item);\n }\n });\n };\n\n /**\n * Expands the upload manager\n *\n * @return {void}\n */\n expandUploadsManager = (): void => {\n const { useUploadsManager } = this.props;\n\n if (!useUploadsManager) {\n return;\n }\n\n clearTimeout(this.resetItemsTimeout);\n\n this.setState({ isUploadsManagerExpanded: true });\n };\n\n /**\n * Minimizes the upload manager\n *\n * @return {void}\n */\n minimizeUploadsManager = (): void => {\n const { onMinimize, useUploadsManager } = this.props;\n\n if (!useUploadsManager || !onMinimize) {\n return;\n }\n\n clearTimeout(this.resetItemsTimeout);\n\n onMinimize();\n this.resetUploadManagerExpandState();\n this.checkClearUploadItems();\n };\n\n /**\n * Checks if the upload items should be cleared after a timeout\n *\n * @return {void}\n */\n checkClearUploadItems = () => {\n this.resetItemsTimeout = setTimeout(\n this.resetUploadsManagerItemsWhenUploadsComplete,\n HIDE_UPLOAD_MANAGER_DELAY_MS_DEFAULT,\n );\n };\n\n /**\n * Toggles the upload manager\n *\n * @return {void}\n */\n toggleUploadsManager = (): void => {\n const { isUploadsManagerExpanded } = this.state;\n\n if (isUploadsManagerExpanded) {\n this.minimizeUploadsManager();\n } else {\n this.expandUploadsManager();\n }\n };\n\n /**\n * Empties the items queue\n *\n * @return {void}\n */\n resetUploadsManagerItemsWhenUploadsComplete = (): void => {\n const { onCancel, useUploadsManager } = this.props;\n const { isUploadsManagerExpanded, view } = this.state;\n\n // Do not reset items when upload manger is expanded or there're uploads in progress\n if (\n (isUploadsManagerExpanded && useUploadsManager && !!this.itemsRef.current.length) ||\n view === VIEW_UPLOAD_IN_PROGRESS\n ) {\n return;\n }\n\n onCancel(this.itemsRef.current);\n\n this.itemsRef.current = [];\n this.itemIdsRef.current = {};\n\n this.setState({\n items: [],\n itemIds: {},\n });\n };\n\n /**\n * Adds file to the upload queue and starts upload immediately\n *\n * @param {Array<UploadFileWithAPIOptions | File>} files\n * @param {Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>} dataTransferItems\n * @return {void}\n */\n addFilesWithOptionsToUploadQueueAndStartUpload = (\n files?: Array<UploadFileWithAPIOptions | File>,\n dataTransferItems?: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n ): void => {\n this.addFilesToUploadQueue(files, this.upload);\n this.addDataTransferItemsToUploadQueue(dataTransferItems, this.upload);\n };\n\n /**\n * Renders the content uploader\n *\n * @inheritdoc\n * @return {Component}\n */\n render() {\n const {\n className,\n fileLimit,\n isDraggingItemsToUploadsManager = false,\n isFolderUploadEnabled,\n isResumableUploadsEnabled,\n isTouch,\n language,\n measureRef,\n messages,\n onClose,\n onUpgradeCTAClick,\n theme,\n useUploadsManager,\n }: ContentUploaderProps = this.props;\n const { view, items, errorCode, isUploadsManagerExpanded }: State = this.state;\n const isEmpty = items.length === 0;\n const isVisible = !isEmpty || !!isDraggingItemsToUploadsManager;\n\n const hasFiles = items.length !== 0;\n const isLoading = items.some(item => item.status === STATUS_IN_PROGRESS);\n const isDone = items.every(item => item.status === STATUS_COMPLETE || item.status === STATUS_STAGED);\n\n const styleClassName = classNames('bcu', className, {\n 'be-app-element': !useUploadsManager,\n be: !useUploadsManager,\n });\n\n return (\n <Internationalize language={language} messages={messages}>\n <TooltipProvider>\n {useUploadsManager ? (\n <div ref={measureRef} className={styleClassName} id={this.id}>\n <ThemingStyles selector={`#${this.id}`} theme={theme} />\n <UploadsManager\n isDragging={isDraggingItemsToUploadsManager}\n isExpanded={isUploadsManagerExpanded}\n isResumableUploadsEnabled={isResumableUploadsEnabled}\n isVisible={isVisible}\n items={items}\n onItemActionClick={this.onClick}\n onRemoveActionClick={this.removeFileFromUploadQueue}\n onUpgradeCTAClick={onUpgradeCTAClick}\n onUploadsManagerActionClick={this.clickAllWithStatus}\n toggleUploadsManager={this.toggleUploadsManager}\n view={view}\n />\n </div>\n ) : (\n <div ref={measureRef} className={styleClassName} id={this.id}>\n <ThemingStyles selector={`#${this.id}`} theme={theme} />\n <DroppableContent\n addDataTransferItemsToUploadQueue={this.addDroppedItemsToUploadQueue}\n addFiles={this.addFilesToUploadQueue}\n allowedTypes={['Files']}\n isFolderUploadEnabled={isFolderUploadEnabled}\n isTouch={isTouch}\n items={items}\n onClick={this.onClick}\n view={view}\n />\n <Footer\n errorCode={errorCode}\n fileLimit={fileLimit}\n hasFiles={hasFiles}\n isLoading={isLoading}\n onCancel={this.cancel}\n onClose={onClose}\n onUpload={this.upload}\n isDone={isDone}\n />\n </div>\n )}\n </TooltipProvider>\n </Internationalize>\n );\n }\n}\n\nexport default makeResponsive(ContentUploader);\nexport { ContentUploader as ContentUploaderComponent, CHUNKED_UPLOAD_MIN_SIZE_BYTES };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ContentUploader.js","names":["React","Component","classNames","cloneDeep","getProp","noop","uniqueid","TooltipProvider","DroppableContent","Footer","UploadsManager","API","Browser","Internationalize","makeResponsive","ThemingStyles","FolderUpload","getTypedFileId","getTypedFolderId","getDataTransferItemId","getFile","getFileAPIOptions","getFileFromDataTransferItem","getFileId","getDataTransferItemAPIOptions","getPackageFileFromDataTransferItem","isDataTransferItemAFolder","isDataTransferItemAPackage","isMultiputSupported","DEFAULT_ROOT","CLIENT_NAME_CONTENT_UPLOADER","DEFAULT_HOSTNAME_API","DEFAULT_HOSTNAME_UPLOAD","ERROR_CODE_ITEM_NAME_IN_USE","ERROR_CODE_UPLOAD_FILE_LIMIT","STATUS_COMPLETE","STATUS_ERROR","STATUS_IN_PROGRESS","STATUS_PENDING","STATUS_STAGED","VIEW_ERROR","VIEW_UPLOAD_EMPTY","VIEW_UPLOAD_IN_PROGRESS","VIEW_UPLOAD_SUCCESS","CHUNKED_UPLOAD_MIN_SIZE_BYTES","FILE_LIMIT_DEFAULT","HIDE_UPLOAD_MANAGER_DELAY_MS_DEFAULT","EXPAND_UPLOADS_MANAGER_ITEMS_NUM_THRESHOLD","UPLOAD_CONCURRENCY","ContentUploader","constructor","props","_defineProperty","apiHost","clientName","requestInterceptor","responseInterceptor","sharedLink","sharedLinkPassword","token","uploadHost","files","rootFolderId","Array","from","filter","file","itemIdsRef","current","items","item","itemUpdateCallback","isRelativePathIgnored","isPrepopulateFilesEnabled","onBeforeUpload","length","newFiles","getNewFiles","newItemIds","forEach","clearTimeout","resetItemsTimeout","firstFile","newItemIdsState","_objectSpread","setState","itemIds","webkitRelativePath","addFilesWithRelativePathToQueue","addFilesWithoutRelativePathToQueue","upload","droppedItems","addDataTransferItemsToUploadQueue","addFilesToUploadQueue","dataTransferItems","isFolderUploadEnabled","folderItems","fileItems","packageItems","isDirectory","isSafari","push","addFileDataTransferItemsToUploadQueue","addPackageDataTransferItemsToUploadQueue","addFolderDataTransferItemsToUploadQueue","Promise","all","map","packageFiles","packageFile","newItems","getNewDataTransferItems","fileAPIOptions","folderId","folderUploads","folderUpload","getFolderUploadAPI","buildFolderTreeFromDataTransferItem","api","extension","isFolder","name","folder","options","progress","size","status","addToQueue","uploadBaseAPIOptions","getBaseAPIOptions","apiOptions","uploadFile","uploadAPIOptions","substr","lastIndexOf","getUploadAPI","uploadItem","fileLimit","useUploadsManager","isUploadsManagerExpanded","state","updatedItems","prevItemsNum","itemsRef","totalNumOfItems","concat","slice","errorCode","isAutoExpanded","expandUploadsManager","updateViewAndCollection","view","onCancel","cancel","itemIndex","indexOf","minimizeUploadsManager","entries","onUpload","error","boxFile","checkClearUploadItems","onError","index","findIndex","singleItem","errorData","event","total","Math","min","round","loaded","onProgress","chunked","isResumableUploadsEnabled","onClickCancel","onClickResume","onClickRetry","isChunkedUpload","isResumable","sessionId","removeFileFromUploadQueue","code","bytesUploadedOnLastResume","totalUploadedBytes","resumeFile","resetFile","onClick","onMinimize","resetUploadManagerExpandState","setTimeout","resetUploadsManagerItemsWhenUploadsComplete","id","createRef","componentDidMount","rootElement","document","getElementById","appElement","componentWillUnmount","componentDidUpdate","hasFiles","isArray","hasItems","hasUploads","addFilesWithOptionsToUploadQueueAndStartUpload","createAPIFactory","fileId","itemFolderId","itemFileId","buildFolderTreeFromWebkitRelativePath","addFolderToUploadQueue","isUploadFallbackLogicEnabled","factory","chunkedUploadAPI","getChunkedUploadAPI","console","warn","plainUploadAPI","getPlainUploadAPI","overwrite","numItemsUploading","item_t","uploadOptions","errorCallback","handleUploadError","progressCallback","handleUploadProgress","successCallback","handleUploadSuccess","onResume","resumeOptions","resume","callback","isPartialUploadEnabled","onComplete","someUploadIsInProgress","some","someUploadHasFailed","allItemsArePending","noFileIsPendingOrInProgress","every","areAllItemsFinished","uploadItemsStatus","filesToBeUploaded","render","className","isDraggingItemsToUploadsManager","isTouch","language","measureRef","messages","onClose","onUpgradeCTAClick","theme","isEmpty","isVisible","isLoading","isDone","styleClassName","be","createElement","ref","selector","isDragging","isExpanded","onItemActionClick","onRemoveActionClick","onUploadsManagerActionClick","clickAllWithStatus","toggleUploadsManager","addDroppedItemsToUploadQueue","addFiles","allowedTypes","ContentUploaderComponent"],"sources":["../../../src/elements/content-uploader/ContentUploader.tsx"],"sourcesContent":["import 'regenerator-runtime/runtime';\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport cloneDeep from 'lodash/cloneDeep';\nimport getProp from 'lodash/get';\nimport noop from 'lodash/noop';\nimport uniqueid from 'lodash/uniqueId';\nimport { TooltipProvider } from '@box/blueprint-web';\nimport { AxiosRequestConfig, AxiosResponse } from 'axios';\nimport DroppableContent from './DroppableContent';\nimport Footer from './Footer';\nimport UploadsManager from './UploadsManager';\nimport API from '../../api';\nimport Browser from '../../utils/Browser';\nimport Internationalize from '../common/Internationalize';\nimport makeResponsive from '../common/makeResponsive';\nimport ThemingStyles, { Theme } from '../common/theming';\nimport FolderUpload from '../../api/uploads/FolderUpload';\nimport { getTypedFileId, getTypedFolderId } from '../../utils/file';\nimport {\n getDataTransferItemId,\n getFile,\n getFileAPIOptions,\n getFileFromDataTransferItem,\n getFileId,\n getDataTransferItemAPIOptions,\n getPackageFileFromDataTransferItem,\n isDataTransferItemAFolder,\n isDataTransferItemAPackage,\n isMultiputSupported,\n} from '../../utils/uploads';\nimport {\n DEFAULT_ROOT,\n CLIENT_NAME_CONTENT_UPLOADER,\n DEFAULT_HOSTNAME_API,\n DEFAULT_HOSTNAME_UPLOAD,\n ERROR_CODE_ITEM_NAME_IN_USE,\n ERROR_CODE_UPLOAD_FILE_LIMIT,\n STATUS_COMPLETE,\n STATUS_ERROR,\n STATUS_IN_PROGRESS,\n STATUS_PENDING,\n STATUS_STAGED,\n VIEW_ERROR,\n VIEW_UPLOAD_EMPTY,\n VIEW_UPLOAD_IN_PROGRESS,\n VIEW_UPLOAD_SUCCESS,\n} from '../../constants';\nimport type { BoxItem, StringMap, Token, View } from '../../common/types/core';\nimport type {\n UploadDataTransferItemWithAPIOptions,\n UploadFile,\n UploadFileWithAPIOptions,\n UploadItem,\n UploadItemAPIOptions,\n UploadStatus,\n} from '../../common/types/upload';\nimport '../common/fonts.scss';\nimport '../common/base.scss';\n\nexport interface ContentUploaderProps {\n apiHost: string;\n chunked: boolean;\n className: string;\n clientName: string;\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>;\n fileLimit: number;\n files?: Array<UploadFileWithAPIOptions | File>;\n isDraggingItemsToUploadsManager?: boolean;\n isFolderUploadEnabled: boolean;\n isLarge: boolean;\n isPartialUploadEnabled: boolean;\n isPrepopulateFilesEnabled?: boolean;\n isResumableUploadsEnabled: boolean;\n isSmall: boolean;\n isTouch: boolean;\n isUploadFallbackLogicEnabled: boolean;\n language?: string;\n measureRef: (ref: Element | null) => void;\n messages?: StringMap;\n onBeforeUpload: (file: Array<UploadFileWithAPIOptions | File>) => void;\n onCancel: (items?: UploadItem[]) => void;\n onClickCancel: (item: UploadItem) => void;\n onClickResume: (item: UploadItem) => void;\n onClickRetry: (item: UploadItem) => void;\n onClose: () => void;\n onComplete: (items: UploadItem[]) => void;\n onError: Function;\n onMinimize?: () => void;\n onProgress: (item: UploadItem) => void;\n onResume: (item: UploadItem) => void;\n onUpgradeCTAClick?: () => void;\n onUpload: (item?: UploadItem | BoxItem) => void;\n overwrite: boolean | 'error';\n requestInterceptor?: (response: AxiosResponse) => void;\n responseInterceptor?: (config: AxiosRequestConfig) => void;\n rootFolderId: string;\n sharedLink?: string;\n sharedLinkPassword?: string;\n theme?: Theme;\n token?: Token;\n uploadHost: string;\n useUploadsManager?: boolean;\n}\n\ntype State = {\n errorCode?: string;\n isUploadsManagerExpanded: boolean;\n itemIds: Object;\n items: UploadItem[];\n view: View;\n};\n\nconst CHUNKED_UPLOAD_MIN_SIZE_BYTES = 104857600; // 100MB\nconst FILE_LIMIT_DEFAULT = 100; // Upload at most 100 files at once by default\nconst HIDE_UPLOAD_MANAGER_DELAY_MS_DEFAULT = 8000;\nconst EXPAND_UPLOADS_MANAGER_ITEMS_NUM_THRESHOLD = 5;\nconst UPLOAD_CONCURRENCY = 6;\n\nclass ContentUploader extends Component<ContentUploaderProps, State> {\n id: string;\n\n props: ContentUploaderProps;\n\n state: State;\n\n rootElement: HTMLElement;\n\n appElement: HTMLElement;\n\n resetItemsTimeout: ReturnType<typeof setTimeout>;\n\n isAutoExpanded: boolean = false;\n\n itemsRef: React.MutableRefObject<UploadItem[]>;\n\n itemIdsRef: React.MutableRefObject<Object>;\n\n static defaultProps = {\n apiHost: DEFAULT_HOSTNAME_API,\n chunked: true,\n className: '',\n clientName: CLIENT_NAME_CONTENT_UPLOADER,\n dataTransferItems: [],\n files: [],\n fileLimit: FILE_LIMIT_DEFAULT,\n isDraggingItemsToUploadsManager: false,\n isFolderUploadEnabled: false,\n isPartialUploadEnabled: false,\n isPrepopulateFilesEnabled: false,\n isResumableUploadsEnabled: false,\n isUploadFallbackLogicEnabled: false,\n onBeforeUpload: noop,\n onCancel: noop,\n onClickCancel: noop,\n onClickResume: noop,\n onClickRetry: noop,\n onClose: noop,\n onComplete: noop,\n onError: noop,\n onMinimize: noop,\n onProgress: noop,\n onResume: noop,\n onUpload: noop,\n overwrite: true,\n rootFolderId: DEFAULT_ROOT,\n uploadHost: DEFAULT_HOSTNAME_UPLOAD,\n useUploadsManager: false,\n };\n\n /**\n * [constructor]\n *\n * @return {ContentUploader}\n */\n constructor(props: ContentUploaderProps) {\n super(props);\n\n const { rootFolderId, token, useUploadsManager } = props;\n this.state = {\n view: (rootFolderId && token) || useUploadsManager ? VIEW_UPLOAD_EMPTY : VIEW_ERROR,\n items: [],\n errorCode: '',\n itemIds: {},\n isUploadsManagerExpanded: false,\n };\n this.id = uniqueid('bcu_');\n\n this.itemsRef = React.createRef();\n this.itemsRef.current = [];\n\n this.itemIdsRef = React.createRef();\n this.itemIdsRef.current = {};\n }\n\n /**\n * Fetches the root folder on load\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentDidMount() {\n this.rootElement = document.getElementById(this.id);\n this.appElement = this.rootElement;\n const { files, isPrepopulateFilesEnabled } = this.props;\n // isPrepopulateFilesEnabled is a prop used to pre-populate files without clicking upload button.\n if (isPrepopulateFilesEnabled && files && files.length > 0) {\n this.addFilesToUploadQueue(files, this.upload);\n }\n }\n\n /**\n * Cancels pending uploads\n *\n * @private\n * @inheritdoc\n * @return {void}\n */\n componentWillUnmount() {\n this.cancel();\n }\n\n /**\n * Adds new items to the queue when files prop gets updated in window view\n *\n * @return {void}\n */\n componentDidUpdate() {\n const { files, dataTransferItems, useUploadsManager } = this.props;\n\n const hasFiles = Array.isArray(files) && files.length > 0;\n const hasItems = Array.isArray(dataTransferItems) && dataTransferItems.length > 0;\n const hasUploads = hasFiles || hasItems;\n\n if (!useUploadsManager || !hasUploads) {\n return;\n }\n\n // TODO: this gets called unnecessarily (upon each render regardless of the queue not changing)\n this.addFilesWithOptionsToUploadQueueAndStartUpload(files, dataTransferItems);\n }\n\n /**\n * Create and return new instance of API creator\n *\n * @param {UploadItemAPIOptions} [uploadAPIOptions]\n * @return {API}\n */\n createAPIFactory(uploadAPIOptions?: UploadItemAPIOptions): API {\n const { rootFolderId } = this.props;\n const folderId = getProp(uploadAPIOptions, 'folderId') || rootFolderId;\n const fileId = getProp(uploadAPIOptions, 'fileId');\n const itemFolderId = getTypedFolderId(folderId);\n const itemFileId = fileId ? getTypedFileId(fileId) : null;\n\n return new API({\n ...this.getBaseAPIOptions(),\n id: itemFileId || itemFolderId,\n ...uploadAPIOptions,\n });\n }\n\n /**\n * Return base API options from props\n *\n * @private\n * @returns {Object}\n */\n getBaseAPIOptions = (): Object => {\n const {\n apiHost,\n clientName,\n requestInterceptor,\n responseInterceptor,\n sharedLink,\n sharedLinkPassword,\n token,\n uploadHost,\n } = this.props;\n\n return {\n apiHost,\n clientName,\n requestInterceptor,\n responseInterceptor,\n sharedLink,\n sharedLinkPassword,\n token,\n uploadHost,\n };\n };\n\n /**\n * Given an array of files, return the files that are new to the Content Uploader\n *\n * @param {Array<UploadFileWithAPIOptions | File>} files\n */\n getNewFiles = (files: Array<UploadFileWithAPIOptions | File>): Array<UploadFileWithAPIOptions | File> => {\n const { rootFolderId } = this.props;\n\n return Array.from(files).filter(file => !this.itemIdsRef.current[getFileId(file, rootFolderId)]);\n };\n\n /**\n * Given an array of files, return the files that are new to the Content Uploader\n *\n * @param {Array<UploadFileWithAPIOptions | File>} files\n */\n getNewDataTransferItems = (\n items: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n ): Array<DataTransferItem | UploadDataTransferItemWithAPIOptions> => {\n const { rootFolderId } = this.props;\n\n return Array.from(items).filter(item => !this.itemIdsRef.current[getDataTransferItemId(item, rootFolderId)]);\n };\n\n /**\n * Converts File API to upload items and adds to upload queue.\n *\n * @private\n * @param {Array<UploadFileWithAPIOptions | UploadFile>} files - Files to be added to upload queue\n * @param {Function} itemUpdateCallback - function to be invoked after items status are updated\n * @param {boolean} [isRelativePathIgnored] - if true webkitRelativePath property is ignored\n * @return {void}\n */\n addFilesToUploadQueue = (\n files: Array<UploadFileWithAPIOptions | UploadFile>,\n itemUpdateCallback?: Function,\n isRelativePathIgnored: boolean = false,\n ) => {\n const { isPrepopulateFilesEnabled, onBeforeUpload, rootFolderId } = this.props;\n\n if (!files || files.length === 0) {\n return;\n }\n\n const newFiles = this.getNewFiles(files);\n if (newFiles.length === 0) {\n return;\n }\n\n const newItemIds = {};\n newFiles.forEach(file => {\n newItemIds[getFileId(file, rootFolderId)] = true;\n });\n\n clearTimeout(this.resetItemsTimeout);\n\n const firstFile = getFile(newFiles[0]);\n\n const newItemIdsState = { ...this.itemIdsRef.current, ...newItemIds };\n\n this.itemIdsRef.current = newItemIdsState;\n\n this.setState({ itemIds: newItemIdsState }, () => {\n onBeforeUpload(newFiles);\n if (firstFile.webkitRelativePath && !isRelativePathIgnored) {\n // webkitRelativePath should be ignored when the upload destination folder is known\n this.addFilesWithRelativePathToQueue(newFiles, itemUpdateCallback);\n } else {\n this.addFilesWithoutRelativePathToQueue(\n newFiles,\n isPrepopulateFilesEnabled ? this.upload : itemUpdateCallback,\n );\n }\n });\n };\n\n /**\n * Add dropped items to the upload queue\n *\n * @private\n * @param {DataTransfer} droppedItems\n * @param {Function} itemUpdateCallback\n * @returns {void}\n */\n addDroppedItemsToUploadQueue = (droppedItems: DataTransfer, itemUpdateCallback: Function): void => {\n if (droppedItems.items) {\n this.addDataTransferItemsToUploadQueue(droppedItems.items, itemUpdateCallback);\n } else {\n this.addFilesToUploadQueue(Array.from(droppedItems.files), itemUpdateCallback);\n }\n };\n\n /**\n * Add dataTransferItems to the upload queue\n *\n * @private\n * @param {DataTransferItemList} dataTransferItems\n * @param {Function} itemUpdateCallback\n * @returns {void}\n */\n addDataTransferItemsToUploadQueue = (\n dataTransferItems: DataTransferItemList | Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): void => {\n const { isFolderUploadEnabled } = this.props;\n\n if (!dataTransferItems || dataTransferItems.length === 0) {\n return;\n }\n\n const folderItems = [];\n const fileItems = [];\n const packageItems = [];\n\n Array.from(dataTransferItems).forEach(item => {\n const isDirectory = isDataTransferItemAFolder(item);\n if (Browser.isSafari() && isDataTransferItemAPackage(item)) {\n packageItems.push(item);\n } else if (isDirectory && isFolderUploadEnabled) {\n folderItems.push(item);\n } else if (!isDirectory) {\n fileItems.push(item);\n }\n });\n\n this.addFileDataTransferItemsToUploadQueue(fileItems, itemUpdateCallback);\n this.addPackageDataTransferItemsToUploadQueue(packageItems, itemUpdateCallback);\n this.addFolderDataTransferItemsToUploadQueue(folderItems, itemUpdateCallback);\n };\n\n /**\n * Add dataTransferItem of file type to the upload queue\n *\n * @private\n * @param {Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>} dataTransferItems\n * @param {Function} itemUpdateCallback\n * @returns {Promise<void>}\n */\n addFileDataTransferItemsToUploadQueue = async (\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): Promise<void> => {\n const files = await Promise.all(dataTransferItems.map(item => getFileFromDataTransferItem(item)));\n this.addFilesToUploadQueue(\n files.filter(file => file),\n itemUpdateCallback,\n );\n };\n\n /**\n * Add dataTransferItem of package type to the upload queue\n *\n * @private\n * @param {Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>} dataTransferItems\n * @param {Function} itemUpdateCallback\n * @returns {void}\n */\n addPackageDataTransferItemsToUploadQueue = (\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): void => {\n const packageFiles = dataTransferItems.map(item => getPackageFileFromDataTransferItem(item));\n this.addFilesToUploadQueue(\n packageFiles.filter(packageFile => packageFile),\n itemUpdateCallback,\n );\n };\n\n /**\n * Add dataTransferItem of folder type to the upload queue\n *\n * @private\n * @param {Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>} dataTransferItems\n * @param {Function} itemUpdateCallback\n * @returns {void}\n */\n addFolderDataTransferItemsToUploadQueue = (\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): void => {\n const { rootFolderId } = this.props;\n\n if (dataTransferItems.length === 0) {\n return;\n }\n\n const newItems = this.getNewDataTransferItems(dataTransferItems);\n newItems.forEach(item => {\n this.itemIdsRef.current[getDataTransferItemId(item, rootFolderId)] = true;\n });\n\n if (newItems.length === 0) {\n return;\n }\n\n const fileAPIOptions = getDataTransferItemAPIOptions(newItems[0]);\n const { folderId = rootFolderId } = fileAPIOptions;\n const folderUploads = newItems.map(item => {\n const folderUpload = this.getFolderUploadAPI(folderId);\n folderUpload.buildFolderTreeFromDataTransferItem(item);\n return {\n api: folderUpload,\n extension: '',\n isFolder: true,\n name: folderUpload.folder.name,\n options: fileAPIOptions,\n progress: 0,\n size: 1,\n status: STATUS_PENDING,\n };\n });\n\n this.addToQueue(folderUploads, itemUpdateCallback);\n };\n\n /**\n * Converts File API to upload items and adds to upload queue for files with webkitRelativePath.\n *\n * @private\n * @param {Array<UploadFileWithAPIOptions | File>} files - Files to be added to upload queue\n * @param {Function} itemUpdateCallback - function to be invoked after items status are updated\n * @return {void}\n */\n addFilesWithRelativePathToQueue(files: Array<UploadFileWithAPIOptions | File>, itemUpdateCallback: Function) {\n if (files.length === 0) {\n return;\n }\n\n const { rootFolderId } = this.props;\n const fileAPIOptions = getFileAPIOptions(files[0]);\n const { folderId = rootFolderId } = fileAPIOptions;\n const folderUpload = this.getFolderUploadAPI(folderId);\n\n // Only 1 folder tree can be built with files having webkitRelativePath properties\n folderUpload.buildFolderTreeFromWebkitRelativePath(files);\n\n this.addFolderToUploadQueue(folderUpload, itemUpdateCallback, fileAPIOptions);\n }\n\n /**\n * Get folder upload API instance\n *\n * @private\n * @param {string} folderId\n * @return {FolderUpload}\n */\n getFolderUploadAPI = (folderId: string): FolderUpload => {\n const uploadBaseAPIOptions = this.getBaseAPIOptions();\n\n return new FolderUpload(this.addFilesToUploadQueue, folderId, this.addToQueue, uploadBaseAPIOptions);\n };\n\n /**\n * Add folder to upload queue\n *\n * @private\n * @param {FolderUpload} folderUpload\n * @param {Function} itemUpdateCallback\n * @param {Object} apiOptions\n * @return {void}\n */\n addFolderToUploadQueue = (folderUpload: FolderUpload, itemUpdateCallback: Function, apiOptions: Object): void => {\n this.addToQueue(\n [\n // $FlowFixMe no file property\n {\n api: folderUpload,\n extension: '',\n isFolder: true,\n name: folderUpload.folder.name,\n options: apiOptions,\n progress: 0,\n size: 1,\n status: STATUS_PENDING,\n },\n ],\n itemUpdateCallback,\n );\n };\n\n /**\n * Converts File API to upload items and adds to upload queue for files with webkitRelativePath missing or ignored.\n *\n * @private\n * @param {Array<UploadFileWithAPIOptions | File>} files - Files to be added to upload queue\n * @param {Function} itemUpdateCallback - function to be invoked after items status are updated\n * @return {void}\n */\n addFilesWithoutRelativePathToQueue = (\n files: Array<UploadFileWithAPIOptions | File>,\n itemUpdateCallback: Function,\n ) => {\n const { rootFolderId } = this.props;\n\n // Convert files from the file API to upload items\n const newItems = files.map(file => {\n const uploadFile = getFile(file);\n const uploadAPIOptions = getFileAPIOptions(file);\n const { name, size } = uploadFile;\n\n // Extract extension or use empty string if file has no extension\n let extension = name.substr(name.lastIndexOf('.') + 1);\n if (extension.length === name.length) {\n extension = '';\n }\n\n const api = this.getUploadAPI(uploadFile, uploadAPIOptions);\n const uploadItem: UploadItem = {\n api,\n extension,\n file: uploadFile,\n name,\n progress: 0,\n size,\n status: STATUS_PENDING,\n };\n\n if (uploadAPIOptions) {\n uploadItem.options = uploadAPIOptions;\n }\n\n this.itemIdsRef.current[getFileId(uploadItem, rootFolderId)] = true;\n\n return uploadItem;\n });\n\n if (newItems.length === 0) {\n return;\n }\n\n this.setState({\n itemIds: this.itemIdsRef.current,\n });\n this.addToQueue(newItems, itemUpdateCallback);\n };\n\n /**\n * Add new items to the upload queue\n *\n * @private\n * @param {Array<UploadFileWithAPIOptions | File>} newItems - Files to be added to upload queue\n * @param {Function} itemUpdateCallback - function to be invoked after items status are updated\n * @return {void}\n */\n addToQueue = (newItems: UploadItem[], itemUpdateCallback: Function) => {\n const { fileLimit, useUploadsManager } = this.props;\n const { isUploadsManagerExpanded } = this.state;\n\n let updatedItems = [];\n const prevItemsNum = this.itemsRef.current.length;\n const totalNumOfItems = prevItemsNum + newItems.length;\n\n // Don't add more than fileLimit # of items\n if (totalNumOfItems > fileLimit) {\n updatedItems = this.itemsRef.current.concat(newItems.slice(0, fileLimit - prevItemsNum));\n this.setState({\n errorCode: ERROR_CODE_UPLOAD_FILE_LIMIT,\n });\n } else {\n updatedItems = this.itemsRef.current.concat(newItems);\n this.setState({ errorCode: '' });\n\n // If the number of items being uploaded passes the threshold, expand the upload manager\n if (\n prevItemsNum < EXPAND_UPLOADS_MANAGER_ITEMS_NUM_THRESHOLD &&\n totalNumOfItems >= EXPAND_UPLOADS_MANAGER_ITEMS_NUM_THRESHOLD &&\n useUploadsManager &&\n !isUploadsManagerExpanded\n ) {\n this.isAutoExpanded = true;\n this.expandUploadsManager();\n }\n }\n\n this.updateViewAndCollection(updatedItems, () => {\n if (itemUpdateCallback) {\n itemUpdateCallback();\n }\n\n const { view } = this.state;\n // Automatically start upload if other files are being uploaded\n if (view === VIEW_UPLOAD_IN_PROGRESS) {\n this.upload();\n }\n });\n };\n\n /**\n * Returns a new API instance for the given file.\n *\n * @private\n * @param {File} file - File to get a new API instance for\n * @param {UploadItemAPIOptions} [uploadAPIOptions]\n * @return {UploadAPI} - Instance of Upload API\n */\n getUploadAPI(file: File, uploadAPIOptions?: UploadItemAPIOptions) {\n const { chunked, isResumableUploadsEnabled, isUploadFallbackLogicEnabled } = this.props;\n const { size } = file;\n const factory = this.createAPIFactory(uploadAPIOptions);\n\n if (chunked && size > CHUNKED_UPLOAD_MIN_SIZE_BYTES) {\n if (isMultiputSupported()) {\n const chunkedUploadAPI = factory.getChunkedUploadAPI();\n if (isResumableUploadsEnabled) {\n chunkedUploadAPI.isResumableUploadsEnabled = true;\n }\n if (isUploadFallbackLogicEnabled) {\n chunkedUploadAPI.isUploadFallbackLogicEnabled = true;\n }\n return chunkedUploadAPI;\n }\n\n /* eslint-disable no-console */\n console.warn(\n 'Chunked uploading is enabled, but not supported by your browser. You may need to enable HTTPS.',\n );\n /* eslint-enable no-console */\n }\n\n const plainUploadAPI = factory.getPlainUploadAPI();\n if (isUploadFallbackLogicEnabled) {\n plainUploadAPI.isUploadFallbackLogicEnabled = true;\n }\n\n return plainUploadAPI;\n }\n\n /**\n * Removes an item from the upload queue. Cancels upload if in progress.\n *\n * @param {UploadItem} item - Item to remove\n * @return {void}\n */\n removeFileFromUploadQueue = (item: UploadItem) => {\n const { onCancel, useUploadsManager } = this.props;\n // Clear any error errorCode in footer\n this.setState({ errorCode: '' });\n\n const { api } = item;\n api.cancel();\n\n const itemIndex = this.itemsRef.current.indexOf(item);\n const updatedItems = this.itemsRef.current\n .slice(0, itemIndex)\n .concat(this.itemsRef.current.slice(itemIndex + 1));\n\n onCancel([item]);\n this.updateViewAndCollection(updatedItems, () => {\n // Minimize uploads manager if there are no more items\n if (useUploadsManager && !updatedItems.length) {\n this.minimizeUploadsManager();\n }\n\n const { view } = this.state;\n if (view === VIEW_UPLOAD_IN_PROGRESS) {\n this.upload();\n }\n });\n };\n\n /**\n * Aborts uploads in progress and clears upload list.\n *\n * @private\n * @return {void}\n */\n cancel = () => {\n this.itemsRef.current.forEach(uploadItem => {\n const { api, status } = uploadItem;\n if (status === STATUS_IN_PROGRESS) {\n api.cancel();\n }\n });\n\n // Reset upload collection\n this.updateViewAndCollection([]);\n };\n\n /**\n * Uploads all items in the upload collection.\n *\n * @private\n * @return {void}\n */\n upload = () => {\n this.itemsRef.current.forEach(uploadItem => {\n if (uploadItem.status === STATUS_PENDING) {\n this.uploadFile(uploadItem);\n }\n });\n };\n\n /**\n * Helper to upload a single file.\n *\n * @param {UploadItem} item - Upload item object\n * @return {void}\n */\n uploadFile(item: UploadItem) {\n const { overwrite, rootFolderId } = this.props;\n const { api, file, options } = item;\n\n const numItemsUploading = this.itemsRef.current.filter(item_t => item_t.status === STATUS_IN_PROGRESS).length;\n\n if (numItemsUploading >= UPLOAD_CONCURRENCY) {\n return;\n }\n\n const uploadOptions: Object = {\n file,\n folderId: options && options.folderId ? options.folderId : rootFolderId,\n errorCallback: error => this.handleUploadError(item, error),\n progressCallback: event => this.handleUploadProgress(item, event),\n successCallback: entries => this.handleUploadSuccess(item, entries),\n overwrite,\n fileId: options && options.fileId ? options.fileId : null,\n };\n\n item.status = STATUS_IN_PROGRESS;\n const updatedItems = [...this.itemsRef.current];\n updatedItems[this.itemsRef.current.indexOf(item)] = item;\n\n api.upload(uploadOptions);\n\n this.updateViewAndCollection(updatedItems);\n }\n\n /**\n * Helper to resume uploading a single file.\n *\n * @param {UploadItem} item - Upload item object\n * @return {void}\n */\n resumeFile(item: UploadItem) {\n const { onResume, overwrite, rootFolderId } = this.props;\n const { api, file, options } = item;\n\n const numItemsUploading = this.itemsRef.current.filter(item_t => item_t.status === STATUS_IN_PROGRESS).length;\n\n if (numItemsUploading >= UPLOAD_CONCURRENCY) {\n return;\n }\n\n const resumeOptions: Object = {\n file,\n folderId: options && options.folderId ? options.folderId : rootFolderId,\n errorCallback: error => this.handleUploadError(item, error),\n progressCallback: event => this.handleUploadProgress(item, event),\n successCallback: entries => this.handleUploadSuccess(item, entries),\n overwrite,\n sessionId: api && api.sessionId ? api.sessionId : null,\n fileId: options && options.fileId ? options.fileId : null,\n };\n\n item.status = STATUS_IN_PROGRESS;\n delete item.error;\n\n const updatedItems = [...this.itemsRef.current];\n updatedItems[this.itemsRef.current.indexOf(item)] = item;\n\n onResume(item);\n api.resume(resumeOptions);\n\n this.updateViewAndCollection(updatedItems);\n }\n\n /**\n * Helper to reset a file. Cancels any current upload and resets progress.\n *\n * @param {UploadItem} item - Upload item to reset\n * @return {void}\n */\n resetFile(item: UploadItem) {\n const { api, file, options } = item;\n if (api && typeof api.cancel === 'function') {\n api.cancel();\n }\n\n // Reset API, progress & status\n item.api = this.getUploadAPI(file, options);\n item.progress = 0;\n item.status = STATUS_PENDING;\n delete item.error;\n\n const updatedItems = [...this.itemsRef.current];\n updatedItems[this.itemsRef.current.indexOf(item)] = item;\n\n this.updateViewAndCollection(updatedItems);\n }\n\n /**\n * Handles a successful upload.\n *\n * @private\n * @param {UploadItem} item - Upload item corresponding to success event\n * @param {BoxItem[]} entries - Successfully uploaded Box File objects\n * @return {void}\n */\n handleUploadSuccess = (item: UploadItem, entries?: BoxItem[]) => {\n const { onUpload, useUploadsManager } = this.props;\n\n item.progress = 100;\n if (!item.error) {\n item.status = STATUS_COMPLETE;\n }\n\n // Cache Box File object of successfully uploaded item\n if (entries && entries.length === 1) {\n const [boxFile] = entries;\n item.boxFile = boxFile;\n }\n\n const updatedItems = [...this.itemsRef.current];\n updatedItems[this.itemsRef.current.indexOf(item)] = item;\n\n // Broadcast that a file has been uploaded\n if (useUploadsManager) {\n onUpload(item);\n this.checkClearUploadItems();\n } else {\n onUpload(item.boxFile);\n }\n\n this.updateViewAndCollection(updatedItems, () => {\n const { view } = this.state;\n if (view === VIEW_UPLOAD_IN_PROGRESS) {\n this.upload();\n }\n });\n };\n\n resetUploadManagerExpandState = () => {\n this.isAutoExpanded = false;\n this.setState({\n isUploadsManagerExpanded: false,\n });\n };\n\n /**\n * Updates view and internal upload collection with provided items.\n *\n * @private\n * @param {UploadItem[]} item - Items to update collection with\n * @param {Function} callback\n * @return {void}\n */\n updateViewAndCollection(items: UploadItem[], callback?: () => void) {\n const {\n isPartialUploadEnabled,\n isResumableUploadsEnabled,\n onComplete,\n useUploadsManager,\n }: ContentUploaderProps = this.props;\n const someUploadIsInProgress = items.some(uploadItem => uploadItem.status !== STATUS_COMPLETE);\n const someUploadHasFailed = items.some(uploadItem => uploadItem.status === STATUS_ERROR);\n const allItemsArePending = !items.some(uploadItem => uploadItem.status !== STATUS_PENDING);\n const noFileIsPendingOrInProgress = items.every(\n uploadItem => uploadItem.status !== STATUS_PENDING && uploadItem.status !== STATUS_IN_PROGRESS,\n );\n const areAllItemsFinished = items.every(\n uploadItem => uploadItem.status === STATUS_COMPLETE || uploadItem.status === STATUS_ERROR,\n );\n const uploadItemsStatus = isResumableUploadsEnabled ? areAllItemsFinished : noFileIsPendingOrInProgress;\n\n let view = '';\n if ((items && items.length === 0) || allItemsArePending) {\n view = VIEW_UPLOAD_EMPTY;\n } else if (isPartialUploadEnabled && areAllItemsFinished) {\n const filesToBeUploaded = items.filter(item => item.status === STATUS_COMPLETE);\n view = VIEW_UPLOAD_SUCCESS;\n\n if (!useUploadsManager) {\n onComplete(cloneDeep(filesToBeUploaded.map(item => item.boxFile)));\n // Reset item collection after successful upload\n items = [];\n }\n } else if (someUploadHasFailed && useUploadsManager) {\n view = VIEW_ERROR;\n } else if (someUploadIsInProgress) {\n view = VIEW_UPLOAD_IN_PROGRESS;\n } else {\n view = VIEW_UPLOAD_SUCCESS;\n\n if (!useUploadsManager) {\n onComplete(cloneDeep(items.map(item => item.boxFile)));\n // Reset item collection after successful upload\n items = [];\n }\n }\n\n if (uploadItemsStatus && useUploadsManager) {\n if (this.isAutoExpanded) {\n this.resetUploadManagerExpandState();\n } // Else manually expanded so don't close\n onComplete(items);\n }\n\n const state: Partial<State> = {\n items,\n view,\n };\n\n if (items.length === 0) {\n this.itemIdsRef.current = {};\n state.itemIds = {};\n state.errorCode = '';\n }\n\n this.itemsRef.current = items;\n\n this.setState(state as Pick<State, keyof State>, callback);\n }\n\n /**\n * Handles an upload error.\n *\n * @private\n * @param {UploadItem} item - Upload item corresponding to error\n * @param {Error} error - Upload error\n * @return {void}\n */\n handleUploadError = (item: UploadItem, error: Error) => {\n const { onError, useUploadsManager } = this.props;\n const { file } = item;\n\n item.status = STATUS_ERROR;\n item.error = error;\n\n const newItems = [...this.itemsRef.current];\n const index = newItems.findIndex(singleItem => singleItem === item);\n if (index !== -1) {\n newItems[index] = item;\n }\n\n // Broadcast that there was an error uploading a file\n const errorData = useUploadsManager\n ? {\n item,\n error,\n }\n : {\n file,\n error,\n };\n\n onError(errorData);\n\n this.updateViewAndCollection(newItems, () => {\n if (useUploadsManager) {\n this.isAutoExpanded = true;\n this.expandUploadsManager();\n }\n const { view } = this.state;\n if (view === VIEW_UPLOAD_IN_PROGRESS) {\n this.upload();\n }\n });\n };\n\n /**\n * Handles an upload progress event.\n *\n * @private\n * @param {UploadItem} item - Upload item corresponding to progress event\n * @param {ProgressEvent} event - Progress event\n * @return {void}\n */\n handleUploadProgress = (item: UploadItem, event: ProgressEvent) => {\n if (!event.total || item.status === STATUS_COMPLETE || item.status === STATUS_STAGED) {\n return;\n }\n\n item.progress = Math.min(Math.round((event.loaded / event.total) * 100), 100);\n item.status = item.progress === 100 ? STATUS_STAGED : STATUS_IN_PROGRESS;\n\n const { onProgress } = this.props;\n onProgress(item);\n\n const updatedItems = [...this.itemsRef.current];\n updatedItems[this.itemsRef.current.indexOf(item)] = item;\n\n this.updateViewAndCollection(updatedItems);\n };\n\n /**\n * Updates item based on its status.\n *\n * @private\n * @param {UploadItem} item - The upload item to update\n * @return {void}\n */\n onClick = (item: UploadItem) => {\n const { chunked, isResumableUploadsEnabled, onClickCancel, onClickResume, onClickRetry } = this.props;\n const { file, status, error } = item;\n const isChunkedUpload =\n chunked && !item.isFolder && file.size > CHUNKED_UPLOAD_MIN_SIZE_BYTES && isMultiputSupported();\n const isResumable = isResumableUploadsEnabled && isChunkedUpload && item.api.sessionId;\n\n switch (status) {\n case STATUS_IN_PROGRESS:\n case STATUS_STAGED:\n case STATUS_COMPLETE:\n case STATUS_PENDING:\n this.removeFileFromUploadQueue(item);\n onClickCancel(item);\n break;\n case STATUS_ERROR:\n if (error?.code === ERROR_CODE_ITEM_NAME_IN_USE) {\n this.removeFileFromUploadQueue(item);\n onClickCancel(item);\n } else if (isResumable) {\n item.bytesUploadedOnLastResume = item.api.totalUploadedBytes;\n this.resumeFile(item);\n onClickResume(item);\n } else {\n this.resetFile(item);\n this.uploadFile(item);\n onClickRetry(item);\n }\n break;\n default:\n break;\n }\n };\n\n /**\n * Click action button for all uploads in the Uploads Manager with the given status.\n *\n * @private\n * @param {UploadStatus} - the status that items should have for their action button to be clicked\n * @return {void}\n */\n clickAllWithStatus = (status?: UploadStatus) => {\n this.itemsRef.current.forEach(item => {\n if (!status || item.status === status) {\n this.onClick(item);\n }\n });\n };\n\n /**\n * Expands the upload manager\n *\n * @return {void}\n */\n expandUploadsManager = (): void => {\n const { useUploadsManager } = this.props;\n\n if (!useUploadsManager) {\n return;\n }\n\n clearTimeout(this.resetItemsTimeout);\n\n this.setState({ isUploadsManagerExpanded: true });\n };\n\n /**\n * Minimizes the upload manager\n *\n * @return {void}\n */\n minimizeUploadsManager = (): void => {\n const { onMinimize, useUploadsManager } = this.props;\n\n if (!useUploadsManager || !onMinimize) {\n return;\n }\n\n clearTimeout(this.resetItemsTimeout);\n\n onMinimize();\n this.resetUploadManagerExpandState();\n this.checkClearUploadItems();\n };\n\n /**\n * Checks if the upload items should be cleared after a timeout\n *\n * @return {void}\n */\n checkClearUploadItems = () => {\n this.resetItemsTimeout = setTimeout(\n this.resetUploadsManagerItemsWhenUploadsComplete,\n HIDE_UPLOAD_MANAGER_DELAY_MS_DEFAULT,\n );\n };\n\n /**\n * Toggles the upload manager\n *\n * @return {void}\n */\n toggleUploadsManager = (): void => {\n const { isUploadsManagerExpanded } = this.state;\n\n if (isUploadsManagerExpanded) {\n this.minimizeUploadsManager();\n } else {\n this.expandUploadsManager();\n }\n };\n\n /**\n * Empties the items queue\n *\n * @return {void}\n */\n resetUploadsManagerItemsWhenUploadsComplete = (): void => {\n const { onCancel, useUploadsManager } = this.props;\n const { isUploadsManagerExpanded, view } = this.state;\n\n // Do not reset items when upload manger is expanded or there're uploads in progress\n if (\n (isUploadsManagerExpanded && useUploadsManager && !!this.itemsRef.current.length) ||\n view === VIEW_UPLOAD_IN_PROGRESS\n ) {\n return;\n }\n\n onCancel(this.itemsRef.current);\n\n this.itemsRef.current = [];\n this.itemIdsRef.current = {};\n\n this.setState({\n items: [],\n itemIds: {},\n });\n };\n\n /**\n * Adds file to the upload queue and starts upload immediately\n *\n * @param {Array<UploadFileWithAPIOptions | File>} files\n * @param {Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>} dataTransferItems\n * @return {void}\n */\n addFilesWithOptionsToUploadQueueAndStartUpload = (\n files?: Array<UploadFileWithAPIOptions | File>,\n dataTransferItems?: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n ): void => {\n this.addFilesToUploadQueue(files, this.upload);\n this.addDataTransferItemsToUploadQueue(dataTransferItems, this.upload);\n };\n\n /**\n * Renders the content uploader\n *\n * @inheritdoc\n * @return {Component}\n */\n render() {\n const {\n className,\n fileLimit,\n isDraggingItemsToUploadsManager = false,\n isFolderUploadEnabled,\n isResumableUploadsEnabled,\n isTouch,\n language,\n measureRef,\n messages,\n onClose,\n onUpgradeCTAClick,\n theme,\n useUploadsManager,\n }: ContentUploaderProps = this.props;\n const { view, items, errorCode, isUploadsManagerExpanded }: State = this.state;\n const isEmpty = items.length === 0;\n const isVisible = !isEmpty || !!isDraggingItemsToUploadsManager;\n\n const hasFiles = items.length !== 0;\n const isLoading = items.some(item => item.status === STATUS_IN_PROGRESS);\n const isDone = items.every(item => item.status === STATUS_COMPLETE || item.status === STATUS_STAGED);\n\n const styleClassName = classNames('bcu', className, {\n 'be-app-element': !useUploadsManager,\n be: !useUploadsManager,\n });\n\n return (\n <Internationalize language={language} messages={messages}>\n <TooltipProvider>\n {useUploadsManager ? (\n <div ref={measureRef} className={styleClassName} id={this.id}>\n <ThemingStyles selector={`#${this.id}`} theme={theme} />\n <UploadsManager\n isDragging={isDraggingItemsToUploadsManager}\n isExpanded={isUploadsManagerExpanded}\n isResumableUploadsEnabled={isResumableUploadsEnabled}\n isVisible={isVisible}\n items={items}\n onItemActionClick={this.onClick}\n onRemoveActionClick={this.removeFileFromUploadQueue}\n onUpgradeCTAClick={onUpgradeCTAClick}\n onUploadsManagerActionClick={this.clickAllWithStatus}\n toggleUploadsManager={this.toggleUploadsManager}\n view={view}\n />\n </div>\n ) : (\n <div ref={measureRef} className={styleClassName} id={this.id}>\n <ThemingStyles selector={`#${this.id}`} theme={theme} />\n <DroppableContent\n addDataTransferItemsToUploadQueue={this.addDroppedItemsToUploadQueue}\n addFiles={this.addFilesToUploadQueue}\n allowedTypes={['Files']}\n isFolderUploadEnabled={isFolderUploadEnabled}\n isTouch={isTouch}\n items={items}\n onClick={this.onClick}\n view={view}\n />\n <Footer\n errorCode={errorCode}\n fileLimit={fileLimit}\n hasFiles={hasFiles}\n isLoading={isLoading}\n onCancel={this.cancel}\n onClose={onClose}\n onUpload={this.upload}\n isDone={isDone}\n />\n </div>\n )}\n </TooltipProvider>\n </Internationalize>\n );\n }\n}\n\nexport default makeResponsive(ContentUploader);\nexport { ContentUploader as ContentUploaderComponent, CHUNKED_UPLOAD_MIN_SIZE_BYTES };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,7 +4,7 @@ import { Button, IconButton, LoadingIndicator, Tooltip } from '@box/blueprint-we
|
|
|
4
4
|
import { ArrowCurveForward, Checkmark, XMark } from '@box/blueprint-web-assets/icons/Fill';
|
|
5
5
|
import { Size5, SurfaceStatusSurfaceSuccess } from '@box/blueprint-web-assets/tokens/tokens';
|
|
6
6
|
import IconInProgress from './IconInProgress';
|
|
7
|
-
import { ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED, STATUS_COMPLETE, STATUS_ERROR, STATUS_IN_PROGRESS, STATUS_PENDING, STATUS_STAGED } from '../../constants';
|
|
7
|
+
import { ERROR_CODE_ITEM_NAME_IN_USE, ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED, STATUS_COMPLETE, STATUS_ERROR, STATUS_IN_PROGRESS, STATUS_PENDING, STATUS_STAGED } from '../../constants';
|
|
8
8
|
import messages from '../common/messages';
|
|
9
9
|
import './ItemAction.scss';
|
|
10
10
|
const ItemAction = ({
|
|
@@ -43,8 +43,13 @@ const ItemAction = ({
|
|
|
43
43
|
}
|
|
44
44
|
break;
|
|
45
45
|
case STATUS_ERROR:
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
if (code === ERROR_CODE_ITEM_NAME_IN_USE) {
|
|
47
|
+
Icon = XMark;
|
|
48
|
+
tooltip = messages.uploadsCancelButtonTooltip;
|
|
49
|
+
} else {
|
|
50
|
+
Icon = ArrowCurveForward;
|
|
51
|
+
tooltip = isResumableUploadsEnabled ? messages.resume : messages.retry;
|
|
52
|
+
}
|
|
48
53
|
break;
|
|
49
54
|
case STATUS_IN_PROGRESS:
|
|
50
55
|
case STATUS_STAGED:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemAction.js","names":["React","useIntl","Button","IconButton","LoadingIndicator","Tooltip","ArrowCurveForward","Checkmark","XMark","Size5","SurfaceStatusSurfaceSuccess","IconInProgress","ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED","STATUS_COMPLETE","STATUS_ERROR","STATUS_IN_PROGRESS","STATUS_PENDING","STATUS_STAGED","messages","ItemAction","error","isFolder","isResumableUploadsEnabled","onClick","onUpgradeCTAClick","status","formatMessage","code","LoadingIndicatorIcon","forwardRef","createElement","loading","className","Icon","tooltip","complete","color","height","width","remove","
|
|
1
|
+
{"version":3,"file":"ItemAction.js","names":["React","useIntl","Button","IconButton","LoadingIndicator","Tooltip","ArrowCurveForward","Checkmark","XMark","Size5","SurfaceStatusSurfaceSuccess","IconInProgress","ERROR_CODE_ITEM_NAME_IN_USE","ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED","STATUS_COMPLETE","STATUS_ERROR","STATUS_IN_PROGRESS","STATUS_PENDING","STATUS_STAGED","messages","ItemAction","error","isFolder","isResumableUploadsEnabled","onClick","onUpgradeCTAClick","status","formatMessage","code","LoadingIndicatorIcon","forwardRef","createElement","loading","className","Icon","tooltip","complete","color","height","width","remove","uploadsCancelButtonTooltip","resume","retry","variant","uploadsFileSizeLimitExceededUpgradeMessageForUpgradeCta","isDisabled","tooltipText","content","disabled","icon"],"sources":["../../../src/elements/content-uploader/ItemAction.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { ForwardRefExoticComponent, RefAttributes, SVGProps } from 'react';\nimport { useIntl } from 'react-intl';\nimport { AxiosError } from 'axios';\nimport { Button, IconButton, LoadingIndicator, Tooltip } from '@box/blueprint-web';\nimport { ArrowCurveForward, Checkmark, XMark } from '@box/blueprint-web-assets/icons/Fill';\nimport { Size5, SurfaceStatusSurfaceSuccess } from '@box/blueprint-web-assets/tokens/tokens';\nimport IconInProgress from './IconInProgress';\n\nimport {\n ERROR_CODE_ITEM_NAME_IN_USE,\n ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED,\n STATUS_COMPLETE,\n STATUS_ERROR,\n STATUS_IN_PROGRESS,\n STATUS_PENDING,\n STATUS_STAGED,\n} from '../../constants';\n\nimport messages from '../common/messages';\n\nimport type { UploadStatus } from '../../common/types/upload';\n\nimport './ItemAction.scss';\n\nexport interface ItemActionProps {\n error?: Partial<AxiosError>;\n isFolder?: boolean;\n isResumableUploadsEnabled: boolean;\n onClick: React.MouseEventHandler<HTMLButtonElement>;\n onUpgradeCTAClick?: () => void;\n status: UploadStatus;\n}\n\ntype IconComponent = ForwardRefExoticComponent<SVGProps<SVGSVGElement> & RefAttributes<SVGSVGElement>>;\n\nconst ItemAction = ({\n error,\n isFolder = false,\n isResumableUploadsEnabled,\n onClick,\n onUpgradeCTAClick,\n status,\n}: ItemActionProps) => {\n const { formatMessage } = useIntl();\n const { code } = error || {};\n\n const LoadingIndicatorIcon = React.forwardRef<SVGSVGElement>(() => (\n <LoadingIndicator aria-label={formatMessage(messages.loading)} className=\"bcu-ItemAction-loading\" />\n ));\n\n let Icon: IconComponent = XMark;\n let tooltip;\n\n if (isFolder && status !== STATUS_PENDING) {\n return null;\n }\n\n switch (status) {\n case STATUS_COMPLETE:\n Icon = React.forwardRef<SVGSVGElement>(() => (\n <Checkmark\n aria-label={formatMessage(messages.complete)}\n color={SurfaceStatusSurfaceSuccess}\n height={Size5}\n width={Size5}\n />\n ));\n if (!isResumableUploadsEnabled) {\n tooltip = messages.remove;\n }\n break;\n case STATUS_ERROR:\n if (code === ERROR_CODE_ITEM_NAME_IN_USE) {\n Icon = XMark;\n tooltip = messages.uploadsCancelButtonTooltip;\n } else {\n Icon = ArrowCurveForward;\n tooltip = isResumableUploadsEnabled ? messages.resume : messages.retry;\n }\n break;\n case STATUS_IN_PROGRESS:\n case STATUS_STAGED:\n if (isResumableUploadsEnabled) {\n Icon = LoadingIndicatorIcon;\n } else {\n Icon = IconInProgress as IconComponent;\n tooltip = messages.uploadsCancelButtonTooltip;\n }\n break;\n case STATUS_PENDING:\n default:\n if (isResumableUploadsEnabled) {\n Icon = LoadingIndicatorIcon;\n } else {\n tooltip = messages.uploadsCancelButtonTooltip;\n }\n break;\n }\n\n if (status === STATUS_ERROR && code === ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED && !!onUpgradeCTAClick) {\n return (\n <Button\n onClick={onUpgradeCTAClick}\n data-resin-target=\"large_version_error_inline_upgrade_cta\"\n variant=\"primary\"\n >\n {formatMessage(messages.uploadsFileSizeLimitExceededUpgradeMessageForUpgradeCta)}\n </Button>\n );\n }\n\n const isDisabled = status === STATUS_STAGED;\n const tooltipText = tooltip && formatMessage(tooltip);\n\n return (\n <div className=\"bcu-item-action\">\n {tooltip ? (\n <Tooltip content={tooltipText}>\n <IconButton aria-label={tooltipText} disabled={isDisabled} icon={Icon} onClick={onClick} />\n </Tooltip>\n ) : (\n <Icon />\n )}\n </div>\n );\n};\n\nexport default ItemAction;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -40,7 +40,7 @@ export interface ContentUploaderProps {
|
|
|
40
40
|
onResume: (item: UploadItem) => void;
|
|
41
41
|
onUpgradeCTAClick?: () => void;
|
|
42
42
|
onUpload: (item?: UploadItem | BoxItem) => void;
|
|
43
|
-
overwrite: boolean;
|
|
43
|
+
overwrite: boolean | 'error';
|
|
44
44
|
requestInterceptor?: (response: AxiosResponse) => void;
|
|
45
45
|
responseInterceptor?: (config: AxiosRequestConfig) => void;
|
|
46
46
|
rootFolderId: string;
|