Spaces:
Running
Running
| export function buildCardTree(cards) { | |
| const map = new Map(); | |
| const roots = []; | |
| cards | |
| .slice() | |
| .sort((a, b) => a.order - b.order || a.title.localeCompare(b.title)) | |
| .forEach((card) => { | |
| map.set(card._id, { ...card, children: [] }); | |
| }); | |
| map.forEach((card) => { | |
| if (card.parentId && map.has(card.parentId)) { | |
| map.get(card.parentId).children.push(card); | |
| } else { | |
| roots.push(card); | |
| } | |
| }); | |
| return { roots, map }; | |
| } | |
| export function getAncestorChain(cardId, cardMap) { | |
| if (!cardId || !cardMap.has(cardId)) { | |
| return []; | |
| } | |
| const chain = []; | |
| let current = cardMap.get(cardId); | |
| while (current) { | |
| chain.unshift(current); | |
| current = current.parentId ? cardMap.get(current.parentId) : null; | |
| } | |
| return chain; | |
| } | |