From 2fb505d91360f47f0255838568203e10fcb01864 Mon Sep 17 00:00:00 2001 From: Eneko Nieto Date: Thu, 4 Feb 2021 03:14:39 +0100 Subject: [PATCH] fix new travel --- src/app/entities/travel.ts | 2 +- src/app/entities/user.ts | 7 ++++ .../pages/new-travel/new-travel.component.ts | 22 ++++++------ src/app/services/api.service.ts | 36 ++++++++++++++----- src/app/views/header/header.component.ts | 21 +++++++++-- .../travel-form/travel-form.component.html | 24 ++++++------- .../travel-form/travel-form.component.ts | 4 ++- 7 files changed, 78 insertions(+), 38 deletions(-) create mode 100644 src/app/entities/user.ts diff --git a/src/app/entities/travel.ts b/src/app/entities/travel.ts index 377aee2..255fa36 100644 --- a/src/app/entities/travel.ts +++ b/src/app/entities/travel.ts @@ -6,7 +6,7 @@ export class Travel { constructor( public id: TravelId = -1, public driverInfo: UserInfo = null, - public travelersInfo: UserInfo[] = null, + public travelersInfo: UserInfo[] = [], public departureDate: string = '', public origin: string = '', public destination: string = '', diff --git a/src/app/entities/user.ts b/src/app/entities/user.ts new file mode 100644 index 0000000..5ec140a --- /dev/null +++ b/src/app/entities/user.ts @@ -0,0 +1,7 @@ +export type UserId = string; + +export interface User { + id: UserId; + matrixId?: string; + name: string; +} diff --git a/src/app/pages/new-travel/new-travel.component.ts b/src/app/pages/new-travel/new-travel.component.ts index a398339..3814d48 100644 --- a/src/app/pages/new-travel/new-travel.component.ts +++ b/src/app/pages/new-travel/new-travel.component.ts @@ -9,7 +9,7 @@ import { ApiService } from '../../services/api.service'; styleUrls: ['./new-travel.component.css'] }) export class NewTravelComponent implements OnInit { - travel: Travel; + travel: Travel = new Travel(); @ViewChild(TravelFormComponent, { static: true }) form: TravelFormComponent; @@ -17,19 +17,17 @@ export class NewTravelComponent implements OnInit { private apiService: ApiService ) { } - ngOnInit(): void { - this.travel = new Travel(); - } + ngOnInit(): void { } createTravel(travel: Travel): void { this.apiService.createTravel(travel) - .subscribe(res => { - if (res.success) { - console.log('Travel created'); - } - else { - console.error('Error creating travel: ' + res.error); - } - }); + .subscribe(res => { + if (res.success) { + console.log('Travel created'); + } + else { + console.error('Error creating travel: ' + res.error); + } + }); } } diff --git a/src/app/services/api.service.ts b/src/app/services/api.service.ts index 9756f9a..0e96d07 100644 --- a/src/app/services/api.service.ts +++ b/src/app/services/api.service.ts @@ -4,8 +4,9 @@ import { Observable, throwError } from 'rxjs'; import { catchError, retry } from 'rxjs/operators'; import { ApiResponse } from '../entities/api-response'; import { Travel, TravelId } from '../entities/travel'; -import { PUBLIC_API_URL, TRAVEL_API_URL } from '../app.config'; +import { PUBLIC_API_URL, TRAVEL_API_URL, USER_API_URL } from '../app.config'; import { ListDto } from '../entities/list-dto'; +import { User } from '../entities/user'; export type ApiCall = (params?: { [param: string]: any }) => (Observable>>); @@ -13,11 +14,15 @@ export type ApiCall = (params?: { [param: string]: any }) => (Observable { + return this.callApi(USER_API_URL + '/user'); + } + getTravel = (travelId: TravelId) => { return this.callApi(PUBLIC_API_URL + '/travel', { travelId }); } @@ -31,16 +36,29 @@ export class ApiService { } createTravel = (travel: Travel) => { - return this.callApi(TRAVEL_API_URL + '/create', { travel }); + return this.callApi(TRAVEL_API_URL + '/create', null, travel); } private callApi( url: string, - params?: { [param: string]: any } + params?: { [param: string]: any }, + body?: any ): Observable> { - return this.http - .get>(url, { params }) - .pipe( + console.log('ApiService.callApi(): url=' + url); + if (params) { + console.log('Params='); + console.log(params); + } + if (body) { + console.log('Body='); + console.log(body); + } + + const response$ = body ? + this.http.post>(url, body, { params }) : + this.http.get>(url, { params }); + + return response$.pipe( retry(0), // retry a failed request up to 3 times catchError(this.handleError) // then handle the error ); @@ -49,12 +67,12 @@ export class ApiService { private handleError(error: HttpErrorResponse): Observable { if (error.error instanceof ErrorEvent) { // A client-side or network error occurred. Handle it accordingly. - console.error('An error occurred:', error.error.message); + console.error('ApiService: A client error occurred:', error.error.message); } else { // The backend returned an unsuccessful response code. // The response body may contain clues as to what went wrong. console.error( - `API returned code ${error.status}, ` + `body was: ${error.error}` + `ApiService: API returned code ${error.status}, ` + `body was: ${error.error}` ); } // Return an observable with a user-facing error message. diff --git a/src/app/views/header/header.component.ts b/src/app/views/header/header.component.ts index b8f8f11..b12a09f 100644 --- a/src/app/views/header/header.component.ts +++ b/src/app/views/header/header.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { OAuthService } from 'angular-oauth2-oidc'; +import { ApiService } from 'src/app/services/api.service'; import { authConfig } from '../../auth.config'; @Component({ @@ -8,17 +9,33 @@ import { authConfig } from '../../auth.config'; styleUrls: ['./header.component.css'], }) export class HeaderComponent implements OnInit { - constructor(private oauthService: OAuthService) { } + constructor( + private oauthService: OAuthService, + private apiService: ApiService + ) { } ngOnInit(): void { this.oauthService.configure(authConfig); this.oauthService.loadDiscoveryDocumentAndTryLogin().then(success => { console.log('Autologin success=' + success + ' logged=' + String(this.logged)); + console.log('USER autologin'); + if (this.logged) { + this.apiService.getUser().subscribe(user => { + console.log(user); + }); + } }); } async login(): Promise { - this.oauthService.loadDiscoveryDocumentAndLogin(); + this.oauthService.loadDiscoveryDocumentAndLogin().then(success => { + console.log('USER login'); + if (this.logged) { + this.apiService.getUser().subscribe(user => { + console.log(user); + }); + } + }); } logout(): void { diff --git a/src/app/views/travel-form/travel-form.component.html b/src/app/views/travel-form/travel-form.component.html index 087edce..a7ee781 100644 --- a/src/app/views/travel-form/travel-form.component.html +++ b/src/app/views/travel-form/travel-form.component.html @@ -2,44 +2,42 @@
- - + placeholder="Choose a date" [min]="minDate" [(ngModel)]="newTravel.departureDate"> + + -
+
- -
+ +
- -
+ +
- -
+ +
- +
diff --git a/src/app/views/travel-form/travel-form.component.ts b/src/app/views/travel-form/travel-form.component.ts index e6060bb..5aa34d4 100644 --- a/src/app/views/travel-form/travel-form.component.ts +++ b/src/app/views/travel-form/travel-form.component.ts @@ -10,16 +10,18 @@ export class TravelFormComponent implements OnInit { @Output() travelSubmitted: EventEmitter = new EventEmitter(); @Input() travel: Travel; + newTravel: Travel; submitted = false; minDate = new Date(); constructor() { } ngOnInit(): void { + this.newTravel = { ...this.travel }; } onSubmit(): void { this.submitted = true; - this.travelSubmitted.emit(this.travel); + this.travelSubmitted.emit(this.newTravel); } }