UNPKG

lamb-web-lib

Version:

LambWebLib. Es un proyecto angular de tipo Librería. que contiene una Suit de componentes reutilizables para el proyecto [Lamb Financial](https://lamb.upeu.edu.pe).

247 lines 19 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ /** * @license * Copyright Lamb Team. All Rights Reserved. * Licensed under the MIT License. See License.txt in the project root for license information. */ import { Injectable } from '@angular/core'; import { share } from 'rxjs/operators'; import { Location } from '@angular/common'; import { itemHover$, submenuToggle$, itemClick$, itemSelect$, navigateHome$, getSelectedItem$, addItems$, } from './variables'; export class LambMenuInternalService { /** * @param {?} location */ constructor(location) { this.location = location; this.items = []; this.items = []; } /** * @return {?} */ getItems() { return this.items; } /** * @param {?} items * @param {?} tag * @param {?=} except * @return {?} */ collapseAll(items, tag, except) { /** @type {?} */ const excepts = this.getParent(tag, except); items.forEach(item => this.collapseItem(item, tag, excepts)); } /** * @param {?} tag * @param {?=} item * @return {?} */ getParent(tag, item) { if (!item) { return; } /** @type {?} */ const arr = []; arr.push(item); if (item.parent) { arr.push(...this.getParent(tag, item.parent)); } return arr; } /** * @param {?} item * @param {?=} tag * @return {?} */ itemHover(item, tag) { itemHover$.next({ tag, item }); } /** * @param {?} item * @param {?=} tag * @return {?} */ submenuToggle(item, tag) { submenuToggle$.next({ tag, item }); } /** * @param {?} item * @param {?} tag * @return {?} */ selectItem(item, tag) { item.selected = true; this.itemSelect(item, tag); this.selectParent(item, tag); } /** * @param {?} __0 * @param {?} tag * @return {?} */ selectParent({ parent: item }, tag) { if (!item) { return; } if (!item.expanded) { item.expanded = true; this.submenuToggle(item, tag); } item.selected = true; this.selectParent(item, tag); } /** * @param {?} item * @param {?=} tag * @return {?} */ itemClick(item, tag) { itemClick$.next({ tag, item }); } /** * @param {?} item * @param {?=} tag * @return {?} */ itemSelect(item, tag) { itemSelect$.next({ tag, item }); } /** * @return {?} */ onAddItem() { return addItems$.pipe(share()); } /** * @return {?} */ onNavigateHome() { return navigateHome$.pipe(share()); } /** * @return {?} */ onGetSelectedItem() { return getSelectedItem$.pipe(share()); } /** * @param {?} items * @return {?} */ resetItems(items) { items.forEach(item => this.resetItem(item)); } /** * @param {?} item * @return {?} */ resetItem(item) { item.selected = false; if (item.children) { item.children.forEach(child => { this.resetItem(child); }); } } /** * @param {?} items * @return {?} */ prepareItems(items) { items.forEach(item => this.setParent(item)); } /** * @param {?} item * @return {?} */ setParent(item) { if (item.children) { item.children.forEach(child => { child.parent = item; this.setParent(child); }); } } /** * @param {?} items * @param {?} tag * @param {?=} collapseOther * @return {?} */ updateSelection(items, tag, collapseOther = false) { if (collapseOther) { this.collapseAll(items, tag); } items.forEach(item => this.selectItemByUrl(item, tag)); } /** * @param {?} item * @param {?} tag * @return {?} */ selectItemByUrl(item, tag) { /** @type {?} */ const wasSelected = item.selected; /** @type {?} */ const isSelected = this.selectedInUrl(item); if (!wasSelected && isSelected) { this.selectItem(item, tag); } if (item.children) { this.updateSelection(item.children, tag); } } /** * @param {?} item * @return {?} */ selectedInUrl(item) { /** @type {?} */ const exact = item.pathMatch === 'full'; /** @type {?} */ const location = this.location.path(); return ((exact && location === item.link) || (!exact && location.includes(item.link)) || (exact && item.fragment && location.substr(location.indexOf('#') + 1).includes(item.fragment))); } /** * @param {?} item * @param {?=} tag * @param {?=} excepts * @return {?} */ collapseItem(item, tag, excepts) { // if (except && except === item)) { if (excepts && excepts.some(it => it === item)) { return; } /** @type {?} */ const wasExpanded = item.expanded; item.expanded = false; if (wasExpanded) { this.submenuToggle(item); } if (item.children) { item.children.forEach(child => this.collapseItem(child, tag)); } } } LambMenuInternalService.decorators = [ { type: Injectable }, ]; LambMenuInternalService.ctorParameters = () => [ { type: Location } ]; if (false) { /** @type {?} */ LambMenuInternalService.prototype.items; /** @type {?} */ LambMenuInternalService.prototype.location; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pbnRlcm5hbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbGFtYi13ZWItbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvbWVudS9tZW51LWludGVybmFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBT0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxVQUFVLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQ25ELGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEdBQzNDLE1BQU0sYUFBYSxDQUFDO0FBSXJCLE1BQU07Ozs7SUFHSixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRjlCLFVBQUssR0FBbUIsRUFBRSxDQUFDO1FBR2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7Ozs7SUFFTSxRQUFRO1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQzs7Ozs7OztJQUVNLFdBQVcsQ0FBQyxLQUFxQixFQUFFLEdBQVcsRUFBRSxNQUFxQjs7Y0FDcEUsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQztRQUMzQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7Ozs7O0lBRU8sU0FBUyxDQUFDLEdBQVcsRUFBRSxJQUFtQjtRQUNoRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFD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SSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDOzs7WUFsSkYsVUFBVTs7O1lBUEYsUUFBUTs7OztJQVNmLHdDQUFtQzs7SUFFdkIsMkNBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgTGFtYiBUZWFtLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTGFtYk1lbnVJdGVtLCBMYW1iTWVudUJhZyB9IGZyb20gJy4vbWVudS1pdGVtJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHNoYXJlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgaXRlbUhvdmVyJCwgc3VibWVudVRvZ2dsZSQsIGl0ZW1DbGljayQsIGl0ZW1TZWxlY3QkLFxyXG4gIG5hdmlnYXRlSG9tZSQsIGdldFNlbGVjdGVkSXRlbSQsIGFkZEl0ZW1zJCxcclxufSBmcm9tICcuL3ZhcmlhYmxlcyc7XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTGFtYk1lbnVJbnRlcm5hbFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgaXRlbXM6IExhbWJNZW51SXRlbVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uKSB7XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXRlbXMoKTogTGFtYk1lbnVJdGVtW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGFwc2VBbGwoaXRlbXM6IExhbWJNZW51SXRlbVtdLCB0YWc6IHN0cmluZywgZXhjZXB0PzogTGFtYk1lbnVJdGVtKSB7XHJcbiAgICBjb25zdCBleGNlcHRzID0gdGhpcy5nZXRQYXJlbnQodGFnLCBleGNlcHQpO1xyXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuY29sbGFwc2VJdGVtKGl0ZW0sIHRhZywgZXhjZXB0cykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJlbnQodGFnOiBzdHJpbmcsIGl0ZW0/OiBMYW1iTWVudUl0ZW0pIHtcclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBhcnIgPSBbXTtcclxuICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgaWYgKGl0ZW0ucGFyZW50KSB7XHJcbiAgICAgIGFyci5wdXNoKC4uLnRoaXMuZ2V0UGFyZW50KHRhZywgaXRlbS5wYXJlbnQpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXRlbUhvdmVyKGl0ZW06IExhbWJNZW51SXRlbSwgdGFnPzogc3RyaW5nKSB7XHJcbiAgICBpdGVtSG92ZXIkLm5leHQoeyB0YWcsIGl0ZW0gfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3VibWVudVRvZ2dsZShpdGVtOiBMYW1iTWVudUl0ZW0sIHRhZz86IHN0cmluZykge1xyXG4gICAgc3VibWVudVRvZ2dsZSQubmV4dCh7IHRhZywgaXRlbSB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RJdGVtKGl0ZW06IExhbWJNZW51SXRlbSwgdGFnOiBzdHJpbmcpIHtcclxuICAgIGl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5pdGVtU2VsZWN0KGl0ZW0sIHRhZyk7XHJcbiAgICB0aGlzLnNlbGVjdFBhcmVudChpdGVtLCB0YWcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RQYXJlbnQoeyBwYXJlbnQ6IGl0ZW0gfTogTGFtYk1lbnVJdGVtLCB0YWc6IHN0cmluZykge1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWl0ZW0uZXhwYW5kZWQpIHtcclxuICAgICAgaXRlbS5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3VibWVudVRvZ2dsZShpdGVtLCB0YWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RQYXJlbnQoaXRlbSwgdGFnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpdGVtQ2xpY2soaXRlbTogTGFtYk1lbnVJdGVtLCB0YWc/OiBzdHJpbmcpIHtcclxuICAgIGl0ZW1DbGljayQubmV4dCh7IHRhZywgaXRlbSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXRlbVNlbGVjdChpdGVtOiBMYW1iTWVudUl0ZW0sIHRhZz86IHN0cmluZykge1xyXG4gICAgaXRlbVNlbGVjdCQubmV4dCh7IHRhZywgaXRlbSB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkFkZEl0ZW0oKTogT2JzZXJ2YWJsZTx7IHRhZzogc3RyaW5nLCBpdGVtczogTGFtYk1lbnVJdGVtW10gfT4ge1xyXG4gICAgcmV0dXJuIGFkZEl0ZW1zJC5waXBlKHNoYXJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTmF2aWdhdGVIb21lKCk6IE9ic2VydmFibGU8eyB0YWc6IHN0cmluZyB9PiB7XHJcbiAgICByZXR1cm4gbmF2aWdhdGVIb21lJC5waXBlKHNoYXJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uR2V0U2VsZWN0ZWRJdGVtKCk6IE9ic2VydmFibGU8eyB0YWc6IHN0cmluZzsgbGlzdGVuZXI6IEJlaGF2aW9yU3ViamVjdDxMYW1iTWVudUJhZz4gfT4ge1xyXG4gICAgcmV0dXJuIGdldFNlbGVjdGVkSXRlbSQucGlwZShzaGFyZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldEl0ZW1zKGl0ZW1zOiBMYW1iTWVudUl0ZW1bXSkge1xyXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMucmVzZXRJdGVtKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRJdGVtKGl0ZW06IExhbWJNZW51SXRlbSkge1xyXG4gICAgaXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XHJcbiAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNldEl0ZW0oY2hpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcmVwYXJlSXRlbXMoaXRlbXM6IExhbWJNZW51SXRlbVtdKSB7XHJcbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5zZXRQYXJlbnQoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQYXJlbnQoaXRlbTogTGFtYk1lbnVJdGVtKSB7XHJcbiAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xyXG4gICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICAgIGNoaWxkLnBhcmVudCA9IGl0ZW07XHJcbiAgICAgICAgdGhpcy5zZXRQYXJlbnQoY2hpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVTZWxlY3Rpb24oaXRlbXM6IExhbWJNZW51SXRlbVtdLCB0YWc6IHN0cmluZywgY29sbGFwc2VPdGhlcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoY29sbGFwc2VPdGhlcikge1xyXG4gICAgICB0aGlzLmNvbGxhcHNlQWxsKGl0ZW1zLCB0YWcpO1xyXG4gICAgfVxyXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuc2VsZWN0SXRlbUJ5VXJsKGl0ZW0sIHRhZykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWxlY3RJdGVtQnlVcmwoaXRlbTogTGFtYk1lbnVJdGVtLCB0YWc6IHN0cmluZykge1xyXG4gICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSBpdGVtLnNlbGVjdGVkO1xyXG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJblVybChpdGVtKTtcclxuICAgIGlmICghd2FzU2VsZWN0ZWQgJiYgaXNTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbSwgdGFnKTtcclxuICAgIH1cclxuICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGl0ZW0uY2hpbGRyZW4sIHRhZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdGVkSW5VcmwoaXRlbTogTGFtYk1lbnVJdGVtKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBleGFjdDogYm9vbGVhbiA9IGl0ZW0ucGF0aE1hdGNoID09PSAnZnVsbCc7XHJcbiAgICBjb25zdCBsb2NhdGlvbjogc3RyaW5nID0gdGhpcy5sb2NhdGlvbi5wYXRoKCk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAoZXhhY3QgJiYgbG9jYXRpb24gPT09IGl0ZW0ubGluaykgfHxcclxuICAgICAgKCFleGFjdCAmJiBsb2NhdGlvbi5pbmNsdWRlcyhpdGVtLmxpbmspKSB8fFxyXG4gICAgICAoZXhhY3QgJiYgaXRlbS5mcmFnbWVudCAmJiBsb2NhdGlvbi5zdWJzdHIobG9jYXRpb24uaW5kZXhPZignIycpICsgMSkuaW5jbHVkZXMoaXRlbS5mcmFnbWVudCkpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsYXBzZUl0ZW0oaXRlbTogTGFtYk1lbnVJdGVtLCB0YWc/OiBzdHJpbmcsIGV4Y2VwdHM/OiBMYW1iTWVudUl0ZW1bXSkge1xyXG4gICAgLy8gaWYgKGV4Y2VwdCAmJiBleGNlcHQgPT09IGl0ZW0pKSB7XHJcbiAgICBpZiAoZXhjZXB0cyAmJiBleGNlcHRzLnNvbWUoaXQgPT4gaXQgPT09IGl0ZW0pKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHdhc0V4cGFuZGVkID0gaXRlbS5leHBhbmRlZDtcclxuICAgIGl0ZW0uZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIGlmICh3YXNFeHBhbmRlZCkge1xyXG4gICAgICB0aGlzLnN1Ym1lbnVUb2dnbGUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcclxuICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHRoaXMuY29sbGFwc2VJdGVtKGNoaWxkLCB0YWcpKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiJdfQ==