|  |  | @ -1,7 +1,14 @@ | 
			
		
	
		
			
				
					|  |  |  | import { PositionDetailDialogParams } from '@ghostfolio/client/components/position-detail-dialog/interfaces/interfaces'; | 
			
		
	
		
			
				
					|  |  |  | import { PositionDetailDialog } from '@ghostfolio/client/components/position-detail-dialog/position-detail-dialog.component'; | 
			
		
	
		
			
				
					|  |  |  | import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; | 
			
		
	
		
			
				
					|  |  |  | import { UserService } from '@ghostfolio/client/services/user/user.service'; | 
			
		
	
		
			
				
					|  |  |  | import { TabConfiguration, User } from '@ghostfolio/common/interfaces'; | 
			
		
	
		
			
				
					|  |  |  | import { hasPermission, permissions } from '@ghostfolio/common/permissions'; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; | 
			
		
	
		
			
				
					|  |  |  | import { MatDialog } from '@angular/material/dialog'; | 
			
		
	
		
			
				
					|  |  |  | import { ActivatedRoute, Router } from '@angular/router'; | 
			
		
	
		
			
				
					|  |  |  | import { DataSource } from '@prisma/client'; | 
			
		
	
		
			
				
					|  |  |  | import { DeviceDetectorService } from 'ngx-device-detector'; | 
			
		
	
		
			
				
					|  |  |  | import { Subject } from 'rxjs'; | 
			
		
	
		
			
				
					|  |  |  | import { takeUntil } from 'rxjs/operators'; | 
			
		
	
	
		
			
				
					|  |  | @ -14,6 +21,7 @@ import { takeUntil } from 'rxjs/operators'; | 
			
		
	
		
			
				
					|  |  |  | }) | 
			
		
	
		
			
				
					|  |  |  | export class HomePageComponent implements OnDestroy, OnInit { | 
			
		
	
		
			
				
					|  |  |  |   public deviceType: string; | 
			
		
	
		
			
				
					|  |  |  |   public hasImpersonationId: boolean; | 
			
		
	
		
			
				
					|  |  |  |   public tabs: TabConfiguration[] = []; | 
			
		
	
		
			
				
					|  |  |  |   public user: User; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -22,8 +30,27 @@ export class HomePageComponent implements OnDestroy, OnInit { | 
			
		
	
		
			
				
					|  |  |  |   public constructor( | 
			
		
	
		
			
				
					|  |  |  |     private changeDetectorRef: ChangeDetectorRef, | 
			
		
	
		
			
				
					|  |  |  |     private deviceService: DeviceDetectorService, | 
			
		
	
		
			
				
					|  |  |  |     private dialog: MatDialog, | 
			
		
	
		
			
				
					|  |  |  |     private impersonationStorageService: ImpersonationStorageService, | 
			
		
	
		
			
				
					|  |  |  |     private route: ActivatedRoute, | 
			
		
	
		
			
				
					|  |  |  |     private router: Router, | 
			
		
	
		
			
				
					|  |  |  |     private userService: UserService | 
			
		
	
		
			
				
					|  |  |  |   ) { | 
			
		
	
		
			
				
					|  |  |  |     this.route.queryParams | 
			
		
	
		
			
				
					|  |  |  |       .pipe(takeUntil(this.unsubscribeSubject)) | 
			
		
	
		
			
				
					|  |  |  |       .subscribe((params) => { | 
			
		
	
		
			
				
					|  |  |  |         if ( | 
			
		
	
		
			
				
					|  |  |  |           params['dataSource'] && | 
			
		
	
		
			
				
					|  |  |  |           params['positionDetailDialog'] && | 
			
		
	
		
			
				
					|  |  |  |           params['symbol'] | 
			
		
	
		
			
				
					|  |  |  |         ) { | 
			
		
	
		
			
				
					|  |  |  |           this.openPositionDialog({ | 
			
		
	
		
			
				
					|  |  |  |             dataSource: params['dataSource'], | 
			
		
	
		
			
				
					|  |  |  |             symbol: params['symbol'] | 
			
		
	
		
			
				
					|  |  |  |           }); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     this.userService.stateChanged | 
			
		
	
		
			
				
					|  |  |  |       .pipe(takeUntil(this.unsubscribeSubject)) | 
			
		
	
		
			
				
					|  |  |  |       .subscribe((state) => { | 
			
		
	
	
		
			
				
					|  |  | @ -59,10 +86,58 @@ export class HomePageComponent implements OnDestroy, OnInit { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   public ngOnInit() { | 
			
		
	
		
			
				
					|  |  |  |     this.deviceType = this.deviceService.getDeviceInfo().deviceType; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     this.impersonationStorageService | 
			
		
	
		
			
				
					|  |  |  |       .onChangeHasImpersonation() | 
			
		
	
		
			
				
					|  |  |  |       .pipe(takeUntil(this.unsubscribeSubject)) | 
			
		
	
		
			
				
					|  |  |  |       .subscribe((impersonationId) => { | 
			
		
	
		
			
				
					|  |  |  |         this.hasImpersonationId = !!impersonationId; | 
			
		
	
		
			
				
					|  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   public ngOnDestroy() { | 
			
		
	
		
			
				
					|  |  |  |     this.unsubscribeSubject.next(); | 
			
		
	
		
			
				
					|  |  |  |     this.unsubscribeSubject.complete(); | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |   private openPositionDialog({ | 
			
		
	
		
			
				
					|  |  |  |     dataSource, | 
			
		
	
		
			
				
					|  |  |  |     symbol | 
			
		
	
		
			
				
					|  |  |  |   }: { | 
			
		
	
		
			
				
					|  |  |  |     dataSource: DataSource; | 
			
		
	
		
			
				
					|  |  |  |     symbol: string; | 
			
		
	
		
			
				
					|  |  |  |   }) { | 
			
		
	
		
			
				
					|  |  |  |     this.userService | 
			
		
	
		
			
				
					|  |  |  |       .get() | 
			
		
	
		
			
				
					|  |  |  |       .pipe(takeUntil(this.unsubscribeSubject)) | 
			
		
	
		
			
				
					|  |  |  |       .subscribe((user) => { | 
			
		
	
		
			
				
					|  |  |  |         this.user = user; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         const dialogRef = this.dialog.open(PositionDetailDialog, { | 
			
		
	
		
			
				
					|  |  |  |           autoFocus: false, | 
			
		
	
		
			
				
					|  |  |  |           data: <PositionDetailDialogParams>{ | 
			
		
	
		
			
				
					|  |  |  |             dataSource, | 
			
		
	
		
			
				
					|  |  |  |             symbol, | 
			
		
	
		
			
				
					|  |  |  |             baseCurrency: this.user?.settings?.baseCurrency, | 
			
		
	
		
			
				
					|  |  |  |             colorScheme: this.user?.settings?.colorScheme, | 
			
		
	
		
			
				
					|  |  |  |             deviceType: this.deviceType, | 
			
		
	
		
			
				
					|  |  |  |             hasImpersonationId: this.hasImpersonationId, | 
			
		
	
		
			
				
					|  |  |  |             hasPermissionToReportDataGlitch: hasPermission( | 
			
		
	
		
			
				
					|  |  |  |               this.user?.permissions, | 
			
		
	
		
			
				
					|  |  |  |               permissions.reportDataGlitch | 
			
		
	
		
			
				
					|  |  |  |             ), | 
			
		
	
		
			
				
					|  |  |  |             locale: this.user?.settings?.locale | 
			
		
	
		
			
				
					|  |  |  |           }, | 
			
		
	
		
			
				
					|  |  |  |           height: this.deviceType === 'mobile' ? '97.5vh' : '80vh', | 
			
		
	
		
			
				
					|  |  |  |           width: this.deviceType === 'mobile' ? '100vw' : '50rem' | 
			
		
	
		
			
				
					|  |  |  |         }); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         dialogRef | 
			
		
	
		
			
				
					|  |  |  |           .afterClosed() | 
			
		
	
		
			
				
					|  |  |  |           .pipe(takeUntil(this.unsubscribeSubject)) | 
			
		
	
		
			
				
					|  |  |  |           .subscribe(() => { | 
			
		
	
		
			
				
					|  |  |  |             this.router.navigate(['.'], { relativeTo: this.route }); | 
			
		
	
		
			
				
					|  |  |  |           }); | 
			
		
	
		
			
				
					|  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
	
		
			
				
					|  |  | 
 |