dev@74: import { dev@236: Component, dev@236: OnInit, dev@236: Output, dev@236: EventEmitter, dev@236: Input, dev@74: OnDestroy dev@74: } from '@angular/core'; dev@236: import { dev@236: FeatureExtractionService dev@236: } from '../services/feature-extraction/feature-extraction.service'; dev@236: import {ListResponse} from 'piper'; dev@236: import {Subscription} from 'rxjs/Subscription'; dev@236: import {MdSelect} from '@angular/material'; dev@44: dev@47: export interface ExtractorOutputInfo { dev@47: extractorKey: string; dev@47: combinedKey: string; dev@47: outputId: string; dev@44: name: string; dev@44: } dev@44: dev@44: @Component({ dev@236: selector: 'ugly-feature-extraction-menu', dev@44: templateUrl: './feature-extraction-menu.component.html', dev@44: styleUrls: ['./feature-extraction-menu.component.css'] dev@44: }) dev@74: export class FeatureExtractionMenuComponent implements OnInit, OnDestroy { dev@44: dev@48: @Input() dev@48: set disabled(isDisabled: boolean) { dev@48: this.isDisabled = isDisabled; dev@48: } dev@48: dev@48: get disabled() { dev@48: return this.isDisabled; dev@48: } dev@48: dev@47: @Output() requestOutput: EventEmitter; dev@47: dev@48: private isDisabled: boolean; dev@47: private extractorsMap: Map; dev@74: private populateExtractors: (available: ListResponse) => void; dev@47: extractors: Iterable; dev@74: private librariesUpdatedSubscription: Subscription; dev@44: dev@44: constructor(private piperService: FeatureExtractionService) { dev@47: this.extractorsMap = new Map(); dev@44: this.extractors = []; dev@51: this.requestOutput = new EventEmitter(); dev@48: this.isDisabled = true; dev@74: this.populateExtractors = available => { dev@46: const maxCharacterLimit = 50; dev@46: available.available.forEach(staticData => { dev@47: const isSingleOutputExtractor = staticData.basicOutputInfo.length === 1; dev@47: staticData.basicOutputInfo.forEach(output => { dev@47: const combinedKey = `${staticData.key}:${output.identifier}`; dev@47: this.extractorsMap.set(combinedKey, { dev@47: extractorKey: staticData.key, dev@47: combinedKey: combinedKey, dev@47: name: ( dev@47: isSingleOutputExtractor dev@47: ? staticData.basic.name dev@47: : `${staticData.basic.name}: ${output.name}` dev@47: ).substr(0, maxCharacterLimit) + '...', dev@47: outputId: output.identifier dev@46: }); dev@47: }); dev@46: }); dev@47: this.extractors = [...this.extractorsMap.values()]; dev@74: }; dev@74: } dev@74: dev@74: ngOnInit() { dev@74: this.piperService.list().then(this.populateExtractors); dev@236: this.librariesUpdatedSubscription = dev@236: this.piperService.librariesUpdated$.subscribe(this.populateExtractors); dev@44: } dev@44: dev@47: extract(combinedKey: string): void { dev@100: const info: ExtractorOutputInfo = dev@100: this.extractorsMap.get(combinedKey); dev@100: if (info) { dev@100: this.requestOutput.emit(info); dev@100: } dev@47: } dev@47: dev@236: load(select: MdSelect): void { dev@236: console.warn(select, select._keyManager); dev@236: const item = select._keyManager.activeItemIndex; dev@236: select._keyManager.setFirstItemActive(); dev@74: this.piperService.updateAvailableLibraries().subscribe(res => { dev@74: Object.keys(res).forEach(key => this.piperService.load(key)); dev@74: }); dev@74: } dev@74: dev@74: ngOnDestroy(): void { dev@74: this.librariesUpdatedSubscription.unsubscribe(); dev@74: } dev@44: }