@ -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 } ) ;
} ) ;
} ) ;
}
}