import { Component, Input, OnInit, ComponentFactoryResolver, ViewChild, SimpleChanges, ComponentFactory, Inject, Type} from '@angular/core'; import { Feature } from 'ol'; import { Geometry } from 'ol/geom'; import { AbstractFeatureListFeatureComponent,FeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component'; import { WidgetHostDirective } from '../widget-host/widget-host.directive'; @Component({ selector: 'fm-map-feature-list-feature-container', template: `
` }) export class FeatureListFeatureContainerComponent { constructor(private componentFactoryResolver: ComponentFactoryResolver, @Inject(AbstractFeatureListFeatureComponent) public featureLists: AbstractFeatureListFeatureComponent[] ) { this.featureLists = [...this.featureLists].reverse(); } @Input() feature: Feature; @ViewChild(WidgetHostDirective, { static: true }) widgetHost: WidgetHostDirective; loadComponent() { let componentFactory: ComponentFactory = this.componentFactoryResolver.resolveComponentFactory(FeatureListFeatureComponent); // default let selected = -1; let maxMatches =0; for (let i = 0; i < this.featureLists.length; i++) { let matches=0; let criteria=0; if (this.featureLists[i]['forItemType']) { criteria++; if(this.featureLists[i]['forItemType'].split(",").filter(part => part == this.feature.get("itemType")).length == 1) { matches++; } } if(criteria == matches && matches > maxMatches) { selected=i; maxMatches = matches; } } if (selected >= 0) { componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.featureLists[selected]['constructor'] as any); } const viewContainerRef = this.widgetHost.viewContainerRef; viewContainerRef.clear(); const componentRef = viewContainerRef.createComponent(componentFactory); (componentRef.instance).feature = this.feature; } ngOnChanges(changes: SimpleChanges) { if (changes["feature"] && changes["feature"].currentValue) { this.loadComponent(); } } }