summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-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) => {