Browse Source

code review changes

pull/5148/head
Attila Cseh 1 month ago
parent
commit
d141ce7aba
  1. 61
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts
  2. 1
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html
  3. 2
      apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts
  4. 17
      libs/common/src/lib/config.ts

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

@ -6,6 +6,7 @@ import { DataService } from '@ghostfolio/client/services/data.service';
import { UserService } from '@ghostfolio/client/services/user/user.service'; import { UserService } from '@ghostfolio/client/services/user/user.service';
import { validateObjectForForm } from '@ghostfolio/client/util/form.util'; import { validateObjectForForm } from '@ghostfolio/client/util/form.util';
import { import {
ASSET_CLASS_MAPPING,
ghostfolioScraperApiSymbolPrefix, ghostfolioScraperApiSymbolPrefix,
PROPERTY_IS_DATA_GATHERING_ENABLED PROPERTY_IS_DATA_GATHERING_ENABLED
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
@ -58,7 +59,7 @@ import { catchError, takeUntil } from 'rxjs/operators';
import { import {
AssetProfileDialogParams, AssetProfileDialogParams,
SelectOptionValue SelectOption
} from './interfaces/interfaces'; } from './interfaces/interfaces';
@Component({ @Component({
@ -82,19 +83,9 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
public assetProfileSubClass: string; public assetProfileSubClass: string;
public assetClasses = Object.keys(AssetClass).map((id) => { public assetClasses = Object.keys(AssetClass).map((id) => {
return { id, label: translate(id) }; return { id, label: translate(id) } as SelectOption;
}); });
public allAssetSubClasses = Object.keys(AssetSubClass).reduce( public assetSubClasses: SelectOption[] = [];
(acc, id) => {
acc[id] = {
id,
label: translate(id)
};
return acc;
},
{} as Record<AssetSubClass, SelectOptionValue>
);
public assetSubClasses: SelectOptionValue[] = [];
public assetProfile: AdminMarketDataDetails['assetProfile']; public assetProfile: AdminMarketDataDetails['assetProfile'];
@ -233,42 +224,16 @@ export class AssetProfileDialog implements OnDestroy, OnInit {
this.assetClassControl.valueChanges this.assetClassControl.valueChanges
.pipe(takeUntil(this.unsubscribeSubject)) .pipe(takeUntil(this.unsubscribeSubject))
.subscribe((assetClass) => { .subscribe((assetClass) => {
switch (assetClass) { const assetSubClasses = ASSET_CLASS_MAPPING.get(assetClass) ?? [];
case AssetClass.ALTERNATIVE_INVESTMENT:
this.assetSubClasses = [ this.assetSubClasses = assetSubClasses.map((assetSubClass) => {
this.allAssetSubClasses[AssetSubClass.COLLECTIBLE] return {
]; id: assetSubClass,
break; label: translate(assetSubClass)
case AssetClass.COMMODITY: };
this.assetSubClasses = [ });
this.allAssetSubClasses[AssetSubClass.COMMODITY],
this.allAssetSubClasses[AssetSubClass.PRECIOUS_METAL]
];
break;
case AssetClass.EQUITY:
this.assetSubClasses = [
this.allAssetSubClasses[AssetSubClass.ETF],
this.allAssetSubClasses[AssetSubClass.PRIVATE_EQUITY],
this.allAssetSubClasses[AssetSubClass.STOCK]
];
break;
case AssetClass.FIXED_INCOME:
this.assetSubClasses = [
this.allAssetSubClasses[AssetSubClass.BOND],
this.allAssetSubClasses[AssetSubClass.MUTUALFUND]
];
break;
case AssetClass.LIQUIDITY:
this.assetSubClasses = [
this.allAssetSubClasses[AssetSubClass.CRYPTOCURRENCY]
];
break;
default:
this.assetSubClasses = [];
break;
}
this.assetSubClassControl.setValue(this.assetSubClasses[0]?.id); this.assetSubClassControl.setValue(null);
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();
}); });

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

@ -316,6 +316,7 @@
<mat-form-field appearance="outline" class="w-100 without-hint"> <mat-form-field appearance="outline" class="w-100 without-hint">
<mat-label i18n>Asset Sub Class</mat-label> <mat-label i18n>Asset Sub Class</mat-label>
<mat-select formControlName="assetSubClass"> <mat-select formControlName="assetSubClass">
<mat-option [value]="null" />
@for (assetSubClass of assetSubClasses; track assetSubClass) { @for (assetSubClass of assetSubClasses; track assetSubClass) {
<mat-option [value]="assetSubClass.id">{{ <mat-option [value]="assetSubClass.id">{{
assetSubClass.label assetSubClass.label

2
apps/client/src/app/components/admin-market-data/asset-profile-dialog/interfaces/interfaces.ts

@ -10,7 +10,7 @@ export interface AssetProfileDialogParams {
symbol: string; symbol: string;
} }
export interface SelectOptionValue { export interface SelectOption {
id: AssetSubClass; id: AssetSubClass;
label: string; label: string;
} }

17
libs/common/src/lib/config.ts

@ -1,4 +1,4 @@
import { DataSource } from '@prisma/client'; import { AssetClass, AssetSubClass, DataSource } from '@prisma/client';
import { JobOptions, JobStatus } from 'bull'; import { JobOptions, JobStatus } from 'bull';
import ms from 'ms'; import ms from 'ms';
@ -34,6 +34,21 @@ export const warnColorRgb = {
b: 69 b: 69
}; };
export const ASSET_CLASS_MAPPING = new Map<AssetClass, AssetSubClass[]>([
[AssetClass.ALTERNATIVE_INVESTMENT, [AssetSubClass.COLLECTIBLE]],
[
AssetClass.COMMODITY,
[AssetSubClass.COMMODITY, AssetSubClass.PRECIOUS_METAL]
],
[
AssetClass.EQUITY,
[AssetSubClass.ETF, AssetSubClass.PRIVATE_EQUITY, AssetSubClass.STOCK]
],
[AssetClass.FIXED_INCOME, [AssetSubClass.BOND, AssetSubClass.MUTUALFUND]],
[AssetClass.LIQUIDITY, [AssetSubClass.BOND, AssetSubClass.CRYPTOCURRENCY]],
[AssetClass.REAL_ESTATE, []]
]);
export const CACHE_TTL_NO_CACHE = 1; export const CACHE_TTL_NO_CACHE = 1;
export const CACHE_TTL_INFINITE = 0; export const CACHE_TTL_INFINITE = 0;

Loading…
Cancel
Save