All files / src/app/linqpad-review-pages/clinics/services clinics-data.service.ts

100% Statements 52/52
100% Branches 2/2
100% Functions 14/14
100% Lines 46/46
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 781x 1x 1x         1x 1x 1x 1x 1x 1x 1x     1x   1x 1x 1x   4x 4x           4x 4x 4x 4x 4x 4x 4x   4x     1x 1x 1x 1x         1x 1x     1x 1x 1x       2x 2x 2x   2x       1x 2x 12x 12x 2x 2x 12x   2x   1x  
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { NgRedux, select } from '@angular-redux/store';
 
import { IFileInfo } from '../../../model/fileInfo.model';
import { IAppState } from '../../../store/state/AppState';
import { IMeasureUpdate } from '../../../model/measure.model';
import { DataService } from '../../../services/data-service/data.service';
import { NameParsingService } from '../../../services/data-service/name-parsing.service';
import { ListFormatterService } from '../../../services/list-formatter.service/list-formatter.service';
import { FileService } from '../../../services/file-service/file.service';
import { ClinicsFormatService } from './clinics-format.service';
import { ClinicsActions } from './clinics.actions';
import { Logger } from '../../../common/mw.common.module';
 
@Injectable()
export class ClinicsDataService extends DataService {
 
  @select(['pages', 'clinics', 'files']) files$: Observable<IFileInfo[]>;
  @select(['pages', 'clinics', 'fileInfo']) fileInfo$: Observable<IFileInfo>;
  @select(['config', 'clinicsConfig']) config$: Observable<any>;
 
  protected PAGE = 'clinics';
  protected baseUrl = '/data/';
  protected filePrefixes;
  private filesToInit;
  private filesToDisplay;
 
  constructor (
    protected formatService: ClinicsFormatService,
    protected nameParsingService: NameParsingService,
    protected listFormatterService: ListFormatterService,
    protected fileService: FileService,
    protected logger: Logger,
    protected actions: ClinicsActions,
    private ngRedux: NgRedux<IAppState>,
  ) {
    super(formatService, nameParsingService, listFormatterService, fileService, logger, actions);
  }
 
  public initializeList() {
    this.getConfig$().subscribe(_ =>
      this.getBaseDataUrl$().subscribe(__ =>
        super.initializeList(this.filesToInit, this.filesToDisplay)
      )
    );
  }
 
  private getConfig$(): Observable<any> {
    return this.config$
      .waitFor$()
      .do(config => {
        this.filePrefixes = config.filePrefixes;
        this.filesToInit = config.numDataPointsForSparkline;
        this.filesToDisplay = config.numInitialFilesToDisplay;
      });
  }
 
  public getMeasure(): Observable<IMeasureUpdate> {
    return this.files$
      .waitFor$(data => data.length)
      .map(files => {
        return { id: 'clinics', metric: files[0].metric, color: files[0].badgeColor, history: this.calcHistory(files) };
      });
  }
 
  private calcHistory(files): number[] {
    const data = files
      .filter(f => !!f.metric)
      .map(f => (+f.metric.replace('%', '')).toFixed(4));
    const min = Math.min(...data);
    const history = data
      .map(d => +(d - min + 1).toFixed(4))
      .reverse();
    return history;
  }
}