annotate src/app/feature-extraction-menu/feature-extraction-menu.component.ts @ 184:7643e60dc1dd

Half height.
author Lucas Thompson <dev@lucas.im>
date Wed, 22 Mar 2017 11:22:48 +0000
parents bf8826d4e2c6
children 53ea6406d601
rev   line source
dev@74 1 import {
dev@74 2 Component, OnInit, Output, EventEmitter, Input,
dev@74 3 OnDestroy
dev@74 4 } from '@angular/core';
dev@44 5 import {FeatureExtractionService} from "../services/feature-extraction/feature-extraction.service";
dev@74 6 import {ListResponse} from "piper";
dev@74 7 import {Subscription} from "rxjs";
dev@44 8
dev@47 9 export interface ExtractorOutputInfo {
dev@47 10 extractorKey: string;
dev@47 11 combinedKey: string;
dev@47 12 outputId: string;
dev@44 13 name: string;
dev@44 14 }
dev@44 15
dev@44 16 @Component({
dev@44 17 selector: 'app-feature-extraction-menu',
dev@44 18 templateUrl: './feature-extraction-menu.component.html',
dev@44 19 styleUrls: ['./feature-extraction-menu.component.css']
dev@44 20 })
dev@74 21 export class FeatureExtractionMenuComponent implements OnInit, OnDestroy {
dev@44 22
dev@48 23 @Input()
dev@48 24 set disabled(isDisabled: boolean) {
dev@48 25 this.isDisabled = isDisabled;
dev@48 26 }
dev@48 27
dev@48 28 get disabled() {
dev@48 29 return this.isDisabled;
dev@48 30 }
dev@48 31
dev@47 32 @Output() requestOutput: EventEmitter<ExtractorOutputInfo>;
dev@47 33
dev@48 34 private isDisabled: boolean;
dev@47 35 private extractorsMap: Map<string, ExtractorOutputInfo>;
dev@74 36 private populateExtractors: (available: ListResponse) => void;
dev@47 37 extractors: Iterable<ExtractorOutputInfo>;
dev@74 38 private librariesUpdatedSubscription: Subscription;
dev@44 39
dev@44 40 constructor(private piperService: FeatureExtractionService) {
dev@47 41 this.extractorsMap = new Map();
dev@44 42 this.extractors = [];
dev@51 43 this.requestOutput = new EventEmitter<ExtractorOutputInfo>();
dev@48 44 this.isDisabled = true;
dev@74 45 this.populateExtractors = available => {
dev@46 46 const maxCharacterLimit = 50;
dev@46 47 available.available.forEach(staticData => {
dev@47 48 const isSingleOutputExtractor = staticData.basicOutputInfo.length === 1;
dev@47 49 staticData.basicOutputInfo.forEach(output => {
dev@47 50 const combinedKey = `${staticData.key}:${output.identifier}`;
dev@47 51 this.extractorsMap.set(combinedKey, {
dev@47 52 extractorKey: staticData.key,
dev@47 53 combinedKey: combinedKey,
dev@47 54 name: (
dev@47 55 isSingleOutputExtractor
dev@47 56 ? staticData.basic.name
dev@47 57 : `${staticData.basic.name}: ${output.name}`
dev@47 58 ).substr(0, maxCharacterLimit) + '...',
dev@47 59 outputId: output.identifier
dev@46 60 });
dev@47 61 });
dev@46 62 });
dev@47 63 this.extractors = [...this.extractorsMap.values()];
dev@74 64 };
dev@74 65 }
dev@74 66
dev@74 67 ngOnInit() {
dev@74 68 this.piperService.list().then(this.populateExtractors);
dev@74 69 this.librariesUpdatedSubscription = this.piperService.librariesUpdated$.subscribe(this.populateExtractors);
dev@44 70 }
dev@44 71
dev@47 72 extract(combinedKey: string): void {
dev@100 73 const info: ExtractorOutputInfo =
dev@100 74 this.extractorsMap.get(combinedKey);
dev@100 75 if (info) {
dev@100 76 this.requestOutput.emit(info);
dev@100 77 }
dev@47 78 }
dev@47 79
dev@74 80 load(): void {
dev@74 81 this.piperService.updateAvailableLibraries().subscribe(res => {
dev@74 82 Object.keys(res).forEach(key => this.piperService.load(key));
dev@74 83 });
dev@74 84 }
dev@74 85
dev@74 86 ngOnDestroy(): void {
dev@74 87 this.librariesUpdatedSubscription.unsubscribe();
dev@74 88 }
dev@44 89 }