Browse Source

feat: add find method to abstract tree service

pull/4445/head
Arman Ozak 6 years ago
parent
commit
94b4d1073b
  1. 7
      npm/ng-packs/packages/core/src/lib/services/routes.service.ts
  2. 16
      npm/ng-packs/packages/core/src/lib/tests/routes.service.spec.ts

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

@ -77,6 +77,13 @@ export abstract class AbstractTreeService<T extends object> {
return this.publish(flatItems, visibleItems);
}
find(predicate: (item: TreeNode<T>) => boolean, tree = this.tree) {
return tree.reduce(
(acc, node) => (acc ? acc : predicate(node) ? node : this.find(predicate, node.children)),
null,
);
}
patch(identifier: string, props: Partial<T>): T[] | false {
const flatItems = this._flat$.value;
const index = flatItems.findIndex(item => item[this.id] === identifier);

16
npm/ng-packs/packages/core/src/lib/tests/routes.service.spec.ts

@ -52,6 +52,22 @@ describe('Routes Service', () => {
});
});
describe('#find', () => {
it('should return node found based on query', () => {
service.add(routes);
const result = service.find(route => route.invisible);
expect(result.name).toBe('bar');
expect(result.children.length).toBe(1);
expect(result.children[0].name).toBe('baz');
});
it('should return null when query is not found', () => {
service.add(routes);
const result = service.find(route => route.requiredPolicy === 'X');
expect(result).toBe(null);
});
});
describe('#remove', () => {
it('should remove routes based on given routeNames', () => {
service.add(routes);

Loading…
Cancel
Save