annotate src/app/visualisations/regions/regions.component.ts @ 481:7253d73ac7c9

Use new Region layer
author Chris Cannam <cannam@all-day-breakfast.com>
date Fri, 21 Jul 2017 16:22:51 +0100
parents 0fbba61603b3
children abbc096e0335
rev   line source
cannam@480 1 /**
cannam@480 2 * Created by lucast on 31/05/2017.
cannam@480 3 */
cannam@480 4 import {
cannam@480 5 InspectableVerticallyBoundedComponent,
cannam@480 6 VerticallyBounded,
cannam@480 7 VerticalScaleRenderer,
cannam@480 8 VerticalValueInspectorRenderer,
cannam@480 9 WavesComponent
cannam@480 10 } from '../waves-base.component';
cannam@480 11 import {
cannam@480 12 ChangeDetectionStrategy,
cannam@480 13 Component,
cannam@480 14 Input,
cannam@480 15 } from '@angular/core';
cannam@480 16 import {Region} from '../FeatureUtilities';
cannam@480 17 import Waves from 'waves-ui-piper';
cannam@480 18
cannam@480 19 @Component({
cannam@480 20 selector: 'ugly-regions',
cannam@480 21 templateUrl: '../waves-template.html',
cannam@480 22 styleUrls: ['../waves-template.css'],
cannam@480 23 changeDetection: ChangeDetectionStrategy.OnPush,
cannam@480 24 providers: [
cannam@480 25 { provide: VerticallyBounded, useExisting: RegionsComponent },
cannam@480 26 { provide: VerticalScaleRenderer, useExisting: RegionsComponent },
cannam@480 27 {provide: VerticalValueInspectorRenderer, useExisting: RegionsComponent },
cannam@480 28 {provide: WavesComponent, useExisting: RegionsComponent}
cannam@480 29 ]
cannam@480 30 })
cannam@480 31 export class RegionsComponent extends InspectableVerticallyBoundedComponent<Region[]> {
cannam@480 32 private currentVerticalRange: [number, number];
cannam@480 33
cannam@480 34 get range(): [number, number] {
cannam@480 35 return this.currentVerticalRange;
cannam@480 36 }
cannam@480 37
cannam@480 38 @Input() set regions(regions: Region[]) {
cannam@480 39 this.feature = regions;
cannam@480 40 }
cannam@480 41
cannam@480 42 protected get featureLayers(): Layer[] {
cannam@480 43 this.currentVerticalRange = findVerticalRange(this.feature);
cannam@480 44 return [
cannam@481 45 new Waves.helpers.RegionLayer(
cannam@480 46 this.feature,
cannam@480 47 {
cannam@480 48 height: this.height,
cannam@480 49 color: this.colour,
cannam@480 50 yDomain: this.currentVerticalRange
cannam@480 51 }
cannam@480 52 )
cannam@480 53 ];
cannam@480 54 }
cannam@480 55 }
cannam@480 56
cannam@480 57 // TODO there might be scope to create a generic utility function like this
cannam@480 58 function findVerticalRange(regions: Region[]): [number, number] {
cannam@480 59 let [min, max] = regions.reduce((acc, region) => {
cannam@480 60 const [min, max] = acc;
cannam@480 61 return [Math.min (min, region.value), Math.max (max, region.value)];
cannam@480 62 }, [Infinity, -Infinity]);
cannam@480 63 if (min === Infinity) {
cannam@480 64 min = 0;
cannam@480 65 max = 1;
cannam@480 66 }
cannam@480 67 return [ min, max ];
cannam@480 68 }