From cc7b272f814bc01c1f3ab309e41b496acf006444 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Fri, 11 Sep 2020 19:18:31 +0300 Subject: [PATCH] refactor: improve tree util types --- npm/ng-packs/packages/core/src/lib/utils/tree-utils.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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;