diff --git a/npm/ng-packs/packages/core/src/lib/utils/tree-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/tree-utils.ts index d4c0ba0ab3..ba6e3a5b90 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/tree-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/tree-utils.ts @@ -1,7 +1,7 @@ export class BaseTreeNode { children: TreeNode[] = []; isLeaf = true; - parent: TreeNode; + parent?: TreeNode; constructor(props: T) { Object.assign(this, props); @@ -14,7 +14,7 @@ export class BaseTreeNode { export function createTreeFromList( list: T[], - keySelector: (item: T) => number | string | symbol, + keySelector: (item: T) => NodeKey, parentKeySelector: typeof keySelector, valueMapper: (item: T) => R, ) { @@ -26,6 +26,8 @@ export function createTreeFromList( const parentId = parentKeySelector(row); const node = map.get(id); + if (!node) return; + if (parentId) { const parent = map.get(parentId); if (!parent) return; @@ -42,7 +44,7 @@ export function createTreeFromList( export function createMapFromList( list: T[], - keySelector: (item: T) => number | string | symbol, + keySelector: (item: T) => NodeKey, valueMapper: (item: T) => R, ) { type Key = ReturnType; @@ -60,6 +62,8 @@ export type TreeNode = { parent?: TreeNode; }; +type NodeKey = number | string | symbol | undefined | null; + type NodeValue any> = F extends undefined ? TreeNode : ReturnType;