Skip to content

Commit

Permalink
fix AOT errors
Browse files Browse the repository at this point in the history
  • Loading branch information
emilol committed Jun 28, 2017
1 parent 791d4b0 commit 5e05205
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 63 deletions.
4 changes: 2 additions & 2 deletions package.json
@@ -1,6 +1,6 @@
{
"name": "angular-crumbs",
"version": "1.2.0",
"version": "2.0.0",
"description": "A route-based Angular breadcrumb component and service. Allows breadcrumb descriptions to be set based on route data, or as the result of an API call.",
"main": "index.js",
"files": [
Expand Down Expand Up @@ -50,4 +50,4 @@
"typescript": "^2.4.1",
"uglify-js": "^3.0.20"
}
}
}
25 changes: 15 additions & 10 deletions src/breadcrumb.component.ts
@@ -1,12 +1,15 @@
import { Component } from "@angular/core";
import { Breadcrumb, BreadcrumbService } from "./breadcrumb.service"
import { Component, OnInit } from '@angular/core';

import { Breadcrumb } from './breadcrumb';
import { BreadcrumbService } from './breadcrumb.service';

@Component({
selector: "breadcrumb",
template:
`<div #template>
// tslint:disable-next-line:component-selector
selector: 'breadcrumb',
template:
`<div #template>
<ng-content></ng-content>
</div>
</div>
<div class="container" *ngIf="template.children.length == 0">
<div class="nav-wrapper">
<div class="breadcrumb" *ngFor="let route of breadcrumbs" [ngClass]="{'last': route.terminal}">
Expand All @@ -21,8 +24,10 @@ export class BreadcrumbComponent {
breadcrumbs: Breadcrumb[];

constructor(private breadcrumbService: BreadcrumbService) {
breadcrumbService.onBreadcrumbChange.subscribe((crumbs: Breadcrumb[]) => {
this.breadcrumbs = crumbs;
});
breadcrumbService.breadcrumbChanged.subscribe((crumbs: Breadcrumb[]) => { this.onBreadcrumbChange(crumbs); });
}

private onBreadcrumbChange(crumbs: Breadcrumb[]) {
this.breadcrumbs = crumbs;
}
}
}
32 changes: 13 additions & 19 deletions src/breadcrumb.module.ts
@@ -1,26 +1,20 @@
import { NgModule, ModuleWithProviders } from "@angular/core";
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { BreadcrumbComponent } from './src/breadcrumb.component';
import { BreadcrumbService } from './src/breadcrumb.service';
import { RouterModule, Router } from '@angular/router';

export * from './src/breadcrumb.component';
export * from './src/breadcrumb.service';
import { BreadcrumbService } from './breadcrumb.service';
import { BreadcrumbComponent } from './breadcrumb.component';

export function breadcrumbServiceFactory(router: Router) {
return new BreadcrumbService(router);
}

@NgModule({
imports: [
CommonModule,
RouterModule
imports: [CommonModule, RouterModule],
providers: [
{ provide: BreadcrumbService, useFactory: breadcrumbServiceFactory, deps: [Router] }
],
declarations: [BreadcrumbComponent],
exports: [BreadcrumbComponent],
providers: [BreadcrumbService]
exports: [BreadcrumbComponent]
})
export class BreadcrumbModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: BreadcrumbModule,
providers: [BreadcrumbService]
};
}
}
export class BreadcrumbModule { }
76 changes: 44 additions & 32 deletions src/breadcrumb.service.ts
@@ -1,68 +1,80 @@
import { Component, Injectable, EventEmitter } from "@angular/core";
import { Title } from "@angular/platform-browser";
import { Router, RoutesRecognized, NavigationEnd, ActivatedRouteSnapshot, ActivatedRoute } from "@angular/router";
import { Observable } from "rxjs/Rx";
import { Injectable, EventEmitter } from '@angular/core';
import { Router, ActivatedRouteSnapshot, Event, NavigationEnd } from '@angular/router';

import { Breadcrumb } from './breadcrumb';

@Injectable()
export class BreadcrumbService {
onBreadcrumbChange: EventEmitter<Breadcrumb[]> = new EventEmitter<Breadcrumb[]>(false);
breadcrumbChanged = new EventEmitter<Breadcrumb[]>(false);

private breadcrumbs: Breadcrumb[] = [];
private breadcrumbs = new Array<Breadcrumb>();

constructor(private router: Router) {
this.router.events.subscribe((routeEvent: NavigationEnd) => {
if (!(routeEvent instanceof NavigationEnd)) return;
this.router.events.subscribe((routeEvent) => { this.onRouteEvent(routeEvent); });
}

let route = this.router.routerState.root.snapshot;
let url = "";
public changeBreadcrumb(route: ActivatedRouteSnapshot, name: string) {
const rootUrl = this.createRootUrl(route);
const breadcrumb = this.breadcrumbs.find(function (bc) { return bc.url === rootUrl; });

this.breadcrumbs = [];
if (!breadcrumb) { return; }

while (route.children.length) {
route = route.firstChild;
if (!route.routeConfig.path) continue;
breadcrumb.displayName = name;

url += `/${this.createUrl(route)}`;
this.breadcrumbChanged.emit(this.breadcrumbs);
}

if (!route.data["breadcrumb"]) continue;
private onRouteEvent(routeEvent: Event) {
if (!(routeEvent instanceof NavigationEnd)) { return; }

this.breadcrumbs.push(this.createBreadcrumb(route, url));
}
let route = this.router.routerState.root.snapshot;
let url = '';

this.onBreadcrumbChange.emit(this.breadcrumbs);
});
}
this.breadcrumbs = [];

public changeBreadcrumb(route: ActivatedRouteSnapshot, name: string) {
let rootUrl = this.createRootUrl(route);
let breadcrumb = this.breadcrumbs.find(bc => bc.url === rootUrl);
while (route.firstChild != null) {
route = route.firstChild;

breadcrumb.displayName = name;
if (route.routeConfig === null) { continue; }
if (!route.routeConfig.path) { continue; }

this.onBreadcrumbChange.emit(this.breadcrumbs);
url += `/${this.createUrl(route)}`;

if (!route.data['breadcrumb']) { continue; }

this.breadcrumbs.push(this.createBreadcrumb(route, url));
}

this.breadcrumbChanged.emit(this.breadcrumbs);
}

private createBreadcrumb(route: ActivatedRouteSnapshot, url: string): Breadcrumb {
return {
displayName: route.data["breadcrumb"],
terminal: route.children.length === 0 || !route.firstChild.routeConfig.path,
displayName: route.data['breadcrumb'],
terminal: this.isTerminal(route),
url: url
}
}

private isTerminal(route: ActivatedRouteSnapshot) {
return route.firstChild === null
|| route.firstChild.routeConfig === null
|| !route.firstChild.routeConfig.path;
}

private createUrl(route: ActivatedRouteSnapshot) {
return route.url.map(s => s.toString()).join('/');
return route.url.map(function (s) { return s.toString(); }).join('/');
}

private createRootUrl(route: ActivatedRouteSnapshot) {
let url = "";
let url = '';
let next = route.root;

while (next.firstChild !== route) {
while (next.firstChild !== route && next.firstChild !== null) {
next = next.firstChild;
if (!next.routeConfig.path) continue;

if (next.routeConfig === null) { continue; }
if (!next.routeConfig.path) { continue; }

url += `/${this.createUrl(next)}`;
}
Expand Down

0 comments on commit 5e05205

Please sign in to comment.