Browse Source

refactor: improve tree util types

pull/5376/head
Arman Ozak 6 years ago
parent
commit
cc7b272f81
  1. 10
      npm/ng-packs/packages/core/src/lib/utils/tree-utils.ts

10
npm/ng-packs/packages/core/src/lib/utils/tree-utils.ts

@ -1,7 +1,7 @@
export class BaseTreeNode<T extends object> { export class BaseTreeNode<T extends object> {
children: TreeNode<T>[] = []; children: TreeNode<T>[] = [];
isLeaf = true; isLeaf = true;
parent: TreeNode<T>; parent?: TreeNode<T>;
constructor(props: T) { constructor(props: T) {
Object.assign(this, props); Object.assign(this, props);
@ -14,7 +14,7 @@ export class BaseTreeNode<T extends object> {
export function createTreeFromList<T extends object, R extends unknown>( export function createTreeFromList<T extends object, R extends unknown>(
list: T[], list: T[],
keySelector: (item: T) => number | string | symbol, keySelector: (item: T) => NodeKey,
parentKeySelector: typeof keySelector, parentKeySelector: typeof keySelector,
valueMapper: (item: T) => R, valueMapper: (item: T) => R,
) { ) {
@ -26,6 +26,8 @@ export function createTreeFromList<T extends object, R extends unknown>(
const parentId = parentKeySelector(row); const parentId = parentKeySelector(row);
const node = map.get(id); const node = map.get(id);
if (!node) return;
if (parentId) { if (parentId) {
const parent = map.get(parentId); const parent = map.get(parentId);
if (!parent) return; if (!parent) return;
@ -42,7 +44,7 @@ export function createTreeFromList<T extends object, R extends unknown>(
export function createMapFromList<T extends object, R extends unknown>( export function createMapFromList<T extends object, R extends unknown>(
list: T[], list: T[],
keySelector: (item: T) => number | string | symbol, keySelector: (item: T) => NodeKey,
valueMapper: (item: T) => R, valueMapper: (item: T) => R,
) { ) {
type Key = ReturnType<typeof keySelector>; type Key = ReturnType<typeof keySelector>;
@ -60,6 +62,8 @@ export type TreeNode<T extends object> = {
parent?: TreeNode<T>; parent?: TreeNode<T>;
}; };
type NodeKey = number | string | symbol | undefined | null;
type NodeValue<T extends object, F extends (...args: any) => any> = F extends undefined type NodeValue<T extends object, F extends (...args: any) => any> = F extends undefined
? TreeNode<T> ? TreeNode<T>
: ReturnType<F>; : ReturnType<F>;

Loading…
Cancel
Save