Browse Source

Merge branch 'main' into feature/rename-platform-to-platform-in-account-database-schema

pull/4999/head
Thomas Kaul 2 weeks ago
committed by GitHub
parent
commit
2ead6e8fba
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 3
      CHANGELOG.md
  2. 40
      apps/api/src/app/health/health.controller.ts
  3. 10
      apps/client/src/app/pages/pricing/pricing-page.html
  4. 20
      apps/client/src/locales/messages.ca.xlf
  5. 20
      apps/client/src/locales/messages.de.xlf
  6. 20
      apps/client/src/locales/messages.es.xlf
  7. 20
      apps/client/src/locales/messages.fr.xlf
  8. 20
      apps/client/src/locales/messages.it.xlf
  9. 20
      apps/client/src/locales/messages.nl.xlf
  10. 20
      apps/client/src/locales/messages.pl.xlf
  11. 20
      apps/client/src/locales/messages.pt.xlf
  12. 20
      apps/client/src/locales/messages.tr.xlf
  13. 20
      apps/client/src/locales/messages.uk.xlf
  14. 18
      apps/client/src/locales/messages.xlf
  15. 20
      apps/client/src/locales/messages.zh.xlf
  16. 4
      libs/common/src/lib/interfaces/index.ts
  17. 3
      libs/common/src/lib/interfaces/responses/data-enhancer-health-response.interface.ts
  18. 3
      libs/common/src/lib/interfaces/responses/data-provider-health-response.interface.ts
  19. 4
      libs/ui/src/lib/value/value.component.html

3
CHANGELOG.md

@ -9,7 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- Migrated the `@ghostfolio/ui/value` component to control flow
- Renamed `Platform` to `platform` in the `Account` database schema
- Refactored the health check endpoint for data enhancers
- Refactored the health check endpoint for data providers
## 2.173.0 - 2025-06-21

40
apps/api/src/app/health/health.controller.ts

@ -1,4 +1,8 @@
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor';
import {
DataEnhancerHealthResponse,
DataProviderHealthResponse
} from '@ghostfolio/common/interfaces';
import {
Controller,
@ -37,23 +41,30 @@ export class HealthController {
}
@Get('data-enhancer/:name')
public async getHealthOfDataEnhancer(@Param('name') name: string) {
public async getHealthOfDataEnhancer(
@Param('name') name: string,
@Res() response: Response
): Promise<Response<DataEnhancerHealthResponse>> {
const hasResponse =
await this.healthService.hasResponseFromDataEnhancer(name);
if (hasResponse !== true) {
throw new HttpException(
getReasonPhrase(StatusCodes.SERVICE_UNAVAILABLE),
StatusCodes.SERVICE_UNAVAILABLE
);
if (hasResponse) {
return response.status(HttpStatus.OK).json({
status: getReasonPhrase(StatusCodes.OK)
});
} else {
return response
.status(HttpStatus.SERVICE_UNAVAILABLE)
.json({ status: getReasonPhrase(StatusCodes.SERVICE_UNAVAILABLE) });
}
}
@Get('data-provider/:dataSource')
@UseInterceptors(TransformDataSourceInRequestInterceptor)
public async getHealthOfDataProvider(
@Param('dataSource') dataSource: DataSource
) {
@Param('dataSource') dataSource: DataSource,
@Res() response: Response
): Promise<Response<DataProviderHealthResponse>> {
if (!DataSource[dataSource]) {
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
@ -64,11 +75,14 @@ export class HealthController {
const hasResponse =
await this.healthService.hasResponseFromDataProvider(dataSource);
if (hasResponse !== true) {
throw new HttpException(
getReasonPhrase(StatusCodes.SERVICE_UNAVAILABLE),
StatusCodes.SERVICE_UNAVAILABLE
);
if (hasResponse) {
return response
.status(HttpStatus.OK)
.json({ status: getReasonPhrase(StatusCodes.OK) });
} else {
return response
.status(HttpStatus.SERVICE_UNAVAILABLE)
.json({ status: getReasonPhrase(StatusCodes.SERVICE_UNAVAILABLE) });
}
}
}

10
apps/client/src/app/pages/pricing/pricing-page.html

@ -305,9 +305,13 @@
}
@if (durationExtension) {
<div class="mt-3">
<div class="badge badge-warning font-weight-normal p-3 w-100">
<strong>Limited Offer!</strong> Get
{{ durationExtension }} extra
<div
class="badge badge-warning font-weight-normal line-height-1 p-3 w-100"
>
<strong i18n>Limited Offer!</strong>
<ng-container i18n
>Get {{ durationExtension }} extra</ng-container
>
</div>
</div>
}

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

@ -3832,7 +3832,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="195d2d6475819f55cf73287f97752093b7721ade" datatype="html">
@ -5040,7 +5040,7 @@
<target state="new">It’s free.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="a4a68fbb5bf56e4bccaf5e73ba2d9567f754e7ca" datatype="html">
@ -7774,6 +7774,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="new">Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -3670,7 +3670,7 @@
<target state="translated">Es ist kostenlos.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -4846,7 +4846,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="1d6f11238819cf97ea87ab54714deda567d83f5c" datatype="html">
@ -7774,6 +7774,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="translated">Begrenztes Angebot!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="translated">Erhalte <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -3655,7 +3655,7 @@
<target state="translated">Es gratis.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -4823,7 +4823,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="1d6f11238819cf97ea87ab54714deda567d83f5c" datatype="html">
@ -7775,6 +7775,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="new">Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -3654,7 +3654,7 @@
<target state="translated">C’est gratuit.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -4822,7 +4822,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="1d6f11238819cf97ea87ab54714deda567d83f5c" datatype="html">
@ -7774,6 +7774,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="new">Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -3655,7 +3655,7 @@
<target state="translated">È gratuito.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -4823,7 +4823,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="1d6f11238819cf97ea87ab54714deda567d83f5c" datatype="html">
@ -7775,6 +7775,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="new">Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -3654,7 +3654,7 @@
<target state="translated">Het is gratis.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -4822,7 +4822,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="1d6f11238819cf97ea87ab54714deda567d83f5c" datatype="html">
@ -7774,6 +7774,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="new">Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -3467,7 +3467,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="195d2d6475819f55cf73287f97752093b7721ade" datatype="html">
@ -4627,7 +4627,7 @@
<target state="translated">Jest bezpłatny.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="a4a68fbb5bf56e4bccaf5e73ba2d9567f754e7ca" datatype="html">
@ -7774,6 +7774,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="new">Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -3654,7 +3654,7 @@
<target state="translated">É gratuito.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="c20172223f84462032664d717d739297e5a9e2fe" datatype="html">
@ -4822,7 +4822,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="1d6f11238819cf97ea87ab54714deda567d83f5c" datatype="html">
@ -7774,6 +7774,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="new">Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -2999,7 +2999,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="195d2d6475819f55cf73287f97752093b7721ade" datatype="html">
@ -4099,7 +4099,7 @@
<target state="translated">Ücretsiz.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="a4a68fbb5bf56e4bccaf5e73ba2d9567f754e7ca" datatype="html">
@ -7774,6 +7774,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="new">Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -4040,7 +4040,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="195d2d6475819f55cf73287f97752093b7721ade" datatype="html">
@ -5332,7 +5332,7 @@
<target state="translated">Це безкоштовно.</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="a4a68fbb5bf56e4bccaf5e73ba2d9567f754e7ca" datatype="html">
@ -7774,6 +7774,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="new">Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -3206,7 +3206,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="195d2d6475819f55cf73287f97752093b7721ade" datatype="html">
@ -4239,7 +4239,7 @@
<source>It’s free.</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="a4a68fbb5bf56e4bccaf5e73ba2d9567f754e7ca" datatype="html">
@ -6990,6 +6990,20 @@
<context context-type="linenumber">36</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

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

@ -3476,7 +3476,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">345</context>
<context context-type="linenumber">349</context>
</context-group>
</trans-unit>
<trans-unit id="195d2d6475819f55cf73287f97752093b7721ade" datatype="html">
@ -4636,7 +4636,7 @@
<target state="translated">免费。</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">348</context>
<context context-type="linenumber">352</context>
</context-group>
</trans-unit>
<trans-unit id="a4a68fbb5bf56e4bccaf5e73ba2d9567f754e7ca" datatype="html">
@ -7775,6 +7775,22 @@
<context context-type="linenumber">65</context>
</context-group>
</trans-unit>
<trans-unit id="2b3030c13e8ffdfbfcaf6d487dbe23e4f9b8f4d7" datatype="html">
<source>Limited Offer!</source>
<target state="new">Limited Offer!</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">311</context>
</context-group>
</trans-unit>
<trans-unit id="48a079ff7a0ed08569e9ee315a387efeaa05f09c" datatype="html">
<source>Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</source>
<target state="new">Get <x id="INTERPOLATION" equiv-text="{{ durationExtension }}"/> extra</target>
<context-group purpose="location">
<context context-type="sourcefile">apps/client/src/app/pages/pricing/pricing-page.html</context>
<context context-type="linenumber">313</context>
</context-group>
</trans-unit>
</body>
</file>
</xliff>

4
libs/common/src/lib/interfaces/index.ts

@ -41,8 +41,10 @@ import type { AccountsResponse } from './responses/accounts-response.interface';
import type { AiPromptResponse } from './responses/ai-prompt-response.interface';
import type { ApiKeyResponse } from './responses/api-key-response.interface';
import type { BenchmarkResponse } from './responses/benchmark-response.interface';
import type { DataEnhancerHealthResponse } from './responses/data-enhancer-health-response.interface';
import type { DataProviderGhostfolioAssetProfileResponse } from './responses/data-provider-ghostfolio-asset-profile-response.interface';
import type { DataProviderGhostfolioStatusResponse } from './responses/data-provider-ghostfolio-status-response.interface';
import type { DataProviderHealthResponse } from './responses/data-provider-health-response.interface';
import type { DividendsResponse } from './responses/dividends-response.interface';
import type { ResponseError } from './responses/errors.interface';
import type { HistoricalResponse } from './responses/historical-response.interface';
@ -88,8 +90,10 @@ export {
BenchmarkProperty,
BenchmarkResponse,
Coupon,
DataEnhancerHealthResponse,
DataProviderGhostfolioAssetProfileResponse,
DataProviderGhostfolioStatusResponse,
DataProviderHealthResponse,
DataProviderInfo,
DividendsResponse,
EnhancedSymbolProfile,

3
libs/common/src/lib/interfaces/responses/data-enhancer-health-response.interface.ts

@ -0,0 +1,3 @@
export interface DataEnhancerHealthResponse {
status: string;
}

3
libs/common/src/lib/interfaces/responses/data-provider-health-response.interface.ts

@ -0,0 +1,3 @@
export interface DataProviderHealthResponse {
status: string;
}

4
libs/ui/src/lib/value/value.component.html

@ -5,7 +5,7 @@
}
<div class="d-flex flex-column w-100">
<ng-template #label><ng-content></ng-content></ng-template>
<ng-container *ngIf="value || value === 0 || value === null">
@if (value || value === 0 || value === null) {
<div
class="align-items-center d-flex"
[ngClass]="position === 'end' ? 'justify-content-end' : ''"
@ -72,7 +72,7 @@
</div>
}
</div>
</ng-container>
}
@if (value === undefined) {
<ngx-skeleton-loader

Loading…
Cancel
Save