From ed6a693820055cc6c01f72dd49ee974d99c4a475 Mon Sep 17 00:00:00 2001 From: balibabu Date: Thu, 8 Aug 2024 10:50:41 +0800 Subject: [PATCH] feat: Do not display arrow icons on leaf node of folders #1826 (#1862) ### 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 | 6 ++++++ web/src/interfaces/database/file-manager.ts | 1 + .../file-manager/move-file-modal/async-tree-select.tsx | 9 +++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/api/db/services/file_service.py b/api/db/services/file_service.py index fbad870f3..809690820 100644 --- a/api/db/services/file_service.py +++ b/api/db/services/file_service.py @@ -57,6 +57,12 @@ class FileService(CommonService): if file["type"] == FileType.FOLDER.value: file["size"] = cls.get_folder_size(file["id"]) file['kbs_info'] = [] + children = list(cls.model.select().where( + (cls.model.tenant_id == tenant_id), + (cls.model.parent_id == file["id"]), + ~(cls.model.id == file["id"]), + ).dicts()) + file["has_child_folder"] = any(value["type"] == FileType.FOLDER.value for value in children) continue kbs_info = cls.get_kb_id_by_file_id(file['id']) file['kbs_info'] = kbs_info diff --git a/web/src/interfaces/database/file-manager.ts b/web/src/interfaces/database/file-manager.ts index 749d6ff01..bfcafa355 100644 --- a/web/src/interfaces/database/file-manager.ts +++ b/web/src/interfaces/database/file-manager.ts @@ -13,6 +13,7 @@ export interface IFile { update_date: string; update_time: number; source_type: string; + has_child_folder?: boolean; } export interface IFolder { diff --git a/web/src/pages/file-manager/move-file-modal/async-tree-select.tsx b/web/src/pages/file-manager/move-file-modal/async-tree-select.tsx index f88b73489..7643f250b 100644 --- a/web/src/pages/file-manager/move-file-modal/async-tree-select.tsx +++ b/web/src/pages/file-manager/move-file-modal/async-tree-select.tsx @@ -3,6 +3,7 @@ import { IFile } from '@/interfaces/database/file-manager'; import type { GetProp, TreeSelectProps } from 'antd'; import { TreeSelect } from 'antd'; import { useCallback, useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; type DefaultOptionType = GetProp[number]; @@ -12,6 +13,7 @@ interface IProps { } const AsyncTreeSelect = ({ value, onChange }: IProps) => { + const { t } = useTranslation(); const { fetchList } = useFetchPureFileList(); const [treeData, setTreeData] = useState[]>( [], @@ -30,7 +32,10 @@ const AsyncTreeSelect = ({ value, onChange }: IProps) => { pId: x.parent_id, value: x.id, title: x.name, - isLeaf: false, + isLeaf: + typeof x.has_child_folder === 'boolean' + ? !x.has_child_folder + : false, })), ); }); @@ -53,7 +58,7 @@ const AsyncTreeSelect = ({ value, onChange }: IProps) => { style={{ width: '100%' }} value={value} dropdownStyle={{ maxHeight: 400, overflow: 'auto' }} - placeholder="Please select" + placeholder={t('fileManager.pleaseSelect')} onChange={handleChange} loadData={onLoadData} treeData={treeData}