liberry
Version:
liberry is a command utility to help you easily set up, develop, and host your own project pattern library.
87 lines (77 loc) • 3.17 kB
text/typescript
import {Component, Optional, SkipSelf, Inject} from "@angular/core";
import {RouteParams} from '@angular/router';
import metadata from "liberry";
import BaseLibraryComponent from 'app/classes/BaseLibraryComponent';
import {LibraryContext} from "app/providers/LibraryContext";
import _ from "lodash";
import {objectPath} from "app/utilities/objectPath";
import {BehaviorSubject} from "rxjs/BehaviorSubject";
import {Parent, LibraryMetadata} from '../constants/DependencyTokens';
import provideAsParent from 'app/providers/provideAsParent';
export var PageComponentRoutes = [];
var site : any = metadata.site;
for (var i in site.pages.routes) {
if (site.pages[i].html) {
var page = site.pages[i];
({
selector: `${i}-page`,
template: page.html,
providers: [provideAsParent(PageComponent)]
})
class PageComponent extends BaseLibraryComponent {
constructor(
public routeParams: RouteParams,
() public parent: Parent,
public libraryMetadata: LibraryMetadata
) {
this.url = routeParams.params;
this.library = libraryMetadata.library;
};
public url;
public library;
public contextDef;
public observableContext = new BehaviorSubject<Object>(undefined);
public id = `${page.name}Page`;
ngOnInit() {
//console.log(`init: ${i}Page`)
var cmp = this;
this.parent.observableContext.subscribe((context) => {
console.log(`next: ${i}Page`)
cmp.context = !cmp.contextDef ? (context || cmp.library) : objectPath.get(cmp.library, cmp.contextDef);
_.extend(cmp, cmp.context);
cmp.observableContext.next(cmp.context);
});
}
}
var componentName = `${i}Page`;
Object.defineProperty(PageComponent, "name", {
value: componentName
});
var RouteConfig = {
path: site.pages[i].path.slice(6, Infinity),
name: site.pages[i].title,
component: PageComponent,
useAsDefault: false
};
var routes = site.pages.routes;
if (typeof(routes) === "object") {
//set custom route
if (routes.hasOwnProperty(i)) {
RouteConfig.path = routes[i];
}
//determine if this should be the default route
if (site.pages.hasOwnProperty("default")
&& routes.hasOwnProperty(site.pages.default)
&& site.pages.default === i) {
RouteConfig.useAsDefault = true;
}
else if (i.toLowerCase() === "index") {
RouteConfig.useAsDefault = true;
}
}
else if (i.toLowerCase() === "index") {
RouteConfig.useAsDefault = true;
}
}
PageComponentRoutes.push(RouteConfig);
};