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
JavaScript
/**
* @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==