Browse Source

Fix review comments

pull/4080/head
Amandee Ellawala 9 months ago
committed by Thomas Kaul
parent
commit
8784d7eb17
  1. 2
      apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
  2. 7
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.scss
  3. 3
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
  4. 5
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
  5. 4
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.module.ts
  6. 0
      apps/client/src/app/components/admin-market-data/interfaces/interfaces.ts
  7. 1
      libs/ui/src/lib/admin-market-data-detail/index.ts
  8. 1
      libs/ui/src/lib/market-data-detail/index.ts
  9. 0
      libs/ui/src/lib/market-data-detail/market-data-detail-dialog/interfaces/interfaces.ts
  10. 0
      libs/ui/src/lib/market-data-detail/market-data-detail-dialog/market-data-detail-dialog.component.ts
  11. 0
      libs/ui/src/lib/market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html
  12. 0
      libs/ui/src/lib/market-data-detail/market-data-detail-dialog/market-data-detail-dialog.scss
  13. 0
      libs/ui/src/lib/market-data-detail/market-data-detail.component.html
  14. 4
      libs/ui/src/lib/market-data-detail/market-data-detail.component.scss
  15. 47
      libs/ui/src/lib/market-data-detail/market-data-detail.component.ts

2
apps/client/src/app/components/admin-market-data/admin-market-data.component.ts

@ -14,7 +14,6 @@ import {
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { AdminMarketDataItem } from '@ghostfolio/common/interfaces/admin-market-data.interface'; import { AdminMarketDataItem } from '@ghostfolio/common/interfaces/admin-market-data.interface';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { AssetProfileDialogParams } from '@ghostfolio/ui/admin-market-data-detail/interfaces/interfaces';
import { translate } from '@ghostfolio/ui/i18n'; import { translate } from '@ghostfolio/ui/i18n';
import { SelectionModel } from '@angular/cdk/collections'; import { SelectionModel } from '@angular/cdk/collections';
@ -42,6 +41,7 @@ import { AdminMarketDataService } from './admin-market-data.service';
import { AssetProfileDialog } from './asset-profile-dialog/asset-profile-dialog.component'; import { AssetProfileDialog } from './asset-profile-dialog/asset-profile-dialog.component';
import { CreateAssetProfileDialog } from './create-asset-profile-dialog/create-asset-profile-dialog.component'; import { CreateAssetProfileDialog } from './create-asset-profile-dialog/create-asset-profile-dialog.component';
import { CreateAssetProfileDialogParams } from './create-asset-profile-dialog/interfaces/interfaces'; import { CreateAssetProfileDialogParams } from './create-asset-profile-dialog/interfaces/interfaces';
import { AssetProfileDialogParams } from './interfaces/interfaces';
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,

7
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.scss

@ -3,8 +3,9 @@
.mat-mdc-dialog-content { .mat-mdc-dialog-content {
max-height: unset; max-height: unset;
}
gf-line-chart { gf-line-chart {
aspect-ratio: 16/9; aspect-ratio: 16/9;
}
} }
} }

3
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts

@ -13,7 +13,6 @@ import {
User, User,
LineChartItem LineChartItem
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { AssetProfileDialogParams } from '@ghostfolio/ui/admin-market-data-detail/interfaces/interfaces';
import { translate } from '@ghostfolio/ui/i18n'; import { translate } from '@ghostfolio/ui/i18n';
import { import {
@ -36,6 +35,8 @@ import { format } from 'date-fns';
import { EMPTY, Subject } from 'rxjs'; import { EMPTY, Subject } from 'rxjs';
import { catchError, takeUntil } from 'rxjs/operators'; import { catchError, takeUntil } from 'rxjs/operators';
import { AssetProfileDialogParams } from '../interfaces/interfaces';
@Component({ @Component({
host: { class: 'd-flex flex-column h-100' }, host: { class: 'd-flex flex-column h-100' },
selector: 'gf-asset-profile-dialog', selector: 'gf-asset-profile-dialog',

5
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html

@ -68,7 +68,6 @@
</div> </div>
<div class="flex-grow-1" mat-dialog-content> <div class="flex-grow-1" mat-dialog-content>
<p>Line</p>
<gf-line-chart <gf-line-chart
class="mb-4" class="mb-4"
[colorScheme]="user?.settings?.colorScheme" [colorScheme]="user?.settings?.colorScheme"
@ -79,7 +78,7 @@
[showYAxis]="true" [showYAxis]="true"
[symbol]="data.symbol" [symbol]="data.symbol"
/> />
<gf-admin-market-data-detail <gf-market-data-details
class="mb-3" class="mb-3"
[currency]="assetProfile?.currency" [currency]="assetProfile?.currency"
[dataSource]="data.dataSource" [dataSource]="data.dataSource"
@ -88,8 +87,8 @@
[marketData]="marketDataDetails" [marketData]="marketDataDetails"
[symbol]="data.symbol" [symbol]="data.symbol"
[user]="user" [user]="user"
(historicalDataUpdated)="onImportHistoricalDataChanged()"
(marketDataChanged)="onMarketDataChanged($event)" (marketDataChanged)="onMarketDataChanged($event)"
(updateHistoricalData)="onImportHistoricalDataChanged()"
/> />
<div class="row"> <div class="row">

4
apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.module.ts

@ -1,8 +1,8 @@
import { AdminMarketDataService } from '@ghostfolio/client/components/admin-market-data/admin-market-data.service'; import { AdminMarketDataService } from '@ghostfolio/client/components/admin-market-data/admin-market-data.service';
import { GfAssetProfileIconComponent } from '@ghostfolio/client/components/asset-profile-icon/asset-profile-icon.component'; import { GfAssetProfileIconComponent } from '@ghostfolio/client/components/asset-profile-icon/asset-profile-icon.component';
import { AdminMarketDataDetailComponent } from '@ghostfolio/ui/admin-market-data-detail';
import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector'; import { GfCurrencySelectorComponent } from '@ghostfolio/ui/currency-selector';
import { GfLineChartComponent } from '@ghostfolio/ui/line-chart'; import { GfLineChartComponent } from '@ghostfolio/ui/line-chart';
import { GfMarketDataDetailComponent } from '@ghostfolio/ui/market-data-detail';
import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart'; import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart';
import { GfValueComponent } from '@ghostfolio/ui/value'; import { GfValueComponent } from '@ghostfolio/ui/value';
@ -23,7 +23,7 @@ import { AssetProfileDialog } from './asset-profile-dialog.component';
@NgModule({ @NgModule({
declarations: [AssetProfileDialog], declarations: [AssetProfileDialog],
imports: [ imports: [
AdminMarketDataDetailComponent, GfMarketDataDetailComponent,
CommonModule, CommonModule,
FormsModule, FormsModule,
GfAssetProfileIconComponent, GfAssetProfileIconComponent,

0
libs/ui/src/lib/admin-market-data-detail/interfaces/interfaces.ts → apps/client/src/app/components/admin-market-data/interfaces/interfaces.ts

1
libs/ui/src/lib/admin-market-data-detail/index.ts

@ -1 +0,0 @@
export * from './admin-market-data-detail.component';

1
libs/ui/src/lib/market-data-detail/index.ts

@ -0,0 +1 @@
export * from './market-data-detail.component';

0
libs/ui/src/lib/admin-market-data-detail/market-data-detail-dialog/interfaces/interfaces.ts → libs/ui/src/lib/market-data-detail/market-data-detail-dialog/interfaces/interfaces.ts

0
libs/ui/src/lib/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.component.ts → libs/ui/src/lib/market-data-detail/market-data-detail-dialog/market-data-detail-dialog.component.ts

0
libs/ui/src/lib/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html → libs/ui/src/lib/market-data-detail/market-data-detail-dialog/market-data-detail-dialog.html

0
libs/ui/src/lib/admin-market-data-detail/market-data-detail-dialog/market-data-detail-dialog.scss → libs/ui/src/lib/market-data-detail/market-data-detail-dialog/market-data-detail-dialog.scss

0
libs/ui/src/lib/admin-market-data-detail/admin-market-data-detail.component.html → libs/ui/src/lib/market-data-detail/market-data-detail.component.html

4
libs/ui/src/lib/admin-market-data-detail/admin-market-data-detail.component.scss → libs/ui/src/lib/market-data-detail/market-data-detail.component.scss

@ -2,10 +2,6 @@
display: block; display: block;
font-size: 0.9rem; font-size: 0.9rem;
gf-line-chart {
aspect-ratio: 16/9;
}
.date { .date {
font-feature-settings: 'tnum'; font-feature-settings: 'tnum';
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;

47
libs/ui/src/lib/admin-market-data-detail/admin-market-data-detail.component.ts → libs/ui/src/lib/market-data-detail/market-data-detail.component.ts

@ -6,14 +6,12 @@ import {
getLocale getLocale
} from '@ghostfolio/common/helper'; } from '@ghostfolio/common/helper';
import { LineChartItem, User } from '@ghostfolio/common/interfaces'; import { LineChartItem, User } from '@ghostfolio/common/interfaces';
import { AssetProfileDialogParams } from '@ghostfolio/ui/admin-market-data-detail/interfaces/interfaces';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { import {
ChangeDetectionStrategy, ChangeDetectionStrategy,
Component, Component,
EventEmitter, EventEmitter,
Inject,
Input, Input,
OnChanges, OnChanges,
OnInit, OnInit,
@ -21,7 +19,7 @@ import {
} from '@angular/core'; } from '@angular/core';
import { FormBuilder, ReactiveFormsModule } from '@angular/forms'; import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
import { MatButtonModule } from '@angular/material/button'; import { MatButtonModule } from '@angular/material/button';
import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { MatInputModule } from '@angular/material/input'; import { MatInputModule } from '@angular/material/input';
import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import { DataSource, MarketData } from '@prisma/client'; import { DataSource, MarketData } from '@prisma/client';
@ -38,6 +36,7 @@ import {
parseISO parseISO
} from 'date-fns'; } from 'date-fns';
import { first, last } from 'lodash'; import { first, last } from 'lodash';
import ms from 'ms';
import { DeviceDetectorService } from 'ngx-device-detector'; import { DeviceDetectorService } from 'ngx-device-detector';
import { parse as csvToJson } from 'papaparse'; import { parse as csvToJson } from 'papaparse';
import { EMPTY, Subject, takeUntil } from 'rxjs'; import { EMPTY, Subject, takeUntil } from 'rxjs';
@ -48,13 +47,13 @@ import { MarketDataDetailDialogComponent } from './market-data-detail-dialog/mar
@Component({ @Component({
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
imports: [CommonModule, ReactiveFormsModule, MatButtonModule, MatInputModule], imports: [CommonModule, MatButtonModule, MatInputModule, ReactiveFormsModule],
selector: 'gf-admin-market-data-detail', selector: 'gf-market-data-details',
standalone: true, standalone: true,
styleUrls: ['./admin-market-data-detail.component.scss'], styleUrls: ['./market-data-detail.component.scss'],
templateUrl: './admin-market-data-detail.component.html' templateUrl: './market-data-detail.component.html'
}) })
export class AdminMarketDataDetailComponent implements OnChanges, OnInit { export class GfMarketDataDetailComponent implements OnChanges, OnInit {
@Input() currency: string; @Input() currency: string;
@Input() dataSource: DataSource; @Input() dataSource: DataSource;
@Input() dateOfFirstActivity: string; @Input() dateOfFirstActivity: string;
@ -64,11 +63,16 @@ export class AdminMarketDataDetailComponent implements OnChanges, OnInit {
@Input() user: User; @Input() user: User;
@Output() marketDataChanged = new EventEmitter<boolean>(); @Output() marketDataChanged = new EventEmitter<boolean>();
@Output() updateHistoricalData = new EventEmitter(); @Output() historicalDataUpdated = new EventEmitter();
public days = Array(31); public days = Array(31);
public defaultDateFormat: string; public defaultDateFormat: string;
public deviceType: string; public deviceType: string;
public historicalDataForm = this.formBuilder.group({
historicalData: this.formBuilder.group({
csvString: ''
})
});
public historicalDataItems: LineChartItem[]; public historicalDataItems: LineChartItem[];
public marketDataByMonth: { public marketDataByMonth: {
[yearMonth: string]: { [yearMonth: string]: {
@ -76,12 +80,6 @@ export class AdminMarketDataDetailComponent implements OnChanges, OnInit {
}; };
} = {}; } = {};
public historicalDataForm = this.formBuilder.group({
historicalData: this.formBuilder.group({
csvString: ''
})
});
private static readonly HISTORICAL_DATA_TEMPLATE = `date;marketPrice\n${format( private static readonly HISTORICAL_DATA_TEMPLATE = `date;marketPrice\n${format(
new Date(), new Date(),
DATE_FORMAT DATE_FORMAT
@ -91,11 +89,10 @@ export class AdminMarketDataDetailComponent implements OnChanges, OnInit {
public constructor( public constructor(
private adminService: AdminService, private adminService: AdminService,
@Inject(MAT_DIALOG_DATA) public data: AssetProfileDialogParams,
private deviceService: DeviceDetectorService, private deviceService: DeviceDetectorService,
private formBuilder: FormBuilder,
private dialog: MatDialog, private dialog: MatDialog,
private snackBar: MatSnackBar, private snackBar: MatSnackBar
private formBuilder: FormBuilder
) { ) {
this.deviceType = this.deviceService.getDeviceInfo().deviceType; this.deviceType = this.deviceService.getDeviceInfo().deviceType;
} }
@ -236,38 +233,38 @@ export class AdminMarketDataDetailComponent implements OnChanges, OnInit {
this.adminService this.adminService
.postMarketData({ .postMarketData({
dataSource: this.data.dataSource, dataSource: this.dataSource,
marketData: { marketData: {
marketData marketData
}, },
symbol: this.data.symbol symbol: this.symbol
}) })
.pipe( .pipe(
catchError(({ error, message }) => { catchError(({ error, message }) => {
this.snackBar.open(`${error}: ${message[0]}`, undefined, { this.snackBar.open(`${error}: ${message[0]}`, undefined, {
duration: 3000 duration: ms('3 seconds')
}); });
return EMPTY; return EMPTY;
}), }),
takeUntil(this.unsubscribeSubject) takeUntil(this.unsubscribeSubject)
) )
.subscribe(() => { .subscribe(() => {
this.updateHistoricalData.emit(); this.historicalDataUpdated.emit();
this.initializeHistoricalDataForm(); this.initializeHistoricalDataForm();
}); });
} catch { } catch {
this.snackBar.open( this.snackBar.open(
$localize`Oops! Could not parse historical data.`, $localize`Oops! Could not parse historical data.`,
undefined, undefined,
{ duration: 3000 } { duration: ms('3 seconds') }
); );
} }
} }
public initializeHistoricalDataForm() { private initializeHistoricalDataForm() {
this.historicalDataForm.setValue({ this.historicalDataForm.setValue({
historicalData: { historicalData: {
csvString: AdminMarketDataDetailComponent.HISTORICAL_DATA_TEMPLATE csvString: GfMarketDataDetailComponent.HISTORICAL_DATA_TEMPLATE
} }
}); });
} }
Loading…
Cancel
Save