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

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

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

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

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

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

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

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

@ -1,8 +1,16 @@
<a <a
#link #link
class="d-block px-2 py-1 text-truncate" class="d-block line-height-1 px-2 py-1 text-truncate"
[queryParams]="queryParams" [queryParams]="queryParams"
[routerLink]="routerLink" [routerLink]="routerLink"
(click)="onClick()" (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 { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router'; import { RouterModule } from '@angular/router';
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
import { AssistantListItemComponent } from './assistant-list-item.component'; import { AssistantListItemComponent } from './assistant-list-item.component';
@NgModule({ @NgModule({
declarations: [AssistantListItemComponent], declarations: [AssistantListItemComponent],
exports: [AssistantListItemComponent], exports: [AssistantListItemComponent],
imports: [CommonModule, RouterModule] imports: [CommonModule, GfSymbolModule, RouterModule]
}) })
export class GfAssistantListItemModule {} 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 { MatMenuTrigger } from '@angular/material/menu';
import { AdminService } from '@ghostfolio/client/services/admin.service'; import { AdminService } from '@ghostfolio/client/services/admin.service';
import { DataService } from '@ghostfolio/client/services/data.service'; import { DataService } from '@ghostfolio/client/services/data.service';
import { translate } from '@ghostfolio/ui/i18n';
import { EMPTY, Observable, Subject, lastValueFrom } from 'rxjs'; import { EMPTY, Observable, Subject, lastValueFrom } from 'rxjs';
import { import {
catchError, catchError,
@ -233,9 +234,17 @@ export class AssistantComponent implements OnDestroy, OnInit {
return EMPTY; return EMPTY;
}), }),
map(({ marketData }) => { map(({ marketData }) => {
return marketData.map(({ dataSource, name, symbol }) => { return marketData.map(
return { dataSource, name, symbol }; ({ assetSubClass, currency, dataSource, name, symbol }) => {
}); return {
currency,
dataSource,
name,
symbol,
assetSubClassString: translate(assetSubClass)
};
}
);
}), }),
takeUntil(this.unsubscribeSubject) takeUntil(this.unsubscribeSubject)
); );
@ -257,9 +266,17 @@ export class AssistantComponent implements OnDestroy, OnInit {
return EMPTY; return EMPTY;
}), }),
map(({ positions }) => { map(({ positions }) => {
return positions.map(({ dataSource, name, symbol }) => { return positions.map(
return { dataSource, name, symbol }; ({ assetSubClass, currency, dataSource, name, symbol }) => {
}); return {
currency,
dataSource,
name,
symbol,
assetSubClassString: translate(assetSubClass)
};
}
);
}), }),
takeUntil(this.unsubscribeSubject) takeUntil(this.unsubscribeSubject)
); );

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

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

Loading…
Cancel
Save