diff options
| author | joonhoekim <26rote@gmail.com> | 2025-10-23 19:02:34 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-10-23 19:02:34 +0900 |
| commit | 79c09e53e98237812622653ab2d26c12fcb8fbbd (patch) | |
| tree | c6f54d1fc78dd7d428157d86715ba40ef2519a8c /components/file-manager/FileManager.tsx | |
| parent | 04bd1965c3699a4b29ed9c9627574bfeedd3d6c6 (diff) | |
(김준회) 데이터룸 트리 검색시 재귀적으로 자식들도 검색하도록 로직 변경
Diffstat (limited to 'components/file-manager/FileManager.tsx')
| -rw-r--r-- | components/file-manager/FileManager.tsx | 32 |
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) => { |
