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

100% Statements 47/47
75% Branches 3/4
100% Functions 13/13
100% Lines 41/41
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 78 79 801x 1x 1x         1x 1x 1x 1x 1x 1x 1x       1x   1x 1x 1x   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     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 { ValidationsFormatService } from './validations-format.service';
import { ValidationsActions } from './validations.actions';
import { Logger } from '../../../common/mw.common.module';
import { waitFor$ } from '../../../store/selector-helpers/selector-helpers';
 
@Injectable()
export class ValidationsDataService extends DataService {
 
  @select(['pages', 'validations', 'files']) files$: Observable<IFileInfo[]>;
  @select(['pages', 'validations', 'fileInfo']) fileInfo$: Observable<IFileInfo>;
  @select(['config', 'validationsConfig']) config$: Observable<any>;
 
  protected PAGE = 'validations';
  protected baseUrl;
  protected filePrefixes;
  private filesToInit;
  private filesToDisplay;
 
  constructor (
    protected formatService: ValidationsFormatService,
    protected nameParsingService: NameParsingService,
    protected listFormatterService: ListFormatterService,
    protected fileService: FileService,
    protected logger: Logger,
    protected actions: ValidationsActions,
    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: 'validations',
            metric: files[0].metric,
            color: files[0].badgeColor,
            history: this.calcHistory(files)
          };
      });
  }
 
  private calcHistory(files): number[] {
    return (files || [])
      .filter(f => !!f.metric)
      .map(f => f.metric)
      .reverse();
  }
}