Skip to content

Commit ad00b2e

Browse files
[ui-storagebrowser] integrates file upload components to storage browser (#3916)
* [ui-storagebrowser] integrates file upload components to storage browser * revert extra changes
1 parent 5dc39b7 commit ad00b2e

File tree

2 files changed

+66
-32
lines changed

2 files changed

+66
-32
lines changed

desktop/core/src/desktop/js/apps/storageBrowser/StorageDirectoryPage/CreateAndUploadAction/CreateAndUploadAction.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ interface CreateAndUploadActionProps {
4040
currentPath: FileStats['path'];
4141
onSuccessfulAction: () => void;
4242
setLoadingFiles: (value: boolean) => void;
43+
onFilesUpload: (files: File[]) => void;
4344
}
4445

4546
enum ActionType {
@@ -51,7 +52,8 @@ enum ActionType {
5152
const CreateAndUploadAction = ({
5253
currentPath,
5354
onSuccessfulAction,
54-
setLoadingFiles
55+
setLoadingFiles,
56+
onFilesUpload
5557
}: CreateAndUploadActionProps): JSX.Element => {
5658
const { t } = i18nReact.useTranslation();
5759

@@ -80,6 +82,11 @@ const CreateAndUploadAction = ({
8082
setSelectedAction(undefined);
8183
};
8284

85+
const onUpload = (files: File[]) => {
86+
onModalClose();
87+
onFilesUpload(files);
88+
};
89+
8390
const newActionsMenuItems: MenuItemGroupType[] = [
8491
{
8592
key: 'create',
@@ -166,7 +173,7 @@ const CreateAndUploadAction = ({
166173
title={t('Upload A File')}
167174
>
168175
<div className="hue-file-upload-modal">
169-
<DragAndDrop onDrop={() => {}} />
176+
<DragAndDrop onDrop={onUpload} />
170177
</div>
171178
</Modal>
172179
</>

desktop/core/src/desktop/js/apps/storageBrowser/StorageDirectoryPage/StorageDirectoryPage.tsx

Lines changed: 57 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,12 @@ import formatBytes from '../../../utils/formatBytes';
4343
import './StorageDirectoryPage.scss';
4444
import { formatTimestamp } from '../../../utils/dateTimeUtils';
4545
import useLoadData from '../../../utils/hooks/useLoadData';
46-
import { DEFAULT_PAGE_SIZE } from '../../../utils/constants/storageBrowser';
46+
import { DEFAULT_PAGE_SIZE, FileUploadStatus } from '../../../utils/constants/storageBrowser';
4747
import CreateAndUploadAction from './CreateAndUploadAction/CreateAndUploadAction';
48+
import DragAndDrop from '../../../reactComponents/DragAndDrop/DragAndDrop';
49+
import UUID from '../../../utils/string/UUID';
50+
import { UploadItem } from '../../../utils/hooks/useFileUpload/util';
51+
import FileUploadQueue from '../../../reactComponents/FileUploadQueue/FileUploadQueue';
4852

4953
interface StorageDirectoryPageProps {
5054
fileStats: FileStats;
@@ -71,6 +75,7 @@ const StorageDirectoryPage = ({
7175
const [loadingFiles, setLoadingFiles] = useState<boolean>(false);
7276
const [tableHeight, setTableHeight] = useState<number>(100);
7377
const [selectedFiles, setSelectedFiles] = useState<StorageDirectoryTableData[]>([]);
78+
const [filesToUpload, setFilesToUpload] = useState<UploadItem[]>([]);
7479

7580
const [pageSize, setPageSize] = useState<number>(DEFAULT_PAGE_SIZE);
7681
const [pageNumber, setPageNumber] = useState<number>(1);
@@ -213,6 +218,18 @@ const StorageDirectoryPage = ({
213218
[setSearchTerm]
214219
);
215220

221+
const onFilesDrop = (newFiles: File[]) => {
222+
const newUploadItems = newFiles.map(file => {
223+
return {
224+
file,
225+
filePath: fileStats.path,
226+
uuid: UUID(),
227+
status: FileUploadStatus.Pending
228+
};
229+
});
230+
setFilesToUpload(prevFiles => [...prevFiles, ...newUploadItems]);
231+
};
232+
216233
useEffect(() => {
217234
//TODO: handle table resize
218235
const calculateTableHeight = () => {
@@ -262,40 +279,50 @@ const StorageDirectoryPage = ({
262279
currentPath={fileStats.path}
263280
setLoadingFiles={setLoadingFiles}
264281
onSuccessfulAction={reloadData}
282+
onFilesUpload={onFilesDrop}
265283
/>
266284
</div>
267285
</div>
268286

269-
<Spin spinning={loadingFiles || listDirectoryLoading}>
270-
<Table
271-
className={className}
272-
columns={getColumns(tableData[0] ?? {})}
273-
dataSource={tableData}
274-
onRow={onRowClicked}
275-
pagination={false}
276-
rowClassName={rowClassName}
277-
rowKey={r => `${r.path}_${r.type}_${r.mtime}`}
278-
rowSelection={{
279-
type: 'checkbox',
280-
...rowSelection
281-
}}
282-
scroll={{ y: tableHeight }}
283-
data-testid={`${testId}`}
284-
locale={locale}
285-
{...restProps}
286-
/>
287-
288-
{filesData?.page && filesData?.page?.total_count > 0 && (
289-
<Pagination
290-
onNextPageButtonClicked={onNextPageButtonClicked}
291-
onPageNumberChange={setPageNumber}
292-
onPageSizeChange={setPageSize}
293-
onPreviousPageButtonClicked={onPreviousPageButtonClicked}
294-
pageSize={pageSize}
295-
pageStats={filesData?.page}
287+
<DragAndDrop onDrop={onFilesDrop}>
288+
<Spin spinning={loadingFiles || listDirectoryLoading}>
289+
<Table
290+
className={className}
291+
columns={getColumns(tableData[0] ?? {})}
292+
dataSource={tableData}
293+
onRow={onRowClicked}
294+
pagination={false}
295+
rowClassName={rowClassName}
296+
rowKey={r => `${r.path}_${r.type}_${r.mtime}`}
297+
rowSelection={{
298+
type: 'checkbox',
299+
...rowSelection
300+
}}
301+
scroll={{ y: tableHeight }}
302+
data-testid={`${testId}`}
303+
locale={locale}
304+
{...restProps}
296305
/>
297-
)}
298-
</Spin>
306+
307+
{filesData?.page && filesData?.page?.total_count > 0 && (
308+
<Pagination
309+
onNextPageButtonClicked={onNextPageButtonClicked}
310+
onPageNumberChange={setPageNumber}
311+
onPageSizeChange={setPageSize}
312+
onPreviousPageButtonClicked={onPreviousPageButtonClicked}
313+
pageSize={pageSize}
314+
pageStats={filesData?.page}
315+
/>
316+
)}
317+
</Spin>
318+
</DragAndDrop>
319+
{filesToUpload.length > 0 && (
320+
<FileUploadQueue
321+
filesQueue={filesToUpload}
322+
onClose={() => setFilesToUpload([])}
323+
onComplete={reloadData}
324+
/>
325+
)}
299326
</>
300327
);
301328
};

0 commit comments

Comments
 (0)