@eddie666/ng-material-multilevel-menu
Version:
Angular 16 compatible (ivy)
93 lines • 12.3 kB
JavaScript
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { ExpandCollapseStatusEnum } from './app.model';
import { CONSTANT } from './constants';
import * as i0 from "@angular/core";
class MultilevelMenuService {
foundLinkObject;
expandCollapseStatus = new Subject();
expandCollapseStatus$ = this.expandCollapseStatus.asObservable();
selectedMenuID = new Subject();
selectedMenuID$ = this.selectedMenuID.asObservable();
generateId() {
let text = '';
for (let i = 0; i < 20; i++) {
text += CONSTANT.POSSIBLE.charAt(Math.floor(Math.random() * CONSTANT.POSSIBLE.length));
}
return text;
}
addRandomId(nodes) {
nodes.forEach((node) => {
node.id = this.generateId();
if (node.items !== undefined) {
this.addRandomId(node.items);
}
});
}
recursiveCheckId(node, nodeId) {
if (node.id === nodeId) {
return true;
}
else {
if (node.items !== undefined) {
return node.items.some((nestedNode) => {
return this.recursiveCheckId(nestedNode, nodeId);
});
}
}
}
findNodeRecursively({ nodes, link, id }) {
for (let nodeIndex = 0; nodeIndex < nodes.length; nodeIndex++) {
const node = nodes[nodeIndex];
for (const key in node) {
if (node.hasOwnProperty(key)) {
if (encodeURI(node.link) === link) {
this.foundLinkObject = node;
}
else if (node.id === id) {
this.foundLinkObject = node;
}
else {
if (node.items !== undefined) {
this.findNodeRecursively({
nodes: node.items,
link: link ? link : null,
id: id ? id : null,
});
}
}
}
}
}
}
getMatchedObjectByUrl(nodes, link) {
this.findNodeRecursively({ nodes, link });
return this.foundLinkObject;
}
getMatchedObjectById(nodes, id) {
this.findNodeRecursively({ nodes, id });
return this.foundLinkObject;
}
// overrides key-value pipe's default reordering (by key) by implementing dummy comprarer function
// https://angular.io/api/common/KeyValuePipe#description
kvDummyComparerFn() {
return 0;
}
setMenuExpandCollapseStatus(status) {
this.expandCollapseStatus.next(status ? status : ExpandCollapseStatusEnum.neutral);
}
selectMenuByID(menuID) {
this.selectedMenuID.next(menuID);
return this.foundLinkObject;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: MultilevelMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: MultilevelMenuService, providedIn: 'root' });
}
export { MultilevelMenuService };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: MultilevelMenuService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlsZXZlbC1tZW51LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tYXRlcmlhbC1tdWx0aWxldmVsLW1lbnUvc3JjL2xpYi9tdWx0aWxldmVsLW1lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFrQix3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUV2QyxNQUdhLHFCQUFxQjtJQUM5QixlQUFlLENBQWlCO0lBQ3hCLG9CQUFvQixHQUFzQyxJQUFJLE9BQU8sRUFBNEIsQ0FBQztJQUMxRyxxQkFBcUIsR0FBeUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRS9GLGNBQWMsR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUNoRSxlQUFlLEdBQXVCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFakUsVUFBVTtRQUNkLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekIsSUFBSSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMxRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxXQUFXLENBQUMsS0FBdUI7UUFDL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxD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QUNqQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQzt1R0EzRVEscUJBQXFCOzJHQUFyQixxQkFBcUIsY0FGbEIsTUFBTTs7U0FFVCxxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTXVsdGlsZXZlbE5vZGUsIEV4cGFuZENvbGxhcHNlU3RhdHVzRW51bSB9IGZyb20gJy4vYXBwLm1vZGVsJztcclxuaW1wb3J0IHsgQ09OU1RBTlQgfSBmcm9tICcuL2NvbnN0YW50cyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aWxldmVsTWVudVNlcnZpY2Uge1xyXG4gICAgZm91bmRMaW5rT2JqZWN0OiBNdWx0aWxldmVsTm9kZTtcclxuICAgIHByaXZhdGUgZXhwYW5kQ29sbGFwc2VTdGF0dXM6IFN1YmplY3Q8RXhwYW5kQ29sbGFwc2VTdGF0dXNFbnVtPiA9IG5ldyBTdWJqZWN0PEV4cGFuZENvbGxhcHNlU3RhdHVzRW51bT4oKTtcclxuICAgIGV4cGFuZENvbGxhcHNlU3RhdHVzJDogT2JzZXJ2YWJsZTxFeHBhbmRDb2xsYXBzZVN0YXR1c0VudW0+ID0gdGhpcy5leHBhbmRDb2xsYXBzZVN0YXR1cy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBwcml2YXRlIHNlbGVjdGVkTWVudUlEOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBzZWxlY3RlZE1lbnVJRCQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMuc2VsZWN0ZWRNZW51SUQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUlkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHRleHQgPSAnJztcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwOyBpKyspIHtcclxuICAgICAgICAgICAgdGV4dCArPSBDT05TVEFOVC5QT1NTSUJMRS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogQ09OU1RBTlQuUE9TU0lCTEUubGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0ZXh0O1xyXG4gICAgfVxyXG4gICAgYWRkUmFuZG9tSWQobm9kZXM6IE11bHRpbGV2ZWxOb2RlW10pOiB2b2lkIHtcclxuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlOiBNdWx0aWxldmVsTm9kZSkgPT4ge1xyXG4gICAgICAgICAgICBub2RlLmlkID0gdGhpcy5nZW5lcmF0ZUlkKCk7XHJcbiAgICAgICAgICAgIGlmIChub2RlLml0ZW1zICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZG9tSWQobm9kZS5pdGVtcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJlY3Vyc2l2ZUNoZWNrSWQobm9kZTogTXVsdGlsZXZlbE5vZGUsIG5vZGVJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKG5vZGUuaWQgPT09IG5vZGVJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobm9kZS5pdGVtcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5pdGVtcy5zb21lKChuZXN0ZWROb2RlOiBNdWx0aWxldmVsTm9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlY3Vyc2l2ZUNoZWNrSWQobmVzdGVkTm9kZSwgbm9kZUlkKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBmaW5kTm9kZVJlY3Vyc2l2ZWx5KHsgbm9kZXMsIGxpbmssIGlkIH06IHsgbm9kZXM6IE11bHRpbGV2ZWxOb2RlW107IGxpbms/OiBzdHJpbmc7IGlkPzogc3RyaW5nIH0pOiB2b2lkIHtcclxuICAgICAgICBmb3IgKGxldCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBub2Rlcy5sZW5ndGg7IG5vZGVJbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tub2RlSW5kZXhdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuY29kZVVSSShub2RlLmxpbmspID09PSBsaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm91bmRMaW5rT2JqZWN0ID0gbm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuaWQgPT09IGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm91bmRMaW5rT2JqZWN0ID0gbm9kZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5pdGVtcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmROb2RlUmVjdXJzaXZlbHkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzOiBub2RlLml0ZW1zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbms6IGxpbmsgPyBsaW5rIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQgPyBpZCA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldE1hdGNoZWRPYmplY3RCeVVybChub2RlczogTXVsdGlsZXZlbE5vZGVbXSwgbGluazogc3RyaW5nKTogTXVsdGlsZXZlbE5vZGUge1xyXG4gICAgICAgIHRoaXMuZmluZE5vZGVSZWN1cnNpdmVseSh7IG5vZGVzLCBsaW5rIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvdW5kTGlua09iamVjdDtcclxuICAgIH1cclxuICAgIGdldE1hdGNoZWRPYmplY3RCeUlkKG5vZGVzOiBNdWx0aWxldmVsTm9kZVtdLCBpZDogc3RyaW5nKTogTXVsdGlsZXZlbE5vZGUge1xyXG4gICAgICAgIHRoaXMuZmluZE5vZGVSZWN1cnNpdmVseSh7IG5vZGVzLCBpZCB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3VuZExpbmtPYmplY3Q7XHJcbiAgICB9XHJcbiAgICAvLyBvdmVycmlkZXMga2V5LXZhbHVlIHBpcGUncyBkZWZhdWx0IHJlb3JkZXJpbmcgKGJ5IGtleSkgYnkgaW1wbGVtZW50aW5nIGR1bW15IGNvbXByYXJlciBmdW5jdGlvblxyXG4gICAgLy8gaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb21tb24vS2V5VmFsdWVQaXBlI2Rlc2NyaXB0aW9uXHJcbiAgICBrdkR1bW15Q29tcGFyZXJGbigpIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHNldE1lbnVFeHBhbmRDb2xsYXBzZVN0YXR1cyhzdGF0dXM6IEV4cGFuZENvbGxhcHNlU3RhdHVzRW51bSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kQ29sbGFwc2VTdGF0dXMubmV4dChzdGF0dXMgPyBzdGF0dXMgOiBFeHBhbmRDb2xsYXBzZVN0YXR1c0VudW0ubmV1dHJhbCk7XHJcbiAgICB9XHJcbiAgICBzZWxlY3RNZW51QnlJRChtZW51SUQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNZW51SUQubmV4dChtZW51SUQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvdW5kTGlua09iamVjdDtcclxuICAgIH1cclxufVxyXG4iXX0=