feat(M02): 좌측 같은 이름 단추 · 나무 뿌리 줄 없앰 · 「+」 더하기 · 찾기 하나(AND) (PLAN 29-6)
- 「일위대가 조합」 · 「구조물 조합」 컨테이너 안 같은 이름 줄 단추 없앰 — 제목을 펼치면 그 화면을 엶 - 나무 맨 위 뿌리 줄 없앰 — 폴더 · 항목부터 · 맨 위 더하기는 빈 자리 오른쪽 클릭 · 층 단추 옆 「+」(읽기만 층 = 숨김) · 빈 나무 안내글 맞춤 - 찾기 칸 하나 — 띄어쓰기 낱말 모두(AND · 대소문자 무시) · 이름 · 키 · 경로(구분 · 상세구분) · 단위 · 공용 matchText 를 나무 · 일위대가 조합 목록이 함께 씀(목록의 따로 찾기 칸 없앰) - 시험 — 찾기 AND · 새 배치 맞춤 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,13 +25,18 @@ export const itemIdOf = (item: TreeItem): string => `i|${item.열}`;
|
||||
export const leafName = (item: TreeItem): string => item.경로[item.경로.length - 1] ?? item.이름;
|
||||
export const folderOf = (item: TreeItem): string[] => item.경로.slice(0, -1);
|
||||
|
||||
/** 찾기 — 경로 · 키 · 일위대가 키에 모든 낱말이 들어 있는 항목(빈 글이면 전부) */
|
||||
export function matches(item: TreeItem, text: string): boolean {
|
||||
/** 찾기 규칙 하나(PLAN 29-6) — 띄어쓰기로 나눈 낱말이 모두 들어 있으면 참(AND · 대소문자 무시 · 빈 글 = 참) ·
|
||||
* 구조물 조합 · 일위대가 라이브러리(나무 · 조합 목록)가 함께 씀 */
|
||||
export function matchText(parts: (string | null | undefined)[], text: string): boolean {
|
||||
const words = text.trim().toLowerCase().split(/\s+/).filter(Boolean);
|
||||
const hay = [...item.경로, item.key, item.일위대가 ?? ""].join(" ").toLowerCase();
|
||||
const hay = parts.filter(Boolean).join(" ").toLowerCase();
|
||||
return words.every((word) => hay.includes(word));
|
||||
}
|
||||
|
||||
/** 나무 항목 찾기 — 이름 · 키 · 경로(폴더 · 구분 · 상세구분) · 단위 · 일위대가 키 */
|
||||
export const matches = (item: TreeItem, text: string): boolean =>
|
||||
matchText([...item.경로, item.이름, item.key, item.단위, item.일위대가], text);
|
||||
|
||||
/** 폴더 나무 — 찾는 글이 있으면 맞는 항목과 그 위 폴더만 · 없으면 빈 폴더까지 전부 */
|
||||
export function buildFolders(view: TreeView, text = ""): FolderNode {
|
||||
const searching = text.trim() !== "";
|
||||
|
||||
Reference in New Issue
Block a user