mirror of https://github.com/ghostfolio/ghostfolio
4 changed files with 100 additions and 0 deletions
@ -0,0 +1,57 @@ |
|||||
|
import { DataService } from '@ghostfolio/client/services/data.service'; |
||||
|
import { UserService } from '@ghostfolio/client/services/user/user.service'; |
||||
|
import { AssetProfileIdentifier, User } from '@ghostfolio/common/interfaces'; |
||||
|
|
||||
|
import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; |
||||
|
import { DeviceDetectorService } from 'ngx-device-detector'; |
||||
|
import { Subject } from 'rxjs'; |
||||
|
import { takeUntil } from 'rxjs/operators'; |
||||
|
|
||||
|
@Component({ |
||||
|
selector: 'gf-home-watchlist', |
||||
|
styleUrls: ['./home-watchlist.scss'], |
||||
|
templateUrl: './home-watchlist.html', |
||||
|
standalone: false |
||||
|
}) |
||||
|
export class HomeWatchlistComponent implements OnDestroy, OnInit { |
||||
|
public watchlist: AssetProfileIdentifier[]; |
||||
|
public deviceType: string; |
||||
|
public user: User; |
||||
|
|
||||
|
private unsubscribeSubject = new Subject<void>(); |
||||
|
|
||||
|
public constructor( |
||||
|
private changeDetectorRef: ChangeDetectorRef, |
||||
|
private dataService: DataService, |
||||
|
private deviceService: DeviceDetectorService, |
||||
|
private userService: UserService |
||||
|
) { |
||||
|
this.deviceType = this.deviceService.getDeviceInfo().deviceType; |
||||
|
|
||||
|
this.userService.stateChanged |
||||
|
.pipe(takeUntil(this.unsubscribeSubject)) |
||||
|
.subscribe((state) => { |
||||
|
if (state?.user) { |
||||
|
this.user = state.user; |
||||
|
|
||||
|
this.changeDetectorRef.markForCheck(); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public ngOnInit() { |
||||
|
this.dataService |
||||
|
.fetchWatchlist() |
||||
|
.pipe(takeUntil(this.unsubscribeSubject)) |
||||
|
.subscribe((watchlist) => { |
||||
|
this.watchlist = watchlist; |
||||
|
|
||||
|
this.changeDetectorRef.markForCheck(); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public ngOnDestroy() { |
||||
|
this.unsubscribeSubject.next(); |
||||
|
this.unsubscribeSubject.complete(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
<div class="container"> |
||||
|
<h1 class="d-none d-sm-block h3 mb-4 text-center" i18n>Watchlist</h1> |
||||
|
<div class="mb-3 row"> |
||||
|
<div class="col-xs-12 col-md-8 offset-md-2"> |
||||
|
<gf-benchmark |
||||
|
[benchmarks]="watchlist" |
||||
|
[deviceType]="deviceType" |
||||
|
[locale]="user?.settings?.locale || undefined" |
||||
|
[user]="user" |
||||
|
/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="fab-container"> |
||||
|
<a |
||||
|
class="align-items-center d-flex justify-content-center" |
||||
|
color="primary" |
||||
|
mat-fab |
||||
|
[queryParams]="{ createDialog: true }" |
||||
|
[routerLink]="[]" |
||||
|
> |
||||
|
<ion-icon name="add-outline" size="large" /> |
||||
|
</a> |
||||
|
</div> |
@ -0,0 +1,16 @@ |
|||||
|
import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark'; |
||||
|
|
||||
|
import { CommonModule } from '@angular/common'; |
||||
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; |
||||
|
import { MatButtonModule } from '@angular/material/button'; |
||||
|
import { RouterModule } from '@angular/router'; |
||||
|
|
||||
|
import { HomeWatchlistComponent } from './home-watchlist.component'; |
||||
|
|
||||
|
@NgModule({ |
||||
|
declarations: [HomeWatchlistComponent], |
||||
|
exports: [HomeWatchlistComponent], |
||||
|
imports: [CommonModule, GfBenchmarkComponent, MatButtonModule, RouterModule], |
||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA] |
||||
|
}) |
||||
|
export class GfHomeWatchlistModule {} |
@ -0,0 +1,3 @@ |
|||||
|
:host { |
||||
|
display: block; |
||||
|
} |
Loading…
Reference in new issue