mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-16 10:50:38 +09:00
fix: count all descendants in collapsed badge and prune stale localStorage IDs
Address two Greptile review comments: 1. Collapsed parent badge now shows total descendant count at all depths rather than direct-child count only. Add `countDescendants` utility to issue-tree.ts (recursive, uses existing childMap) and replace `children.length` with it in the titleSuffix badge. 2. Add a useEffect that prunes stale IDs from `collapsedParents` whenever the issues prop changes. Deleted or reassigned issues previously left orphan IDs in localStorage indefinitely; the effect filters to only IDs that appear as a parentId in the current issue list and persists the cleaned array via updateView. Add four unit tests for countDescendants: leaf node, single-level, multi-level, and unknown ID. Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
parent
9be1b3f8a9
commit
7623f679cf
3 changed files with 68 additions and 3 deletions
|
|
@ -25,3 +25,12 @@ export function buildIssueTree(items: Issue[]): IssueTree {
|
|||
}
|
||||
return { roots, childMap };
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total number of descendants (all depths) of `id` in `childMap`.
|
||||
* Used to accurately label collapsed parent badges like "(3 sub-tasks)".
|
||||
*/
|
||||
export function countDescendants(id: string, childMap: Map<string, Issue[]>): number {
|
||||
const children = childMap.get(id) ?? [];
|
||||
return children.reduce((sum, c) => sum + 1 + countDescendants(c.id, childMap), 0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue