summaryrefslogtreecommitdiff
path: root/components/file-manager/FileManager.tsx
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-10-23 19:02:34 +0900
committerjoonhoekim <26rote@gmail.com>2025-10-23 19:02:34 +0900
commit79c09e53e98237812622653ab2d26c12fcb8fbbd (patch)
treec6f54d1fc78dd7d428157d86715ba40ef2519a8c /components/file-manager/FileManager.tsx
parent04bd1965c3699a4b29ed9c9627574bfeedd3d6c6 (diff)
(김준회) 데이터룸 트리 검색시 재귀적으로 자식들도 검색하도록 로직 변경
Diffstat (limited to 'components/file-manager/FileManager.tsx')
-rw-r--r--components/file-manager/FileManager.tsx32
1 files changed, 29 insertions, 3 deletions
diff --git a/components/file-manager/FileManager.tsx b/components/file-manager/FileManager.tsx
index b0626eaf..7c5a3771 100644
--- a/components/file-manager/FileManager.tsx
+++ b/components/file-manager/FileManager.tsx
@@ -1048,9 +1048,35 @@ export function FileManager({ projectId }: FileManagerProps) {
item.name.toLowerCase().includes(searchQuery.toLowerCase())
);
- const filteredTreeItems = treeItems.filter(item =>
- item.name.toLowerCase().includes(searchQuery.toLowerCase())
- );
+ // 재귀적으로 트리 항목 검색
+ const searchTreeItems = (items: FileItem[], query: string): FileItem[] => {
+ const result: FileItem[] = [];
+
+ for (const item of items) {
+ // 현재 항목이 검색어와 일치하는지 확인
+ const matches = item.name.toLowerCase().includes(query.toLowerCase());
+
+ // 하위 항목 재귀적으로 검색
+ let childrenMatches: FileItem[] = [];
+ if (item.children && item.children.length > 0) {
+ childrenMatches = searchTreeItems(item.children, query);
+ }
+
+ // 현재 항목이나 하위 항목 중 하나라도 일치하면 결과에 추가
+ if (matches || childrenMatches.length > 0) {
+ // 하위 항목이 일치하는 경우 현재 항목도 표시하기 위해 확장된 상태로 복제
+ const clonedItem = { ...item };
+ if (childrenMatches.length > 0) {
+ clonedItem.children = childrenMatches;
+ }
+ result.push(clonedItem);
+ }
+ }
+
+ return result;
+ };
+
+ const filteredTreeItems = searchTreeItems(treeItems, searchQuery);
// Format file size
const formatFileSize = (bytes?: number) => {