From 9b81112db03ca32925a1eb5ef5c9c040286e0ff1 Mon Sep 17 00:00:00 2001 From: chanx <1243304602@qq.com> Date: Wed, 5 Aug 2026 10:56:52 +0800 Subject: [PATCH] fix(list-filter-bar): correct nested filter to prune non-matching children (#17814) --- .../list-filter-bar/filter-popover.tsx | 38 ++++++++----------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/web/src/components/list-filter-bar/filter-popover.tsx b/web/src/components/list-filter-bar/filter-popover.tsx index 87d240a51b..026437a428 100644 --- a/web/src/components/list-filter-bar/filter-popover.tsx +++ b/web/src/components/list-filter-bar/filter-popover.tsx @@ -44,31 +44,23 @@ const filterNestedList = ( const term = searchTerm.toLowerCase(); - return list - .filter((item) => { - if ( - item.label.toString().toLowerCase().includes(term) || - item.id.toLowerCase().includes(term) - ) { - return true; - } + return list.reduce((acc, item) => { + const selfMatch = + item.label.toString().toLowerCase().includes(term) || + item.id.toLowerCase().includes(term); - if (item.list && item.list.length > 0) { - const filteredSubList = filterNestedList(item.list, searchTerm); - return filteredSubList.length > 0; + if (selfMatch) { + // Parent matches itself - keep all original children + acc.push(item); + } else if (item.list && item.list.length > 0) { + // Parent doesn't match - keep only matching children + const filteredSubList = filterNestedList(item.list, searchTerm); + if (filteredSubList.length > 0) { + acc.push({ ...item, list: filteredSubList }); } - - return false; - }) - .map((item) => { - // if (item.list && item.list.length > 0) { - // return { - // ...item, - // list: filterNestedList(item.list, searchTerm), - // }; - // } - return item; - }); + } + return acc; + }, []); }; function CheckboxFormMultiple({