Browse Source

re-order and refactor methods

pull/19440/head
Masum ULU 3 years ago
committed by GitHub
parent
commit
bb31f3238c
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 82
      npm/ng-packs/packages/core/src/lib/services/routes.service.ts

82
npm/ng-packs/packages/core/src/lib/services/routes.service.ts

@ -52,31 +52,16 @@ export abstract class AbstractTreeService<T extends { [key: string | number | sy
return this._visible$.asObservable(); return this._visible$.asObservable();
} }
protected createTree(items: T[]): TreeNode<T>[] {
return createTreeFromList<T, TreeNode<T>>(
items,
item => item[this.id],
item => item[this.parentId],
item => BaseTreeNode.create(item),
);
}
protected createGroupedTree(list: TreeNode<T>[]): RouteGroup<T>[] | undefined {
const map = createGroupMap<T>(list, this.othersGroup);
if (!map) {
return undefined;
}
return Array.from(map, ([key, items]) => ({ group: key, items }));
}
private filterWith(setOrMap: Set<string> | Map<string, T>): T[] { private filterWith(setOrMap: Set<string> | Map<string, T>): T[] {
return this._flat$.value.filter(item => !setOrMap.has(item[this.id])); return this._flat$.value.filter(item => !setOrMap.has(item[this.id]));
} }
private findItemsToRemove(set: Set<string>): Set<string> { private findItemsToRemove(set: Set<string>): Set<string> {
return this._flat$.value.reduce((acc, item) => { return this._flat$.value.reduce((acc, item) => {
if (!acc.has(item[this.parentId])) return acc; if (!acc.has(item[this.parentId])) {
return acc;
}
const childSet = new Set([item[this.id]]); const childSet = new Set([item[this.id]]);
const children = this.findItemsToRemove(childSet); const children = this.findItemsToRemove(childSet);
return new Set([...acc, ...children]); return new Set([...acc, ...children]);
@ -90,6 +75,24 @@ export abstract class AbstractTreeService<T extends { [key: string | number | sy
return flatItems; return flatItems;
} }
protected createTree(items: T[]): TreeNode<T>[] {
return createTreeFromList<T, TreeNode<T>>(
items,
item => item[this.id],
item => item[this.parentId],
item => BaseTreeNode.create(item),
);
}
protected createGroupedTree(list: TreeNode<T>[]): RouteGroup<T>[] | undefined {
const map = createGroupMap<T>(list, this.othersGroup);
if (!map) {
return undefined;
}
return Array.from(map, ([key, items]) => ({ group: key, items }));
}
add(items: T[]): T[] { add(items: T[]): T[] {
if (this.filterRoutesEnabled) { if (this.filterRoutesEnabled) {
const map = new Map<string, T>(); const map = new Map<string, T>();
@ -137,17 +140,26 @@ export abstract class AbstractTreeService<T extends { [key: string | number | sy
this.filterRoutesEnabled = true; this.filterRoutesEnabled = true;
} }
find(predicate: (item: TreeNode<T>) => boolean, tree = this.tree): TreeNode<T> | null { find(predicate: (item: TreeNode<T>) => boolean, tree = this.tree): TreeNode<T> | null {
return tree.reduce<TreeNode<T> | null>( return tree.reduce<TreeNode<T> | null>((acc, node) => {
(acc, node) => (acc ? acc : predicate(node) ? node : this.find(predicate, node.children)), if (acc) {
null, return acc;
); }
if (predicate(node)) {
return node;
}
return this.find(predicate, node.children);
}, null);
} }
patch(identifier: string, props: Partial<T>): T[] | false { patch(identifier: string, props: Partial<T>): T[] | false {
const flatItems = this._flat$.value; const flatItems = this._flat$.value;
const index = flatItems.findIndex(item => item[this.id] === identifier); const index = flatItems.findIndex(item => item[this.id] === identifier);
if (index < 0) return false; if (index < 0) {
return false;
}
flatItems[index] = { ...flatItems[index], ...props }; flatItems[index] = { ...flatItems[index], ...props };
@ -171,15 +183,17 @@ export abstract class AbstractTreeService<T extends { [key: string | number | sy
search(params: Partial<T>, tree = this.tree): TreeNode<T> | null { search(params: Partial<T>, tree = this.tree): TreeNode<T> | null {
const searchKeys = Object.keys(params) as Array<keyof Partial<T>>; const searchKeys = Object.keys(params) as Array<keyof Partial<T>>;
return tree.reduce<TreeNode<T> | null>( return tree.reduce<TreeNode<T> | null>((acc, node) => {
(acc, node) => if (acc) {
acc return acc;
? acc }
: searchKeys.every(key => node[key] === params[key])
? node if (searchKeys.every(key => node.item[key] === params[key])) {
: this.search(params, node.children), return node;
null, }
);
return this.search(params, node.children);
}, null);
} }
} }

Loading…
Cancel
Save