annotate src/app/feature-extraction-menu/feature-extraction-menu.component.ts @ 431:686cf74aa0a2

Allow clicking whole list item to extract. Kinda makes the plus button redundant. Add guard in extract method.
author Lucas Thompson <dev@lucas.im>
date Wed, 07 Jun 2017 08:46:30 +0100
parents 8fee76ab8e90
children 48904aa87ba3
rev   line source
dev@74 1 import {
dev@236 2 Component,
dev@236 3 OnInit,
dev@236 4 Output,
dev@236 5 EventEmitter,
dev@236 6 Input,
dev@74 7 OnDestroy
dev@74 8 } from '@angular/core';
dev@236 9 import {
dev@236 10 FeatureExtractionService
dev@236 11 } from '../services/feature-extraction/feature-extraction.service';
dev@236 12 import {ListResponse} from 'piper';
dev@236 13 import {Subscription} from 'rxjs/Subscription';
dev@269 14 import {MdSelect} from '@angular/material';
dev@44 15
dev@47 16 export interface ExtractorOutputInfo {
dev@47 17 extractorKey: string;
dev@47 18 combinedKey: string;
dev@47 19 outputId: string;
dev@44 20 name: string;
dev@44 21 }
dev@44 22
dev@423 23 interface ExtractorInfo {
dev@423 24 name: string;
dev@423 25 outputs: ExtractorOutputInfo[];
dev@423 26 }
dev@423 27
dev@44 28 @Component({
dev@236 29 selector: 'ugly-feature-extraction-menu',
dev@44 30 templateUrl: './feature-extraction-menu.component.html',
dev@44 31 styleUrls: ['./feature-extraction-menu.component.css']
dev@44 32 })
dev@74 33 export class FeatureExtractionMenuComponent implements OnInit, OnDestroy {
dev@44 34
dev@48 35 @Input()
dev@48 36 set disabled(isDisabled: boolean) {
dev@48 37 this.isDisabled = isDisabled;
dev@48 38 }
dev@48 39
dev@48 40 get disabled() {
dev@48 41 return this.isDisabled;
dev@48 42 }
dev@426 43 @Input() onRequestOutput: () => void;
dev@48 44
dev@47 45 @Output() requestOutput: EventEmitter<ExtractorOutputInfo>;
dev@47 46
dev@48 47 private isDisabled: boolean;
dev@74 48 private populateExtractors: (available: ListResponse) => void;
dev@423 49 extractors: Iterable<ExtractorInfo>;
dev@74 50 private librariesUpdatedSubscription: Subscription;
dev@44 51
dev@44 52 constructor(private piperService: FeatureExtractionService) {
dev@44 53 this.extractors = [];
dev@51 54 this.requestOutput = new EventEmitter<ExtractorOutputInfo>();
dev@48 55 this.isDisabled = true;
dev@74 56 this.populateExtractors = available => {
dev@423 57 this.extractors = available.available.reduce((acc, staticData) => {
dev@423 58 const name = staticData.basic.name;
dev@423 59 const outputs: ExtractorOutputInfo[] =
dev@423 60 staticData.basicOutputInfo.map(output => {
dev@423 61 const combinedKey = `${staticData.key}:${output.identifier}`;
dev@423 62 return {
dev@423 63 extractorKey: staticData.key,
dev@423 64 combinedKey: combinedKey,
dev@423 65 name: output.name,
dev@423 66 outputId: output.identifier
dev@423 67 };
dev@46 68 });
dev@423 69 acc.push({name, outputs});
dev@423 70 return acc;
dev@423 71 }, [] as ExtractorInfo[]);
dev@74 72 };
dev@74 73 }
dev@74 74
dev@269 75 private getFirstSelectedItemOrEmpty(select: MdSelect): string {
dev@269 76 const selected = select.selected;
dev@269 77 if (selected) {
dev@269 78 return selected instanceof Array ? selected[0].value : selected.value;
dev@269 79 }
dev@269 80 return '';
dev@269 81 }
dev@269 82
dev@74 83 ngOnInit() {
dev@236 84 this.librariesUpdatedSubscription =
dev@236 85 this.piperService.librariesUpdated$.subscribe(this.populateExtractors);
dev@324 86 this.piperService.list().then(this.populateExtractors);
dev@44 87 }
dev@44 88
dev@423 89 extract(info: ExtractorOutputInfo): void {
dev@426 90 if (this.onRequestOutput) {
dev@426 91 this.onRequestOutput();
dev@426 92 }
dev@431 93 if (info && !this.disabled) {
dev@100 94 this.requestOutput.emit(info);
dev@100 95 }
dev@47 96 }
dev@47 97
dev@238 98 load(): void {
dev@324 99 this.piperService.updateAvailableLibraries();
dev@74 100 }
dev@74 101
dev@74 102 ngOnDestroy(): void {
dev@74 103 this.librariesUpdatedSubscription.unsubscribe();
dev@74 104 }
dev@44 105 }