From 706b2aa0fadfde52459036cc6e1a6ce8922fe798 Mon Sep 17 00:00:00 2001 From: Natalia Gawron Date: Fri, 22 Jan 2021 21:27:37 +0100 Subject: [PATCH] SES-156 displaying template list, created basic UI, fixed backend service --- .../create-character.component.css | 78 ++++++++++++++++++- .../create-character.component.html | 29 +++++-- .../create-character.component.ts | 37 ++++++++- .../registration/registration.component.css | 11 +++ .../select-role/select-role.component.css | 8 +- .../components/sign-in/sign-in.component.css | 11 +++ .../src/app/store/actions/player.action.ts | 13 +++- .../src/app/store/reducers/player.reducer.ts | 2 + .../src/services/character.service.ts | 14 +++- .../SessionCompanion/ClientApp/src/styles.css | 4 + .../CharacterFromTemplatesViewModel.ts | 6 ++ .../Controllers/CharacterController.cs | 4 +- 12 files changed, 201 insertions(+), 16 deletions(-) create mode 100644 SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterFromTemplatesViewModel.ts diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.css b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.css index 46fa919..6f087b8 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.css +++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.css @@ -1 +1,77 @@ -@import "../../../styles.css"; +@import '../../../styles.css'; + +mat-form-field { + color: #df7c0f; +} + +:host { + height: 100%; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +input { + min-width: 150px; + max-width: 500px; + width: 100%; +} + +.container { + margin: 5%; + display: flex; + flex-direction: column; +} +.container h1 { + margin-bottom: 1rem; +} + +.form-container { + padding: 10px; + margin: 5px; +} + +.primary-text { + height: 100px; + color: #df7c0f; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 1%; + margin: 1%; +} + +.header { + font-size: 20px; +} + +.mat-divider--custom-style { + background-color: #9e8b6e; + box-shadow: 0 1px 0 0 #d8d8d8; +} + +@media (max-width: 400px) { + .container { + margin-left: 0%; + width: 300px; + padding-top: 5%; + } +} + +@media (min-width: 401px) { + .container { + margin-left: 1%; + width: 450px; + padding-top: 10%; + } +} + +@media (min-width: 768px) { + .container { + width: 550px; + padding-top: 5%; + } +} diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.html b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.html index ba6d2cd..3320806 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.html +++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.html @@ -1,8 +1,21 @@ -

create-character works!

- +
+ arrow_back +
Create character from Template
+ + + + account_circle +
{{character.name}}
+ arrow_forward +
{{character.class}}, {{character.race}}
+ +
+
+ +
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.ts index d4be4ba..f32890a 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.ts +++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/create-character/create-character.component.ts @@ -1,5 +1,13 @@ import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; +import { Store } from '@ngrx/store'; +import { AppState } from '../../store/models/app-state.model'; +import { first } from 'rxjs/operators'; +import { ErrorResponse } from '../../../types/ErrorResponse'; +import { HttpErrorResponse } from '@angular/common/http'; +import { CharacterFromTemplatesViewModel } from '../../../types/viewmodels/character-viewmodels/CharacterFromTemplatesViewModel'; +import {CharacterService } from '../../../services/character.service'; +import {AddCharacterId, CreateCharacterFromTemplate} from "../../store/actions/player.action"; @Component({ selector: 'app-create-character', @@ -7,13 +15,40 @@ import { Router } from '@angular/router'; styleUrls: ['./create-character.component.css'] }) export class CreateCharacterComponent implements OnInit { + charactersTemplateList: CharacterFromTemplatesViewModel[]; - constructor(private router: Router) { } + constructor(private router: Router, private store: Store, private characterService: CharacterService) { } ngOnInit() { + this.getTemplateCharacters(); } onCreateCharacterButton() { this.router.navigate(['select-character']); } + + onArrowBackClick() { + this.router.navigate(['select-character']); + } + + onCharacterClick() { + this.store.dispatch(new CreateCharacterFromTemplate); + } + + getTemplateCharacters() { + this.characterService + .getTemplateCharacters() + .pipe(first()) + .subscribe( + (charactersTemplateList) => { + this.charactersTemplateList = charactersTemplateList; + }, + (error: ErrorResponse | HttpErrorResponse) => { + if (error instanceof HttpErrorResponse) { + error = error.error as ErrorResponse; + } + console.error(error.message); + } + ); + } } diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/registration/registration.component.css b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/registration/registration.component.css index 41aa481..1db5afb 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/registration/registration.component.css +++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/registration/registration.component.css @@ -64,6 +64,17 @@ input { } @media (min-width: 768px) { + .container { + width: 550px; + padding-top: 0; + } + .form-container { + padding: 10px; + margin: 0px; + } +} + +@media (min-width: 1800px) { .container { width: 550px; padding-top: 5%; diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-role/select-role.component.css b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-role/select-role.component.css index 9eaea08..e8be538 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-role/select-role.component.css +++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-role/select-role.component.css @@ -47,7 +47,7 @@ @media (min-width: 768px) { .container { - padding-top: 10%; + padding-top: 6%; } .button { margin: 20px; @@ -59,3 +59,9 @@ font-size: 40px; } } + +@media (min-width: 1800px) { + .container { + padding-top: 10%; + } +} diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.css b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.css index 41aa481..1db5afb 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.css +++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.css @@ -64,6 +64,17 @@ input { } @media (min-width: 768px) { + .container { + width: 550px; + padding-top: 0; + } + .form-container { + padding: 10px; + margin: 0px; + } +} + +@media (min-width: 1800px) { .container { width: 550px; padding-top: 5%; diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/player.action.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/player.action.ts index 690c305..7626a13 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/player.action.ts +++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/player.action.ts @@ -2,7 +2,8 @@ import {Action} from '@ngrx/store'; export enum PlayerActionTypes { ADD_CHARACTER_ID= '[PLAYER] Add character id', - CLEAR_CHARACTER_ID = '[PLAYER] Clear character id' + CLEAR_CHARACTER_ID = '[PLAYER] Clear character id', + CREATED_CHARACTER_FROM_TEMPLATE = '[PLAYER] Created character from template' } export class AddCharacterId implements Action { @@ -21,4 +22,12 @@ export class ClearCharacterId implements Action { } } -export type PlayerAction = AddCharacterId | ClearCharacterId; +export class CreateCharacterFromTemplate implements Action { + readonly type = PlayerActionTypes.CREATED_CHARACTER_FROM_TEMPLATE; + + constructor() { + + } +} + +export type PlayerAction = AddCharacterId | ClearCharacterId | CreateCharacterFromTemplate; diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts index 9a12b52..634ea87 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts +++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts @@ -9,6 +9,8 @@ export function PlayerReducer(state: PlayerStoreModel = initialState, action: Pl switch (action.type) { case PlayerActionTypes.ADD_CHARACTER_ID: return {...state, characterId: action.payload.characterId}; + case PlayerActionTypes.CREATED_CHARACTER_FROM_TEMPLATE: + return {...state}; case PlayerActionTypes.CLEAR_CHARACTER_ID: return { characterId: null}; default: diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts b/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts index db70675..123c10e 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts +++ b/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts @@ -6,7 +6,8 @@ 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"; +import {CharacterStatsViewModel} from '../types/viewmodels/character-viewmodels/CharacterStatsViewModel'; +import {CharacterFromTemplatesViewModel} from '../types/viewmodels/character-viewmodels/CharacterFromTemplatesViewModel'; Injectable({ providedIn: 'root' @@ -56,4 +57,15 @@ export class CharacterService { ); } + getTemplateCharacters(): Observable { + return this.http.get>(this.baseUrl + 'getTemplateCharacters').pipe( + switchMap(response => { + if (response.isLeft) { + return of(response.left); + } else { + return throwError(response.right); + } + })); + } + } diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/styles.css b/SessionCompanion/SessionCompanion/ClientApp/src/styles.css index cbfb6da..32aa9dc 100644 --- a/SessionCompanion/SessionCompanion/ClientApp/src/styles.css +++ b/SessionCompanion/SessionCompanion/ClientApp/src/styles.css @@ -41,6 +41,10 @@ opacity: 0.5; } +.arrow-forward:hover { + opacity: 0.5; +} + /* icon in mat-form-field*/ ::ng-deep mat-form-field { color: #df7c0f !important; diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterFromTemplatesViewModel.ts b/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterFromTemplatesViewModel.ts new file mode 100644 index 0000000..cbc7927 --- /dev/null +++ b/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterFromTemplatesViewModel.ts @@ -0,0 +1,6 @@ +export interface CharacterFromTemplatesViewModel { + id: number; + name: string; + race: string; + class: number; +} diff --git a/SessionCompanion/SessionCompanion/Controllers/CharacterController.cs b/SessionCompanion/SessionCompanion/Controllers/CharacterController.cs index 1b03b8b..23def0e 100644 --- a/SessionCompanion/SessionCompanion/Controllers/CharacterController.cs +++ b/SessionCompanion/SessionCompanion/Controllers/CharacterController.cs @@ -116,7 +116,7 @@ namespace SessionCompanion.Controllers /// /// liste podstawowych informacji o postaciach z templatki [HttpGet("getTemplateCharacters")] - public async Task>> GetTemplateCharacters() + public async Task, ErrorResponse>> GetTemplateCharacters() { var races = _raceService.Get().ToList(); var classes = _classService.Get().ToList(); @@ -159,4 +159,4 @@ namespace SessionCompanion.Controllers } } } -} \ No newline at end of file +}