diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 6e3fd39..b96499f 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -8,6 +8,7 @@ import { AppComponent } from './app.component'; import { APP_ROUTES } from './app.routes'; import { USER_API_URL, TRAVEL_API_URL } from './app.config'; import { HomeComponent } from './home/home.component'; +import { TravelComponent } from './travel/travel.component'; import { SharedModule } from './shared/shared.module'; import { RouterModule, ExtraOptions } from '@angular/router'; import { useHash } from '../flags'; @@ -42,8 +43,9 @@ const ROUTING_OPTIONS: ExtraOptions = { declarations: [ AppComponent, HomeComponent, + TravelComponent, HeaderComponent, - ListComponent, + ListComponent ], providers: [ // (useHash) ? { provide: LocationStrategy, useClass: HashLocationStrategy } : [], diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 92a4be5..b447671 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,5 +1,6 @@ import { Routes } from '@angular/router'; import { HomeComponent } from './home/home.component'; +import { TravelComponent } from './travel/travel.component'; export let APP_ROUTES: Routes = [ { @@ -11,6 +12,10 @@ export let APP_ROUTES: Routes = [ path: 'home', component: HomeComponent }, + { + path: 'travel/:id', + component: TravelComponent + }, { path: '**', redirectTo: 'home' diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html index b8626b8..46d456a 100644 --- a/src/app/header/header.component.html +++ b/src/app/header/header.component.html @@ -3,7 +3,7 @@ -
+
{{ name }} diff --git a/src/app/header/header.component.ts b/src/app/header/header.component.ts index a96f0ee..007cc63 100644 --- a/src/app/header/header.component.ts +++ b/src/app/header/header.component.ts @@ -8,19 +8,17 @@ import { authConfig } from '../auth.config'; styleUrls: ['./header.component.css'], }) export class HeaderComponent implements OnInit { - constructor(private oauthService: OAuthService) {} + constructor(private oauthService: OAuthService) { } - ngOnInit(): void {} + ngOnInit(): void { + this.oauthService.configure(authConfig); + this.oauthService.loadDiscoveryDocumentAndTryLogin().then(success => { + console.log('Autologin success=' + success + ' logged=' + String(this.logged)); + }); + } async login(): Promise { - this.oauthService.configure(authConfig); - await this.oauthService.loadDiscoveryDocument(); - if ( - !this.oauthService.hasValidIdToken() || - !this.oauthService.hasValidAccessToken() - ) { - this.oauthService.initLoginFlow('some-state'); - } + this.oauthService.loadDiscoveryDocumentAndLogin(); } logout(): void { diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 3e099be..1bbf465 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -40,26 +40,8 @@ export class HomeComponent implements OnInit { this.oauthService.loadUserProfile().then((up) => (this.userProfile = up)); } - refresh(): void { - this.oauthService.oidc = true; - - if ( - !this.oauthService.useSilentRefresh && - this.oauthService.responseType === 'code' - ) { - this.oauthService - .refreshToken() - .then((info) => console.log('refresh ok', info)) - .catch((err) => console.error('refresh error', err)); - } else { - this.oauthService - .silentRefresh() - .then((info) => console.log('silent refresh ok', info)) - .catch((err) => console.error('silent refresh error', err)); - } - } - get logged(): boolean { - return this.oauthService.hasValidIdToken() && this.oauthService.hasValidAccessToken(); + return this.oauthService.getIdentityClaims() != null; + // return this.oauthService.hasValidIdToken() && this.oauthService.hasValidAccessToken(); } } diff --git a/src/app/list/list.datasource.ts b/src/app/list/list.datasource.ts index 01d3116..b52b062 100644 --- a/src/app/list/list.datasource.ts +++ b/src/app/list/list.datasource.ts @@ -22,13 +22,12 @@ export class ListDataSource implements DataSource { ): void { this.loadingSubject.next(true); - this.apiService - .call>(this.url, { + this.apiService.call>(this.url, { filter, sortColumn, - sortAscending: String(sortAscending), - pageIndex: String(pageIndex), - pageSize: String(pageSize), + sortAscending, + pageIndex, + pageSize, }) .pipe( catchError(() => of([])), @@ -43,7 +42,6 @@ export class ListDataSource implements DataSource { } connect(collectionViewer: CollectionViewer): Observable { - console.log('Connecting data source'); return this.listSubject.asObservable(); } diff --git a/src/app/services/api.service.ts b/src/app/services/api.service.ts index ad67dc5..1d47790 100644 --- a/src/app/services/api.service.ts +++ b/src/app/services/api.service.ts @@ -12,7 +12,7 @@ export class ApiService { call( url: string, - params?: { [param: string]: string } + params?: { [param: string]: any } ): Observable> { return this.http .get>(url, { params }) diff --git a/src/app/travel/travel.component.css b/src/app/travel/travel.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/travel/travel.component.html b/src/app/travel/travel.component.html new file mode 100644 index 0000000..5c60dfb --- /dev/null +++ b/src/app/travel/travel.component.html @@ -0,0 +1,13 @@ + + + {{ travel.origin }} - {{ travel.destination }} + + + {{ travel.departureDate }} Plazas libres: {{ travel.availablePlaces }} + + +

ID: {{ travel.id }}

+

Conductor: {{ travel.driver.name }}


+

{{ travel.description }}

+
+
\ No newline at end of file diff --git a/src/app/travel/travel.component.spec.ts b/src/app/travel/travel.component.spec.ts new file mode 100644 index 0000000..14520fe --- /dev/null +++ b/src/app/travel/travel.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TravelComponent } from './travel.component'; + +describe('TravelComponent', () => { + let component: TravelComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TravelComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TravelComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/travel/travel.component.ts b/src/app/travel/travel.component.ts new file mode 100644 index 0000000..8e0687d --- /dev/null +++ b/src/app/travel/travel.component.ts @@ -0,0 +1,38 @@ +import { Component, OnInit } from '@angular/core'; +import { Router, ActivatedRoute, ParamMap } from '@angular/router'; +import { PUBLIC_API_URL } from '../app.config'; +import { Travel, TravelId } from '../entities/travel'; +import { ApiService } from '../services/api.service'; + +@Component({ + selector: 'app-travel', + templateUrl: './travel.component.html', + styleUrls: ['./travel.component.css'] +}) +export class TravelComponent implements OnInit { + + travelId: TravelId; + travel: Travel; + + constructor( + private apiService: ApiService, + private route: ActivatedRoute + ) { } + + ngOnInit(): void { + this.route.queryParams.subscribe(params => { + this.travelId = this.route.snapshot.paramMap.get('id') as unknown as TravelId; + + this.apiService.call(PUBLIC_API_URL + '/travel', { travelId: this.travelId }) + .subscribe(res => { + if (res.success) { + this.travel = res.data; + } + else { + console.error('Error getting travel ' + this.travelId + ': ' + res.error); + } + }); + }); + } + +}