@junte/ui
Version:
Quality Angular UI components kit
123 lines • 15.5 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, HostBinding, Input } from '@angular/core';
import { Meta, Title } from '@angular/platform-browser';
import { ActivatedRoute, NavigationEnd, Router, RouterState } from '@angular/router';
import { BehaviorSubject } from 'rxjs';
import { filter } from 'rxjs/operators';
import { PropertyApi } from '../../core/decorators/api';
import { UI } from '../../core/enums/ui';
import { AppAsideComponent } from '../../layout/app/aside/app-aside.component';
class Breadcrumb {
constructor(defs = null) {
this.title = null;
this.disabled = false;
this.url = '.';
Object.assign(this, defs);
}
}
let BreadcrumbsComponent = class BreadcrumbsComponent {
constructor(router, titleService, metaService) {
this.router = router;
this.titleService = titleService;
this.metaService = metaService;
this.ui = UI;
this.routerState$ = new BehaviorSubject(this.router.routerState);
this.subscriptions = [];
this.breadcrumbs = [];
this.host = 'jnt-breadcrumbs-host';
}
get withAside() {
return !!this.aside;
}
ngOnInit() {
this.subscriptions.push(this.router.events
.pipe(filter(event => event instanceof NavigationEnd))
.subscribe(() => this.routerState$.next(this.router.routerState)));
this.routerState$.pipe(filter(r => !!r))
.subscribe((router) => this.build(router.root));
}
ngOnDestroy() {
this.subscriptions.forEach(s => s.unsubscribe());
}
build(router) {
let route = router;
const breadcrumbs = [];
while (route) {
if (route.routeConfig && route.routeConfig.data) {
if (route.routeConfig.data.breadcrumb) {
const breadcrumb = route.routeConfig.data.breadcrumb;
(Array.isArray(breadcrumb) ? breadcrumb : [breadcrumb])
.filter(crumb => !!crumb)
.forEach(crumb => {
switch (typeof crumb) {
case 'string': {
breadcrumbs.push(new Breadcrumb({ route, title: crumb }));
break;
}
case 'object': {
const title = typeof crumb.label === 'string'
? crumb.label : crumb.label(route.snapshot.data);
if (!!title) {
breadcrumbs.push(new Breadcrumb({
route,
title,
url: crumb.url,
disabled: crumb.disabled
}));
}
break;
}
case 'function': {
const title = crumb(route.snapshot.data);
if (!!title) {
breadcrumbs.push(new Breadcrumb({ route, title }));
}
break;
}
default:
throw new Error('wrong breadcrump type');
}
});
}
}
route = route.firstChild;
}
this.breadcrumbs = breadcrumbs;
const metaTitle = this.breadcrumbs.map(crumb => crumb.title).join(' · ');
this.titleService.setTitle(metaTitle);
this.metaService.updateTag({ name: 'description', content: metaTitle });
}
};
BreadcrumbsComponent.ctorParameters = () => [
{ type: Router },
{ type: Title },
{ type: Meta }
];
__decorate([
HostBinding('attr.host'),
__metadata("design:type", Object)
], BreadcrumbsComponent.prototype, "host", void 0);
__decorate([
HostBinding('attr.data-with-aside'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], BreadcrumbsComponent.prototype, "withAside", null);
__decorate([
PropertyApi({
description: 'Support burger button for mobile devices',
type: 'AppAsideComponent'
}),
Input(),
__metadata("design:type", AppAsideComponent)
], BreadcrumbsComponent.prototype, "aside", void 0);
BreadcrumbsComponent = __decorate([
Component({
selector: 'jnt-breadcrumb',
template: "<jnt-stack child-of=\"jnt-breadcrumbs-host\" *ngIf=\"breadcrumbs.length > 1\"\n [orientation]=\"ui.orientation.horizontal\"\n [gutter]=\"ui.gutter.small\"\n [spacing]=\"ui.gutter.tiny\"\n [wrap]=\"ui.wrap.wrap\"\n [align]=\"ui.align.center\">\n <ng-container *ngFor=\"let crumb of breadcrumbs\">\n <a child-of=\"jnt-breadcrumbs-host\" (click)=\"router.navigate([crumb.url], {relativeTo: crumb.route})\"\n href=\"javascript:;\"\n [attr.data-disabled]=\"crumb.disabled\">\n {{crumb.title}}\n </a>\n <jnt-icon child-of=\"jnt-breadcrumbs-host\" [icon]=\"ui.icons.chevronRight\"></jnt-icon>\n </ng-container>\n</jnt-stack>"
}),
__metadata("design:paramtypes", [Router,
Title,
Meta])
], BreadcrumbsComponent);
export { BreadcrumbsComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL25hdmlnYXRpb24vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRS9FLE1BQU0sVUFBVTtJQU9kLFlBQVksSUFBSSxHQUFHLElBQUk7UUFKdkIsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsUUFBRyxHQUFHLEdBQUcsQ0FBQztRQUdSLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQU9ELElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQW9CO0lBd0IvQixZQUFtQixNQUFjLEVBQ2IsWUFBbUIsRUFDbkIsV0FBaUI7UUFGbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLGlCQUFZLEdBQVosWUFBWSxDQUFPO1FBQ25CLGdCQUFXLEdBQVgs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RTs4QkFDRCxpQkFBaUI7bURBQUM7QUF0QmQsb0JBQW9CO0lBTGhDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxnQkFBZ0I7UUFDMUIsbXNCQUE4QztLQUMvQyxDQUFDO3FDQTBCMkIsTUFBTTtRQUNDLEtBQUs7UUFDTixJQUFJO0dBMUIxQixvQkFBb0IsQ0E0RmhDO1NBNUZZLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlclN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQcm9wZXJ0eUFwaSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy9hcGknO1xuaW1wb3J0IHsgVUkgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3VpJztcbmltcG9ydCB7IEFwcEFzaWRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbGF5b3V0L2FwcC9hc2lkZS9hcHAtYXNpZGUuY29tcG9uZW50JztcblxuY2xhc3MgQnJlYWRjcnVtYiB7XG5cbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICB0aXRsZSA9IG51bGw7XG4gIGRpc2FibGVkID0gZmFsc2U7XG4gIHVybCA9ICcuJztcblxuICBjb25zdHJ1Y3RvcihkZWZzID0gbnVsbCkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgZGVmcyk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnam50LWJyZWFkY3J1bWInLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJlYWRjcnVtYnMuZW5jYXBzdWxhdGVkLmh0bWwnXG59KVxuXG5leHBvcnQgY2xhc3MgQnJlYWRjcnVtYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgdWkgPSBVSTtcblxuICBwcml2YXRlIHJvdXRlclN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Um91dGVyU3RhdGU+KHRoaXMucm91dGVyLnJvdXRlclN0YXRlKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGJyZWFkY3J1bWJzOiBCcmVhZGNydW1iW10gPSBbXTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaG9zdCcpXG4gIHJlYWRvbmx5IGhvc3QgPSAnam50LWJyZWFkY3J1bWJzLWhvc3QnO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXdpdGgtYXNpZGUnKVxuICBnZXQgd2l0aEFzaWRlKCkge1xuICAgIHJldHVybiAhIXRoaXMuYXNpZGU7XG4gIH1cblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnU3VwcG9ydCBidXJnZXIgYnV0dG9uIGZvciBtb2JpbGUgZGV2aWNlcycsXG4gICAgdHlwZTogJ0FwcEFzaWRlQ29tcG9uZW50J1xuICB9KVxuICBASW5wdXQoKVxuICBhc2lkZTogQXBwQXNpZGVDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHRpdGxlU2VydmljZTogVGl0bGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgbWV0YVNlcnZpY2U6IE1ldGEpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucm91dGVyU3RhdGUkLm5leHQodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUpKSk7XG5cbiAgICB0aGlzLnJvdXRlclN0YXRlJC5waXBlKGZpbHRlcihyID0+ICEhcikpXG4gICAgICAuc3Vic2NyaWJlKChyb3V0ZXIpID0+IHRoaXMuYnVpbGQocm91dGVyLnJvb3QpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIGJ1aWxkKHJvdXRlcjogQWN0aXZhdGVkUm91dGUpIHtcbiAgICBsZXQgcm91dGUgPSByb3V0ZXI7XG4gICAgY29uc3QgYnJlYWRjcnVtYnMgPSBbXTtcbiAgICB3aGlsZSAocm91dGUpIHtcbiAgICAgIGlmIChyb3V0ZS5yb3V0ZUNvbmZpZyAmJiByb3V0ZS5yb3V0ZUNvbmZpZy5kYXRhKSB7XG4gICAgICAgIGlmIChyb3V0ZS5yb3V0ZUNvbmZpZy5kYXRhLmJyZWFkY3J1bWIpIHtcbiAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0gcm91dGUucm91dGVDb25maWcuZGF0YS5icmVhZGNydW1iO1xuICAgICAgICAgIChBcnJheS5pc0FycmF5KGJyZWFkY3J1bWIpID8gYnJlYWRjcnVtYiA6IFticmVhZGNydW1iXSlcbiAgICAgICAgICAgIC5maWx0ZXIoY3J1bWIgPT4gISFjcnVtYilcbiAgICAgICAgICAgIC5mb3JFYWNoKGNydW1iID0+IHtcbiAgICAgICAgICAgICAgc3dpdGNoKHR5cGVvZiBjcnVtYikge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6IHtcbiAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLnB1c2gobmV3IEJyZWFkY3J1bWIoe3JvdXRlLCB0aXRsZTogY3J1bWJ9KSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnb2JqZWN0Jzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSB0eXBlb2YgY3J1bWIubGFiZWwgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gY3J1bWIubGFiZWwgOiBjcnVtYi5sYWJlbChyb3V0ZS5zbmFwc2hvdC5kYXRhKTtcbiAgICAgICAgICAgICAgICAgIGlmICghIXRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLnB1c2gobmV3IEJyZWFkY3J1bWIoe1xuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgIHVybDogY3J1bWIudXJsLFxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBjcnVtYi5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IGNydW1iKHJvdXRlLnNuYXBzaG90LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgaWYgKCEhdGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMucHVzaChuZXcgQnJlYWRjcnVtYih7cm91dGUsIHRpdGxlfSkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIGJyZWFkY3J1bXAgdHlwZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XG4gICAgfVxuICAgIHRoaXMuYnJlYWRjcnVtYnMgPSBicmVhZGNydW1icztcblxuICAgIGNvbnN0IG1ldGFUaXRsZSA9IHRoaXMuYnJlYWRjcnVtYnMubWFwKGNydW1iID0+IGNydW1iLnRpdGxlKS5qb2luKCcgwrcgJyk7XG4gICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUobWV0YVRpdGxlKTtcbiAgICB0aGlzLm1ldGFTZXJ2aWNlLnVwZGF0ZVRhZyh7bmFtZTogJ2Rlc2NyaXB0aW9uJywgY29udGVudDogbWV0YVRpdGxlfSk7XG4gIH1cbn1cbiJdfQ==