liberry
Version:
liberry is a command utility to help you easily set up, develop, and host your own project pattern library.
52 lines (47 loc) • 2.33 kB
text/typescript
import {Component, provide, SkipSelf, Optional, Inject, Input, forwardRef} from '@angular/core';
import metadata from 'liberry';
import {RepeaterManager} from "app/components/RepeaterManager";
import {RouteParams} from '@angular/router';
import {LibraryContext} from "app/providers/LibraryContext";
import createPrototypeChain from "app/utilities/createPrototypeChain";
import {objectPath} from "app/utilities/objectPath";
import componentBuilder from 'app/utilities/componentBuilder';
import _ from "lodash";
import BaseLibraryComponent from "app/classes/BaseLibraryComponent";
import {BehaviorSubject} from "rxjs/BehaviorSubject";
import {Parent, LibraryMetadata} from '../constants/DependencyTokens';
import provideAsParent from 'app/providers/provideAsParent';
export var SiteComponents = componentBuilder(metadata.site.components, "Component", (component) => {
({
selector: `${component.selector}, ${component.name}-component, [component="${component.name}"]`,
template: component.html,
directives: [RepeaterManager],
providers: [LibraryContext, provideAsParent(SiteComponent)]
})
class SiteComponent {
constructor(
private _routeParams: RouteParams,
() private parent: Parent,
public _libraryMetadata: LibraryMetadata
) {
this.url = _routeParams.params;
this.library = _libraryMetadata.library;
}
("context") public contextDef;
public url;
public library;
public observableContext = new BehaviorSubject<Object>(undefined);
public id = `${component.name}Component`;
ngOnInit() {
//console.log(`init: ${component.name}Component`, `parent: ${this.parent.id}`, this.parent);
var cmp = this;
this.parent.observableContext.subscribe((context) => {
cmp.context = !cmp.contextDef ? (context || cmp.library) : objectPath.get(cmp.library, cmp.contextDef);
_.extend(cmp, cmp.context);
cmp.observableContext.next(cmp.context);
console.log(`next: ${component.name}Component`, `parent: ${this.parent.id}`, cmp.context);
});
}
}
return SiteComponent;
});