box-ui-elements 14.0.0 → 14.1.0-beta.3

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.
Files changed (79) hide show
  1. package/dist/explorer.css +1 -1
  2. package/dist/explorer.js +7 -7
  3. package/dist/openwith.css +1 -1
  4. package/dist/openwith.js +3 -3
  5. package/dist/picker.css +1 -1
  6. package/dist/picker.js +10 -10
  7. package/dist/preview.css +1 -1
  8. package/dist/preview.js +7 -7
  9. package/dist/sharing.css +1 -1
  10. package/dist/sharing.js +4 -4
  11. package/dist/sidebar.css +1 -1
  12. package/dist/sidebar.js +5 -5
  13. package/dist/uploader.css +1 -1
  14. package/dist/uploader.js +13 -13
  15. package/es/components/notification/Notification.js +2 -3
  16. package/es/components/notification/Notification.js.flow +2 -4
  17. package/es/components/notification/Notification.js.map +1 -1
  18. package/es/components/notification/Notification.scss +7 -8
  19. package/es/elements/common/messages.js +8 -0
  20. package/es/elements/common/messages.js.flow +10 -0
  21. package/es/elements/common/messages.js.map +1 -1
  22. package/es/elements/content-uploader/ContentUploader.js +11 -9
  23. package/es/elements/content-uploader/ContentUploader.js.flow +10 -7
  24. package/es/elements/content-uploader/ContentUploader.js.map +1 -1
  25. package/es/elements/content-uploader/ItemAction.js +19 -6
  26. package/es/elements/content-uploader/ItemAction.js.flow +34 -3
  27. package/es/elements/content-uploader/ItemAction.js.map +1 -1
  28. package/es/elements/content-uploader/ItemList.js +5 -4
  29. package/es/elements/content-uploader/ItemList.js.flow +11 -4
  30. package/es/elements/content-uploader/ItemList.js.map +1 -1
  31. package/es/elements/content-uploader/UploadsManager.js +8 -6
  32. package/es/elements/content-uploader/UploadsManager.js.flow +8 -5
  33. package/es/elements/content-uploader/UploadsManager.js.map +1 -1
  34. package/es/elements/content-uploader/actionCellRenderer.js +3 -2
  35. package/es/elements/content-uploader/actionCellRenderer.js.flow +9 -2
  36. package/es/elements/content-uploader/actionCellRenderer.js.map +1 -1
  37. package/es/elements/content-uploader/progressCellRenderer.js +7 -3
  38. package/es/elements/content-uploader/progressCellRenderer.js.flow +6 -3
  39. package/es/elements/content-uploader/progressCellRenderer.js.map +1 -1
  40. package/i18n/bn-IN.js +2 -0
  41. package/i18n/da-DK.js +2 -0
  42. package/i18n/de-DE.js +2 -0
  43. package/i18n/en-AU.js +2 -0
  44. package/i18n/en-CA.js +2 -0
  45. package/i18n/en-GB.js +2 -0
  46. package/i18n/en-US.js +2 -0
  47. package/i18n/en-US.properties +4 -0
  48. package/i18n/en-x-pseudo.js +2 -0
  49. package/i18n/es-419.js +2 -0
  50. package/i18n/es-ES.js +2 -0
  51. package/i18n/fi-FI.js +2 -0
  52. package/i18n/fr-CA.js +2 -0
  53. package/i18n/fr-FR.js +2 -0
  54. package/i18n/hi-IN.js +2 -0
  55. package/i18n/it-IT.js +2 -0
  56. package/i18n/ja-JP.js +5 -3
  57. package/i18n/ja-JP.properties +3 -3
  58. package/i18n/ko-KR.js +2 -0
  59. package/i18n/nb-NO.js +2 -0
  60. package/i18n/nl-NL.js +2 -0
  61. package/i18n/pl-PL.js +2 -0
  62. package/i18n/pt-BR.js +2 -0
  63. package/i18n/ru-RU.js +2 -0
  64. package/i18n/sv-SE.js +2 -0
  65. package/i18n/tr-TR.js +2 -0
  66. package/i18n/zh-CN.js +2 -0
  67. package/i18n/zh-TW.js +2 -0
  68. package/package.json +1 -1
  69. package/src/components/notification/Notification.js +2 -4
  70. package/src/components/notification/Notification.scss +7 -8
  71. package/src/elements/common/messages.js +10 -0
  72. package/src/elements/content-uploader/ContentUploader.js +10 -7
  73. package/src/elements/content-uploader/ItemAction.js +34 -3
  74. package/src/elements/content-uploader/ItemList.js +11 -4
  75. package/src/elements/content-uploader/UploadsManager.js +8 -5
  76. package/src/elements/content-uploader/__tests__/ItemAction.test.js +19 -1
  77. package/src/elements/content-uploader/__tests__/ItemList.test.js +45 -0
  78. package/src/elements/content-uploader/actionCellRenderer.js +9 -2
  79. package/src/elements/content-uploader/progressCellRenderer.js +6 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/content-uploader/ContentUploader.js"],"names":["React","Component","classNames","getProp","noop","uniqueid","cloneDeep","getTypedFileId","getTypedFolderId","Browser","makeResponsive","Internationalize","FolderUpload","API","getDataTransferItemId","getFileId","getFileFromDataTransferItem","getPackageFileFromDataTransferItem","getFile","getFileAPIOptions","getDataTransferItemAPIOptions","isDataTransferItemAFolder","isDataTransferItemAPackage","isMultiputSupported","DroppableContent","UploadsManager","Footer","DEFAULT_ROOT","CLIENT_NAME_CONTENT_UPLOADER","DEFAULT_HOSTNAME_UPLOAD","DEFAULT_HOSTNAME_API","VIEW_ERROR","VIEW_UPLOAD_EMPTY","VIEW_UPLOAD_IN_PROGRESS","VIEW_UPLOAD_SUCCESS","STATUS_PENDING","STATUS_IN_PROGRESS","STATUS_STAGED","STATUS_COMPLETE","STATUS_ERROR","ERROR_CODE_UPLOAD_FILE_LIMIT","CHUNKED_UPLOAD_MIN_SIZE_BYTES","FILE_LIMIT_DEFAULT","HIDE_UPLOAD_MANAGER_DELAY_MS_DEFAULT","EXPAND_UPLOADS_MANAGER_ITEMS_NUM_THRESHOLD","UPLOAD_CONCURRENCY","ContentUploader","props","token","sharedLink","sharedLinkPassword","apiHost","uploadHost","clientName","requestInterceptor","responseInterceptor","files","rootFolderId","itemIds","state","Array","from","filter","file","items","item","itemUpdateCallback","isRelativePathIgnored","onBeforeUpload","length","newFiles","getNewFiles","newItemIds","forEach","clearTimeout","resetItemsTimeout","firstFile","setState","webkitRelativePath","addFilesWithRelativePathToQueue","addFilesWithoutRelativePathToQueue","droppedItems","addDataTransferItemsToUploadQueue","addFilesToUploadQueue","dataTransferItems","isFolderUploadEnabled","folderItems","fileItems","packageItems","isDirectory","isSafari","push","addFileDataTransferItemsToUploadQueue","addPackageDataTransferItemsToUploadQueue","addFolderDataTransferItemsToUploadQueue","newItems","getNewDataTransferItems","fileAPIOptions","folderId","folderUpload","getFolderUploadAPI","buildFolderTreeFromDataTransferItem","addFolderToUploadQueue","uploadBaseAPIOptions","getBaseAPIOptions","addToQueue","apiOptions","api","extension","isFolder","name","folder","options","progress","size","status","map","uploadFile","uploadAPIOptions","substr","lastIndexOf","getUploadAPI","uploadItem","fileLimit","useUploadsManager","isUploadsManagerExpanded","updatedItems","prevItemsNum","totalNumOfItems","concat","slice","errorCode","isAutoExpanded","expandUploadsManager","updateViewAndCollection","view","upload","onCancel","cancel","splice","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","rootElement","document","getElementById","appElement","hasFiles","isArray","hasItems","hasUploads","addFilesWithOptionsToUploadQueueAndStartUpload","fileId","itemFolderId","itemFileId","buildFolderTreeFromWebkitRelativePath","isUploadFallbackLogicEnabled","factory","createAPIFactory","chunkedUploadAPI","getChunkedUploadAPI","console","warn","plainUploadAPI","getPlainUploadAPI","overwrite","numItemsUploading","item_t","uploadOptions","errorCallback","handleUploadError","progressCallback","handleUploadProgress","successCallback","handleUploadSuccess","onResume","resumeOptions","resume","callback","onComplete","someUploadIsInProgress","some","someUploadHasFailed","allItemsArePending","noFileIsPendingOrInProgress","every","areAllItemsFinished","uploadItemsStatus","language","messages","onClose","className","measureRef","isTouch","isDraggingItemsToUploadsManager","isEmpty","isVisible","isLoading","isDone","styleClassName","be","clickAllWithStatus","toggleUploadsManager","addDroppedItemsToUploadQueue","ContentUploaderComponent"],"mappings":"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","sourcesContent":["/**\n * @flow\n * @file Content Uploader component\n * @author Box\n */\n\nimport 'regenerator-runtime/runtime';\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport getProp from 'lodash/get';\nimport noop from 'lodash/noop';\nimport uniqueid from 'lodash/uniqueId';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getTypedFileId, getTypedFolderId } from '../../utils/file';\nimport Browser from '../../utils/Browser';\n\nimport makeResponsive from '../common/makeResponsive';\nimport Internationalize from '../common/Internationalize';\nimport FolderUpload from '../../api/uploads/FolderUpload';\nimport API from '../../api';\nimport {\n getDataTransferItemId,\n getFileId,\n getFileFromDataTransferItem,\n getPackageFileFromDataTransferItem,\n getFile,\n getFileAPIOptions,\n getDataTransferItemAPIOptions,\n isDataTransferItemAFolder,\n isDataTransferItemAPackage,\n isMultiputSupported,\n} from '../../utils/uploads';\nimport DroppableContent from './DroppableContent';\nimport UploadsManager from './UploadsManager';\nimport Footer from './Footer';\nimport {\n DEFAULT_ROOT,\n CLIENT_NAME_CONTENT_UPLOADER,\n DEFAULT_HOSTNAME_UPLOAD,\n DEFAULT_HOSTNAME_API,\n VIEW_ERROR,\n VIEW_UPLOAD_EMPTY,\n VIEW_UPLOAD_IN_PROGRESS,\n VIEW_UPLOAD_SUCCESS,\n STATUS_PENDING,\n STATUS_IN_PROGRESS,\n STATUS_STAGED,\n STATUS_COMPLETE,\n STATUS_ERROR,\n ERROR_CODE_UPLOAD_FILE_LIMIT,\n} from '../../constants';\nimport type {\n UploadItem,\n UploadDataTransferItemWithAPIOptions,\n UploadFileWithAPIOptions,\n UploadFile,\n UploadItemAPIOptions,\n UploadStatus,\n} from '../../common/types/upload';\nimport type { StringMap, Token, View, BoxItem } from '../../common/types/core';\nimport '../common/fonts.scss';\nimport '../common/base.scss';\n\ntype Props = {\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 isResumableUploadsEnabled: boolean,\n isSmall: boolean,\n isTouch: boolean,\n isUploadFallbackLogicEnabled: boolean,\n language?: string,\n measureRef: Function,\n messages?: StringMap,\n onBeforeUpload: (file: Array<UploadFileWithAPIOptions | File>) => void,\n onCancel: Function,\n onClickCancel: UploadItem => void,\n onClickResume: UploadItem => void,\n onClickRetry: UploadItem => void,\n onClose: Function,\n onComplete: Function,\n onError: Function,\n onMinimize?: Function,\n onProgress: Function,\n onResume: Function,\n onUpload: Function,\n overwrite: boolean,\n requestInterceptor?: Function,\n responseInterceptor?: Function,\n rootFolderId: string,\n sharedLink?: string,\n sharedLinkPassword?: string,\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<Props, State> {\n id: string;\n\n state: State;\n\n props: Props;\n\n rootElement: HTMLElement;\n\n appElement: HTMLElement;\n\n resetItemsTimeout: TimeoutID;\n\n isAutoExpanded: boolean = false;\n\n static defaultProps = {\n rootFolderId: DEFAULT_ROOT,\n apiHost: DEFAULT_HOSTNAME_API,\n chunked: true,\n className: '',\n clientName: CLIENT_NAME_CONTENT_UPLOADER,\n fileLimit: FILE_LIMIT_DEFAULT,\n uploadHost: DEFAULT_HOSTNAME_UPLOAD,\n onBeforeUpload: noop,\n onClickCancel: noop,\n onClickResume: noop,\n onClickRetry: noop,\n onClose: noop,\n onComplete: noop,\n onError: noop,\n onResume: noop,\n onUpload: noop,\n onProgress: noop,\n overwrite: true,\n useUploadsManager: false,\n files: [],\n onMinimize: noop,\n onCancel: noop,\n isFolderUploadEnabled: false,\n isResumableUploadsEnabled: false,\n isUploadFallbackLogicEnabled: false,\n dataTransferItems: [],\n isDraggingItemsToUploadsManager: false,\n };\n\n /**\n * [constructor]\n *\n * @return {ContentUploader}\n */\n constructor(props: Props) {\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\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): any): HTMLElement);\n this.appElement = this.rootElement;\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(): void {\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 token,\n sharedLink,\n sharedLinkPassword,\n apiHost,\n uploadHost,\n clientName,\n requestInterceptor,\n responseInterceptor,\n } = this.props;\n\n return {\n token,\n sharedLink,\n sharedLinkPassword,\n apiHost,\n uploadHost,\n clientName,\n requestInterceptor,\n responseInterceptor,\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 const { itemIds } = this.state;\n\n return Array.from(files).filter(file => !itemIds[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 const { itemIds } = this.state;\n\n return Array.from(items).filter(item => !itemIds[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 { onBeforeUpload, rootFolderId } = this.props;\n if (!files || files.length === 0) {\n return;\n }\n\n const newFiles = this.getNewFiles(files);\n\n if (newFiles.length === 0) {\n return;\n }\n\n const newItemIds = {};\n\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 this.setState(\n state => ({\n itemIds: {\n ...state.itemIds,\n ...newItemIds,\n },\n }),\n () => {\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(newFiles, 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 {Promise<any>}\n */\n addDroppedItemsToUploadQueue = (droppedItems: DataTransfer, itemUpdateCallback: Function): void => {\n if (droppedItems.items) {\n this.addDataTransferItemsToUploadQueue(droppedItems.items, itemUpdateCallback);\n } else {\n Array.from(droppedItems.files).forEach(file => {\n this.addFilesToUploadQueue([file], itemUpdateCallback);\n });\n }\n };\n\n /**\n * Add dataTransferItems to the upload queue\n *\n * @private\n * @param {DataTransferItemList} dataTransferItems\n * @param {Function} itemUpdateCallback\n * @returns {Promise<any>}\n */\n addDataTransferItemsToUploadQueue = (\n dataTransferItems: DataTransferItemList | Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): void => {\n const { isFolderUploadEnabled } = this.props;\n if (!dataTransferItems || dataTransferItems.length === 0) {\n return;\n }\n\n const folderItems = [];\n const fileItems = [];\n const packageItems = [];\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 {void}\n */\n addFileDataTransferItemsToUploadQueue = (\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): void => {\n dataTransferItems.forEach(async item => {\n const file = await getFileFromDataTransferItem(item);\n if (!file) {\n return;\n }\n\n this.addFilesToUploadQueue([file], 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 dataTransferItems.forEach(item => {\n const file = getPackageFileFromDataTransferItem(item);\n\n if (!file) {\n return;\n }\n\n this.addFilesToUploadQueue([file], 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 {Promise<any>}\n */\n addFolderDataTransferItemsToUploadQueue = async (\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): Promise<any> => {\n const { rootFolderId } = this.props;\n const { itemIds } = this.state;\n if (dataTransferItems.length === 0) {\n return;\n }\n\n const newItems = this.getNewDataTransferItems(dataTransferItems);\n newItems.forEach(item => {\n itemIds[getDataTransferItemId(item, rootFolderId)] = true;\n });\n\n if (newItems.length === 0) {\n return;\n }\n\n const fileAPIOptions: Object = getDataTransferItemAPIOptions(newItems[0]);\n const { folderId = rootFolderId } = fileAPIOptions;\n newItems.forEach(async item => {\n const folderUpload = this.getFolderUploadAPI(folderId);\n await folderUpload.buildFolderTreeFromDataTransferItem(item);\n this.addFolderToUploadQueue(folderUpload, itemUpdateCallback, fileAPIOptions);\n });\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: Object = 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 { itemIds } = this.state;\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: Object = {\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 itemIds[getFileId(uploadItem, rootFolderId)] = true;\n\n return uploadItem;\n });\n\n if (newItems.length === 0) {\n return;\n }\n\n this.setState({\n itemIds,\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 { items, isUploadsManagerExpanded } = this.state;\n\n let updatedItems = [];\n const prevItemsNum = items.length;\n const totalNumOfItems = prevItemsNum + newItems.length;\n\n // Don't add more than fileLimit # of items\n if (totalNumOfItems > fileLimit) {\n updatedItems = items.concat(newItems.slice(0, fileLimit - items.length));\n this.setState({\n errorCode: ERROR_CODE_UPLOAD_FILE_LIMIT,\n });\n } else {\n updatedItems = items.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 const { items } = this.state;\n // Clear any error errorCode in footer\n this.setState({ errorCode: '' });\n\n const { api } = item;\n api.cancel();\n\n items.splice(items.indexOf(item), 1);\n\n onCancel([item]);\n this.updateViewAndCollection(items, () => {\n // Minimize uploads manager if there are no more items\n if (useUploadsManager && !items.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 const { items } = this.state;\n items.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 const { items } = this.state;\n items.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 const { items } = this.state;\n\n const numItemsUploading = items.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 items[items.indexOf(item)] = item;\n\n api.upload(uploadOptions);\n\n this.updateViewAndCollection(items);\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 { overwrite, rootFolderId, onResume } = this.props;\n const { api, file, options } = item;\n const { items } = this.state;\n\n const numItemsUploading = items.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 items[items.indexOf(item)] = item;\n\n onResume(item);\n api.resume(resumeOptions);\n\n this.updateViewAndCollection(items);\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 { items } = this.state;\n items[items.indexOf(item)] = item;\n\n this.updateViewAndCollection(items);\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 { items } = this.state;\n items[items.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(items, () => {\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?: Function) {\n const { onComplete, useUploadsManager, isResumableUploadsEnabled }: Props = 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 (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: Object = {\n items,\n view,\n };\n\n if (items.length === 0) {\n state.itemIds = {};\n state.errorCode = '';\n }\n\n this.setState(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 const { items } = this.state;\n\n item.status = STATUS_ERROR;\n item.error = error;\n\n const newItems = [...items];\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: any) => {\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 { items } = this.state;\n items[items.indexOf(item)] = item;\n\n this.updateViewAndCollection(items);\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 { status, file } = 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 const { items } = this.state;\n\n items.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 { useUploadsManager, onMinimize } = 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 { view, items, isUploadsManagerExpanded } = this.state;\n const { useUploadsManager, onCancel } = this.props;\n\n // Do not reset items when upload manger is expanded or there're uploads in progress\n if ((isUploadsManagerExpanded && useUploadsManager && !!items.length) || view === VIEW_UPLOAD_IN_PROGRESS) {\n return;\n }\n\n onCancel(items);\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 - Files to be added to upload queue\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 language,\n messages,\n onClose,\n className,\n measureRef,\n isTouch,\n fileLimit,\n useUploadsManager,\n isResumableUploadsEnabled,\n isFolderUploadEnabled,\n isDraggingItemsToUploadsManager = false,\n }: Props = 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 {useUploadsManager ? (\n <div ref={measureRef} className={styleClassName} id={this.id}>\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 onUploadsManagerActionClick={this.clickAllWithStatus}\n toggleUploadsManager={this.toggleUploadsManager}\n view={view}\n />\n </div>\n ) : (\n <div ref={measureRef} className={styleClassName} id={this.id}>\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 </Internationalize>\n );\n }\n}\n\nexport type ContentUploaderProps = Props;\nexport default makeResponsive(ContentUploader);\nexport { ContentUploader as ContentUploaderComponent, CHUNKED_UPLOAD_MIN_SIZE_BYTES };\n"],"file":"ContentUploader.js"}
1
+ {"version":3,"sources":["../../../src/elements/content-uploader/ContentUploader.js"],"names":["React","Component","classNames","getProp","noop","uniqueid","cloneDeep","getTypedFileId","getTypedFolderId","Browser","makeResponsive","Internationalize","FolderUpload","API","getDataTransferItemId","getFileId","getFileFromDataTransferItem","getPackageFileFromDataTransferItem","getFile","getFileAPIOptions","getDataTransferItemAPIOptions","isDataTransferItemAFolder","isDataTransferItemAPackage","isMultiputSupported","DroppableContent","UploadsManager","Footer","DEFAULT_ROOT","CLIENT_NAME_CONTENT_UPLOADER","DEFAULT_HOSTNAME_UPLOAD","DEFAULT_HOSTNAME_API","VIEW_ERROR","VIEW_UPLOAD_EMPTY","VIEW_UPLOAD_IN_PROGRESS","VIEW_UPLOAD_SUCCESS","STATUS_PENDING","STATUS_IN_PROGRESS","STATUS_STAGED","STATUS_COMPLETE","STATUS_ERROR","ERROR_CODE_UPLOAD_FILE_LIMIT","CHUNKED_UPLOAD_MIN_SIZE_BYTES","FILE_LIMIT_DEFAULT","HIDE_UPLOAD_MANAGER_DELAY_MS_DEFAULT","EXPAND_UPLOADS_MANAGER_ITEMS_NUM_THRESHOLD","UPLOAD_CONCURRENCY","ContentUploader","props","token","sharedLink","sharedLinkPassword","apiHost","uploadHost","clientName","requestInterceptor","responseInterceptor","files","rootFolderId","itemIds","state","Array","from","filter","file","items","item","itemUpdateCallback","isRelativePathIgnored","onBeforeUpload","length","newFiles","getNewFiles","newItemIds","forEach","clearTimeout","resetItemsTimeout","firstFile","setState","webkitRelativePath","addFilesWithRelativePathToQueue","addFilesWithoutRelativePathToQueue","droppedItems","addDataTransferItemsToUploadQueue","addFilesToUploadQueue","dataTransferItems","isFolderUploadEnabled","folderItems","fileItems","packageItems","isDirectory","isSafari","push","addFileDataTransferItemsToUploadQueue","addPackageDataTransferItemsToUploadQueue","addFolderDataTransferItemsToUploadQueue","newItems","getNewDataTransferItems","fileAPIOptions","folderId","folderUpload","getFolderUploadAPI","buildFolderTreeFromDataTransferItem","addFolderToUploadQueue","uploadBaseAPIOptions","getBaseAPIOptions","addToQueue","apiOptions","api","extension","isFolder","name","folder","options","progress","size","status","map","uploadFile","uploadAPIOptions","substr","lastIndexOf","getUploadAPI","uploadItem","fileLimit","useUploadsManager","isUploadsManagerExpanded","updatedItems","prevItemsNum","totalNumOfItems","concat","slice","errorCode","isAutoExpanded","expandUploadsManager","updateViewAndCollection","view","upload","onCancel","cancel","splice","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","rootElement","document","getElementById","appElement","hasFiles","isArray","hasItems","hasUploads","addFilesWithOptionsToUploadQueueAndStartUpload","fileId","itemFolderId","itemFileId","buildFolderTreeFromWebkitRelativePath","isUploadFallbackLogicEnabled","factory","createAPIFactory","chunkedUploadAPI","getChunkedUploadAPI","console","warn","plainUploadAPI","getPlainUploadAPI","overwrite","numItemsUploading","item_t","uploadOptions","errorCallback","handleUploadError","progressCallback","handleUploadProgress","successCallback","handleUploadSuccess","onResume","resumeOptions","resume","callback","onComplete","someUploadIsInProgress","some","someUploadHasFailed","allItemsArePending","noFileIsPendingOrInProgress","every","areAllItemsFinished","uploadItemsStatus","className","isDraggingItemsToUploadsManager","isTouch","language","measureRef","messages","onClose","onUpgradeCTAClick","isEmpty","isVisible","isLoading","isDone","styleClassName","be","clickAllWithStatus","toggleUploadsManager","addDroppedItemsToUploadQueue","ContentUploaderComponent"],"mappings":"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","sourcesContent":["/**\n * @flow\n * @file Content Uploader component\n * @author Box\n */\n\nimport 'regenerator-runtime/runtime';\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport getProp from 'lodash/get';\nimport noop from 'lodash/noop';\nimport uniqueid from 'lodash/uniqueId';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getTypedFileId, getTypedFolderId } from '../../utils/file';\nimport Browser from '../../utils/Browser';\n\nimport makeResponsive from '../common/makeResponsive';\nimport Internationalize from '../common/Internationalize';\nimport FolderUpload from '../../api/uploads/FolderUpload';\nimport API from '../../api';\nimport {\n getDataTransferItemId,\n getFileId,\n getFileFromDataTransferItem,\n getPackageFileFromDataTransferItem,\n getFile,\n getFileAPIOptions,\n getDataTransferItemAPIOptions,\n isDataTransferItemAFolder,\n isDataTransferItemAPackage,\n isMultiputSupported,\n} from '../../utils/uploads';\nimport DroppableContent from './DroppableContent';\nimport UploadsManager from './UploadsManager';\nimport Footer from './Footer';\nimport {\n DEFAULT_ROOT,\n CLIENT_NAME_CONTENT_UPLOADER,\n DEFAULT_HOSTNAME_UPLOAD,\n DEFAULT_HOSTNAME_API,\n VIEW_ERROR,\n VIEW_UPLOAD_EMPTY,\n VIEW_UPLOAD_IN_PROGRESS,\n VIEW_UPLOAD_SUCCESS,\n STATUS_PENDING,\n STATUS_IN_PROGRESS,\n STATUS_STAGED,\n STATUS_COMPLETE,\n STATUS_ERROR,\n ERROR_CODE_UPLOAD_FILE_LIMIT,\n} from '../../constants';\nimport type {\n UploadItem,\n UploadDataTransferItemWithAPIOptions,\n UploadFileWithAPIOptions,\n UploadFile,\n UploadItemAPIOptions,\n UploadStatus,\n} from '../../common/types/upload';\nimport type { StringMap, Token, View, BoxItem } from '../../common/types/core';\nimport '../common/fonts.scss';\nimport '../common/base.scss';\n\ntype Props = {\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 isResumableUploadsEnabled: boolean,\n isSmall: boolean,\n isTouch: boolean,\n isUploadFallbackLogicEnabled: boolean,\n language?: string,\n measureRef: Function,\n messages?: StringMap,\n onBeforeUpload: (file: Array<UploadFileWithAPIOptions | File>) => void,\n onCancel: Function,\n onClickCancel: UploadItem => void,\n onClickResume: UploadItem => void,\n onClickRetry: UploadItem => void,\n onClose: Function,\n onComplete: Function,\n onError: Function,\n onMinimize?: Function,\n onProgress: Function,\n onResume: Function,\n onUpgradeCTAClick?: Function,\n onUpload: Function,\n overwrite: boolean,\n requestInterceptor?: Function,\n responseInterceptor?: Function,\n rootFolderId: string,\n sharedLink?: string,\n sharedLinkPassword?: string,\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<Props, State> {\n id: string;\n\n state: State;\n\n props: Props;\n\n rootElement: HTMLElement;\n\n appElement: HTMLElement;\n\n resetItemsTimeout: TimeoutID;\n\n isAutoExpanded: boolean = false;\n\n static defaultProps = {\n rootFolderId: DEFAULT_ROOT,\n apiHost: DEFAULT_HOSTNAME_API,\n chunked: true,\n className: '',\n clientName: CLIENT_NAME_CONTENT_UPLOADER,\n fileLimit: FILE_LIMIT_DEFAULT,\n uploadHost: DEFAULT_HOSTNAME_UPLOAD,\n onBeforeUpload: noop,\n onClickCancel: noop,\n onClickResume: noop,\n onClickRetry: noop,\n onClose: noop,\n onComplete: noop,\n onError: noop,\n onResume: noop,\n onUpload: noop,\n onProgress: noop,\n overwrite: true,\n useUploadsManager: false,\n files: [],\n onMinimize: noop,\n onCancel: noop,\n isFolderUploadEnabled: false,\n isResumableUploadsEnabled: false,\n isUploadFallbackLogicEnabled: false,\n dataTransferItems: [],\n isDraggingItemsToUploadsManager: false,\n };\n\n /**\n * [constructor]\n *\n * @return {ContentUploader}\n */\n constructor(props: Props) {\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\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): any): HTMLElement);\n this.appElement = this.rootElement;\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(): void {\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 token,\n sharedLink,\n sharedLinkPassword,\n apiHost,\n uploadHost,\n clientName,\n requestInterceptor,\n responseInterceptor,\n } = this.props;\n\n return {\n token,\n sharedLink,\n sharedLinkPassword,\n apiHost,\n uploadHost,\n clientName,\n requestInterceptor,\n responseInterceptor,\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 const { itemIds } = this.state;\n\n return Array.from(files).filter(file => !itemIds[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 const { itemIds } = this.state;\n\n return Array.from(items).filter(item => !itemIds[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 { onBeforeUpload, rootFolderId } = this.props;\n if (!files || files.length === 0) {\n return;\n }\n\n const newFiles = this.getNewFiles(files);\n\n if (newFiles.length === 0) {\n return;\n }\n\n const newItemIds = {};\n\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 this.setState(\n state => ({\n itemIds: {\n ...state.itemIds,\n ...newItemIds,\n },\n }),\n () => {\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(newFiles, 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 {Promise<any>}\n */\n addDroppedItemsToUploadQueue = (droppedItems: DataTransfer, itemUpdateCallback: Function): void => {\n if (droppedItems.items) {\n this.addDataTransferItemsToUploadQueue(droppedItems.items, itemUpdateCallback);\n } else {\n Array.from(droppedItems.files).forEach(file => {\n this.addFilesToUploadQueue([file], itemUpdateCallback);\n });\n }\n };\n\n /**\n * Add dataTransferItems to the upload queue\n *\n * @private\n * @param {DataTransferItemList} dataTransferItems\n * @param {Function} itemUpdateCallback\n * @returns {Promise<any>}\n */\n addDataTransferItemsToUploadQueue = (\n dataTransferItems: DataTransferItemList | Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): void => {\n const { isFolderUploadEnabled } = this.props;\n if (!dataTransferItems || dataTransferItems.length === 0) {\n return;\n }\n\n const folderItems = [];\n const fileItems = [];\n const packageItems = [];\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 {void}\n */\n addFileDataTransferItemsToUploadQueue = (\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): void => {\n dataTransferItems.forEach(async item => {\n const file = await getFileFromDataTransferItem(item);\n if (!file) {\n return;\n }\n\n this.addFilesToUploadQueue([file], 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 dataTransferItems.forEach(item => {\n const file = getPackageFileFromDataTransferItem(item);\n\n if (!file) {\n return;\n }\n\n this.addFilesToUploadQueue([file], 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 {Promise<any>}\n */\n addFolderDataTransferItemsToUploadQueue = async (\n dataTransferItems: Array<DataTransferItem | UploadDataTransferItemWithAPIOptions>,\n itemUpdateCallback: Function,\n ): Promise<any> => {\n const { rootFolderId } = this.props;\n const { itemIds } = this.state;\n if (dataTransferItems.length === 0) {\n return;\n }\n\n const newItems = this.getNewDataTransferItems(dataTransferItems);\n newItems.forEach(item => {\n itemIds[getDataTransferItemId(item, rootFolderId)] = true;\n });\n\n if (newItems.length === 0) {\n return;\n }\n\n const fileAPIOptions: Object = getDataTransferItemAPIOptions(newItems[0]);\n const { folderId = rootFolderId } = fileAPIOptions;\n newItems.forEach(async item => {\n const folderUpload = this.getFolderUploadAPI(folderId);\n await folderUpload.buildFolderTreeFromDataTransferItem(item);\n this.addFolderToUploadQueue(folderUpload, itemUpdateCallback, fileAPIOptions);\n });\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: Object = 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 { itemIds } = this.state;\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: Object = {\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 itemIds[getFileId(uploadItem, rootFolderId)] = true;\n\n return uploadItem;\n });\n\n if (newItems.length === 0) {\n return;\n }\n\n this.setState({\n itemIds,\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 { items, isUploadsManagerExpanded } = this.state;\n\n let updatedItems = [];\n const prevItemsNum = items.length;\n const totalNumOfItems = prevItemsNum + newItems.length;\n\n // Don't add more than fileLimit # of items\n if (totalNumOfItems > fileLimit) {\n updatedItems = items.concat(newItems.slice(0, fileLimit - items.length));\n this.setState({\n errorCode: ERROR_CODE_UPLOAD_FILE_LIMIT,\n });\n } else {\n updatedItems = items.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 const { items } = this.state;\n // Clear any error errorCode in footer\n this.setState({ errorCode: '' });\n\n const { api } = item;\n api.cancel();\n\n items.splice(items.indexOf(item), 1);\n\n onCancel([item]);\n this.updateViewAndCollection(items, () => {\n // Minimize uploads manager if there are no more items\n if (useUploadsManager && !items.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 const { items } = this.state;\n items.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 const { items } = this.state;\n items.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 const { items } = this.state;\n\n const numItemsUploading = items.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 items[items.indexOf(item)] = item;\n\n api.upload(uploadOptions);\n\n this.updateViewAndCollection(items);\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 { overwrite, rootFolderId, onResume } = this.props;\n const { api, file, options } = item;\n const { items } = this.state;\n\n const numItemsUploading = items.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 items[items.indexOf(item)] = item;\n\n onResume(item);\n api.resume(resumeOptions);\n\n this.updateViewAndCollection(items);\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 { items } = this.state;\n items[items.indexOf(item)] = item;\n\n this.updateViewAndCollection(items);\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 { items } = this.state;\n items[items.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(items, () => {\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?: Function) {\n const { onComplete, useUploadsManager, isResumableUploadsEnabled }: Props = 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 (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: Object = {\n items,\n view,\n };\n\n if (items.length === 0) {\n state.itemIds = {};\n state.errorCode = '';\n }\n\n this.setState(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 const { items } = this.state;\n\n item.status = STATUS_ERROR;\n item.error = error;\n\n const newItems = [...items];\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: any) => {\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 { items } = this.state;\n items[items.indexOf(item)] = item;\n\n this.updateViewAndCollection(items);\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 { status, file } = 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 const { items } = this.state;\n\n items.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 { useUploadsManager, onMinimize } = 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 { view, items, isUploadsManagerExpanded } = this.state;\n const { useUploadsManager, onCancel } = this.props;\n\n // Do not reset items when upload manger is expanded or there're uploads in progress\n if ((isUploadsManagerExpanded && useUploadsManager && !!items.length) || view === VIEW_UPLOAD_IN_PROGRESS) {\n return;\n }\n\n onCancel(items);\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 - Files to be added to upload queue\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 useUploadsManager,\n }: Props = 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 {useUploadsManager ? (\n <div ref={measureRef} className={styleClassName} id={this.id}>\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 <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 </Internationalize>\n );\n }\n}\n\nexport type ContentUploaderProps = Props;\nexport default makeResponsive(ContentUploader);\nexport { ContentUploader as ContentUploaderComponent, CHUNKED_UPLOAD_MIN_SIZE_BYTES };\n"],"file":"ContentUploader.js"}
@@ -3,28 +3,33 @@
3
3
  * @file Item action component
4
4
  */
5
5
  import React from 'react';
6
- import { injectIntl } from 'react-intl';
6
+ import { FormattedMessage, injectIntl } from 'react-intl';
7
7
  import IconCheck from '../../icons/general/IconCheck';
8
8
  import IconClose from '../../icons/general/IconClose';
9
9
  import IconInProgress from './IconInProgress';
10
10
  import IconRetry from '../../icons/general/IconRetry';
11
11
  import LoadingIndicator from '../../components/loading-indicator';
12
12
  import PlainButton from '../../components/plain-button/PlainButton';
13
+ import PrimaryButton from '../../components/primary-button/PrimaryButton';
13
14
  import Tooltip from '../../components/tooltip';
14
15
  import messages from '../common/messages';
15
- import { STATUS_PENDING, STATUS_IN_PROGRESS, STATUS_STAGED, STATUS_COMPLETE, STATUS_ERROR } from '../../constants';
16
+ import { ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED, STATUS_PENDING, STATUS_IN_PROGRESS, STATUS_STAGED, STATUS_COMPLETE, STATUS_ERROR } from '../../constants';
16
17
  import './ItemAction.scss';
17
18
  var ICON_CHECK_COLOR = '#26C281';
18
19
 
19
20
  var ItemAction = function ItemAction(_ref) {
20
- var status = _ref.status,
21
- onClick = _ref.onClick,
21
+ var _ref$error = _ref.error,
22
+ error = _ref$error === void 0 ? {} : _ref$error,
22
23
  intl = _ref.intl,
23
- isResumableUploadsEnabled = _ref.isResumableUploadsEnabled,
24
24
  _ref$isFolder = _ref.isFolder,
25
- isFolder = _ref$isFolder === void 0 ? false : _ref$isFolder;
25
+ isFolder = _ref$isFolder === void 0 ? false : _ref$isFolder,
26
+ isResumableUploadsEnabled = _ref.isResumableUploadsEnabled,
27
+ onClick = _ref.onClick,
28
+ onUpgradeCTAClick = _ref.onUpgradeCTAClick,
29
+ status = _ref.status;
26
30
  var icon = React.createElement(IconClose, null);
27
31
  var tooltip;
32
+ var code = error.code;
28
33
 
29
34
  if (isFolder && status !== STATUS_PENDING) {
30
35
  return null;
@@ -72,6 +77,14 @@ var ItemAction = function ItemAction(_ref) {
72
77
  break;
73
78
  }
74
79
 
80
+ if (status === STATUS_ERROR && code === ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED && !!onUpgradeCTAClick) {
81
+ return React.createElement(PrimaryButton, {
82
+ onClick: onUpgradeCTAClick,
83
+ "data-resin-target": "large_version_error_inline_upgrade_cta",
84
+ type: "button"
85
+ }, React.createElement(FormattedMessage, messages.uploadsFileSizeLimitExceededUpgradeMessageForUpgradeCta));
86
+ }
87
+
75
88
  return React.createElement("div", {
76
89
  className: "bcu-item-action"
77
90
  }, tooltip ? React.createElement(Tooltip, {
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import React from 'react';
7
- import { injectIntl } from 'react-intl';
7
+ import { FormattedMessage, injectIntl } from 'react-intl';
8
8
  import type { InjectIntlProvidedProps } from 'react-intl';
9
9
  import IconCheck from '../../icons/general/IconCheck';
10
10
  import IconClose from '../../icons/general/IconClose';
@@ -12,9 +12,17 @@ import IconInProgress from './IconInProgress';
12
12
  import IconRetry from '../../icons/general/IconRetry';
13
13
  import LoadingIndicator from '../../components/loading-indicator';
14
14
  import PlainButton from '../../components/plain-button/PlainButton';
15
+ import PrimaryButton from '../../components/primary-button/PrimaryButton';
15
16
  import Tooltip from '../../components/tooltip';
16
17
  import messages from '../common/messages';
17
- import { STATUS_PENDING, STATUS_IN_PROGRESS, STATUS_STAGED, STATUS_COMPLETE, STATUS_ERROR } from '../../constants';
18
+ import {
19
+ ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED,
20
+ STATUS_PENDING,
21
+ STATUS_IN_PROGRESS,
22
+ STATUS_STAGED,
23
+ STATUS_COMPLETE,
24
+ STATUS_ERROR,
25
+ } from '../../constants';
18
26
  import type { UploadStatus } from '../../common/types/upload';
19
27
 
20
28
  import './ItemAction.scss';
@@ -22,15 +30,26 @@ import './ItemAction.scss';
22
30
  const ICON_CHECK_COLOR = '#26C281';
23
31
 
24
32
  type Props = {
33
+ error?: Object,
25
34
  isFolder?: boolean,
26
35
  isResumableUploadsEnabled: boolean,
27
36
  onClick: Function,
37
+ onUpgradeCTAClick?: Function,
28
38
  status: UploadStatus,
29
39
  } & InjectIntlProvidedProps;
30
40
 
31
- const ItemAction = ({ status, onClick, intl, isResumableUploadsEnabled, isFolder = false }: Props) => {
41
+ const ItemAction = ({
42
+ error = {},
43
+ intl,
44
+ isFolder = false,
45
+ isResumableUploadsEnabled,
46
+ onClick,
47
+ onUpgradeCTAClick,
48
+ status,
49
+ }: Props) => {
32
50
  let icon = <IconClose />;
33
51
  let tooltip;
52
+ const { code } = error;
34
53
 
35
54
  if (isFolder && status !== STATUS_PENDING) {
36
55
  return null;
@@ -66,6 +85,18 @@ const ItemAction = ({ status, onClick, intl, isResumableUploadsEnabled, isFolder
66
85
  break;
67
86
  }
68
87
 
88
+ if (status === STATUS_ERROR && code === ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED && !!onUpgradeCTAClick) {
89
+ return (
90
+ <PrimaryButton
91
+ onClick={onUpgradeCTAClick}
92
+ data-resin-target="large_version_error_inline_upgrade_cta"
93
+ type="button"
94
+ >
95
+ <FormattedMessage {...messages.uploadsFileSizeLimitExceededUpgradeMessageForUpgradeCta} />
96
+ </PrimaryButton>
97
+ );
98
+ }
99
+
69
100
  return (
70
101
  <div className="bcu-item-action">
71
102
  {tooltip ? (
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/content-uploader/ItemAction.js"],"names":["React","injectIntl","IconCheck","IconClose","IconInProgress","IconRetry","LoadingIndicator","PlainButton","Tooltip","messages","STATUS_PENDING","STATUS_IN_PROGRESS","STATUS_STAGED","STATUS_COMPLETE","STATUS_ERROR","ICON_CHECK_COLOR","ItemAction","status","onClick","intl","isResumableUploadsEnabled","isFolder","icon","tooltip","remove","resume","retry","uploadsCancelButtonTooltip","formatMessage","ItemActionForTesting"],"mappings":"AAAA;;;;AAKA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,UAAT,QAA2B,YAA3B;AAEA,OAAOC,SAAP,MAAsB,+BAAtB;AACA,OAAOC,SAAP,MAAsB,+BAAtB;AACA,OAAOC,cAAP,MAA2B,kBAA3B;AACA,OAAOC,SAAP,MAAsB,+BAAtB;AACA,OAAOC,gBAAP,MAA6B,oCAA7B;AACA,OAAOC,WAAP,MAAwB,2CAAxB;AACA,OAAOC,OAAP,MAAoB,0BAApB;AACA,OAAOC,QAAP,MAAqB,oBAArB;AACA,SAASC,cAAT,EAAyBC,kBAAzB,EAA6CC,aAA7C,EAA4DC,eAA5D,EAA6EC,YAA7E,QAAiG,iBAAjG;AAGA,OAAO,mBAAP;AAEA,IAAMC,gBAAgB,GAAG,SAAzB;;AASA,IAAMC,UAAU,GAAG,SAAbA,UAAa,OAAmF;AAAA,MAAhFC,MAAgF,QAAhFA,MAAgF;AAAA,MAAxEC,OAAwE,QAAxEA,OAAwE;AAAA,MAA/DC,IAA+D,QAA/DA,IAA+D;AAAA,MAAzDC,yBAAyD,QAAzDA,yBAAyD;AAAA,2BAA9BC,QAA8B;AAAA,MAA9BA,QAA8B,8BAAnB,KAAmB;AAClG,MAAIC,IAAI,GAAG,oBAAC,SAAD,OAAX;AACA,MAAIC,OAAJ;;AAEA,MAAIF,QAAQ,IAAIJ,MAAM,KAAKP,cAA3B,EAA2C;AACvC,WAAO,IAAP;AACH;;AAED,UAAQO,MAAR;AACI,SAAKJ,eAAL;AACIS,MAAAA,IAAI,GAAG,oBAAC,SAAD;AAAW,QAAA,KAAK,EAAEP;AAAlB,QAAP;;AACA,UAAI,CAACK,yBAAL,EAAgC;AAC5BG,QAAAA,OAAO,GAAGd,QAAQ,CAACe,MAAnB;AACH;;AACD;;AACJ,SAAKV,YAAL;AACIQ,MAAAA,IAAI,GAAG,oBAAC,SAAD;AAAW,QAAA,MAAM,EAAE,EAAnB;AAAuB,QAAA,KAAK,EAAE;AAA9B,QAAP;AACAC,MAAAA,OAAO,GAAGH,yBAAyB,GAAGX,QAAQ,CAACgB,MAAZ,GAAqBhB,QAAQ,CAACiB,KAAjE;AACA;;AACJ,SAAKf,kBAAL;AACA,SAAKC,aAAL;AACI,UAAIQ,yBAAJ,EAA+B;AAC3BE,QAAAA,IAAI,GAAG,oBAAC,gBAAD,OAAP;AACH,OAFD,MAEO;AACHA,QAAAA,IAAI,GAAG,oBAAC,cAAD,OAAP;AACAC,QAAAA,OAAO,GAAGd,QAAQ,CAACkB,0BAAnB;AACH;;AACD;;AACJ,SAAKjB,cAAL;AACA;AACI,UAAIU,yBAAJ,EAA+B;AAC3BE,QAAAA,IAAI,GAAG,oBAAC,gBAAD,OAAP;AACH,OAFD,MAEO;AACHC,QAAAA,OAAO,GAAGd,QAAQ,CAACkB,0BAAnB;AACH;;AACD;AA3BR;;AA8BA,SACI;AAAK,IAAA,SAAS,EAAC;AAAf,KACKJ,OAAO,GACJ,oBAAC,OAAD;AAAS,IAAA,QAAQ,EAAC,UAAlB;AAA6B,IAAA,IAAI,EAAEJ,IAAI,CAACS,aAAL,CAAmBL,OAAnB;AAAnC,KACI,oBAAC,WAAD;AAAa,IAAA,OAAO,EAAEL,OAAtB;AAA+B,IAAA,IAAI,EAAC,QAApC;AAA6C,IAAA,UAAU,EAAED,MAAM,KAAKL;AAApE,KACKU,IADL,CADJ,CADI,GAOJA,IARR,CADJ;AAaH,CAnDD;;AAqDA,SAASN,UAAU,IAAIa,oBAAvB;AACA,eAAe5B,UAAU,CAACe,UAAD,CAAzB","sourcesContent":["/**\n * @flow\n * @file Item action component\n */\n\nimport React from 'react';\nimport { injectIntl } from 'react-intl';\nimport type { InjectIntlProvidedProps } from 'react-intl';\nimport IconCheck from '../../icons/general/IconCheck';\nimport IconClose from '../../icons/general/IconClose';\nimport IconInProgress from './IconInProgress';\nimport IconRetry from '../../icons/general/IconRetry';\nimport LoadingIndicator from '../../components/loading-indicator';\nimport PlainButton from '../../components/plain-button/PlainButton';\nimport Tooltip from '../../components/tooltip';\nimport messages from '../common/messages';\nimport { STATUS_PENDING, STATUS_IN_PROGRESS, STATUS_STAGED, STATUS_COMPLETE, STATUS_ERROR } from '../../constants';\nimport type { UploadStatus } from '../../common/types/upload';\n\nimport './ItemAction.scss';\n\nconst ICON_CHECK_COLOR = '#26C281';\n\ntype Props = {\n isFolder?: boolean,\n isResumableUploadsEnabled: boolean,\n onClick: Function,\n status: UploadStatus,\n} & InjectIntlProvidedProps;\n\nconst ItemAction = ({ status, onClick, intl, isResumableUploadsEnabled, isFolder = false }: Props) => {\n let icon = <IconClose />;\n let tooltip;\n\n if (isFolder && status !== STATUS_PENDING) {\n return null;\n }\n\n switch (status) {\n case STATUS_COMPLETE:\n icon = <IconCheck color={ICON_CHECK_COLOR} />;\n if (!isResumableUploadsEnabled) {\n tooltip = messages.remove;\n }\n break;\n case STATUS_ERROR:\n icon = <IconRetry height={24} width={24} />;\n tooltip = isResumableUploadsEnabled ? messages.resume : messages.retry;\n break;\n case STATUS_IN_PROGRESS:\n case STATUS_STAGED:\n if (isResumableUploadsEnabled) {\n icon = <LoadingIndicator />;\n } else {\n icon = <IconInProgress />;\n tooltip = messages.uploadsCancelButtonTooltip;\n }\n break;\n case STATUS_PENDING:\n default:\n if (isResumableUploadsEnabled) {\n icon = <LoadingIndicator />;\n } else {\n tooltip = messages.uploadsCancelButtonTooltip;\n }\n break;\n }\n\n return (\n <div className=\"bcu-item-action\">\n {tooltip ? (\n <Tooltip position=\"top-left\" text={intl.formatMessage(tooltip)}>\n <PlainButton onClick={onClick} type=\"button\" isDisabled={status === STATUS_STAGED}>\n {icon}\n </PlainButton>\n </Tooltip>\n ) : (\n icon\n )}\n </div>\n );\n};\n\nexport { ItemAction as ItemActionForTesting };\nexport default injectIntl(ItemAction);\n"],"file":"ItemAction.js"}
1
+ {"version":3,"sources":["../../../src/elements/content-uploader/ItemAction.js"],"names":["React","FormattedMessage","injectIntl","IconCheck","IconClose","IconInProgress","IconRetry","LoadingIndicator","PlainButton","PrimaryButton","Tooltip","messages","ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED","STATUS_PENDING","STATUS_IN_PROGRESS","STATUS_STAGED","STATUS_COMPLETE","STATUS_ERROR","ICON_CHECK_COLOR","ItemAction","error","intl","isFolder","isResumableUploadsEnabled","onClick","onUpgradeCTAClick","status","icon","tooltip","code","remove","resume","retry","uploadsCancelButtonTooltip","uploadsFileSizeLimitExceededUpgradeMessageForUpgradeCta","formatMessage","ItemActionForTesting"],"mappings":"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","sourcesContent":["/**\n * @flow\n * @file Item action component\n */\n\nimport React from 'react';\nimport { FormattedMessage, injectIntl } from 'react-intl';\nimport type { InjectIntlProvidedProps } from 'react-intl';\nimport IconCheck from '../../icons/general/IconCheck';\nimport IconClose from '../../icons/general/IconClose';\nimport IconInProgress from './IconInProgress';\nimport IconRetry from '../../icons/general/IconRetry';\nimport LoadingIndicator from '../../components/loading-indicator';\nimport PlainButton from '../../components/plain-button/PlainButton';\nimport PrimaryButton from '../../components/primary-button/PrimaryButton';\nimport Tooltip from '../../components/tooltip';\nimport messages from '../common/messages';\nimport {\n ERROR_CODE_UPLOAD_FILE_SIZE_LIMIT_EXCEEDED,\n STATUS_PENDING,\n STATUS_IN_PROGRESS,\n STATUS_STAGED,\n STATUS_COMPLETE,\n STATUS_ERROR,\n} from '../../constants';\nimport type { UploadStatus } from '../../common/types/upload';\n\nimport './ItemAction.scss';\n\nconst ICON_CHECK_COLOR = '#26C281';\n\ntype Props = {\n error?: Object,\n isFolder?: boolean,\n isResumableUploadsEnabled: boolean,\n onClick: Function,\n onUpgradeCTAClick?: Function,\n status: UploadStatus,\n} & InjectIntlProvidedProps;\n\nconst ItemAction = ({\n error = {},\n intl,\n isFolder = false,\n isResumableUploadsEnabled,\n onClick,\n onUpgradeCTAClick,\n status,\n}: Props) => {\n let icon = <IconClose />;\n let tooltip;\n const { code } = error;\n\n if (isFolder && status !== STATUS_PENDING) {\n return null;\n }\n\n switch (status) {\n case STATUS_COMPLETE:\n icon = <IconCheck color={ICON_CHECK_COLOR} />;\n if (!isResumableUploadsEnabled) {\n tooltip = messages.remove;\n }\n break;\n case STATUS_ERROR:\n icon = <IconRetry height={24} width={24} />;\n tooltip = isResumableUploadsEnabled ? messages.resume : messages.retry;\n break;\n case STATUS_IN_PROGRESS:\n case STATUS_STAGED:\n if (isResumableUploadsEnabled) {\n icon = <LoadingIndicator />;\n } else {\n icon = <IconInProgress />;\n tooltip = messages.uploadsCancelButtonTooltip;\n }\n break;\n case STATUS_PENDING:\n default:\n if (isResumableUploadsEnabled) {\n icon = <LoadingIndicator />;\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 <PrimaryButton\n onClick={onUpgradeCTAClick}\n data-resin-target=\"large_version_error_inline_upgrade_cta\"\n type=\"button\"\n >\n <FormattedMessage {...messages.uploadsFileSizeLimitExceededUpgradeMessageForUpgradeCta} />\n </PrimaryButton>\n );\n }\n\n return (\n <div className=\"bcu-item-action\">\n {tooltip ? (\n <Tooltip position=\"top-left\" text={intl.formatMessage(tooltip)}>\n <PlainButton onClick={onClick} type=\"button\" isDisabled={status === STATUS_STAGED}>\n {icon}\n </PlainButton>\n </Tooltip>\n ) : (\n icon\n )}\n </div>\n );\n};\n\nexport { ItemAction as ItemActionForTesting };\nexport default injectIntl(ItemAction);\n"],"file":"ItemAction.js"}
@@ -19,13 +19,14 @@ var ItemList = function ItemList(_ref) {
19
19
  items = _ref.items,
20
20
  onClick = _ref.onClick,
21
21
  _ref$onRemoveClick = _ref.onRemoveClick,
22
- onRemoveClick = _ref$onRemoveClick === void 0 ? noop : _ref$onRemoveClick;
22
+ onRemoveClick = _ref$onRemoveClick === void 0 ? noop : _ref$onRemoveClick,
23
+ onUpgradeCTAClick = _ref.onUpgradeCTAClick;
23
24
  return React.createElement(AutoSizer, null, function (_ref2) {
24
25
  var width = _ref2.width,
25
26
  height = _ref2.height;
26
27
  var nameCell = nameCellRenderer(isResumableUploadsEnabled);
27
- var progressCell = progressCellRenderer();
28
- var actionCell = actionCellRenderer(isResumableUploadsEnabled, onClick);
28
+ var progressCell = progressCellRenderer(!!onUpgradeCTAClick);
29
+ var actionCell = actionCellRenderer(isResumableUploadsEnabled, onClick, onUpgradeCTAClick);
29
30
  var removeCell = removeCellRenderer(onRemoveClick);
30
31
  return React.createElement(Table, {
31
32
  className: "bcu-item-list",
@@ -60,7 +61,7 @@ var ItemList = function ItemList(_ref) {
60
61
  cellRenderer: actionCell,
61
62
  dataKey: "status",
62
63
  flexShrink: 0,
63
- width: 25
64
+ width: onUpgradeCTAClick ? 100 : 25
64
65
  }), isResumableUploadsEnabled && React.createElement(Column, {
65
66
  className: "bcu-item-list-action-column",
66
67
  cellRenderer: removeCell,
@@ -20,14 +20,21 @@ type Props = {
20
20
  items: UploadItem[],
21
21
  onClick: Function,
22
22
  onRemoveClick?: (item: UploadItem) => void,
23
+ onUpgradeCTAClick?: Function,
23
24
  };
24
25
 
25
- const ItemList = ({ isResumableUploadsEnabled = false, items, onClick, onRemoveClick = noop }: Props) => (
26
+ const ItemList = ({
27
+ isResumableUploadsEnabled = false,
28
+ items,
29
+ onClick,
30
+ onRemoveClick = noop,
31
+ onUpgradeCTAClick,
32
+ }: Props) => (
26
33
  <AutoSizer>
27
34
  {({ width, height }) => {
28
35
  const nameCell = nameCellRenderer(isResumableUploadsEnabled);
29
- const progressCell = progressCellRenderer();
30
- const actionCell = actionCellRenderer(isResumableUploadsEnabled, onClick);
36
+ const progressCell = progressCellRenderer(!!onUpgradeCTAClick);
37
+ const actionCell = actionCellRenderer(isResumableUploadsEnabled, onClick, onUpgradeCTAClick);
31
38
  const removeCell = removeCellRenderer(onRemoveClick);
32
39
 
33
40
  return (
@@ -56,7 +63,7 @@ const ItemList = ({ isResumableUploadsEnabled = false, items, onClick, onRemoveC
56
63
  cellRenderer={actionCell}
57
64
  dataKey="status"
58
65
  flexShrink={0}
59
- width={25}
66
+ width={onUpgradeCTAClick ? 100 : 25}
60
67
  />
61
68
  {isResumableUploadsEnabled && (
62
69
  <Column