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: false,
 
 
 
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="Please select"
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}