diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/registration/registration.component.html b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/registration/registration.component.html
index 59ac6f3..9f07043 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/registration/registration.component.html
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/registration/registration.component.html
@@ -1,6 +1,6 @@
-
arrow_back
+
arrow_back
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.css b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.css
index ccf116c..41aa481 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.css
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.css
@@ -47,10 +47,6 @@ input {
font-size: 20px;
}
-.align-to-right {
- text-align: right;
-}
-
@media (max-width: 400px) {
.container {
margin-left: 0%;
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.html b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.html
index 178319d..5eae2cc 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.html
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.html
@@ -1,21 +1,15 @@
-
arrow_back
+
arrow_back
-
+
- Oweja
- arrow_forward
+
+ account_circle
+ {{character.name}}
+ arrow_forward
+ {{character.className}} level: {{character.level}}
+
-
- James
- arrow_forward
-
-
- Legolas
- arrow_forward
-
-
-
-
+
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.ts
index 2409f57..bb796df 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/select-character/select-character.component.ts
@@ -1,30 +1,49 @@
-import { Component } from '@angular/core';
+import {Component, OnInit} from '@angular/core';
import { Router } from '@angular/router';
+import {first} from 'rxjs/operators';
+import {ClearUserId} from '../../store/actions/app.actions';
+import {ErrorResponse} from '../../../types/ErrorResponse';
+import {HttpErrorResponse} from '@angular/common/http';
+import {Store} from '@ngrx/store';
+import {AppState} from '../../store/models/app-state.model';
+import {CharacterService} from '../../../services/character.service';
+import {CharacterForLoginViewModel} from '../../../types/viewmodels/character-viewmodels/CharacterForLoginViewModel';
+import {AddCharacterId} from '../../store/actions/player.action';
@Component({
selector: 'app-select-character',
templateUrl: './select-character.component.html',
styleUrls: ['./select-character.component.css']
})
-export class SelectCharacterComponent {
- isExpanded = false;
+export class SelectCharacterComponent implements OnInit {
+ charactersList: CharacterForLoginViewModel[];
- collapse() {
- this.isExpanded = false;
+ constructor(private router: Router, private store: Store, private characterService: CharacterService) {}
+
+ ngOnInit() {
+ this.getUserCharactersList();
}
- toggle() {
- this.isExpanded = !this.isExpanded;
+ getUserCharactersList() {
+ this.store.select(s => s.appStore.userId).pipe(first()).subscribe((userId) => {
+ this.characterService.getUserCharactersList(userId).pipe(first()).subscribe((charactersList) => {
+ this.charactersList = charactersList;
+ }, (error: ErrorResponse | HttpErrorResponse) => {
+ if (error instanceof HttpErrorResponse) {
+ error = error.error as ErrorResponse;
+ }
+ console.error(error.message);
+ } );
+ });
}
- constructor(private router: Router) {}
-
- onCharacterClick(){
- this.router.navigate(['player'])
+ onCharacterClick(characterId: number) {
+ this.store.dispatch(new AddCharacterId({characterId}));
+ this.router.navigate(['player']);
}
- onArrowBackClick(){
- this.router.navigate(['login'])
+ onArrowBackClick() {
+ this.store.dispatch(new ClearUserId());
+ this.router.navigate(['login']);
}
}
-
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.html b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.html
index 4e5cc02..6eede7b 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.html
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.html
@@ -1,6 +1,6 @@
-
arrow_back
+
arrow_back
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.ts
index 9f2734b..1bf5263 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/components/sign-in/sign-in.component.ts
@@ -9,6 +9,7 @@ import {AppStoreModel} from '../../store/models/app-store.model';
import {select, Store} from '@ngrx/store';
import {AddUserId} from '../../store/actions/app.actions';
import {AppState} from 'src/app/store/models/app-state.model';
+import {first} from "rxjs/operators";
@Component({
selector: 'app-sign-in',
@@ -43,9 +44,9 @@ export class SignInComponent implements OnDestroy, OnInit {
onLoginButtonClick() {
let role = '';
- this.store.select(s => s.appStore.role).subscribe((v) => {
+ this.store.select(s => s.appStore.role).pipe(first()).subscribe((v) => {
role = v;
- }).unsubscribe();
+ });
this.allSubscriptions.add(
this.userService.tryLogin(
this.signInFormGroup.get('signIn').value['username'],
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/reducers/index.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/reducers/index.ts
deleted file mode 100644
index 4f57bb0..0000000
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/reducers/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import {
- ActionReducer,
- ActionReducerMap,
- createFeatureSelector,
- createSelector,
- MetaReducer
-} from '@ngrx/store';
-import { environment } from '../../environments/environment';
-
-export interface State {
-
-}
-
-export const reducers: ActionReducerMap = {
-
-};
-
-
-export const metaReducers: MetaReducer[] = !environment.production ? [] : [];
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/app.actions.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/app.actions.ts
index 4b2b34b..362b983 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/app.actions.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/app.actions.ts
@@ -1,9 +1,9 @@
-import {AppStoreModel} from '../models/app-store.model';
-import { Action } from '@ngrx/store';
+import {Action} from '@ngrx/store';
export enum AppActionTypes {
ADD_USER_ID = '[APP] Add user id',
- ADD_ROLE = '[APP] Add role'
+ ADD_ROLE = '[APP] Add role',
+ CLEAR_USER_ID = '[APP] Clear user id'
}
export class AddUserId implements Action {
@@ -20,4 +20,13 @@ export class AddRole implements Action {
}
}
-export type AppAction = AddUserId | AddRole;
+export class ClearUserId implements Action {
+ readonly type = AppActionTypes.CLEAR_USER_ID;
+
+ constructor() {
+ }
+}
+
+
+
+export type AppAction = AddUserId | AddRole | ClearUserId;
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/player.action.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/player.action.ts
new file mode 100644
index 0000000..45c74d8
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/actions/player.action.ts
@@ -0,0 +1,15 @@
+import {Action} from "@ngrx/store";
+
+export enum PlayerActionTypes {
+ ADD_CHARACTER_ID= '[PLAYER] Add character id'
+}
+
+export class AddCharacterId implements Action {
+ readonly type = PlayerActionTypes.ADD_CHARACTER_ID;
+
+ constructor(public payload: {characterId: number}) {
+
+ }
+}
+
+export type PlayerAction = AddCharacterId;
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/app-state.model.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/app-state.model.ts
index 8d87023..fe999ff 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/app-state.model.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/app-state.model.ts
@@ -1,11 +1,15 @@
import {AppStoreModel} from './app-store.model';
import {ActionReducerMap} from '@ngrx/store';
import {AppReducer} from '../reducers/app.reducer';
+import {PlayerStoreModel} from './player-store.model';
+import {PlayerReducer} from '../reducers/player.reducer';
export interface AppState {
appStore: AppStoreModel;
+ playerStore: PlayerStoreModel;
}
export const reducers: ActionReducerMap = {
appStore: AppReducer,
+ playerStore: PlayerReducer,
};
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/player-store.model.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/player-store.model.ts
new file mode 100644
index 0000000..8cc606f
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/models/player-store.model.ts
@@ -0,0 +1,3 @@
+export interface PlayerStoreModel {
+ characterId: number;
+}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/app.reducer.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/app.reducer.ts
index 777c63a..d86c636 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/app.reducer.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/app.reducer.ts
@@ -12,6 +12,8 @@ export function AppReducer(state: AppStoreModel = initialState, action: AppActio
return {...state, userId: action.payload.userId};
case AppActionTypes.ADD_ROLE:
return {...state, role: action.payload.role};
+ case AppActionTypes.CLEAR_USER_ID:
+ return {...state, userId: null};
default:
return state;
}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts
new file mode 100644
index 0000000..3077834
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/app/store/reducers/player.reducer.ts
@@ -0,0 +1,15 @@
+import {PlayerStoreModel} from '../models/player-store.model';
+import {PlayerAction, PlayerActionTypes} from '../actions/player.action';
+
+const initialState: PlayerStoreModel = {
+ characterId: null
+};
+
+export function PlayerReducer(state: PlayerStoreModel = initialState, action: PlayerAction) {
+ switch (action.type) {
+ case PlayerActionTypes.ADD_CHARACTER_ID:
+ return {...state, characterId: action.payload.characterId};
+ default:
+ return state;
+ }
+}
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts b/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts
index ea14dc8..c390a44 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/services/character.service.ts
@@ -1,8 +1,9 @@
import {Inject, Injectable} from '@angular/core';
-import {HttpClient} from '@angular/common/http';
+import {HttpClient, HttpParams} from '@angular/common/http';
import {Observable, of, throwError} from 'rxjs';
import {ErrorResponse} from '../types/ErrorResponse';
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';
@@ -27,4 +28,17 @@ export class CharacterService {
retry(3)
);
}
+
+ getUserCharactersList(userId: number): Observable {
+ const params = new HttpParams().set('userId', userId.toString())
+ return this.http.get>(this.baseUrl + 'userCharactersList', {params}).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 bd973fd..311e04a 100644
--- a/SessionCompanion/SessionCompanion/ClientApp/src/styles.css
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/styles.css
@@ -73,6 +73,10 @@ mat-divider {
border-top-color: #e9cca7 !important;
}
+.arrow-select {
+ cursor: pointer;
+}
+
html,
body {
height: 100%;
diff --git a/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterForLoginViewModel.ts b/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterForLoginViewModel.ts
new file mode 100644
index 0000000..fa9c0d8
--- /dev/null
+++ b/SessionCompanion/SessionCompanion/ClientApp/src/types/viewmodels/character-viewmodels/CharacterForLoginViewModel.ts
@@ -0,0 +1,7 @@
+export interface CharacterForLoginViewModel {
+ id: number;
+ userId: number;
+ name: string;
+ className: string;
+ level: number;
+}