diff --git a/src/app/app.module.ts b/src/app/app.module.ts index e9f2a5f..440d0a9 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -18,7 +18,7 @@ import { MatPaginatorModule } from '@angular/material/paginator'; import { MatSortModule } from '@angular/material/sort'; import { MatInputModule } from '@angular/material/input'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; -import { TravelListComponent } from './travel-list/travel-list.component'; +import { ListComponent } from './list/list.component'; const ROUTING_OPTIONS: ExtraOptions = { // preloadingStrategy: CustomPreloadingStrategy, @@ -51,7 +51,7 @@ const ROUTING_OPTIONS: ExtraOptions = { AppComponent, HomeComponent, HeaderComponent, - TravelListComponent, + ListComponent, ], providers: [ // (useHash) ? { provide: LocationStrategy, useClass: HashLocationStrategy } : [], diff --git a/src/app/auth.config.ts b/src/app/auth.config.ts index 07c13e5..537fd9b 100644 --- a/src/app/auth.config.ts +++ b/src/app/auth.config.ts @@ -2,7 +2,8 @@ import { AuthConfig } from 'angular-oauth2-oidc'; import { useSilentRefreshForCodeFlow } from '../flags'; export const authConfig: AuthConfig = { - issuer: 'https://auth.fosil.eu/auth/realms/fosil', + issuer: 'http://localhost:8081/auth/realms/fosil', + // issuer: 'https://auth.fosil.eu/auth/realms/fosil', // URL of the SPA to redirect the user to after login redirectUri: @@ -15,12 +16,6 @@ export const authConfig: AuthConfig = { // clientId: 'server.code', clientId: 'okupamicoche-frontend-angular', - // Just needed if your auth server demands a secret. In general, this - // is a sign that the auth server is not configured with SPAs in mind - // and it might not enforce further best practices vital for security - // such applications. - // dummyClientSecret: 'secret', - responseType: 'code', // set the scope for the permissions the client should request diff --git a/src/app/entities/list-dto.ts b/src/app/entities/list-dto.ts new file mode 100644 index 0000000..db164f2 --- /dev/null +++ b/src/app/entities/list-dto.ts @@ -0,0 +1,4 @@ +export interface ListDto { + total: number; + list: T[]; +} diff --git a/src/app/entities/travel-list.ts b/src/app/entities/travel-list.ts deleted file mode 100644 index 0e1bcd8..0000000 --- a/src/app/entities/travel-list.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Travel } from './travel'; - -export interface TravelList { - totalTravels: number; - travels: Travel[]; -} \ No newline at end of file diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index 4521526..43b34ad 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -1,4 +1,11 @@ - +

Mis viajes

+ +

Logueate para ver tus viajes

+ +

Viajes disponibles

+ + +

Login={{login}} loginFailed={{loginFailed}}

diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 5f8e038..6c60a4a 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -14,6 +14,16 @@ export class HomeComponent implements OnInit { login: false; userTravels: Travel[]; + displayedColumns = [ + 'driver', + 'departureDate', + 'origin', + 'destination', + 'description', + ]; + urlTravels = 'http://localhost:8080/api/public/list'; + urlMyTravels = 'http://localhost:8080/api/travel/listusertravels'; + constructor( private route: ActivatedRoute, private oauthService: OAuthService, diff --git a/src/app/travel-list/travel-list.component.css b/src/app/list/list.component.css similarity index 100% rename from src/app/travel-list/travel-list.component.css rename to src/app/list/list.component.css diff --git a/src/app/travel-list/travel-list.component.html b/src/app/list/list.component.html similarity index 98% rename from src/app/travel-list/travel-list.component.html rename to src/app/list/list.component.html index 6d95bd4..3b0cea7 100644 --- a/src/app/travel-list/travel-list.component.html +++ b/src/app/list/list.component.html @@ -54,7 +54,7 @@ diff --git a/src/app/travel-list/travel-list.component.ts b/src/app/list/list.component.ts similarity index 68% rename from src/app/travel-list/travel-list.component.ts rename to src/app/list/list.component.ts index c809984..9c1234c 100644 --- a/src/app/travel-list/travel-list.component.ts +++ b/src/app/list/list.component.ts @@ -2,6 +2,7 @@ import { AfterViewInit, Component, ElementRef, + Input, OnInit, ViewChild, } from '@angular/core'; @@ -11,35 +12,28 @@ import { MatSort } from '@angular/material/sort'; import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators'; import { merge, fromEvent } from 'rxjs'; import { ApiService } from '../services/api.service'; -import { TravelsDataSource } from './travel-list.datasource'; +import { ListDataSource } from './list.datasource'; @Component({ - selector: 'app-travel-list', - templateUrl: './travel-list.component.html', - styleUrls: ['./travel-list.component.css'], + selector: 'app-list', + templateUrl: './list.component.html', + styleUrls: ['./list.component.css'], }) -export class TravelListComponent implements OnInit, AfterViewInit { - dataSource: TravelsDataSource; +export class ListComponent implements OnInit, AfterViewInit { + dataSource: ListDataSource; - displayedColumns = [ - 'driver', - 'departureDate', - 'origin', - 'destination', - 'description', - ]; + @Input() displayedColumns: string[]; + @Input() url: string; @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; - @ViewChild(MatSort, { static: true }) sort: MatSort; - @ViewChild('input', { static: true }) input: ElementRef; constructor(private route: ActivatedRoute, private apiService: ApiService) {} ngOnInit(): void { - this.dataSource = new TravelsDataSource(this.apiService); - this.loadTravels(); + this.dataSource = new ListDataSource(this.apiService, this.url); + this.load(); } ngAfterViewInit(): void { @@ -52,18 +46,18 @@ export class TravelListComponent implements OnInit, AfterViewInit { tap(() => { this.paginator.pageIndex = 0; - this.loadTravels(); + this.load(); }) ) .subscribe(); merge(this.sort.sortChange, this.paginator.page) - .pipe(tap(() => this.loadTravels())) + .pipe(tap(() => this.load())) .subscribe(); } - loadTravels(): void { - this.dataSource.loadTravels( + load(): void { + this.dataSource.load( this.input.nativeElement.value, this.sort.active, this.sort.direction === 'asc', diff --git a/src/app/travel-list/travel-list.datasource.ts b/src/app/list/list.datasource.ts similarity index 58% rename from src/app/travel-list/travel-list.datasource.ts rename to src/app/list/list.datasource.ts index d75e21a..01d3116 100644 --- a/src/app/travel-list/travel-list.datasource.ts +++ b/src/app/list/list.datasource.ts @@ -1,21 +1,19 @@ import { CollectionViewer, DataSource } from '@angular/cdk/collections'; import { Observable, BehaviorSubject, of } from 'rxjs'; import { catchError, finalize } from 'rxjs/operators'; -import { PUBLIC_API_URL } from '../app.config'; import { ApiResponse } from '../entities/api-response'; -import { Travel } from '../entities/travel'; -import { TravelList } from '../entities/travel-list'; +import { ListDto } from '../entities/list-dto'; import { ApiService } from '../services/api.service'; -export class TravelsDataSource implements DataSource { - private travelsSubject = new BehaviorSubject([]); +export class ListDataSource implements DataSource { + private listSubject = new BehaviorSubject([]); private loadingSubject = new BehaviorSubject(false); public loading$ = this.loadingSubject.asObservable(); - public totalTravels = 0; + public total = 0; - constructor(private apiService: ApiService) {} + constructor(private apiService: ApiService, private url: string) {} - loadTravels( + load( filter: string, sortColumn: string, sortAscending: boolean, @@ -25,7 +23,7 @@ export class TravelsDataSource implements DataSource { this.loadingSubject.next(true); this.apiService - .call(PUBLIC_API_URL + '/list', { + .call>(this.url, { filter, sortColumn, sortAscending: String(sortAscending), @@ -37,20 +35,20 @@ export class TravelsDataSource implements DataSource { finalize(() => this.loadingSubject.next(false)) ) .subscribe((res) => { - const travelList = (res as ApiResponse).data; - const data = travelList.travels; - this.totalTravels = travelList.totalTravels; - this.travelsSubject.next(data); + const listDto = (res as ApiResponse>).data; + const list = listDto.list; + this.total = listDto.total; + this.listSubject.next(list); }); } - connect(collectionViewer: CollectionViewer): Observable { + connect(collectionViewer: CollectionViewer): Observable { console.log('Connecting data source'); - return this.travelsSubject.asObservable(); + return this.listSubject.asObservable(); } disconnect(collectionViewer: CollectionViewer): void { - this.travelsSubject.complete(); + this.listSubject.complete(); this.loadingSubject.complete(); } }