From 8ddf19220fc1239f3bb30f3f370e3129898b50cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arkadiusz=20Pa=C5=82ka?= Date: Tue, 28 Jan 2020 16:29:22 +0100 Subject: [PATCH] feat(pmp-web): implement fetching data from api for single repository Fix invalid property name at shared because API returns prsStatistics instead stat property. --- .../+state/repository-statistics.actions.ts | 4 +- .../+state/repository-statistics.reducer.ts | 4 +- .../repository-statistics-data.service.ts | 45 ++++++------------- .../repository-statistics.component.html | 7 +-- .../repository-statistics.component.ts | 11 +++-- .../table-pr-statistic.component.html | 6 ++- .../table-pr-statistic.component.scss | 2 +- .../repository-statistics.interface.ts | 2 +- 8 files changed, 36 insertions(+), 45 deletions(-) diff --git a/libs/pmp-web/repository/repository-statistics/data-access/src/lib/+state/repository-statistics.actions.ts b/libs/pmp-web/repository/repository-statistics/data-access/src/lib/+state/repository-statistics.actions.ts index 034e9ffa..28bd59b0 100644 --- a/libs/pmp-web/repository/repository-statistics/data-access/src/lib/+state/repository-statistics.actions.ts +++ b/libs/pmp-web/repository/repository-statistics/data-access/src/lib/+state/repository-statistics.actions.ts @@ -1,7 +1,7 @@ import { Action } from '@ngrx/store'; import { HttpErrorResponse } from '@angular/common/http'; import { GetRepositoryStatisticsPayload } from '@pimp-my-pr/pmp-web/repository/domain'; -import { RepositoryModel } from '@pimp-my-pr/shared/domain'; +import { RepositoryStatistics } from '@pimp-my-pr/shared/domain'; export namespace fromSingleRepositoryStatisticsActions { export enum Types { @@ -25,7 +25,7 @@ export namespace fromSingleRepositoryStatisticsActions { export class GetRepositoryStatisticsSuccess implements Action { readonly type = Types.GetRepositoryStatisticsSuccess; - constructor(public payload: RepositoryModel) {} + constructor(public payload: RepositoryStatistics) {} } export type CollectiveType = diff --git a/libs/pmp-web/repository/repository-statistics/data-access/src/lib/+state/repository-statistics.reducer.ts b/libs/pmp-web/repository/repository-statistics/data-access/src/lib/+state/repository-statistics.reducer.ts index 3b46472e..9355bfe4 100644 --- a/libs/pmp-web/repository/repository-statistics/data-access/src/lib/+state/repository-statistics.reducer.ts +++ b/libs/pmp-web/repository/repository-statistics/data-access/src/lib/+state/repository-statistics.reducer.ts @@ -1,11 +1,11 @@ import { fromSingleRepositoryStatisticsActions } from './repository-statistics.actions'; import { HttpErrorResponse } from '@angular/common/http'; -import { RepositoryModel } from '@pimp-my-pr/shared/domain'; +import { RepositoryStatistics } from '@pimp-my-pr/shared/domain'; export const SINGLEREPOSITORYSTATISTICS_FEATURE_KEY = 'singleRepositoryStatistics'; export interface SingleRepositoryStatisticsState { - repositoryStatistics: RepositoryModel | null; + repositoryStatistics: RepositoryStatistics | null; repositoryStatisticsLoading: boolean; repositoryStatisticsLoadError: HttpErrorResponse | null; } diff --git a/libs/pmp-web/repository/repository-statistics/data-access/src/lib/services/repository-statistics-data.service.ts b/libs/pmp-web/repository/repository-statistics/data-access/src/lib/services/repository-statistics-data.service.ts index 05f134b0..44fc268e 100644 --- a/libs/pmp-web/repository/repository-statistics/data-access/src/lib/services/repository-statistics-data.service.ts +++ b/libs/pmp-web/repository/repository-statistics/data-access/src/lib/services/repository-statistics-data.service.ts @@ -1,43 +1,26 @@ import { Injectable } from '@angular/core'; -import { Observable, of } from 'rxjs'; +import { Observable } from 'rxjs'; import { HttpClient } from '@angular/common/http'; import { GetRepositoryStatisticsPayload } from '@pimp-my-pr/pmp-web/repository/domain'; -import { RepositoryModel } from '@pimp-my-pr/shared/domain'; - -const mockedData: RepositoryModel = { - // TODO mocked data for repository - owner: 'valueadd', - fullName: 'pimp-my-pr', - name: 'pmp', - pictureUrl: 'https://picsum.photos/id/1025/200/300', - prsStatistics: [ - { - author: { - name: 'MockUser', - avatarUrl: 'https://picsum.photos/id/237/200/300', - id: 1231 - }, - commentsCount: 123, - createdAt: '12/12/12', - linesOfCodeToCheck: 3245, - reviewCommentsCount: 234, - id: 2345, - timeWaiting: '124', - title: '12414', - url: 'https://picsum.photos/id/1050/200/300' - } - ] -}; +import { IResponse, RepositoryStatistics } from '@pimp-my-pr/shared/domain'; +import { urlFactory } from '@valueadd/typed-urls'; +import { map } from 'rxjs/operators'; @Injectable() export class RepositoryStatisticsDataService { readonly endpoints = { - // TODO missing API url to get details about repository - getRepositoryStatistics: '' + getRepositoryStatistics: urlFactory<'repositoryId'>('/api/repository/:repositoryId', true) }; + constructor(private http: HttpClient) {} - getRepositoryStatistics(payload: GetRepositoryStatisticsPayload): Observable { - return of(mockedData); + getRepositoryStatistics( + payload: GetRepositoryStatisticsPayload + ): Observable { + return this.http + .get>( + this.endpoints.getRepositoryStatistics.url({ repositoryId: payload.id }) + ) + .pipe(map((res: IResponse) => res.data)); } } diff --git a/libs/pmp-web/repository/repository-statistics/feature/src/lib/repository-statistics/repository-statistics.component.html b/libs/pmp-web/repository/repository-statistics/feature/src/lib/repository-statistics/repository-statistics.component.html index 7c5a03cc..5aa133fb 100644 --- a/libs/pmp-web/repository/repository-statistics/feature/src/lib/repository-statistics/repository-statistics.component.html +++ b/libs/pmp-web/repository/repository-statistics/feature/src/lib/repository-statistics/repository-statistics.component.html @@ -1,13 +1,14 @@
- -
diff --git a/libs/pmp-web/repository/repository-statistics/feature/src/lib/repository-statistics/repository-statistics.component.ts b/libs/pmp-web/repository/repository-statistics/feature/src/lib/repository-statistics/repository-statistics.component.ts index fd2125be..9be28435 100644 --- a/libs/pmp-web/repository/repository-statistics/feature/src/lib/repository-statistics/repository-statistics.component.ts +++ b/libs/pmp-web/repository/repository-statistics/feature/src/lib/repository-statistics/repository-statistics.component.ts @@ -2,6 +2,7 @@ import { Component, OnDestroy, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { first } from 'rxjs/operators'; import { RepositoryStatisticsFacade } from '@pimp-my-pr/pmp-web/repository/repository-statistics/data-access'; +import { PrStatistics } from '@pimp-my-pr/shared/domain'; @Component({ selector: 'pimp-my-pr-repository-statistics', @@ -9,7 +10,7 @@ import { RepositoryStatisticsFacade } from '@pimp-my-pr/pmp-web/repository/repos styleUrls: ['./repository-statistics.component.scss'] }) export class RepositoryStatisticsComponent implements OnDestroy, OnInit { - repositoryName: string | null; + repositoryId: number | null; repository$ = this.facade.repositoryStatistics$; constructor(private route: ActivatedRoute, private facade: RepositoryStatisticsFacade) {} @@ -20,10 +21,14 @@ export class RepositoryStatisticsComponent implements OnDestroy, OnInit { this.initGetRepositoryStatistics(); } + onNavigateItem(prStatistics: PrStatistics): void { + window.open(prStatistics.url, '_blank'); + } + private initGetRepositoryStatistics(): void { this.route.params.pipe(first()).subscribe(params => { - this.repositoryName = params.repositoryName; - this.facade.getRepositoryStatistics({ id: this.repositoryName }); + this.repositoryId = params.repositoryId; + this.facade.getRepositoryStatistics({ id: this.repositoryId }); }); } } diff --git a/libs/pmp-web/shared/ui-table-pr-statistic/src/lib/table-pr-statistic/table-pr-statistic.component.html b/libs/pmp-web/shared/ui-table-pr-statistic/src/lib/table-pr-statistic/table-pr-statistic.component.html index 8d4e5c4b..828694d4 100644 --- a/libs/pmp-web/shared/ui-table-pr-statistic/src/lib/table-pr-statistic/table-pr-statistic.component.html +++ b/libs/pmp-web/shared/ui-table-pr-statistic/src/lib/table-pr-statistic/table-pr-statistic.component.html @@ -58,8 +58,10 @@ {{ 'Reviewers' }} - - Placeholder + + + + diff --git a/libs/pmp-web/shared/ui-table-pr-statistic/src/lib/table-pr-statistic/table-pr-statistic.component.scss b/libs/pmp-web/shared/ui-table-pr-statistic/src/lib/table-pr-statistic/table-pr-statistic.component.scss index de34c8fb..1f7f7447 100644 --- a/libs/pmp-web/shared/ui-table-pr-statistic/src/lib/table-pr-statistic/table-pr-statistic.component.scss +++ b/libs/pmp-web/shared/ui-table-pr-statistic/src/lib/table-pr-statistic/table-pr-statistic.component.scss @@ -12,7 +12,7 @@ } } -.custom-column { +.comments-column { color: rgba(0, 0, 0, 0.6); flex: unset; width: 96px; diff --git a/libs/shared/domain/src/lib/interfaces/repository-statistics.interface.ts b/libs/shared/domain/src/lib/interfaces/repository-statistics.interface.ts index 3e6b7019..e708da8b 100644 --- a/libs/shared/domain/src/lib/interfaces/repository-statistics.interface.ts +++ b/libs/shared/domain/src/lib/interfaces/repository-statistics.interface.ts @@ -8,5 +8,5 @@ export interface RepositoryStatistics { pendingPrs?: number; pictureUrl: string; sumOfHoursPrsWaiting?: number; - stat?: PrStatistics[]; + prsStatistics?: PrStatistics[]; }