@junte/ui
Version:
Quality Angular UI components kit
131 lines • 16.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';
var Breadcrumb = /** @class */ (function () {
function Breadcrumb(defs) {
if (defs === void 0) { defs = null; }
this.title = null;
this.disabled = false;
this.url = '.';
Object.assign(this, defs);
}
return Breadcrumb;
}());
var BreadcrumbsComponent = /** @class */ (function () {
function BreadcrumbsComponent(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';
}
Object.defineProperty(BreadcrumbsComponent.prototype, "withAside", {
get: function () {
return !!this.aside;
},
enumerable: true,
configurable: true
});
BreadcrumbsComponent.prototype.ngOnInit = function () {
var _this = this;
this.subscriptions.push(this.router.events
.pipe(filter(function (event) { return event instanceof NavigationEnd; }))
.subscribe(function () { return _this.routerState$.next(_this.router.routerState); }));
this.routerState$.pipe(filter(function (r) { return !!r; }))
.subscribe(function (router) { return _this.build(router.root); });
};
BreadcrumbsComponent.prototype.ngOnDestroy = function () {
this.subscriptions.forEach(function (s) { return s.unsubscribe(); });
};
BreadcrumbsComponent.prototype.build = function (router) {
var route = router;
var breadcrumbs = [];
while (route) {
if (route.routeConfig && route.routeConfig.data) {
if (route.routeConfig.data.breadcrumb) {
var breadcrumb = route.routeConfig.data.breadcrumb;
(Array.isArray(breadcrumb) ? breadcrumb : [breadcrumb])
.filter(function (crumb) { return !!crumb; })
.forEach(function (crumb) {
switch (typeof crumb) {
case 'string': {
breadcrumbs.push(new Breadcrumb({ route: route, title: crumb }));
break;
}
case 'object': {
var title = typeof crumb.label === 'string'
? crumb.label : crumb.label(route.snapshot.data);
if (!!title) {
breadcrumbs.push(new Breadcrumb({
route: route,
title: title,
url: crumb.url,
disabled: crumb.disabled
}));
}
break;
}
case 'function': {
var title = crumb(route.snapshot.data);
if (!!title) {
breadcrumbs.push(new Breadcrumb({ route: route, title: title }));
}
break;
}
default:
throw new Error('wrong breadcrump type');
}
});
}
}
route = route.firstChild;
}
this.breadcrumbs = breadcrumbs;
var metaTitle = this.breadcrumbs.map(function (crumb) { return crumb.title; }).join(' · ');
this.titleService.setTitle(metaTitle);
this.metaService.updateTag({ name: 'description', content: metaTitle });
};
BreadcrumbsComponent.ctorParameters = function () { return [
{ 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);
return BreadcrumbsComponent;
}());
export { BreadcrumbsComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL25hdmlnYXRpb24vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRS9FO0lBT0Usb0JBQVksSUFBVztRQUFYLHFCQUFBLEVBQUEsV0FBVztRQUp2QixVQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixRQUFHLEdBQUcsR0FBRyxDQUFDO1FBR1IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNILGlCQUFDO0FBQUQsQ0FBQyxBQVZELElBVUM7QUFPRDtJQXdCRSw4QkFBbUIsTUFBYyxFQUNiLFlBQW1CLEVBQ25CLFdBQWlCO1FBRmxCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDYixpQkFBWSxHQUFaLFlBQVksQ0FBTztRQUNuQixnQkFBVyxHQUFYLFdB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V0FBVyxDQUFDLHNCQUFzQixDQUFDOzs7eURBR25DO0lBT0Q7UUFMQyxXQUFXLENBQUM7WUFDWCxXQUFXLEVBQUUsMENBQTBDO1lBQ3ZELElBQUksRUFBRSxtQkFBbUI7U0FDMUIsQ0FBQztRQUNELEtBQUssRUFBRTtrQ0FDRCxpQkFBaUI7dURBQUM7SUF0QmQsb0JBQW9CO1FBTGhDLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsbXNCQUE4QztTQUMvQyxDQUFDO3lDQTBCMkIsTUFBTTtZQUNDLEtBQUs7WUFDTixJQUFJO09BMUIxQixvQkFBb0IsQ0E0RmhDO0lBQUQsMkJBQUM7Q0FBQSxBQTVGRCxJQTRGQztTQTVGWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1ldGEsIFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJvcGVydHlBcGkgfSBmcm9tICcuLi8uLi9jb3JlL2RlY29yYXRvcnMvYXBpJztcbmltcG9ydCB7IFVJIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy91aSc7XG5pbXBvcnQgeyBBcHBBc2lkZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2xheW91dC9hcHAvYXNpZGUvYXBwLWFzaWRlLmNvbXBvbmVudCc7XG5cbmNsYXNzIEJyZWFkY3J1bWIge1xuXG4gIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgdGl0bGUgPSBudWxsO1xuICBkaXNhYmxlZCA9IGZhbHNlO1xuICB1cmwgPSAnLic7XG5cbiAgY29uc3RydWN0b3IoZGVmcyA9IG51bGwpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRlZnMpO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2pudC1icmVhZGNydW1iJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JyZWFkY3J1bWJzLmVuY2Fwc3VsYXRlZC5odG1sJ1xufSlcblxuZXhwb3J0IGNsYXNzIEJyZWFkY3J1bWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHVpID0gVUk7XG5cbiAgcHJpdmF0ZSByb3V0ZXJTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJvdXRlclN0YXRlPih0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZSk7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBicmVhZGNydW1iczogQnJlYWRjcnVtYltdID0gW107XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhvc3QnKVxuICByZWFkb25seSBob3N0ID0gJ2pudC1icmVhZGNydW1icy1ob3N0JztcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS13aXRoLWFzaWRlJylcbiAgZ2V0IHdpdGhBc2lkZSgpIHtcbiAgICByZXR1cm4gISF0aGlzLmFzaWRlO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1N1cHBvcnQgYnVyZ2VyIGJ1dHRvbiBmb3IgbW9iaWxlIGRldmljZXMnLFxuICAgIHR5cGU6ICdBcHBBc2lkZUNvbXBvbmVudCdcbiAgfSlcbiAgQElucHV0KClcbiAgYXNpZGU6IEFwcEFzaWRlQ29tcG9uZW50O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFRpdGxlLFxuICAgICAgICAgICAgICBwcml2YXRlIG1ldGFTZXJ2aWNlOiBNZXRhKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJvdXRlclN0YXRlJC5uZXh0KHRoaXMucm91dGVyLnJvdXRlclN0YXRlKSkpO1xuXG4gICAgdGhpcy5yb3V0ZXJTdGF0ZSQucGlwZShmaWx0ZXIociA9PiAhIXIpKVxuICAgICAgLnN1YnNjcmliZSgocm91dGVyKSA9PiB0aGlzLmJ1aWxkKHJvdXRlci5yb290KSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBidWlsZChyb3V0ZXI6IEFjdGl2YXRlZFJvdXRlKSB7XG4gICAgbGV0IHJvdXRlID0gcm91dGVyO1xuICAgIGNvbnN0IGJyZWFkY3J1bWJzID0gW107XG4gICAgd2hpbGUgKHJvdXRlKSB7XG4gICAgICBpZiAocm91dGUucm91dGVDb25maWcgJiYgcm91dGUucm91dGVDb25maWcuZGF0YSkge1xuICAgICAgICBpZiAocm91dGUucm91dGVDb25maWcuZGF0YS5icmVhZGNydW1iKSB7XG4gICAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHJvdXRlLnJvdXRlQ29uZmlnLmRhdGEuYnJlYWRjcnVtYjtcbiAgICAgICAgICAoQXJyYXkuaXNBcnJheShicmVhZGNydW1iKSA/IGJyZWFkY3J1bWIgOiBbYnJlYWRjcnVtYl0pXG4gICAgICAgICAgICAuZmlsdGVyKGNydW1iID0+ICEhY3J1bWIpXG4gICAgICAgICAgICAuZm9yRWFjaChjcnVtYiA9PiB7XG4gICAgICAgICAgICAgIHN3aXRjaCh0eXBlb2YgY3J1bWIpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOiB7XG4gICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5wdXNoKG5ldyBCcmVhZGNydW1iKHtyb3V0ZSwgdGl0bGU6IGNydW1ifSkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdHlwZW9mIGNydW1iLmxhYmVsID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IGNydW1iLmxhYmVsIDogY3J1bWIubGFiZWwocm91dGUuc25hcHNob3QuZGF0YSk7XG4gICAgICAgICAgICAgICAgICBpZiAoISF0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5wdXNoKG5ldyBCcmVhZGNydW1iKHtcbiAgICAgICAgICAgICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICB1cmw6IGNydW1iLnVybCxcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogY3J1bWIuZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBjcnVtYihyb3V0ZS5zbmFwc2hvdC5kYXRhKTtcbiAgICAgICAgICAgICAgICAgIGlmICghIXRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLnB1c2gobmV3IEJyZWFkY3J1bWIoe3JvdXRlLCB0aXRsZX0pKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBicmVhZGNydW1wIHR5cGUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcm91dGUgPSByb3V0ZS5maXJzdENoaWxkO1xuICAgIH1cbiAgICB0aGlzLmJyZWFkY3J1bWJzID0gYnJlYWRjcnVtYnM7XG5cbiAgICBjb25zdCBtZXRhVGl0bGUgPSB0aGlzLmJyZWFkY3J1bWJzLm1hcChjcnVtYiA9PiBjcnVtYi50aXRsZSkuam9pbignIMK3ICcpO1xuICAgIHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKG1ldGFUaXRsZSk7XG4gICAgdGhpcy5tZXRhU2VydmljZS51cGRhdGVUYWcoe25hbWU6ICdkZXNjcmlwdGlvbicsIGNvbnRlbnQ6IG1ldGFUaXRsZX0pO1xuICB9XG59XG4iXX0=