mirror of https://github.com/ghostfolio/ghostfolio
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							123 lines
						
					
					
						
							3.9 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							123 lines
						
					
					
						
							3.9 KiB
						
					
					
				| 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 { internalRoutes } from '@ghostfolio/common/routes/routes'; | |
| 
 | |
| import { | |
|   ChangeDetectorRef, | |
|   Component, | |
|   CUSTOM_ELEMENTS_SCHEMA, | |
|   OnDestroy, | |
|   OnInit | |
| } from '@angular/core'; | |
| import { MatTabsModule } from '@angular/material/tabs'; | |
| import { RouterModule } from '@angular/router'; | |
| import { IonIcon } from '@ionic/angular/standalone'; | |
| import { addIcons } from 'ionicons'; | |
| import { | |
|   albumsOutline, | |
|   analyticsOutline, | |
|   bookmarkOutline, | |
|   newspaperOutline, | |
|   readerOutline | |
| } from 'ionicons/icons'; | |
| import { DeviceDetectorService } from 'ngx-device-detector'; | |
| import { Subject } from 'rxjs'; | |
| import { takeUntil } from 'rxjs/operators'; | |
| 
 | |
| @Component({ | |
|   host: { class: 'page has-tabs' }, | |
|   imports: [IonIcon, MatTabsModule, RouterModule], | |
|   schemas: [CUSTOM_ELEMENTS_SCHEMA], | |
|   selector: 'gf-home-page', | |
|   styleUrls: ['./home-page.scss'], | |
|   templateUrl: './home-page.html' | |
| }) | |
| export class GfHomePageComponent implements OnDestroy, OnInit { | |
|   public deviceType: string; | |
|   public hasImpersonationId: boolean; | |
|   public tabs: TabConfiguration[] = []; | |
|   public user: User; | |
| 
 | |
|   private unsubscribeSubject = new Subject<void>(); | |
| 
 | |
|   public constructor( | |
|     private changeDetectorRef: ChangeDetectorRef, | |
|     private deviceService: DeviceDetectorService, | |
|     private impersonationStorageService: ImpersonationStorageService, | |
|     private userService: UserService | |
|   ) { | |
|     this.userService.stateChanged | |
|       .pipe(takeUntil(this.unsubscribeSubject)) | |
|       .subscribe((state) => { | |
|         if (state?.user) { | |
|           this.user = state.user; | |
| 
 | |
|           this.tabs = [ | |
|             { | |
|               iconName: 'analytics-outline', | |
|               label: internalRoutes.home.title, | |
|               routerLink: internalRoutes.home.routerLink | |
|             }, | |
|             { | |
|               iconName: 'albums-outline', | |
|               label: internalRoutes.home.subRoutes.holdings.title, | |
|               routerLink: internalRoutes.home.subRoutes.holdings.routerLink | |
|             }, | |
|             { | |
|               iconName: 'reader-outline', | |
|               label: internalRoutes.home.subRoutes.summary.title, | |
|               routerLink: internalRoutes.home.subRoutes.summary.routerLink | |
|             }, | |
|             { | |
|               iconName: 'bookmark-outline', | |
|               label: internalRoutes.home.subRoutes.watchlist.title, | |
|               routerLink: internalRoutes.home.subRoutes.watchlist.routerLink | |
|             }, | |
|             { | |
|               iconName: 'newspaper-outline', | |
|               label: hasPermission( | |
|                 this.user?.permissions, | |
|                 permissions.readMarketDataOfMarkets | |
|               ) | |
|                 ? internalRoutes.home.subRoutes.marketsPremium.title | |
|                 : internalRoutes.home.subRoutes.markets.title, | |
|               routerLink: hasPermission( | |
|                 this.user?.permissions, | |
|                 permissions.readMarketDataOfMarkets | |
|               ) | |
|                 ? internalRoutes.home.subRoutes.marketsPremium.routerLink | |
|                 : internalRoutes.home.subRoutes.markets.routerLink | |
|             } | |
|           ]; | |
| 
 | |
|           this.changeDetectorRef.markForCheck(); | |
|         } | |
|       }); | |
| 
 | |
|     addIcons({ | |
|       albumsOutline, | |
|       analyticsOutline, | |
|       bookmarkOutline, | |
|       newspaperOutline, | |
|       readerOutline | |
|     }); | |
|   } | |
| 
 | |
|   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(); | |
|   } | |
| }
 | |
| 
 |