balibabu
commited on
Commit
·
fdeaa03
1
Parent(s):
527e971
feat: Do not display arrow icons on leaf node of folders #1826 (#1862)
Browse files### What problem does this PR solve?
feat: Do not display arrow icons on leaf node of folders #1826
### Type of change
- [x] New Feature (non-breaking change which adds functionality)
api/db/services/file_service.py
CHANGED
@@ -57,6 +57,12 @@ class FileService(CommonService):
|
|
57 |
if file["type"] == FileType.FOLDER.value:
|
58 |
file["size"] = cls.get_folder_size(file["id"])
|
59 |
file['kbs_info'] = []
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
continue
|
61 |
kbs_info = cls.get_kb_id_by_file_id(file['id'])
|
62 |
file['kbs_info'] = kbs_info
|
|
|
57 |
if file["type"] == FileType.FOLDER.value:
|
58 |
file["size"] = cls.get_folder_size(file["id"])
|
59 |
file['kbs_info'] = []
|
60 |
+
children = list(cls.model.select().where(
|
61 |
+
(cls.model.tenant_id == tenant_id),
|
62 |
+
(cls.model.parent_id == file["id"]),
|
63 |
+
~(cls.model.id == file["id"]),
|
64 |
+
).dicts())
|
65 |
+
file["has_child_folder"] = any(value["type"] == FileType.FOLDER.value for value in children)
|
66 |
continue
|
67 |
kbs_info = cls.get_kb_id_by_file_id(file['id'])
|
68 |
file['kbs_info'] = kbs_info
|
web/src/interfaces/database/file-manager.ts
CHANGED
@@ -13,6 +13,7 @@ export interface IFile {
|
|
13 |
update_date: string;
|
14 |
update_time: number;
|
15 |
source_type: string;
|
|
|
16 |
}
|
17 |
|
18 |
export interface IFolder {
|
|
|
13 |
update_date: string;
|
14 |
update_time: number;
|
15 |
source_type: string;
|
16 |
+
has_child_folder?: boolean;
|
17 |
}
|
18 |
|
19 |
export interface IFolder {
|
web/src/pages/file-manager/move-file-modal/async-tree-select.tsx
CHANGED
@@ -3,6 +3,7 @@ import { IFile } from '@/interfaces/database/file-manager';
|
|
3 |
import type { GetProp, TreeSelectProps } from 'antd';
|
4 |
import { TreeSelect } from 'antd';
|
5 |
import { useCallback, useEffect, useState } from 'react';
|
|
|
6 |
|
7 |
type DefaultOptionType = GetProp<TreeSelectProps, 'treeData'>[number];
|
8 |
|
@@ -12,6 +13,7 @@ interface IProps {
|
|
12 |
}
|
13 |
|
14 |
const AsyncTreeSelect = ({ value, onChange }: IProps) => {
|
|
|
15 |
const { fetchList } = useFetchPureFileList();
|
16 |
const [treeData, setTreeData] = useState<Omit<DefaultOptionType, 'label'>[]>(
|
17 |
[],
|
@@ -30,7 +32,10 @@ const AsyncTreeSelect = ({ value, onChange }: IProps) => {
|
|
30 |
pId: x.parent_id,
|
31 |
value: x.id,
|
32 |
title: x.name,
|
33 |
-
isLeaf:
|
|
|
|
|
|
|
34 |
})),
|
35 |
);
|
36 |
});
|
@@ -53,7 +58,7 @@ const AsyncTreeSelect = ({ value, onChange }: IProps) => {
|
|
53 |
style={{ width: '100%' }}
|
54 |
value={value}
|
55 |
dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
|
56 |
-
placeholder=
|
57 |
onChange={handleChange}
|
58 |
loadData={onLoadData}
|
59 |
treeData={treeData}
|
|
|
3 |
import type { GetProp, TreeSelectProps } from 'antd';
|
4 |
import { TreeSelect } from 'antd';
|
5 |
import { useCallback, useEffect, useState } from 'react';
|
6 |
+
import { useTranslation } from 'react-i18next';
|
7 |
|
8 |
type DefaultOptionType = GetProp<TreeSelectProps, 'treeData'>[number];
|
9 |
|
|
|
13 |
}
|
14 |
|
15 |
const AsyncTreeSelect = ({ value, onChange }: IProps) => {
|
16 |
+
const { t } = useTranslation();
|
17 |
const { fetchList } = useFetchPureFileList();
|
18 |
const [treeData, setTreeData] = useState<Omit<DefaultOptionType, 'label'>[]>(
|
19 |
[],
|
|
|
32 |
pId: x.parent_id,
|
33 |
value: x.id,
|
34 |
title: x.name,
|
35 |
+
isLeaf:
|
36 |
+
typeof x.has_child_folder === 'boolean'
|
37 |
+
? !x.has_child_folder
|
38 |
+
: false,
|
39 |
})),
|
40 |
);
|
41 |
});
|
|
|
58 |
style={{ width: '100%' }}
|
59 |
value={value}
|
60 |
dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
|
61 |
+
placeholder={t('fileManager.pleaseSelect')}
|
62 |
onChange={handleChange}
|
63 |
loadData={onLoadData}
|
64 |
treeData={treeData}
|