mirror of https://github.com/ghostfolio/ghostfolio
Browse Source
* Improve the consistent use of symbol with dataSource * Update changelogpull/659/head
committed by
GitHub
22 changed files with 122 additions and 201 deletions
@ -1,6 +0,0 @@ |
|||||
import { LineChartItem } from '@ghostfolio/ui/line-chart/interfaces/line-chart.interface'; |
|
||||
|
|
||||
export interface PositionDetailDialogParams { |
|
||||
deviceType: string; |
|
||||
historicalDataItems: LineChartItem[]; |
|
||||
} |
|
@ -1,12 +0,0 @@ |
|||||
:host { |
|
||||
display: block; |
|
||||
|
|
||||
.mat-dialog-content { |
|
||||
max-height: unset; |
|
||||
|
|
||||
gf-line-chart { |
|
||||
aspect-ratio: 16 / 9; |
|
||||
margin: 0 -1rem; |
|
||||
} |
|
||||
} |
|
||||
} |
|
@ -1,94 +0,0 @@ |
|||||
import { |
|
||||
ChangeDetectionStrategy, |
|
||||
ChangeDetectorRef, |
|
||||
Component, |
|
||||
Inject |
|
||||
} from '@angular/core'; |
|
||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; |
|
||||
import { DataService } from '@ghostfolio/client/services/data.service'; |
|
||||
import { DATE_FORMAT } from '@ghostfolio/common/helper'; |
|
||||
import { LineChartItem } from '@ghostfolio/ui/line-chart/interfaces/line-chart.interface'; |
|
||||
import { isToday, parse } from 'date-fns'; |
|
||||
import { Subject } from 'rxjs'; |
|
||||
import { takeUntil } from 'rxjs/operators'; |
|
||||
|
|
||||
import { PositionDetailDialogParams } from './interfaces/interfaces'; |
|
||||
|
|
||||
@Component({ |
|
||||
selector: 'gf-performance-chart-dialog', |
|
||||
changeDetection: ChangeDetectionStrategy.OnPush, |
|
||||
templateUrl: 'performance-chart-dialog.html', |
|
||||
styleUrls: ['./performance-chart-dialog.component.scss'] |
|
||||
}) |
|
||||
export class PerformanceChartDialog { |
|
||||
public benchmarkDataItems: LineChartItem[]; |
|
||||
public benchmarkSymbol = 'VOO'; |
|
||||
public currency: string; |
|
||||
public firstBuyDate: string; |
|
||||
public marketPrice: number; |
|
||||
public historicalDataItems: LineChartItem[]; |
|
||||
|
|
||||
private unsubscribeSubject = new Subject<void>(); |
|
||||
|
|
||||
public constructor( |
|
||||
private changeDetectorRef: ChangeDetectorRef, |
|
||||
private dataService: DataService, |
|
||||
public dialogRef: MatDialogRef<PerformanceChartDialog>, |
|
||||
@Inject(MAT_DIALOG_DATA) public data: PositionDetailDialogParams |
|
||||
) { |
|
||||
this.dataService |
|
||||
.fetchPositionDetail(this.benchmarkSymbol) |
|
||||
.pipe(takeUntil(this.unsubscribeSubject)) |
|
||||
.subscribe(({ currency, firstBuyDate, historicalData, marketPrice }) => { |
|
||||
this.benchmarkDataItems = []; |
|
||||
this.currency = currency; |
|
||||
this.firstBuyDate = firstBuyDate; |
|
||||
this.historicalDataItems = []; |
|
||||
this.marketPrice = marketPrice; |
|
||||
|
|
||||
let coefficient = 1; |
|
||||
|
|
||||
this.historicalDataItems = this.data.historicalDataItems; |
|
||||
|
|
||||
this.historicalDataItems?.forEach((historicalDataItem) => { |
|
||||
const benchmarkItem = historicalData.find((item) => { |
|
||||
return item.date === historicalDataItem.date; |
|
||||
}); |
|
||||
|
|
||||
if (benchmarkItem) { |
|
||||
if (coefficient === 1) { |
|
||||
coefficient = historicalDataItem.value / benchmarkItem.value || 1; |
|
||||
} |
|
||||
|
|
||||
this.benchmarkDataItems.push({ |
|
||||
date: historicalDataItem.date, |
|
||||
value: benchmarkItem.value * coefficient |
|
||||
}); |
|
||||
} else if ( |
|
||||
isToday(parse(historicalDataItem.date, DATE_FORMAT, new Date())) |
|
||||
) { |
|
||||
this.benchmarkDataItems.push({ |
|
||||
date: historicalDataItem.date, |
|
||||
value: marketPrice * coefficient |
|
||||
}); |
|
||||
} else { |
|
||||
this.benchmarkDataItems.push({ |
|
||||
date: historicalDataItem.date, |
|
||||
value: undefined |
|
||||
}); |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
this.changeDetectorRef.markForCheck(); |
|
||||
}); |
|
||||
} |
|
||||
|
|
||||
public onClose(): void { |
|
||||
this.dialogRef.close(); |
|
||||
} |
|
||||
|
|
||||
public ngOnDestroy() { |
|
||||
this.unsubscribeSubject.next(); |
|
||||
this.unsubscribeSubject.complete(); |
|
||||
} |
|
||||
} |
|
@ -1,27 +0,0 @@ |
|||||
<gf-dialog-header |
|
||||
mat-dialog-title |
|
||||
title="Performance" |
|
||||
[deviceType]="data.deviceType" |
|
||||
(closeButtonClicked)="onClose()" |
|
||||
></gf-dialog-header> |
|
||||
|
|
||||
<div mat-dialog-content> |
|
||||
<div class="container p-0"> |
|
||||
<gf-line-chart |
|
||||
class="mb-4" |
|
||||
symbol="Performance" |
|
||||
[benchmarkDataItems]="benchmarkDataItems" |
|
||||
[historicalDataItems]="historicalDataItems" |
|
||||
[showGradient]="true" |
|
||||
[showLegend]="true" |
|
||||
[showXAxis]="true" |
|
||||
[showYAxis]="false" |
|
||||
></gf-line-chart> |
|
||||
</div> |
|
||||
</div> |
|
||||
|
|
||||
<gf-dialog-footer |
|
||||
mat-dialog-actions |
|
||||
[deviceType]="data.deviceType" |
|
||||
(closeButtonClicked)="onClose()" |
|
||||
></gf-dialog-footer> |
|
@ -1,28 +0,0 @@ |
|||||
import { CommonModule } from '@angular/common'; |
|
||||
import { NgModule } from '@angular/core'; |
|
||||
import { MatButtonModule } from '@angular/material/button'; |
|
||||
import { MatDialogModule } from '@angular/material/dialog'; |
|
||||
import { GfLineChartModule } from '@ghostfolio/ui/line-chart/line-chart.module'; |
|
||||
import { GfValueModule } from '@ghostfolio/ui/value'; |
|
||||
import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; |
|
||||
|
|
||||
import { GfDialogFooterModule } from '../dialog-footer/dialog-footer.module'; |
|
||||
import { GfDialogHeaderModule } from '../dialog-header/dialog-header.module'; |
|
||||
import { PerformanceChartDialog } from './performance-chart-dialog.component'; |
|
||||
|
|
||||
@NgModule({ |
|
||||
declarations: [PerformanceChartDialog], |
|
||||
exports: [], |
|
||||
imports: [ |
|
||||
CommonModule, |
|
||||
GfDialogFooterModule, |
|
||||
GfDialogHeaderModule, |
|
||||
GfLineChartModule, |
|
||||
GfValueModule, |
|
||||
MatButtonModule, |
|
||||
MatDialogModule, |
|
||||
NgxSkeletonLoaderModule |
|
||||
], |
|
||||
providers: [] |
|
||||
}) |
|
||||
export class GfPerformanceChartDialogModule {} |
|
Loading…
Reference in new issue