Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DEVELOPING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Our development setup assumes a LINUX/BSD environment.

## Project Setup

1. Install Node v22 `nvm install lts/jod && nvm use lts/jod`.
1. Install Node v22 `nvm install && nvm use`.
2. Install Yarn package manager `https://yarnpkg.com/en/docs/install` v1.10 or higher.
3. Fork the upstream repo `https://github.com/box/box-ui-elements` via github.
4. Clone your fork locally `git clone git@github.com:[YOUR GITHUB USERNAME]/box-ui-elements.git`.
Expand Down
2 changes: 2 additions & 0 deletions src/api/uploads/BaseUpload.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ class BaseUpload extends Base {

folderId: string;

fields: ?Array<string>;

overwrite: boolean | 'error';

conflictCallback: ?(fileName: string) => string;
Expand Down
22 changes: 21 additions & 1 deletion src/api/uploads/MultiputUpload.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { digest } from '../../utils/webcrypto';
import hexToBase64 from '../../utils/base64';
import createWorker from '../../utils/uploadsSHA1Worker';
import Browser from '../../utils/Browser';
import { updateQueryParameters } from '../../utils/url';
import {
DEFAULT_RETRY_DELAY_MS,
ERROR_CODE_UPLOAD_STORAGE_LIMIT_EXCEEDED,
Expand Down Expand Up @@ -161,6 +162,7 @@ class MultiputUpload extends BaseMultiput {
* @param {File} options.file
* @param {string} options.folderId - Untyped folder id (e.g. no "folder_" prefix)
* @param {string} [options.fileId] - Untyped file id (e.g. no "file_" prefix)
* @param {Array<string>} options.fields
* @param {string} options.sessionId
* @param {Function} [options.errorCallback]
* @param {Function} [options.progressCallback]
Expand All @@ -177,6 +179,7 @@ class MultiputUpload extends BaseMultiput {
overwrite = true,
conflictCallback,
fileId,
fields,
}: {
conflictCallback?: Function,
errorCallback?: Function,
Expand All @@ -186,6 +189,7 @@ class MultiputUpload extends BaseMultiput {
overwrite?: boolean | 'error',
progressCallback?: Function,
successCallback?: Function,
fields: ?Array<string>,
}): void {
this.file = file;
this.fileName = this.file.name;
Expand All @@ -196,6 +200,7 @@ class MultiputUpload extends BaseMultiput {
this.overwrite = overwrite;
this.conflictCallback = conflictCallback;
this.fileId = fileId;
this.fields = fields;
}

/**
Expand All @@ -206,6 +211,7 @@ class MultiputUpload extends BaseMultiput {
* @param {File} options.file
* @param {string} options.folderId - Untyped folder id (e.g. no "folder_" prefix)
* @param {string} [options.fileId] - Untyped file id (e.g. no "file_" prefix)
* @param {Array<string>} options.fields
* @param {Function} [options.errorCallback]
* @param {Function} [options.progressCallback]
* @param {Function} [options.successCallback]
Expand All @@ -222,6 +228,7 @@ class MultiputUpload extends BaseMultiput {
overwrite = true,
conflictCallback,
fileId,
fields,
}: {
conflictCallback?: Function,
errorCallback?: Function,
Expand All @@ -232,6 +239,7 @@ class MultiputUpload extends BaseMultiput {
overwrite?: boolean | 'error',
progressCallback?: Function,
successCallback?: Function,
fields: ?Array<string>,
}): void {
this.file = file;
this.fileName = this.file.name;
Expand All @@ -251,6 +259,7 @@ class MultiputUpload extends BaseMultiput {
this.overwrite = overwrite;
this.fileId = fileId;
this.fileDescription = fileDescription;
this.fields = fields;

this.makePreflightRequest();
}
Expand Down Expand Up @@ -429,6 +438,7 @@ class MultiputUpload extends BaseMultiput {
* @param {File} options.file
* @param {string} options.folderId - Untyped folder id (e.g. no "folder_" prefix)
* @param {string} [options.fileId] - Untyped file id (e.g. no "file_" prefix)
* @param {Array<string>} options.fields
* @param {string} options.sessionId
* @param {Function} [options.errorCallback]
* @param {Function} [options.progressCallback]
Expand All @@ -447,6 +457,7 @@ class MultiputUpload extends BaseMultiput {
overwrite = true,
conflictCallback,
fileId,
fields,
}: {
conflictCallback?: Function,
errorCallback?: Function,
Expand All @@ -457,6 +468,7 @@ class MultiputUpload extends BaseMultiput {
progressCallback?: Function,
sessionId: string,
successCallback?: Function,
fields: ?Array<string>,
}): void {
this.setFileInfo({
file,
Expand All @@ -467,6 +479,7 @@ class MultiputUpload extends BaseMultiput {
conflictCallback,
overwrite,
fileId,
fields,
});
this.sessionId = sessionId;

Expand Down Expand Up @@ -571,6 +584,7 @@ class MultiputUpload extends BaseMultiput {
successCallback: this.successCallback,
overwrite: this.overwrite,
fileId: this.fileId,
fields: this.fields,
};
this.upload(uploadOptions);
} else {
Expand Down Expand Up @@ -925,6 +939,12 @@ class MultiputUpload extends BaseMultiput {
return;
}

let url = this.sessionEndpoints.commit;

if (this.fields) {
url = updateQueryParameters(url, { fields: this.fields.toString() });
}

const stats = {
totalPartReadTime: 0,
totalPartDigestTime: 0,
Expand Down Expand Up @@ -968,7 +988,7 @@ class MultiputUpload extends BaseMultiput {
};

this.xhr
.post({ url: this.sessionEndpoints.commit, data, headers })
.post({ url, data, headers })
.then(this.commitSessionSuccessHandler)
.catch(this.commitSessionErrorHandler);
};
Expand Down
9 changes: 9 additions & 0 deletions src/api/uploads/PlainUpload.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import noop from 'lodash/noop';
import { digest } from '../../utils/webcrypto';
import { getFileLastModifiedAsISONoMSIfPossible } from '../../utils/uploads';
import { updateQueryParameters } from '../../utils/url';
import BaseUpload from './BaseUpload';
import type { BoxItem } from '../../common/types/core';

Expand Down Expand Up @@ -72,6 +73,10 @@ class PlainUpload extends BaseUpload {
if (this.fileId) {
uploadUrl = uploadUrl.replace('content', `${this.fileId}/content`);
}

if (this.fields) {
uploadUrl = updateQueryParameters(uploadUrl, { fields: this.fields.toString() });
}
Comment thread
tjuanitas marked this conversation as resolved.
}

const attributes = JSON.stringify({
Expand Down Expand Up @@ -112,6 +117,7 @@ class PlainUpload extends BaseUpload {
* @param {string} options.folderId - untyped folder id
* @param {string} [options.fileId] - Untyped file id (e.g. no "file_" prefix)
* @param {File} options.file - File blob object
* @param {Array<string>} options.fields
* @param {Function} [options.successCallback] - Function to call with response
* @param {Function} [options.errorCallback] - Function to call with errors
* @param {Function} [options.progressCallback] - Function to call with progress
Expand All @@ -130,6 +136,7 @@ class PlainUpload extends BaseUpload {
conflictCallback,
// $FlowFixMe
overwrite = true,
fields,
}: {
conflictCallback?: Function,
errorCallback: Function,
Expand All @@ -140,6 +147,7 @@ class PlainUpload extends BaseUpload {
overwrite: boolean | 'error',
progressCallback: Function,
successCallback: Function,
fields: ?Array<string>,
}): void {
if (this.isDestroyed()) {
return;
Expand All @@ -156,6 +164,7 @@ class PlainUpload extends BaseUpload {
this.progressCallback = progressCallback;
this.overwrite = overwrite;
this.conflictCallback = conflictCallback;
this.fields = fields;

this.makePreflightRequest();
}
Expand Down
2 changes: 2 additions & 0 deletions src/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ export const FIELD_SIZE: 'size' = 'size';
export const FIELD_PARENT = 'parent';
export const FIELD_EXTENSION = 'extension';
export const FIELD_ITEM_EXPIRATION = 'expires_at';
export const FIELD_ITEM_STATUS = 'item_status';
export const FIELD_PERMISSIONS = 'permissions';
export const FIELD_PERMISSIONS_CAN_SHARE = `${FIELD_PERMISSIONS}.can_share`;
export const FIELD_PERMISSIONS_CAN_UPLOAD = `${FIELD_PERMISSIONS}.can_upload`;
Expand Down Expand Up @@ -137,6 +138,7 @@ export const FIELD_MODIFIED_BY = 'modified_by';
export const FIELD_OWNED_BY = 'owned_by';
export const FIELD_PROMOTED_BY = 'promoted_by';
export const FIELD_RESTORED_BY = 'restored_by';
export const FIELD_PURGED_AT = 'purged_at';
export const FIELD_TRASHED_BY = 'trashed_by';
export const FIELD_DESCRIPTION = 'description';
export const FIELD_REPRESENTATIONS = 'representations';
Expand Down
19 changes: 10 additions & 9 deletions src/elements/content-uploader/ContentUploader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { withBlueprintModernization } from '../common/withBlueprintModernization
import ThemingStyles, { Theme } from '../common/theming';
import FolderUpload from '../../api/uploads/FolderUpload';
import { getTypedFileId, getTypedFolderId } from '../../utils/file';
import { UPLOADER_FIELDS_TO_FETCH } from '../../utils/fields';
import {
getDataTransferItemId,
getFile,
Expand Down Expand Up @@ -815,7 +816,7 @@ class ContentUploader extends Component<ContentUploaderProps, State> {
* @return {void}
*/
uploadFile(item: UploadItem) {
const { overwrite, rootFolderId } = this.props;
const { enableModernizedUploads, overwrite, rootFolderId } = this.props;
const { api, file, options } = item;

const numItemsUploading = this.itemsRef.current.filter(item_t => item_t.status === STATUS_IN_PROGRESS).length;
Expand All @@ -832,6 +833,7 @@ class ContentUploader extends Component<ContentUploaderProps, State> {
successCallback: entries => this.handleUploadSuccess(item, entries),
overwrite,
fileId: options && options.fileId ? options.fileId : null,
fields: enableModernizedUploads ? UPLOADER_FIELDS_TO_FETCH : null,
};

item.status = STATUS_IN_PROGRESS;
Expand All @@ -850,7 +852,7 @@ class ContentUploader extends Component<ContentUploaderProps, State> {
* @return {void}
*/
resumeFile(item: UploadItem) {
const { onResume, overwrite, rootFolderId } = this.props;
const { enableModernizedUploads, onResume, overwrite, rootFolderId } = this.props;
const { api, file, options } = item;

const numItemsUploading = this.itemsRef.current.filter(item_t => item_t.status === STATUS_IN_PROGRESS).length;
Expand All @@ -868,6 +870,7 @@ class ContentUploader extends Component<ContentUploaderProps, State> {
overwrite,
sessionId: api && api.sessionId ? api.sessionId : null,
fileId: options && options.fileId ? options.fileId : null,
fields: enableModernizedUploads ? UPLOADER_FIELDS_TO_FETCH : null,
};

item.status = STATUS_IN_PROGRESS;
Expand Down Expand Up @@ -1326,9 +1329,9 @@ class ContentUploader extends Component<ContentUploaderProps, State> {
view={view}
/>
</div>
)
);
}

return (
<div ref={measureRef} className={styleClassName} id={this.id}>
<ThemingStyles selector={`#${this.id}`} theme={theme} />
Expand All @@ -1353,14 +1356,12 @@ class ContentUploader extends Component<ContentUploaderProps, State> {
isDone={isDone}
/>
</div>
)
}
);
};

return (
<Internationalize language={language} messages={messages}>
<TooltipProvider>
{renderUploader()}
</TooltipProvider>
<TooltipProvider>{renderUploader()}</TooltipProvider>
</Internationalize>
);
}
Expand Down
23 changes: 23 additions & 0 deletions src/utils/fields.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
FIELD_PERMISSIONS,
FIELD_ITEM_COLLECTION,
FIELD_ITEM_EXPIRATION,
FIELD_ITEM_STATUS,
FIELD_PATH_COLLECTION,
FIELD_CONTENT_CREATED_AT,
FIELD_CONTENT_MODIFIED_AT,
Expand All @@ -30,6 +31,7 @@ import {
FIELD_OWNED_BY,
FIELD_PROMOTED_BY,
FIELD_RESTORED_BY,
FIELD_PURGED_AT,
FIELD_TRASHED_BY,
FIELD_DESCRIPTION,
FIELD_REPRESENTATIONS,
Expand Down Expand Up @@ -222,6 +224,26 @@ const APP_ACTIVITY_FIELDS_TO_FETCH = [
FIELD_RENDERED_TEXT,
];

// Fields needed for uploader
const UPLOADER_FIELDS_TO_FETCH = [
FIELD_CONTENT_CREATED_AT,
FIELD_CONTENT_MODIFIED_AT,
FIELD_CREATED_AT,
FIELD_CREATED_BY,
FIELD_DESCRIPTION,
FIELD_ITEM_STATUS,
FIELD_MODIFIED_AT,
FIELD_MODIFIED_BY,
FIELD_OWNED_BY,
FIELD_PARENT,
FIELD_PATH_COLLECTION,
FIELD_PURGED_AT,
FIELD_SHARED_LINK,
FIELD_SIZE,
FIELD_TRASHED_AT,
FIELD_VERSION_NUMBER,
];

/**
* Finds properties missing in an object
*
Expand Down Expand Up @@ -297,4 +319,5 @@ export {
TASK_ASSIGNMENTS_FIELDS_TO_FETCH,
TASKS_FIELDS_TO_FETCH,
USER_FIELDS,
UPLOADER_FIELDS_TO_FETCH,
};
Loading