Browse Source

Merge branch 'main' into task/improve-instructions-of-mcp-server

pull/8263/head
Thomas Kaul 9 hours ago
committed by GitHub
parent
commit
f6b86ae457
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      CHANGELOG.md
  2. 6
      apps/api/src/app/app.module.ts
  3. 7
      apps/api/src/app/endpoints/asset-profiles/asset.controller.ts
  4. 0
      apps/api/src/app/endpoints/export/export.controller.ts
  5. 0
      apps/api/src/app/endpoints/export/export.module.ts
  6. 0
      apps/api/src/app/endpoints/export/export.service.ts
  7. 0
      apps/api/src/app/endpoints/export/get-export.dto.ts
  8. 0
      apps/api/src/app/endpoints/health/health.controller.ts
  9. 0
      apps/api/src/app/endpoints/health/health.module.ts
  10. 0
      apps/api/src/app/endpoints/health/health.service.ts
  11. 5
      apps/api/src/app/endpoints/import/import.controller.ts
  12. 17
      apps/api/src/app/endpoints/import/import.module.ts
  13. 2
      apps/api/src/app/endpoints/mcp/mcp.module.ts
  14. 4
      apps/api/src/app/endpoints/mcp/mcp.service.spec.ts
  15. 2
      apps/api/src/app/endpoints/mcp/mcp.service.ts
  16. 2
      apps/api/src/filters/mcp-tool-exception.filter.spec.ts
  17. 4
      apps/api/src/services/data-provider/data-provider.service.ts
  18. 0
      apps/api/src/services/import/errors/import-validation.error.ts
  19. 0
      apps/api/src/services/import/import-data.dto.spec.ts
  20. 0
      apps/api/src/services/import/import-data.dto.ts
  21. 12
      apps/api/src/services/import/import.module.ts
  22. 0
      apps/api/src/services/import/import.service.spec.ts
  23. 0
      apps/api/src/services/import/import.service.ts
  24. 0
      apps/api/src/services/import/interfaces/asset-profile-to-create.interface.ts
  25. 368
      apps/client/src/locales/messages.ca.xlf
  26. 368
      apps/client/src/locales/messages.de.xlf
  27. 368
      apps/client/src/locales/messages.es.xlf
  28. 368
      apps/client/src/locales/messages.fr.xlf
  29. 368
      apps/client/src/locales/messages.it.xlf
  30. 368
      apps/client/src/locales/messages.ja.xlf
  31. 368
      apps/client/src/locales/messages.ko.xlf
  32. 368
      apps/client/src/locales/messages.nl.xlf
  33. 368
      apps/client/src/locales/messages.pl.xlf
  34. 368
      apps/client/src/locales/messages.pt.xlf
  35. 368
      apps/client/src/locales/messages.tr.xlf
  36. 368
      apps/client/src/locales/messages.uk.xlf
  37. 361
      apps/client/src/locales/messages.xlf
  38. 368
      apps/client/src/locales/messages.zh.xlf
  39. 9
      libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts
  40. 5
      libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.html

2
CHANGELOG.md

@ -13,9 +13,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- Improved the market price in the benchmark detail dialog by adding the currency and reducing the precision on mobile
- Improved the style of the close button in the dialog footer component - Improved the style of the close button in the dialog footer component
- Improved the style of the close button in the dialog header component - Improved the style of the close button in the dialog header component
- Improved the instructions of the server of the Model Context Protocol (MCP) to give the limits of the Basic subscription only to a user with the Basic subscription (experimental) - Improved the instructions of the server of the Model Context Protocol (MCP) to give the limits of the Basic subscription only to a user with the Basic subscription (experimental)
- Improved the language localization for German (`de`)
- Upgraded `prettier` from version `3.9.9` to `3.9.10` - Upgraded `prettier` from version `3.9.9` to `3.9.10`
## 3.90.0 - 2026-10-21 ## 3.90.0 - 2026-10-21

6
apps/api/src/app/app.module.ts

@ -50,6 +50,9 @@ import { BenchmarksModule } from './endpoints/benchmarks/benchmarks.module';
import { CacheModule } from './endpoints/cache/cache.module'; import { CacheModule } from './endpoints/cache/cache.module';
import { GhostfolioModule } from './endpoints/data-providers/ghostfolio/ghostfolio.module'; import { GhostfolioModule } from './endpoints/data-providers/ghostfolio/ghostfolio.module';
import { ExchangeRatesModule } from './endpoints/exchange-rates/exchange-rates.module'; import { ExchangeRatesModule } from './endpoints/exchange-rates/exchange-rates.module';
import { ExportModule } from './endpoints/export/export.module';
import { HealthModule } from './endpoints/health/health.module';
import { ImportModule } from './endpoints/import/import.module';
import { InfoModule } from './endpoints/info/info.module'; import { InfoModule } from './endpoints/info/info.module';
import { LogoModule } from './endpoints/logo/logo.module'; import { LogoModule } from './endpoints/logo/logo.module';
import { MarketDataModule } from './endpoints/market-data/market-data.module'; import { MarketDataModule } from './endpoints/market-data/market-data.module';
@ -59,9 +62,6 @@ import { PublicModule } from './endpoints/public/public.module';
import { SitemapModule } from './endpoints/sitemap/sitemap.module'; import { SitemapModule } from './endpoints/sitemap/sitemap.module';
import { TagsModule } from './endpoints/tags/tags.module'; import { TagsModule } from './endpoints/tags/tags.module';
import { WatchlistModule } from './endpoints/watchlist/watchlist.module'; import { WatchlistModule } from './endpoints/watchlist/watchlist.module';
import { ExportModule } from './export/export.module';
import { HealthModule } from './health/health.module';
import { ImportModule } from './import/import.module';
import { PortfolioModule } from './portfolio/portfolio.module'; import { PortfolioModule } from './portfolio/portfolio.module';
import { SubscriptionModule } from './subscription/subscription.module'; import { SubscriptionModule } from './subscription/subscription.module';
import { SymbolModule } from './symbol/symbol.module'; import { SymbolModule } from './symbol/symbol.module';

7
apps/api/src/app/endpoints/asset-profiles/asset.controller.ts

@ -30,7 +30,12 @@ export class AssetController {
return { return {
marketData, marketData,
splits, splits,
assetProfile: pick(assetProfile, ['dataSource', 'name', 'symbol']) assetProfile: {
...pick(assetProfile, ['dataSource', 'name', 'symbol']),
// An index has no asset class and its value has no currency,
// thus show no currency for any asset profile without asset class
currency: assetProfile.assetClass ? assetProfile.currency : undefined
}
}; };
} }
} }

0
apps/api/src/app/export/export.controller.ts → apps/api/src/app/endpoints/export/export.controller.ts

0
apps/api/src/app/export/export.module.ts → apps/api/src/app/endpoints/export/export.module.ts

0
apps/api/src/app/export/export.service.ts → apps/api/src/app/endpoints/export/export.service.ts

0
apps/api/src/app/export/get-export.dto.ts → apps/api/src/app/endpoints/export/get-export.dto.ts

0
apps/api/src/app/health/health.controller.ts → apps/api/src/app/endpoints/health/health.controller.ts

0
apps/api/src/app/health/health.module.ts → apps/api/src/app/endpoints/health/health.module.ts

0
apps/api/src/app/health/health.service.ts → apps/api/src/app/endpoints/health/health.service.ts

5
apps/api/src/app/import/import.controller.ts → apps/api/src/app/endpoints/import/import.controller.ts

@ -2,6 +2,8 @@ import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorat
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor';
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor'; import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor';
import { ImportDataDto } from '@ghostfolio/api/services/import/import-data.dto';
import { ImportService } from '@ghostfolio/api/services/import/import.service';
import { ImportResponse } from '@ghostfolio/common/interfaces'; import { ImportResponse } from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import type { RequestWithUser } from '@ghostfolio/common/types'; import type { RequestWithUser } from '@ghostfolio/common/types';
@ -24,9 +26,6 @@ import { AuthGuard } from '@nestjs/passport';
import { DataSource } from '@prisma/client'; import { DataSource } from '@prisma/client';
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { StatusCodes, getReasonPhrase } from 'http-status-codes';
import { ImportDataDto } from './import-data.dto';
import { ImportService } from './import.service';
@Controller('import') @Controller('import')
export class ImportController { export class ImportController {
private readonly logger = new Logger(ImportController.name); private readonly logger = new Logger(ImportController.name);

17
apps/api/src/app/endpoints/import/import.module.ts

@ -0,0 +1,17 @@
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module';
import { ImportModule as ImportServiceModule } from '@ghostfolio/api/services/import/import.module';
import { Module } from '@nestjs/common';
import { ImportController } from './import.controller';
@Module({
controllers: [ImportController],
imports: [
ImportServiceModule,
TransformDataSourceInRequestModule,
TransformDataSourceInResponseModule
]
})
export class ImportModule {}

2
apps/api/src/app/endpoints/mcp/mcp.module.ts

@ -1,6 +1,5 @@
import { AccountBalanceModule } from '@ghostfolio/api/app/account-balance/account-balance.module'; import { AccountBalanceModule } from '@ghostfolio/api/app/account-balance/account-balance.module';
import { AccountModule } from '@ghostfolio/api/app/account/account.module'; import { AccountModule } from '@ghostfolio/api/app/account/account.module';
import { ImportModule } from '@ghostfolio/api/app/import/import.module';
import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module'; import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module';
import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { UserModule } from '@ghostfolio/api/app/user/user.module';
import { environment } from '@ghostfolio/api/environments/environment'; import { environment } from '@ghostfolio/api/environments/environment';
@ -11,6 +10,7 @@ import {
import { ApiModule } from '@ghostfolio/api/services/api/api.module'; import { ApiModule } from '@ghostfolio/api/services/api/api.module';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { ImportModule } from '@ghostfolio/api/services/import/import.module';
import { PortfolioTableModule } from '@ghostfolio/api/services/portfolio-table/portfolio-table.module'; import { PortfolioTableModule } from '@ghostfolio/api/services/portfolio-table/portfolio-table.module';
import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service';
import { MCP_ENDPOINT } from '@ghostfolio/common/config'; import { MCP_ENDPOINT } from '@ghostfolio/common/config';

4
apps/api/src/app/endpoints/mcp/mcp.service.spec.ts

@ -1,13 +1,13 @@
import { AccountBalanceService } from '@ghostfolio/api/app/account-balance/account-balance.service'; import { AccountBalanceService } from '@ghostfolio/api/app/account-balance/account-balance.service';
import { AccountService } from '@ghostfolio/api/app/account/account.service'; import { AccountService } from '@ghostfolio/api/app/account/account.service';
import { ImportValidationError } from '@ghostfolio/api/app/import/errors/import-validation.error';
import { ImportService } from '@ghostfolio/api/app/import/import.service';
import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service';
import { UserService } from '@ghostfolio/api/app/user/user.service'; import { UserService } from '@ghostfolio/api/app/user/user.service';
import { CallerFacingError } from '@ghostfolio/api/errors/caller-facing.error'; import { CallerFacingError } from '@ghostfolio/api/errors/caller-facing.error';
import { encodeDataSource } from '@ghostfolio/api/helper/data-source.helper'; import { encodeDataSource } from '@ghostfolio/api/helper/data-source.helper';
import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { ImportValidationError } from '@ghostfolio/api/services/import/errors/import-validation.error';
import { ImportService } from '@ghostfolio/api/services/import/import.service';
import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service';
import { import {
DEFAULT_LANGUAGE_CODE, DEFAULT_LANGUAGE_CODE,

2
apps/api/src/app/endpoints/mcp/mcp.service.ts

@ -1,6 +1,5 @@
import { AccountBalanceService } from '@ghostfolio/api/app/account-balance/account-balance.service'; import { AccountBalanceService } from '@ghostfolio/api/app/account-balance/account-balance.service';
import { AccountService } from '@ghostfolio/api/app/account/account.service'; import { AccountService } from '@ghostfolio/api/app/account/account.service';
import { ImportService } from '@ghostfolio/api/app/import/import.service';
import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service';
import { UserService } from '@ghostfolio/api/app/user/user.service'; import { UserService } from '@ghostfolio/api/app/user/user.service';
import { CallerFacingError } from '@ghostfolio/api/errors/caller-facing.error'; import { CallerFacingError } from '@ghostfolio/api/errors/caller-facing.error';
@ -10,6 +9,7 @@ import {
} from '@ghostfolio/api/helper/data-source.helper'; } from '@ghostfolio/api/helper/data-source.helper';
import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { ApiService } from '@ghostfolio/api/services/api/api.service';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { ImportService } from '@ghostfolio/api/services/import/import.service';
import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service';
import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper'; import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper';
import { DEFAULT_LANGUAGE_CODE } from '@ghostfolio/common/config'; import { DEFAULT_LANGUAGE_CODE } from '@ghostfolio/common/config';

2
apps/api/src/filters/mcp-tool-exception.filter.spec.ts

@ -1,5 +1,5 @@
import { ImportValidationError } from '@ghostfolio/api/app/import/errors/import-validation.error';
import { PortfolioSnapshotComputationError } from '@ghostfolio/api/app/portfolio/errors/portfolio-snapshot-computation.error'; import { PortfolioSnapshotComputationError } from '@ghostfolio/api/app/portfolio/errors/portfolio-snapshot-computation.error';
import { ImportValidationError } from '@ghostfolio/api/services/import/errors/import-validation.error';
import { ForbiddenException, Logger } from '@nestjs/common'; import { ForbiddenException, Logger } from '@nestjs/common';
import { getReasonPhrase, StatusCodes } from 'http-status-codes'; import { getReasonPhrase, StatusCodes } from 'http-status-codes';

4
apps/api/src/services/data-provider/data-provider.service.ts

@ -1,8 +1,8 @@
import { ImportValidationError } from '@ghostfolio/api/app/import/errors/import-validation.error';
import { ImportDataDto } from '@ghostfolio/api/app/import/import-data.dto';
import { getMaskedGhostfolioDataSource } from '@ghostfolio/api/helper/data-source.helper'; import { getMaskedGhostfolioDataSource } from '@ghostfolio/api/helper/data-source.helper';
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { DataProviderInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface'; import { DataProviderInterface } from '@ghostfolio/api/services/data-provider/interfaces/data-provider.interface';
import { ImportValidationError } from '@ghostfolio/api/services/import/errors/import-validation.error';
import { ImportDataDto } from '@ghostfolio/api/services/import/import-data.dto';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service';

0
apps/api/src/app/import/errors/import-validation.error.ts → apps/api/src/services/import/errors/import-validation.error.ts

0
apps/api/src/app/import/import-data.dto.spec.ts → apps/api/src/services/import/import-data.dto.spec.ts

0
apps/api/src/app/import/import-data.dto.ts → apps/api/src/services/import/import-data.dto.ts

12
apps/api/src/app/import/import.module.ts → apps/api/src/services/import/import.module.ts

@ -1,27 +1,21 @@
import { AccountModule } from '@ghostfolio/api/app/account/account.module'; import { AccountModule } from '@ghostfolio/api/app/account/account.module';
import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.module'; import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.module';
import { PortfolioModule } from '@ghostfolio/api/app/portfolio/portfolio.module'; import { PortfolioModule } from '@ghostfolio/api/app/portfolio/portfolio.module';
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module';
import { ApiModule } from '@ghostfolio/api/services/api/api.module'; import { ApiModule } from '@ghostfolio/api/services/api/api.module';
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module';
import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module'; import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module';
import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module'; import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module';
import { PlatformModule } from '@ghostfolio/api/services/platform/platform.module'; import { PlatformModule } from '@ghostfolio/api/services/platform/platform.module';
import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module';
import { DataGatheringQueueModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module'; import { DataGatheringQueueModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module';
import { RedisCacheModule } from '@ghostfolio/api/services/redis-cache/redis-cache.module';
import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module';
import { TagModule } from '@ghostfolio/api/services/tag/tag.module'; import { TagModule } from '@ghostfolio/api/services/tag/tag.module';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { ImportController } from './import.controller';
import { ImportService } from './import.service'; import { ImportService } from './import.service';
@Module({ @Module({
controllers: [ImportController],
exports: [ImportService], exports: [ImportService],
imports: [ imports: [
AccountModule, AccountModule,
@ -34,12 +28,8 @@ import { ImportService } from './import.service';
MarketDataModule, MarketDataModule,
PlatformModule, PlatformModule,
PortfolioModule, PortfolioModule,
PrismaModule,
RedisCacheModule,
SymbolProfileModule, SymbolProfileModule,
TagModule, TagModule
TransformDataSourceInRequestModule,
TransformDataSourceInResponseModule
], ],
providers: [ImportService] providers: [ImportService]
}) })

0
apps/api/src/app/import/import.service.spec.ts → apps/api/src/services/import/import.service.spec.ts

0
apps/api/src/app/import/import.service.ts → apps/api/src/services/import/import.service.ts

0
apps/api/src/app/import/interfaces/asset-profile-to-create.interface.ts → apps/api/src/services/import/interfaces/asset-profile-to-create.interface.ts

368
apps/client/src/locales/messages.ca.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.de.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.es.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.fr.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.it.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.ja.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.ko.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.nl.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.pl.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.pt.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.tr.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.uk.xlf

File diff suppressed because it is too large

361
apps/client/src/locales/messages.xlf

File diff suppressed because it is too large

368
apps/client/src/locales/messages.zh.xlf

File diff suppressed because it is too large

9
libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.component.ts

@ -1,3 +1,4 @@
import { NUMERICAL_PRECISION_THRESHOLD_4_FIGURES } from '@ghostfolio/common/config';
import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { DATE_FORMAT } from '@ghostfolio/common/helper';
import { import {
AdminMarketDataDetails, AdminMarketDataDetails,
@ -47,6 +48,7 @@ export class GfBenchmarkDetailDialogComponent implements OnInit {
public assetProfile?: AdminMarketDataDetails['assetProfile']; public assetProfile?: AdminMarketDataDetails['assetProfile'];
public historicalDataItems: LineChartItem[]; public historicalDataItems: LineChartItem[];
public isLoading = true; public isLoading = true;
public precision = 2;
public value: number; public value: number;
public constructor( public constructor(
@ -80,6 +82,13 @@ export class GfBenchmarkDetailDialogComponent implements OnInit {
} }
); );
if (
this.data.deviceType === 'mobile' &&
this.value >= NUMERICAL_PRECISION_THRESHOLD_4_FIGURES
) {
this.precision = 0;
}
this.isLoading = false; this.isLoading = false;
this.changeDetectorRef.markForCheck(); this.changeDetectorRef.markForCheck();

5
libs/ui/src/lib/benchmark/benchmark-detail-dialog/benchmark-detail-dialog.html

@ -13,16 +13,17 @@
size="large" size="large"
[isLoading]="isLoading" [isLoading]="isLoading"
[locale]="data.locale" [locale]="data.locale"
[precision]="2" [precision]="precision"
[unit]="assetProfile?.currency"
[value]="value" [value]="value"
/> />
</div> </div>
</div> </div>
<gf-line-chart <gf-line-chart
benchmarkLabel="Average Unit Price"
class="mb-4" class="mb-4"
[colorScheme]="data.colorScheme" [colorScheme]="data.colorScheme"
[currency]="assetProfile?.currency"
[historicalDataItems]="historicalDataItems" [historicalDataItems]="historicalDataItems"
[isAnimated]="true" [isAnimated]="true"
[label]="data.symbol" [label]="data.symbol"

Loading…
Cancel
Save