diff --git a/src/frontend/app/list/basket-list.component.ts b/src/frontend/app/list/basket-list.component.ts index d2df30ac241fe67c47af4fb507117b8db1440d23..ca1691752d5a903c573e6718faecb7aa013dc95a 100755 --- a/src/frontend/app/list/basket-list.component.ts +++ b/src/frontend/app/list/basket-list.component.ts @@ -8,7 +8,7 @@ import { MatDialog, MatSidenav, MatPaginator, MatSort, MatBottomSheet, MatBottom import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; import { startWith, switchMap, map, catchError } from 'rxjs/operators'; -import { ActivatedRoute } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { HeaderService } from '../../service/header.service'; import { FiltersListService } from '../../service/filtersList.service'; import { NotesListComponent } from '../notes/notes.component'; @@ -107,7 +107,7 @@ export class BasketListComponent implements OnInit { @ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild('tableBasketListSort') sort: MatSort; - constructor(changeDetectorRef: ChangeDetectorRef, private route: ActivatedRoute, media: MediaMatcher, public http: HttpClient, public dialog: MatDialog, private sanitizer: DomSanitizer, private bottomSheet: MatBottomSheet, private headerService: HeaderService, public filtersListService: FiltersListService) { + constructor(changeDetectorRef: ChangeDetectorRef, private router: Router, private route: ActivatedRoute, media: MediaMatcher, public http: HttpClient, public dialog: MatDialog, private sanitizer: DomSanitizer, private bottomSheet: MatBottomSheet, private headerService: HeaderService, public filtersListService: FiltersListService, private notify: NotificationService) { this.mobileMode = angularGlobals.mobileMode; $j("link[href='merged_css.php']").remove(); this.mobileQuery = media.matchMedia('(max-width: 768px)'); @@ -151,6 +151,9 @@ export class BasketListComponent implements OnInit { this.refreshDao(); + }, + (err : any) => { + this.notify.handleErrors(err); }); } @@ -177,7 +180,8 @@ export class BasketListComponent implements OnInit { return data.resources; }), catchError((err: any) => { - console.log(err); + this.notify.handleErrors(err); + this.router.navigate(['/home']); this.isLoadingResults = false; return observableOf([]); }) diff --git a/src/frontend/app/notification.service.ts b/src/frontend/app/notification.service.ts index ef2a9c1bc92c080c5f4b4ba919c68114aaafef12..e806d29f7f8fb231fdb0ac8b1bbf7e2537ab04c1 100755 --- a/src/frontend/app/notification.service.ts +++ b/src/frontend/app/notification.service.ts @@ -1,6 +1,7 @@ import {MatSnackBar} from '@angular/material'; import {Injectable,Component,Inject} from '@angular/core'; import {MAT_SNACK_BAR_DATA} from '@angular/material'; +import { Router } from '@angular/router'; @Component({ selector: 'custom-snackbar', @@ -12,7 +13,7 @@ export class CustomSnackbarComponent { @Injectable() export class NotificationService { - constructor(public snackBar: MatSnackBar) { + constructor(private router: Router, public snackBar: MatSnackBar) { } success(message:string) { this.snackBar.openFromComponent(CustomSnackbarComponent,{ @@ -27,4 +28,25 @@ export class NotificationService { data: {message: message,icon : 'exclamation-triangle'} }); } + + handleErrors(err: any) { + console.log(err); + if (err.status === 401 && this.router.url !== '/login') { + this.router.navigate(['/login']); + this.error('Veuillez vous reconnecter'); + } else if (err.status === 0 && err.statusText === 'Unknown Error') { + this.error('La connexion au serveur a échoué. Veuillez réessayer ultérieurement.'); + } else { + if (err.error.errors !== undefined) { + this.error(err.error.errors); + if (err.status === 403 || err.status === 404) { + this.router.navigate(['/documents']); + } + } else if (err.error.exception !== undefined) { + this.error(err.error.exception[0].message); + } else { + this.error(err.error.error.message); + } + } + } } \ No newline at end of file