Skip to content

Commit a2ddc9b

Browse files
[ui-storagebrowser] ports APIs to public and refactors code (#3906)
[ui-storagebrowser] ports APIs to public
1 parent 04fe0f9 commit a2ddc9b

File tree

11 files changed

+270
-273
lines changed

11 files changed

+270
-273
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1414
// See the License for the specific language governing permissions and
1515
// limitations under the License.
16+
1617
import React, { useCallback, useEffect, useMemo, useState } from 'react';
1718
import Modal from 'cuix/dist/components/Modal';
1819
import { Input, Spin, Tooltip } from 'antd';
@@ -26,7 +27,7 @@ import { i18nReact } from '../../../utils/i18nReact';
2627
import useDebounce from '../../../utils/useDebounce';
2728
import useLoadData from '../../../utils/hooks/useLoadData';
2829

29-
import { PathAndFileData } from '../../../reactComponents/FileChooser/types';
30+
import { ListDirectory } from '../../../reactComponents/FileChooser/types';
3031
import { VIEWFILES_API_URl } from '../../../reactComponents/FileChooser/api';
3132
import PathBrowser from '../../../reactComponents/FileChooser/PathBrowser/PathBrowser';
3233

@@ -65,7 +66,7 @@ const FileChooserModal = ({
6566
setDestPath(sourcePath);
6667
}, [sourcePath]);
6768

68-
const { data: filesData, loading } = useLoadData<PathAndFileData>(
69+
const { data: filesData, loading } = useLoadData<ListDirectory>(
6970
`${VIEWFILES_API_URl}${destPath}`,
7071
{
7172
params: {
@@ -82,7 +83,7 @@ const FileChooserModal = ({
8283
}
8384

8485
return filesData?.files?.map(file => ({
85-
name: file.name,
86+
name: file.path.split('/').pop() ?? '',
8687
path: file.path,
8788
type: file.type
8889
}));

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,7 @@ const InputModal = ({
5656
cancelText={cancelText}
5757
className="hue-input-modal cuix antd"
5858
okText={submitText}
59-
onCancel={() => {
60-
onClose();
61-
}}
59+
onCancel={onClose}
6260
onOk={() => {
6361
onSubmit(value);
6462
onClose();

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

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@
1414
// See the License for the specific language governing permissions and
1515
// limitations under the License.
1616

17-
import React, { useMemo } from 'react';
17+
import React from 'react';
1818
import { Tabs, Spin } from 'antd';
19-
import type { TabsProps } from 'antd';
2019

2120
import DataBrowserIcon from '@cloudera/cuix-core/icons/react/DataBrowserIcon';
2221

@@ -33,23 +32,19 @@ const StorageBrowserPage = (): JSX.Element => {
3332

3433
const { data: fileSystems, loading } = useLoadData<ApiFileSystem[]>(FILESYSTEMS_API_URL);
3534

36-
const fileSystemTabs: TabsProps['items'] | undefined = useMemo(
37-
() =>
38-
fileSystems?.map(system => {
39-
return {
40-
label: system.file_system.toUpperCase(),
41-
key: system.file_system + '_tab',
42-
children: <StorageBrowserTabContent user_home_dir={system.user_home_directory} />
43-
};
44-
}),
45-
[fileSystems]
46-
);
47-
4835
return (
4936
<div className="hue-storage-browser cuix antd">
5037
<CommonHeader title={t('Storage Browser')} icon={<DataBrowserIcon />} />
5138
<Spin spinning={loading}>
52-
<Tabs className="hue-storage-browser__tab" defaultActiveKey="0" items={fileSystemTabs} />
39+
<Tabs
40+
className="hue-storage-browser__tab"
41+
defaultActiveKey="0"
42+
items={fileSystems?.map(system => ({
43+
label: system.file_system.toUpperCase(),
44+
key: system.file_system + '_tab',
45+
children: <StorageBrowserTabContent homeDir={system.user_home_directory} />
46+
}))}
47+
/>
5348
</Spin>
5449
</div>
5550
);

desktop/core/src/desktop/js/apps/storageBrowser/StorageBrowserPage/StorageBrowserTabContents/StorageBrowserTabContent.tsx

Lines changed: 15 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,15 @@ import BucketIcon from '@cloudera/cuix-core/icons/react/BucketIcon';
2222

2323
import PathBrowser from '../../../../reactComponents/FileChooser/PathBrowser/PathBrowser';
2424
import StorageBrowserTable from '../StorageBrowserTable/StorageBrowserTable';
25-
import { VIEWFILES_API_URl } from '../../../../reactComponents/FileChooser/api';
26-
import {
27-
BrowserViewType,
28-
PathAndFileData,
29-
SortOrder
30-
} from '../../../../reactComponents/FileChooser/types';
31-
import { DEFAULT_PAGE_SIZE } from '../../../../utils/constants/storageBrowser';
25+
import { FILE_STATS_API_URL } from '../../../../reactComponents/FileChooser/api';
26+
import { BrowserViewType, FileStats } from '../../../../reactComponents/FileChooser/types';
3227
import useLoadData from '../../../../utils/hooks/useLoadData';
3328

3429
import './StorageBrowserTabContent.scss';
3530
import StorageFilePage from '../../StorageFilePage/StorageFilePage';
3631

3732
interface StorageBrowserTabContentProps {
38-
user_home_dir: string;
33+
homeDir: string;
3934
testId?: string;
4035
}
4136

@@ -44,31 +39,19 @@ const defaultProps = {
4439
};
4540

4641
const StorageBrowserTabContent = ({
47-
user_home_dir,
42+
homeDir,
4843
testId
4944
}: StorageBrowserTabContentProps): JSX.Element => {
50-
const [filePath, setFilePath] = useState<string>(user_home_dir);
51-
const [pageSize, setPageSize] = useState<number>(DEFAULT_PAGE_SIZE);
52-
const [pageNumber, setPageNumber] = useState<number>(1);
53-
const [sortByColumn, setSortByColumn] = useState<string>('');
54-
const [sortOrder, setSortOrder] = useState<SortOrder>(SortOrder.NONE);
55-
const [searchTerm, setSearchTerm] = useState<string>('');
45+
const [filePath, setFilePath] = useState<string>(homeDir);
46+
const fileName = filePath?.split('/')?.pop() ?? '';
5647

5748
const { t } = i18nReact.useTranslation();
5849

59-
const {
60-
data: filesData,
61-
loading,
62-
reloadData
63-
} = useLoadData<PathAndFileData>(`${VIEWFILES_API_URl}${filePath}`, {
50+
const { data: fileStats, loading } = useLoadData<FileStats>(FILE_STATS_API_URL, {
6451
params: {
65-
pagesize: pageSize.toString(),
66-
pagenum: pageNumber.toString(),
67-
filter: searchTerm,
68-
sortby: sortByColumn,
69-
descending: sortOrder === SortOrder.DSC ? 'true' : 'false'
52+
path: filePath
7053
},
71-
skip: filePath === '' || filePath === undefined
54+
skip: !filePath
7255
});
7356

7457
return (
@@ -77,7 +60,7 @@ const StorageBrowserTabContent = ({
7760
<div className="hue-storage-browser__title-bar" data-testid={`${testId}-title-bar`}>
7861
<BucketIcon className="hue-storage-browser__icon" data-testid={`${testId}-icon`} />
7962
<h3 className="hue-storage-browser__folder-name" data-testid={`${testId}-folder-namer`}>
80-
{filesData?.path?.split('/').pop()}
63+
{fileName}
8164
</h3>
8265
</div>
8366
<div
@@ -92,23 +75,11 @@ const StorageBrowserTabContent = ({
9275
showIcon={false}
9376
/>
9477
</div>
95-
{filesData?.type === BrowserViewType.file ? (
96-
<StorageFilePage fileData={filesData} />
97-
) : (
98-
<StorageBrowserTable
99-
filesData={filesData}
100-
pageSize={pageSize}
101-
onFilepathChange={setFilePath}
102-
onPageSizeChange={setPageSize}
103-
onPageNumberChange={setPageNumber}
104-
onSortByColumnChange={setSortByColumn}
105-
onSortOrderChange={setSortOrder}
106-
onSearch={setSearchTerm}
107-
sortByColumn={sortByColumn}
108-
sortOrder={sortOrder}
109-
refetchData={reloadData}
110-
filePath={filePath}
111-
/>
78+
{fileStats?.type === BrowserViewType.dir && (
79+
<StorageBrowserTable fileStats={fileStats} onFilePathChange={setFilePath} />
80+
)}
81+
{fileStats?.type === BrowserViewType.file && (
82+
<StorageFilePage fileName={fileName} fileStats={fileStats} />
11283
)}
11384
</div>
11485
</Spin>

0 commit comments

Comments
 (0)