UNPKG

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
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) => { @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, @SkipSelf() private parent: Parent, public _libraryMetadata: LibraryMetadata ) { this.url = _routeParams.params; this.library = _libraryMetadata.library; } @Input("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; });