From 145491fd2ab25bb43f94389732f5c6b40b410b74 Mon Sep 17 00:00:00 2001 From: Natalia Gawron Date: Sat, 9 Jan 2021 22:12:20 +0100 Subject: [PATCH] SES-13 implemented getCharacterStats method --- .../player-dashboard.component.ts | 34 ++++++++++++++++--- .../src/services/character.service.ts | 15 ++++++++ .../CharacterStatsViewModel.ts | 13 +++++++ 3 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterStatsViewModel.ts diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/player-dashboard/player-dashboard.component.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/player-dashboard/player-dashboard.component.ts index 91157af..89bbe3d 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/player-dashboard/player-dashboard.component.ts +++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/player-dashboard/player-dashboard.component.ts @@ -1,14 +1,28 @@ import { Component, OnInit } from '@angular/core'; -import {AbilityViewModel} from "../../../types/viewmodels/ability-viewmodels/AbilityViewModel"; +import { AbilityViewModel } from "../../../types/viewmodels/ability-viewmodels/AbilityViewModel"; +import {AppState} from "../../store/models/app-state.model"; +import {Store} from "@ngrx/store"; +import {first} from "rxjs/operators"; +import {CharacterService} from "../../../services/character.service"; +import {CharacterStatsViewModel} from "../../../types/viewmodels/character-viewmodels/CharacterStatsViewModel"; +import {ErrorResponse} from "../../../types/ErrorResponse"; +import {HttpErrorResponse} from "@angular/common/http"; @Component({ selector: 'app-player-dashboard', templateUrl: './player-dashboard.component.html', styleUrls: ['./player-dashboard.component.css'], }) -export class PlayerDashboardComponent { +export class PlayerDashboardComponent implements OnInit { isExpanded = false; selected = false; + characterStats: CharacterStatsViewModel[]; + + constructor(private store: Store, private characterService: CharacterService) {} + + ngOnInit() { + this.getCharacterStats(); + } ability: AbilityViewModel = { id: 1, @@ -26,11 +40,21 @@ export class PlayerDashboardComponent { ] } - collapse() { - this.isExpanded = false; + getCharacterStats() { + this.store.select( s => s.playerStore.characterId).pipe(first()).subscribe((characterId) => { + this.characterService.getCharacterStats(characterId).pipe(first()).subscribe((characterStats) => { + this.characterStats = characterStats; + }, (error: ErrorResponse | HttpErrorResponse) => { + if (error instanceof HttpErrorResponse) { + error = error.error as ErrorResponse; + } + console.error(error.message); + }); + }) } toggle() { - this.isExpanded = !this.isExpanded; + this.isExpanded = !this.isExpanded; } + } diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts b/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts index c390a44..db70675 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts +++ b/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts @@ -6,6 +6,7 @@ import {Either} from '../types/Either'; import {CharacterForLoginViewModel} from '../types/viewmodels/character-viewmodels/CharacterForLoginViewModel'; import {switchMap, retry} from 'rxjs/operators'; import {LoggedCharactersViewModel} from '../types/viewmodels/character-viewmodels/LoggedCharactersViewModel'; +import {CharacterStatsViewModel} from "../types/viewmodels/character-viewmodels/CharacterStatsViewModel"; Injectable({ providedIn: 'root' @@ -41,4 +42,18 @@ export class CharacterService { }) ); } + + getCharacterStats(characterId: number): Observable { + const params = new HttpParams().set('characterId', characterId.toString()) + return this.http.get>( this.baseUrl + 'characterStats', {params}).pipe( + switchMap( response => { + if (response.isLeft) { + return of(response.left); + } else { + return throwError(response.right); + } + }) + ); + } + } diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterStatsViewModel.ts b/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterStatsViewModel.ts new file mode 100644 index 0000000..9787b40 --- /dev/null +++ b/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterStatsViewModel.ts @@ -0,0 +1,13 @@ +export interface CharacterStatsViewModel { + id: number; + name: string; + value: number; + modification: number; + savingThrows: number; + canSaveThrows: boolean; + skills: { + name: string; + value: number; + can: boolean; + }; +}