Browse Source

Extend search results by currency, symbol and asset sub class

pull/2499/head
Thomas 2 years ago
parent
commit
c32fc9ee52
  1. 4
      apps/api/src/app/admin/admin.service.ts
  2. 1
      apps/api/src/app/portfolio/portfolio.service.ts
  3. 1
      libs/common/src/lib/interfaces/admin-market-data.interface.ts
  4. 6
      libs/common/src/lib/interfaces/position.interface.ts
  5. 12
      libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html
  6. 3
      libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.module.ts
  7. 29
      libs/ui/src/lib/assistant/assistant.component.ts
  8. 2
      libs/ui/src/lib/assistant/interfaces/interfaces.ts

4
apps/api/src/app/admin/admin.service.ts

@ -185,6 +185,7 @@ export class AdminService {
assetSubClass: true,
comment: true,
countries: true,
currency: true,
dataSource: true,
name: true,
Order: {
@ -206,6 +207,7 @@ export class AdminService {
assetClass,
assetSubClass,
comment,
currency,
countries,
dataSource,
name,
@ -227,6 +229,7 @@ export class AdminService {
assetClass,
assetSubClass,
comment,
currency,
countriesCount,
dataSource,
name,
@ -356,6 +359,7 @@ export class AdminService {
symbol,
assetClass: 'CASH',
countriesCount: 0,
currency: symbol.replace(DEFAULT_CURRENCY, ''),
name: symbol,
sectorsCount: 0
};

1
apps/api/src/app/portfolio/portfolio.service.ts

@ -1088,6 +1088,7 @@ export class PortfolioService {
return {
...position,
assetClass: symbolProfileMap[position.symbol].assetClass,
assetSubClass: symbolProfileMap[position.symbol].assetSubClass,
averagePrice: new Big(position.averagePrice).toNumber(),
grossPerformance: position.grossPerformance?.toNumber() ?? null,
grossPerformancePercentage:

1
libs/common/src/lib/interfaces/admin-market-data.interface.ts

@ -9,6 +9,7 @@ export interface AdminMarketDataItem {
assetClass?: AssetClass;
assetSubClass?: AssetSubClass;
countriesCount: number;
currency: string;
dataSource: DataSource;
date?: Date;
marketDataItemCount: number;

6
libs/common/src/lib/interfaces/position.interface.ts

@ -1,9 +1,9 @@
import { AssetClass, DataSource } from '@prisma/client';
import { MarketState } from '../types';
import { MarketState } from '@ghostfolio/common/types';
import { AssetClass, AssetSubClass, DataSource } from '@prisma/client';
export interface Position {
assetClass: AssetClass;
assetSubClass: AssetSubClass;
averagePrice: number;
currency: string;
dataSource: DataSource;

12
libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.html

@ -1,8 +1,16 @@
<a
#link
class="d-block px-2 py-1 text-truncate"
class="d-block line-height-1 px-2 py-1 text-truncate"
[queryParams]="queryParams"
[routerLink]="routerLink"
(click)="onClick()"
>{{ item?.name }}</a
><span><b>{{ item?.name }}</b></span>
<br />
<small class="text-muted"
>{{ item?.symbol | gfSymbol }} · {{ item?.currency }}<ng-container
*ngIf="item?.assetSubClassString"
>
· {{ item?.assetSubClassString }}</ng-container
></small
></a
>

3
libs/ui/src/lib/assistant/assistant-list-item/assistant-list-item.module.ts

@ -1,12 +1,13 @@
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
import { AssistantListItemComponent } from './assistant-list-item.component';
@NgModule({
declarations: [AssistantListItemComponent],
exports: [AssistantListItemComponent],
imports: [CommonModule, RouterModule]
imports: [CommonModule, GfSymbolModule, RouterModule]
})
export class GfAssistantListItemModule {}

29
libs/ui/src/lib/assistant/assistant.component.ts

@ -18,6 +18,7 @@ import { FormControl } from '@angular/forms';
import { MatMenuTrigger } from '@angular/material/menu';
import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service';
import { translate } from '@ghostfolio/ui/i18n';
import { EMPTY, Observable, Subject, lastValueFrom } from 'rxjs';
import {
catchError,
@ -233,9 +234,17 @@ export class AssistantComponent implements OnDestroy, OnInit {
return EMPTY;
}),
map(({ marketData }) => {
return marketData.map(({ dataSource, name, symbol }) => {
return { dataSource, name, symbol };
});
return marketData.map(
({ assetSubClass, currency, dataSource, name, symbol }) => {
return {
currency,
dataSource,
name,
symbol,
assetSubClassString: translate(assetSubClass)
};
}
);
}),
takeUntil(this.unsubscribeSubject)
);
@ -257,9 +266,17 @@ export class AssistantComponent implements OnDestroy, OnInit {
return EMPTY;
}),
map(({ positions }) => {
return positions.map(({ dataSource, name, symbol }) => {
return { dataSource, name, symbol };
});
return positions.map(
({ assetSubClass, currency, dataSource, name, symbol }) => {
return {
currency,
dataSource,
name,
symbol,
assetSubClassString: translate(assetSubClass)
};
}
);
}),
takeUntil(this.unsubscribeSubject)
);

2
libs/ui/src/lib/assistant/interfaces/interfaces.ts

@ -1,6 +1,8 @@
import { UniqueAsset } from '@ghostfolio/common/interfaces';
export interface ISearchResultItem extends UniqueAsset {
assetSubClassString: string;
currency: string;
name: string;
}

Loading…
Cancel
Save