From c671ea4022fe6e3d9ec12861c61ee98213df19eb Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Mon, 28 Apr 2025 22:17:35 +0700 Subject: [PATCH 01/12] Feature/add frontend for watchlist (#4604) * Add frontend for watchlist * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 6 + .../watchlist/watchlist.controller.ts | 26 ++-- ...reate-watchlist-item-dialog.component.scss | 3 + .../create-watchlist-item-dialog.component.ts | 92 +++++++++++ .../create-watchlist-item-dialog.html | 25 +++ .../interfaces/interfaces.ts | 4 + .../home-watchlist.component.ts | 145 ++++++++++++++++++ .../home-watchlist/home-watchlist.html | 33 ++++ .../home-watchlist/home-watchlist.scss | 3 + .../pages/home/home-page-routing.module.ts | 6 + .../src/app/pages/home/home-page.component.ts | 6 + .../src/app/pages/home/home-page.module.ts | 2 + apps/client/src/app/services/data.service.ts | 12 +- libs/common/src/lib/interfaces/index.ts | 2 + .../responses/watchlist-response.interface.ts | 5 + .../lib/benchmark/benchmark.component.html | 38 +++-- .../src/lib/benchmark/benchmark.component.ts | 2 + 17 files changed, 382 insertions(+), 28 deletions(-) create mode 100644 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.component.scss create mode 100644 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.component.ts create mode 100644 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html create mode 100644 apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/interfaces/interfaces.ts create mode 100644 apps/client/src/app/components/home-watchlist/home-watchlist.component.ts create mode 100644 apps/client/src/app/components/home-watchlist/home-watchlist.html create mode 100644 apps/client/src/app/components/home-watchlist/home-watchlist.scss create mode 100644 libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 918876f6c..2e9285773 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Introduced a watchlist to follow assets (experimental) + ## 2.156.0 - 2025-04-27 ### Changed diff --git a/apps/api/src/app/endpoints/watchlist/watchlist.controller.ts b/apps/api/src/app/endpoints/watchlist/watchlist.controller.ts index 0d25172c8..c9e41d5d3 100644 --- a/apps/api/src/app/endpoints/watchlist/watchlist.controller.ts +++ b/apps/api/src/app/endpoints/watchlist/watchlist.controller.ts @@ -2,7 +2,7 @@ import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorat 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 { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor'; -import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; +import { WatchlistResponse } from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; import { RequestWithUser } from '@ghostfolio/common/types'; @@ -53,13 +53,13 @@ export class WatchlistController { @Param('dataSource') dataSource: DataSource, @Param('symbol') symbol: string ) { - const watchlistItem = await this.watchlistService - .getWatchlistItems(this.request.user.id) - .then((items) => { - return items.find((item) => { - return item.dataSource === dataSource && item.symbol === symbol; - }); - }); + const watchlistItems = await this.watchlistService.getWatchlistItems( + this.request.user.id + ); + + const watchlistItem = watchlistItems.find((item) => { + return item.dataSource === dataSource && item.symbol === symbol; + }); if (!watchlistItem) { throw new HttpException( @@ -79,7 +79,13 @@ export class WatchlistController { @HasPermission(permissions.readWatchlist) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseInterceptors(TransformDataSourceInResponseInterceptor) - public async getWatchlistItems(): Promise { - return this.watchlistService.getWatchlistItems(this.request.user.id); + public async getWatchlistItems(): Promise { + const watchlist = await this.watchlistService.getWatchlistItems( + this.request.user.id + ); + + return { + watchlist + }; } } diff --git a/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.component.scss b/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.component.scss new file mode 100644 index 000000000..5d4e87f30 --- /dev/null +++ b/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.component.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.component.ts b/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.component.ts new file mode 100644 index 000000000..722f680c3 --- /dev/null +++ b/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.component.ts @@ -0,0 +1,92 @@ +import { GfSymbolAutocompleteComponent } from '@ghostfolio/ui/symbol-autocomplete'; + +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + OnDestroy, + OnInit +} from '@angular/core'; +import { + AbstractControl, + FormBuilder, + FormControl, + FormGroup, + FormsModule, + ReactiveFormsModule, + ValidationErrors, + Validators +} from '@angular/forms'; +import { MatButtonModule } from '@angular/material/button'; +import { MatDialogModule, MatDialogRef } from '@angular/material/dialog'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { Subject } from 'rxjs'; + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + host: { class: 'h-100' }, + imports: [ + CommonModule, + FormsModule, + GfSymbolAutocompleteComponent, + MatButtonModule, + MatDialogModule, + MatFormFieldModule, + ReactiveFormsModule + ], + selector: 'gf-create-watchlist-item-dialog', + styleUrls: ['./create-watchlist-item-dialog.component.scss'], + templateUrl: 'create-watchlist-item-dialog.html' +}) +export class CreateWatchlistItemDialogComponent implements OnInit, OnDestroy { + public createWatchlistItemForm: FormGroup; + + private unsubscribeSubject = new Subject(); + + public constructor( + public readonly dialogRef: MatDialogRef, + public readonly formBuilder: FormBuilder + ) {} + + public ngOnInit() { + this.createWatchlistItemForm = this.formBuilder.group( + { + searchSymbol: new FormControl(null, [Validators.required]) + }, + { + validators: this.validator + } + ); + } + + public onCancel() { + this.dialogRef.close(); + } + + public onSubmit() { + this.dialogRef.close({ + dataSource: + this.createWatchlistItemForm.get('searchSymbol').value.dataSource, + symbol: this.createWatchlistItemForm.get('searchSymbol').value.symbol + }); + } + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } + + private validator(control: AbstractControl): ValidationErrors { + const searchSymbolControl = control.get('searchSymbol'); + + if ( + searchSymbolControl.valid && + searchSymbolControl.value.dataSource && + searchSymbolControl.value.symbol + ) { + return { incomplete: false }; + } + + return { incomplete: true }; + } +} diff --git a/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html b/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html new file mode 100644 index 000000000..dd59a9309 --- /dev/null +++ b/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html @@ -0,0 +1,25 @@ +
+

Add asset to watchlist

+
+ + Name, symbol or ISIN + + +
+
+ + +
+
diff --git a/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/interfaces/interfaces.ts new file mode 100644 index 000000000..c0f74d022 --- /dev/null +++ b/apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/interfaces/interfaces.ts @@ -0,0 +1,4 @@ +export interface CreateWatchlistItemDialogParams { + deviceType: string; + locale: string; +} diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts new file mode 100644 index 000000000..0198ab27a --- /dev/null +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts @@ -0,0 +1,145 @@ +import { DataService } from '@ghostfolio/client/services/data.service'; +import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { Benchmark, User } from '@ghostfolio/common/interfaces'; +import { hasPermission, permissions } from '@ghostfolio/common/permissions'; +import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark'; +import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; + +import { CommonModule } from '@angular/common'; +import { + ChangeDetectionStrategy, + ChangeDetectorRef, + Component, + CUSTOM_ELEMENTS_SCHEMA, + OnDestroy, + OnInit +} from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router, RouterModule } from '@angular/router'; +import { DeviceDetectorService } from 'ngx-device-detector'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; + +import { CreateWatchlistItemDialogComponent } from './create-watchlist-item-dialog/create-watchlist-item-dialog.component'; +import { CreateWatchlistItemDialogParams } from './create-watchlist-item-dialog/interfaces/interfaces'; + +@Component({ + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + CommonModule, + GfBenchmarkComponent, + GfPremiumIndicatorComponent, + MatButtonModule, + RouterModule + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + selector: 'gf-home-watchlist', + styleUrls: ['./home-watchlist.scss'], + templateUrl: './home-watchlist.html' +}) +export class HomeWatchlistComponent implements OnDestroy, OnInit { + public deviceType: string; + public hasPermissionToCreateWatchlistItem: boolean; + public user: User; + public watchlist: Benchmark[]; + + private unsubscribeSubject = new Subject(); + + public constructor( + private changeDetectorRef: ChangeDetectorRef, + private dataService: DataService, + private deviceService: DeviceDetectorService, + private dialog: MatDialog, + private route: ActivatedRoute, + private router: Router, + private userService: UserService + ) { + this.deviceType = this.deviceService.getDeviceInfo().deviceType; + + this.route.queryParams + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe((params) => { + if (params['createWatchlistItemDialog']) { + this.openCreateWatchlistItemDialog(); + } + }); + + this.userService.stateChanged + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe((state) => { + if (state?.user) { + this.user = state.user; + + this.hasPermissionToCreateWatchlistItem = hasPermission( + this.user.permissions, + permissions.createWatchlistItem + ); + + this.changeDetectorRef.markForCheck(); + } + }); + } + + public ngOnInit() { + this.loadWatchlistData(); + } + + public ngOnDestroy() { + this.unsubscribeSubject.next(); + this.unsubscribeSubject.complete(); + } + + private loadWatchlistData() { + this.dataService + .fetchWatchlist() + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(({ watchlist }) => { + this.watchlist = watchlist.map(({ dataSource, symbol }) => ({ + dataSource, + symbol, + marketCondition: null, + name: symbol, + performances: null, + trend50d: 'UNKNOWN', + trend200d: 'UNKNOWN' + })); + + this.changeDetectorRef.markForCheck(); + }); + } + + private openCreateWatchlistItemDialog() { + this.userService + .get() + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe((user) => { + this.user = user; + + const dialogRef = this.dialog.open(CreateWatchlistItemDialogComponent, { + autoFocus: false, + data: { + deviceType: this.deviceType, + locale: this.user?.settings?.locale + } as CreateWatchlistItemDialogParams, + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); + + dialogRef + .afterClosed() + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(({ dataSource, symbol } = {}) => { + if (dataSource && symbol) { + this.dataService + .postWatchlistItem({ dataSource, symbol }) + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe({ + next: () => this.loadWatchlistData() + }); + } + + this.router.navigate(['.'], { relativeTo: this.route }); + }); + }); + } +} diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.html b/apps/client/src/app/components/home-watchlist/home-watchlist.html new file mode 100644 index 000000000..0a2e37279 --- /dev/null +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.html @@ -0,0 +1,33 @@ +
+

+ + Watchlist + @if (user?.subscription?.type === 'Basic') { + + } + +

+
+
+ +
+
+
+@if (hasPermissionToCreateWatchlistItem) { +
+ + + +
+} diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.scss b/apps/client/src/app/components/home-watchlist/home-watchlist.scss new file mode 100644 index 000000000..5d4e87f30 --- /dev/null +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.scss @@ -0,0 +1,3 @@ +:host { + display: block; +} diff --git a/apps/client/src/app/pages/home/home-page-routing.module.ts b/apps/client/src/app/pages/home/home-page-routing.module.ts index f50b55192..9a915f0b3 100644 --- a/apps/client/src/app/pages/home/home-page-routing.module.ts +++ b/apps/client/src/app/pages/home/home-page-routing.module.ts @@ -2,6 +2,7 @@ import { HomeHoldingsComponent } from '@ghostfolio/client/components/home-holdin import { HomeMarketComponent } from '@ghostfolio/client/components/home-market/home-market.component'; import { HomeOverviewComponent } from '@ghostfolio/client/components/home-overview/home-overview.component'; import { HomeSummaryComponent } from '@ghostfolio/client/components/home-summary/home-summary.component'; +import { HomeWatchlistComponent } from '@ghostfolio/client/components/home-watchlist/home-watchlist.component'; import { AuthGuard } from '@ghostfolio/client/core/auth.guard'; import { NgModule } from '@angular/core'; @@ -36,6 +37,11 @@ const routes: Routes = [ path: 'market', component: HomeMarketComponent, title: $localize`Markets` + }, + { + path: 'watchlist', + component: HomeWatchlistComponent, + title: $localize`Watchlist` } ], component: HomePageComponent, diff --git a/apps/client/src/app/pages/home/home-page.component.ts b/apps/client/src/app/pages/home/home-page.component.ts index e307884f8..70e0c34fe 100644 --- a/apps/client/src/app/pages/home/home-page.component.ts +++ b/apps/client/src/app/pages/home/home-page.component.ts @@ -52,6 +52,12 @@ export class HomePageComponent implements OnDestroy, OnInit { iconName: 'newspaper-outline', label: $localize`Markets`, path: ['/home', 'market'] + }, + { + iconName: 'star-outline', + label: $localize`Watchlist`, + path: ['/home', 'watchlist'], + showCondition: this.user?.settings?.isExperimentalFeatures } ]; this.user = state.user; diff --git a/apps/client/src/app/pages/home/home-page.module.ts b/apps/client/src/app/pages/home/home-page.module.ts index 045cfa8c0..32f031e4e 100644 --- a/apps/client/src/app/pages/home/home-page.module.ts +++ b/apps/client/src/app/pages/home/home-page.module.ts @@ -2,6 +2,7 @@ import { GfHomeHoldingsModule } from '@ghostfolio/client/components/home-holding import { GfHomeMarketModule } from '@ghostfolio/client/components/home-market/home-market.module'; import { GfHomeOverviewModule } from '@ghostfolio/client/components/home-overview/home-overview.module'; import { GfHomeSummaryModule } from '@ghostfolio/client/components/home-summary/home-summary.module'; +import { HomeWatchlistComponent } from '@ghostfolio/client/components/home-watchlist/home-watchlist.component'; import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; @@ -20,6 +21,7 @@ import { HomePageComponent } from './home-page.component'; GfHomeOverviewModule, GfHomeSummaryModule, HomePageRoutingModule, + HomeWatchlistComponent, MatTabsModule, RouterModule ], diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index 55d76d667..526c61972 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -6,6 +6,7 @@ import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto import { UpdateBulkMarketDataDto } from '@ghostfolio/api/app/admin/update-bulk-market-data.dto'; import { CreateTagDto } from '@ghostfolio/api/app/endpoints/tags/create-tag.dto'; import { UpdateTagDto } from '@ghostfolio/api/app/endpoints/tags/update-tag.dto'; +import { CreateWatchlistItemDto } from '@ghostfolio/api/app/endpoints/watchlist/create-watchlist-item.dto'; import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { Activities, @@ -44,7 +45,8 @@ import { PortfolioPerformanceResponse, PortfolioReportResponse, PublicPortfolioResponse, - User + User, + WatchlistResponse } from '@ghostfolio/common/interfaces'; import { filterGlobalPermissions } from '@ghostfolio/common/permissions'; import type { @@ -686,6 +688,10 @@ export class DataService { return this.http.get('/api/v1/tags'); } + public fetchWatchlist() { + return this.http.get('/api/v1/watchlist'); + } + public generateAccessToken(aUserId: string) { return this.http.post( `/api/v1/user/${aUserId}/access-token`, @@ -748,6 +754,10 @@ export class DataService { return this.http.post('/api/v1/user', {}); } + public postWatchlistItem(watchlistItem: CreateWatchlistItemDto) { + return this.http.post('/api/v1/watchlist', watchlistItem); + } + public putAccount(aAccount: UpdateAccountDto) { return this.http.put(`/api/v1/account/${aAccount.id}`, aAccount); } diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index c93ab2d27..b83b6d5f8 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -57,6 +57,7 @@ import type { PortfolioPerformanceResponse } from './responses/portfolio-perform import type { PortfolioReportResponse } from './responses/portfolio-report.interface'; import type { PublicPortfolioResponse } from './responses/public-portfolio-response.interface'; import type { QuotesResponse } from './responses/quotes-response.interface'; +import type { WatchlistResponse } from './responses/watchlist-response.interface'; import type { ScraperConfiguration } from './scraper-configuration.interface'; import type { Statistics } from './statistics.interface'; import type { SubscriptionOffer } from './subscription-offer.interface'; @@ -135,5 +136,6 @@ export { ToggleOption, User, UserSettings, + WatchlistResponse, XRayRulesSettings }; diff --git a/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts b/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts new file mode 100644 index 000000000..3cdc834b4 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/watchlist-response.interface.ts @@ -0,0 +1,5 @@ +import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; + +export interface WatchlistResponse { + watchlist: AssetProfileIdentifier[]; +} diff --git a/libs/ui/src/lib/benchmark/benchmark.component.html b/libs/ui/src/lib/benchmark/benchmark.component.html index 8867e1c9e..8e8a30202 100644 --- a/libs/ui/src/lib/benchmark/benchmark.component.html +++ b/libs/ui/src/lib/benchmark/benchmark.component.html @@ -66,11 +66,13 @@
- + @if (element?.performances?.allTimeHigh?.date) { + + }
@@ -83,18 +85,20 @@ from ATH - + @if (isNumber(element?.performances?.allTimeHigh?.performancePercent)) { + + } diff --git a/libs/ui/src/lib/benchmark/benchmark.component.ts b/libs/ui/src/lib/benchmark/benchmark.component.ts index cc5815a0c..0c5e8854a 100644 --- a/libs/ui/src/lib/benchmark/benchmark.component.ts +++ b/libs/ui/src/lib/benchmark/benchmark.component.ts @@ -20,6 +20,7 @@ import { import { MatDialog } from '@angular/material/dialog'; import { MatTableModule } from '@angular/material/table'; import { ActivatedRoute, Router, RouterModule } from '@angular/router'; +import { isNumber } from 'lodash'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { Subject, takeUntil } from 'rxjs'; @@ -49,6 +50,7 @@ export class GfBenchmarkComponent implements OnChanges, OnDestroy { public displayedColumns = ['name', 'date', 'change', 'marketCondition']; public isLoading = true; + public isNumber = isNumber; public resolveMarketCondition = resolveMarketCondition; public translate = translate; From 398833a0e34e54c3513a475b4bbcd28b1acda4d1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 28 Apr 2025 18:26:07 +0200 Subject: [PATCH 02/12] Feature/improve wording of data providers management (#4617) * Improve wording --- .../admin-settings.component.ts | 6 +-- .../ghostfolio-premium-api-dialog.html | 37 ++++++++----------- .../interfaces/interfaces.ts | 3 -- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.ts b/apps/client/src/app/components/admin-settings/admin-settings.component.ts index be077c0e6..d72466bb4 100644 --- a/apps/client/src/app/components/admin-settings/admin-settings.component.ts +++ b/apps/client/src/app/components/admin-settings/admin-settings.component.ts @@ -25,6 +25,7 @@ import { DeviceDetectorService } from 'ngx-device-detector'; import { catchError, filter, of, Subject, takeUntil } from 'rxjs'; import { GfGhostfolioPremiumApiDialogComponent } from './ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.component'; +import { GhostfolioPremiumApiDialogParams } from './ghostfolio-premium-api-dialog/interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -101,9 +102,8 @@ export class AdminSettingsComponent implements OnDestroy, OnInit { autoFocus: false, data: { deviceType: this.deviceType, - pricingUrl: this.pricingUrl, - user: this.user - }, + pricingUrl: this.pricingUrl + } as GhostfolioPremiumApiDialogParams, height: this.deviceType === 'mobile' ? '98vh' : undefined, width: this.deviceType === 'mobile' ? '100vw' : '50rem' } diff --git a/apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html b/apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html index d3b0985fa..017133f5b 100644 --- a/apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html +++ b/apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html @@ -7,8 +7,8 @@ />
-

- The official +

+ Early access to the official data provider for self-hosters, offering 80’000+ tickers from over 50 exchanges, is - coming soon! -

-

- Want to stay updated? Click below to get notified as soon as it’s available. + ready now!

Notify meGet Early Access +
+ or +
+ - } + I have an API key +
diff --git a/apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/interfaces/interfaces.ts index 157a6f414..0c629599e 100644 --- a/apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/interfaces/interfaces.ts @@ -1,7 +1,4 @@ -import { User } from '@ghostfolio/common/interfaces'; - export interface GhostfolioPremiumApiDialogParams { deviceType: string; pricingUrl: string; - user: User; } From 7d0af340345cd6faec8f967368e307ca420ff926 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 28 Apr 2025 18:26:26 +0200 Subject: [PATCH 03/12] Feature/update locales (#4619) * Update locales * Update translations * Update changelog --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 4 ++ apps/client/src/locales/messages.ca.xlf | 54 +++++++++++++++++++++---- apps/client/src/locales/messages.de.xlf | 54 +++++++++++++++++++++---- apps/client/src/locales/messages.es.xlf | 54 +++++++++++++++++++++---- apps/client/src/locales/messages.fr.xlf | 54 +++++++++++++++++++++---- apps/client/src/locales/messages.it.xlf | 54 +++++++++++++++++++++---- apps/client/src/locales/messages.nl.xlf | 54 +++++++++++++++++++++---- apps/client/src/locales/messages.pl.xlf | 54 +++++++++++++++++++++---- apps/client/src/locales/messages.pt.xlf | 54 +++++++++++++++++++++---- apps/client/src/locales/messages.tr.xlf | 54 +++++++++++++++++++++---- apps/client/src/locales/messages.uk.xlf | 54 +++++++++++++++++++++---- apps/client/src/locales/messages.xlf | 51 +++++++++++++++++++---- apps/client/src/locales/messages.zh.xlf | 54 +++++++++++++++++++++---- 13 files changed, 565 insertions(+), 84 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e9285773..ad1250c87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Introduced a watchlist to follow assets (experimental) +### Changed + +- Improved the language localization for German (`de`) + ## 2.156.0 - 2025-04-27 ### Changed diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 94b8635b5..e69019384 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -1473,6 +1473,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -1517,6 +1521,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -1937,6 +1945,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -4067,11 +4079,11 @@ Holdings apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -4087,7 +4099,7 @@ Summary apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -4099,7 +4111,7 @@ Markets apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -4943,7 +4955,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6115,7 +6127,7 @@ Change from All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -6123,7 +6135,7 @@ from ATH libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -7933,6 +7945,34 @@ 33 + + Add asset to watchlist + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index afdcb1253..893d322db 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -500,6 +500,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -544,6 +548,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -1974,7 +1982,7 @@ Märkte apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -2154,11 +2162,11 @@ Positionen apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -2228,6 +2236,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -2534,7 +2546,7 @@ Änderung vom Allzeithoch libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -2542,7 +2554,7 @@ vom AZH libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -3342,7 +3354,7 @@ Zusammenfassung apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -4678,7 +4690,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7933,6 +7945,34 @@ 33 + + Add asset to watchlist + Anlage zur Beobachtungsliste hinzufügen + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Beobachtungsliste + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Beobachtungsliste + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 6e6f6d3f1..6ada98e89 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -501,6 +501,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -545,6 +549,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -1959,7 +1967,7 @@ Mercados apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -2139,11 +2147,11 @@ Participaciones apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -2213,6 +2221,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -2519,7 +2531,7 @@ Variación respecto al máximo histórico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -2527,7 +2539,7 @@ desde el máximo histórico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -3327,7 +3339,7 @@ Resumen apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -4655,7 +4667,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7934,6 +7946,34 @@ 33 + + Add asset to watchlist + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index c4536731e..f90d72ed8 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -556,6 +556,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -600,6 +604,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -2346,11 +2354,11 @@ Positions apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -2366,7 +2374,7 @@ Résumé apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -2378,7 +2386,7 @@ Marchés apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -2448,6 +2456,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -3038,7 +3050,7 @@ Différence avec le Record Historique libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -3046,7 +3058,7 @@ par rapport au record historique libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -4654,7 +4666,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7933,6 +7945,34 @@ 33 + + Add asset to watchlist + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index e8b29147f..b618d9f5e 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -501,6 +501,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -545,6 +549,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -1959,7 +1967,7 @@ Mercati apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -2139,11 +2147,11 @@ Partecipazioni apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -2213,6 +2221,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -2519,7 +2531,7 @@ Variazione rispetto al massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -2527,7 +2539,7 @@ dal massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -3327,7 +3339,7 @@ Summario apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -4655,7 +4667,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7934,6 +7946,34 @@ 33 + + Add asset to watchlist + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 3ea7934ae..18d6da558 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -500,6 +500,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -544,6 +548,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -1958,7 +1966,7 @@ Markten apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -2138,11 +2146,11 @@ Posities apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -2212,6 +2220,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -2518,7 +2530,7 @@ Verandering van All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -2526,7 +2538,7 @@ van ATH libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -3326,7 +3338,7 @@ Samenvatting apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -4654,7 +4666,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7933,6 +7945,34 @@ 33 + + Add asset to watchlist + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 99418ceb0..a5a4f25a3 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -1365,6 +1365,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -1409,6 +1413,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -1761,6 +1769,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -3695,11 +3707,11 @@ Inwestycje apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -3715,7 +3727,7 @@ Podsumowanie apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -3727,7 +3739,7 @@ Rynki apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -4555,7 +4567,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5539,7 +5551,7 @@ Zmiana od Najwyższego Punktu w Historii libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -5547,7 +5559,7 @@ od ATH libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -7933,6 +7945,34 @@ 33 + + Add asset to watchlist + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index f83a0c9c8..0e8af1bcf 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -556,6 +556,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -600,6 +604,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -2290,7 +2298,7 @@ Mercados apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -2360,6 +2368,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -2662,11 +2674,11 @@ Posições apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -2910,7 +2922,7 @@ Diferença desde o Máximo Histórico libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -2918,7 +2930,7 @@ a partir do ATH (All Time High) libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -3274,7 +3286,7 @@ Sumário apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -4654,7 +4666,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7933,6 +7945,34 @@ 33 + + Add asset to watchlist + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 7b8f9fcf3..ec6d15e93 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -1325,6 +1325,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -1369,6 +1373,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -1665,6 +1673,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -3251,11 +3263,11 @@ Varlıklar apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -3271,7 +3283,7 @@ Özet apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -3283,7 +3295,7 @@ Piyasalar apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -4043,7 +4055,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5227,7 +5239,7 @@ Tüm Zamanların En Yüksek Seviyesinden (ATH) Değişim libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -5235,7 +5247,7 @@ Tüm Zamanların En Yüksek Seviyesinden libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -7933,6 +7945,34 @@ 33 + + Add asset to watchlist + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 8b887cfec..1991af915 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -1817,6 +1817,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -1861,6 +1865,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -1925,6 +1933,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -4299,11 +4311,11 @@ Активи apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -4319,7 +4331,7 @@ Зведення apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -4331,7 +4343,7 @@ Ринки apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -5211,7 +5223,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6761,7 +6773,7 @@ Зміна від Історичного Максимуму libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -6769,7 +6781,7 @@ від ІМ libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -7933,6 +7945,34 @@ 33 + + Add asset to watchlist + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index aa91e90d0..6b62d6ca2 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -1315,6 +1315,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -1358,6 +1362,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -1703,6 +1711,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -3442,11 +3454,11 @@ Holdings apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -3461,7 +3473,7 @@ Summary apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -3472,7 +3484,7 @@ Markets apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -4209,7 +4221,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5134,14 +5146,14 @@ Change from All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 from ATH libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -7172,6 +7184,31 @@ 33 + + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + + + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 6a18716da..2d046e2cf 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -1374,6 +1374,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 25 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 15 + apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 58 @@ -1418,6 +1422,10 @@ apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/create-or-update-tag-dialog.html 32 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 22 + apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 135 @@ -1770,6 +1778,10 @@ apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html 29 + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 10 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 124 @@ -3704,11 +3716,11 @@ 控股 apps/client/src/app/pages/home/home-page-routing.module.ts - 23 + 24 apps/client/src/app/pages/home/home-page-routing.module.ts - 28 + 29 apps/client/src/app/pages/home/home-page.component.ts @@ -3724,7 +3736,7 @@ 概括 apps/client/src/app/pages/home/home-page-routing.module.ts - 33 + 34 apps/client/src/app/pages/home/home-page.component.ts @@ -3736,7 +3748,7 @@ 市场 apps/client/src/app/pages/home/home-page-routing.module.ts - 38 + 39 apps/client/src/app/pages/home/home-page.component.ts @@ -4564,7 +4576,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 137 + 141 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5596,7 +5608,7 @@ 从历史最高点开始变化 libs/ui/src/lib/benchmark/benchmark.component.html - 81 + 83 @@ -5604,7 +5616,7 @@ 来自 ATH libs/ui/src/lib/benchmark/benchmark.component.html - 83 + 85 @@ -7934,6 +7946,34 @@ 33 + + Add asset to watchlist + Add asset to watchlist + + apps/client/src/app/components/home-watchlist/create-watchlist-item-dialog/create-watchlist-item-dialog.html + 7 + + + + Watchlist + Watchlist + + apps/client/src/app/components/home-watchlist/home-watchlist.html + 4 + + + + Watchlist + Watchlist + + apps/client/src/app/pages/home/home-page-routing.module.ts + 44 + + + apps/client/src/app/pages/home/home-page.component.ts + 58 + + From fe1df8095a872384875313cd4168a024b136ff16 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 28 Apr 2025 18:53:33 +0200 Subject: [PATCH 04/12] Feature/update locales (#4620) * Update locales * Update translations --------- Co-authored-by: github-actions[bot] Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- apps/client/src/locales/messages.ca.xlf | 34 ++++++++++--------------- apps/client/src/locales/messages.de.xlf | 34 ++++++++++--------------- apps/client/src/locales/messages.es.xlf | 34 ++++++++++--------------- apps/client/src/locales/messages.fr.xlf | 34 ++++++++++--------------- apps/client/src/locales/messages.it.xlf | 34 ++++++++++--------------- apps/client/src/locales/messages.nl.xlf | 34 ++++++++++--------------- apps/client/src/locales/messages.pl.xlf | 34 ++++++++++--------------- apps/client/src/locales/messages.pt.xlf | 34 ++++++++++--------------- apps/client/src/locales/messages.tr.xlf | 34 ++++++++++--------------- apps/client/src/locales/messages.uk.xlf | 34 ++++++++++--------------- apps/client/src/locales/messages.xlf | 31 +++++++++------------- apps/client/src/locales/messages.zh.xlf | 34 ++++++++++--------------- 12 files changed, 155 insertions(+), 250 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index e69019384..ca6e80c14 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -653,7 +653,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -2807,7 +2807,7 @@ or apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -7274,14 +7274,6 @@ 70 - - Want to stay updated? Click below to get notified as soon as it’s available. - Want to stay updated? Click below to get notified as soon as it’s available. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Get access to 80’000+ tickers from over 50 exchanges Get access to 80’000+ tickers from over 50 exchanges @@ -7409,7 +7401,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -7420,20 +7412,12 @@ 41 - - Notify me - Notify me - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - - + I have an API key I have an API key apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7973,6 +7957,14 @@ 58 + + Get Early Access + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 893d322db..5a38fd4a0 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -1074,7 +1074,7 @@ oder apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -5453,7 +5453,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -7298,14 +7298,6 @@ 70 - - Want to stay updated? Click below to get notified as soon as it’s available. - Möchtest du auf dem Laufenden bleiben? Dann klicke unten, um benachrichtigt zu werden, sobald es verfügbar ist. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Get access to 80’000+ tickers from over 50 exchanges Erhalte Zugang zu 80’000+ Tickern von über 50 Handelsplätzen @@ -7433,7 +7425,7 @@ Möchtest du den API-Schlüssel wirklich löschen? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -7444,20 +7436,12 @@ 41 - - Notify me - Benachrichtige mich - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - - + I have an API key Ich habe einen API-Schlüssel apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7973,6 +7957,14 @@ 58 + + Get Early Access + Early Access erhalten + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 6ada98e89..a5e69957f 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -1059,7 +1059,7 @@ o apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -5430,7 +5430,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -7275,14 +7275,6 @@ 70 - - Want to stay updated? Click below to get notified as soon as it’s available. - Want to stay updated? Click below to get notified as soon as it’s available. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Get access to 80’000+ tickers from over 50 exchanges Get access to 80’000+ tickers from over 50 exchanges @@ -7410,7 +7402,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -7421,20 +7413,12 @@ 41 - - Notify me - Notify me - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - - + I have an API key I have an API key apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7974,6 +7958,14 @@ 58 + + Get Early Access + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index f90d72ed8..70620ba13 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -1410,7 +1410,7 @@ ou apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -5429,7 +5429,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -7274,14 +7274,6 @@ 70 - - Want to stay updated? Click below to get notified as soon as it’s available. - Vous souhaitez rester informé ? Cliquez ci-dessous pour être informé dès qu’il sera disponible. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Get access to 80’000+ tickers from over 50 exchanges Accédez à plus de 80 000 symboles financiers issus de plus de 50 marchés boursiers. @@ -7409,7 +7401,7 @@ Voulez-vous vraiment supprimer la clé API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -7420,20 +7412,12 @@ 41 - - Notify me - Me prévenir - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - - + I have an API key J’ai une clé API apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7973,6 +7957,14 @@ 58 + + Get Early Access + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index b618d9f5e..b164d4cd1 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -1059,7 +1059,7 @@ oppure apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -5430,7 +5430,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -7275,14 +7275,6 @@ 70 - - Want to stay updated? Click below to get notified as soon as it’s available. - Vuoi seguire le novità? Clicca sotto per essere notificato appena è disponibile. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Get access to 80’000+ tickers from over 50 exchanges Ottieni accesso a oltre 100’000+ titoli da oltre 50 borse @@ -7410,7 +7402,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -7421,20 +7413,12 @@ 41 - - Notify me - Notify me - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - - + I have an API key I have an API key apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7974,6 +7958,14 @@ 58 + + Get Early Access + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 18d6da558..805cf1eff 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -1058,7 +1058,7 @@ of apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -5429,7 +5429,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -7274,14 +7274,6 @@ 70 - - Want to stay updated? Click below to get notified as soon as it’s available. - Want to stay updated? Click below to get notified as soon as it’s available. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Get access to 80’000+ tickers from over 50 exchanges Get access to 80’000+ tickers from over 50 exchanges @@ -7409,7 +7401,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -7420,20 +7412,12 @@ 41 - - Notify me - Notify me - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - - + I have an API key I have an API key apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7973,6 +7957,14 @@ 58 + + Get Early Access + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index a5a4f25a3..818f0e0ce 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -272,7 +272,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -2463,7 +2463,7 @@ lub apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -7274,14 +7274,6 @@ 70 - - Want to stay updated? Click below to get notified as soon as it’s available. - Chcesz być na bieżąco? Kliknij poniżej, aby otrzymać powiadomienie, gdy tylko będzie dostępne. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Get access to 80’000+ tickers from over 50 exchanges Uzyskaj dostęp do ponad 100 000 pasków notowań giełdowych z ponad 50 giełd @@ -7409,7 +7401,7 @@ Czy na pewno chcesz usunąć klucz API?? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -7420,20 +7412,12 @@ 41 - - Notify me - Powiadom mnie - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - - + I have an API key Posiadam klucz API apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7973,6 +7957,14 @@ 58 + + Get Early Access + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 0e8af1bcf..f506af000 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -1290,7 +1290,7 @@ ou apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -5429,7 +5429,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -7274,14 +7274,6 @@ 70 - - Want to stay updated? Click below to get notified as soon as it’s available. - Want to stay updated? Click below to get notified as soon as it’s available. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Get access to 80’000+ tickers from over 50 exchanges Get access to 80’000+ tickers from over 50 exchanges @@ -7409,7 +7401,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -7420,20 +7412,12 @@ 41 - - Notify me - Notify me - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - - + I have an API key I have an API key apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7973,6 +7957,14 @@ 58 + + Get Early Access + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index ec6d15e93..2d79bc69c 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -272,7 +272,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -2311,7 +2311,7 @@ veya apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -7274,14 +7274,6 @@ 70 - - Want to stay updated? Click below to get notified as soon as it’s available. - Want to stay updated? Click below to get notified as soon as it’s available. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Get access to 80’000+ tickers from over 50 exchanges Get access to 80’000+ tickers from over 50 exchanges @@ -7409,7 +7401,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -7420,20 +7412,12 @@ 41 - - Notify me - Notify me - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - - + I have an API key I have an API key apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7973,6 +7957,14 @@ 58 + + Get Early Access + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 1991af915..b466fb37e 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -653,7 +653,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -2235,7 +2235,7 @@ Ви дійсно хочете видалити ключ API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -2246,28 +2246,12 @@ 57 - - Want to stay updated? Click below to get notified as soon as it’s available. - Хочете залишатися в курсі? Натисніть нижче, щоб отримати сповіщення, як тільки це буде доступно. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - - - Notify me - Сповістіть мене - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - or або apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -2294,12 +2278,12 @@ 29 - + I have an API key У мене є ключ API apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7973,6 +7957,14 @@ 58 + + Get Early Access + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 6b62d6ca2..d38d53231 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -267,7 +267,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -2333,7 +2333,7 @@ or apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -6599,13 +6599,6 @@ 40 - - Want to stay updated? Click below to get notified as soon as it’s available. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Ukraine @@ -6722,25 +6715,18 @@ 42 - - Notify me - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 - + I have an API key apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7209,6 +7195,13 @@ 4 + + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 2d046e2cf..e9dddf34b 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -273,7 +273,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 74 + 75 apps/client/src/app/components/header/header.component.ts @@ -2472,7 +2472,7 @@ apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 36 + 32 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -7275,14 +7275,6 @@ 70 - - Want to stay updated? Click below to get notified as soon as it’s available. - Want to stay updated? Click below to get notified as soon as it’s available. - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 23 - - Get access to 80’000+ tickers from over 50 exchanges Get access to 80’000+ tickers from over 50 exchanges @@ -7410,7 +7402,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 93 + 94 @@ -7421,20 +7413,12 @@ 41 - - Notify me - Notify me - - apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 32 - - - + I have an API key I have an API key apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html - 43 + 39 @@ -7974,6 +7958,14 @@ 58 + + Get Early Access + Get Early Access + + apps/client/src/app/components/admin-settings/ghostfolio-premium-api-dialog/ghostfolio-premium-api-dialog.html + 29 + + From 34f191ef7a5cde87ebdf373bc209e7c9dc097e4e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 28 Apr 2025 18:53:55 +0200 Subject: [PATCH 05/12] Feature/change column label in benchmark component (#4616) * Generalize column label * Update changelog --- CHANGELOG.md | 1 + libs/ui/src/lib/benchmark/benchmark.component.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad1250c87..daa650aa7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Changed the column label from _Index_ to _Name_ in the benchmark component - Improved the language localization for German (`de`) ## 2.156.0 - 2025-04-27 diff --git a/libs/ui/src/lib/benchmark/benchmark.component.html b/libs/ui/src/lib/benchmark/benchmark.component.html index 8e8a30202..270690f35 100644 --- a/libs/ui/src/lib/benchmark/benchmark.component.html +++ b/libs/ui/src/lib/benchmark/benchmark.component.html @@ -1,6 +1,6 @@ - + From 1b5a65d391952797f380c3d1862134ce4da1b47f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 28 Apr 2025 19:28:12 +0200 Subject: [PATCH 06/12] Feature/update locales (#4621) Co-authored-by: github-actions[bot] --- apps/client/src/locales/messages.ca.xlf | 12 ++++-------- apps/client/src/locales/messages.de.xlf | 12 ++++-------- apps/client/src/locales/messages.es.xlf | 12 ++++-------- apps/client/src/locales/messages.fr.xlf | 12 ++++-------- apps/client/src/locales/messages.it.xlf | 12 ++++-------- apps/client/src/locales/messages.nl.xlf | 12 ++++-------- apps/client/src/locales/messages.pl.xlf | 12 ++++-------- apps/client/src/locales/messages.pt.xlf | 12 ++++-------- apps/client/src/locales/messages.tr.xlf | 12 ++++-------- apps/client/src/locales/messages.uk.xlf | 12 ++++-------- apps/client/src/locales/messages.xlf | 11 ++++------- apps/client/src/locales/messages.zh.xlf | 12 ++++-------- 12 files changed, 48 insertions(+), 95 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index ca6e80c14..f94cd9b80 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -1069,6 +1069,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -6090,14 +6094,6 @@ 197 - - Index - Index - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - 50-Day Trend 50-Day Trend diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 5a38fd4a0..a8ddcfd0c 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -164,6 +164,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -2533,14 +2537,6 @@ 229 - - Index - Index - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - Change from All Time High Änderung vom Allzeithoch diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index a5e69957f..d321f5bde 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -165,6 +165,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -2518,14 +2522,6 @@ 229 - - Index - Índice - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - Change from All Time High Variación respecto al máximo histórico (ATH) diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 70620ba13..d939feb0a 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -172,6 +172,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -3037,14 +3041,6 @@ 229 - - Index - Indice - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - Change from All Time High Différence avec le Record Historique diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index b164d4cd1..76de15e87 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -165,6 +165,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -2518,14 +2522,6 @@ 229 - - Index - Indice - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - Change from All Time High Variazione rispetto al massimo storico (ATH) diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 805cf1eff..4a30b72ad 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -164,6 +164,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -2517,14 +2521,6 @@ 229 - - Index - Index - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - Change from All Time High Verandering van All Time High diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 818f0e0ce..82d530de3 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -997,6 +997,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -5530,14 +5534,6 @@ 67 - - Index - Indeks - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - Last All Time High Ostatni Najwyższy Punkt w Historii diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index f506af000..d9b68e76d 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -172,6 +172,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -2909,14 +2913,6 @@ 229 - - Index - Índice - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - Change from All Time High Diferença desde o Máximo Histórico diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 2d79bc69c..75b9b407f 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -957,6 +957,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -5226,14 +5230,6 @@ 229 - - Index - Endeks - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - Change from All Time High Tüm Zamanların En Yüksek Seviyesinden (ATH) Değişim diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index b466fb37e..423876a65 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -1085,6 +1085,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -6720,14 +6724,6 @@ 197 - - Index - Індекс - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - 50-Day Trend Тренд на 50 днів diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index d38d53231..d5e6126a5 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -969,6 +969,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -5114,13 +5118,6 @@ 67 - - Index - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - 50-Day Trend diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index e9dddf34b..c32a62f7d 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -1006,6 +1006,10 @@ libs/ui/src/lib/activities-table/activities-table.component.html 138 + + libs/ui/src/lib/benchmark/benchmark.component.html + 3 + libs/ui/src/lib/holdings-table/holdings-table.component.html 28 @@ -5571,14 +5575,6 @@ 67 - - Index - 指数 - - libs/ui/src/lib/benchmark/benchmark.component.html - 3 - - 50-Day Trend 50 天趋势 From b90bfc3d6e3b62ae9740f63c6b6dfb545b22131e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 28 Apr 2025 19:42:39 +0200 Subject: [PATCH 07/12] Feature/extend data providers management of admin control panel (#4615) * Extend data providers management * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/admin/admin.controller.ts | 2 +- apps/api/src/app/admin/admin.service.ts | 11 +- .../ghostfolio/ghostfolio.service.ts | 10 +- .../alpha-vantage/alpha-vantage.service.ts | 1 + .../coingecko/coingecko.service.ts | 1 + .../data-provider/data-provider.service.ts | 5 +- .../eod-historical-data.service.ts | 1 + .../financial-modeling-prep.service.ts | 1 + .../ghostfolio/ghostfolio.service.ts | 3 +- .../google-sheets/google-sheets.service.ts | 1 + .../data-provider/manual/manual.service.ts | 1 + .../rapid-api/rapid-api.service.ts | 1 + .../yahoo-finance/yahoo-finance.service.ts | 1 + .../admin-settings.component.html | 152 ++++++++++-------- .../admin-settings.component.ts | 49 ++++-- .../admin-settings/admin-settings.module.ts | 2 + apps/client/src/app/services/admin.service.ts | 26 ++- .../lib/interfaces/admin-data.interface.ts | 3 + .../data-provider-info.interface.ts | 3 + 20 files changed, 172 insertions(+), 103 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index daa650aa7..87f700f30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Changed the column label from _Index_ to _Name_ in the benchmark component +- Extended the data providers management of the admin control panel - Improved the language localization for German (`de`) ## 2.156.0 - 2025-04-27 diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index e9952ea08..d8507bbb0 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -68,7 +68,7 @@ export class AdminController { @HasPermission(permissions.accessAdminControl) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) public async getAdminData(): Promise { - return this.adminService.get(); + return this.adminService.get({ user: this.request.user }); } @HasPermission(permissions.accessAdminControl) diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index e72902704..ce8adaf65 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -29,7 +29,7 @@ import { Filter } from '@ghostfolio/common/interfaces'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; -import { MarketDataPreset } from '@ghostfolio/common/types'; +import { MarketDataPreset, UserWithSettings } from '@ghostfolio/common/types'; import { BadRequestException, @@ -134,7 +134,9 @@ export class AdminService { } } - public async get(): Promise { + public async get({ user }: { user: UserWithSettings }): Promise { + const dataSources = await this.dataProviderService.getDataSources({ user }); + const [settings, transactionCount, userCount] = await Promise.all([ this.propertyService.get(), this.prismaService.order.count(), @@ -145,6 +147,11 @@ export class AdminService { settings, transactionCount, userCount, + dataProviders: dataSources.map((dataSource) => { + return this.dataProviderService + .getDataProvider(dataSource) + .getDataProviderInfo(); + }), version: environment.version }; } diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts index 7281697bd..bdaecf718 100644 --- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts @@ -1,5 +1,6 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; +import { GhostfolioService as GhostfolioDataProviderService } from '@ghostfolio/api/services/data-provider/ghostfolio/ghostfolio.service'; import { GetAssetProfileParams, GetDividendsParams, @@ -327,10 +328,15 @@ export class GhostfolioService { } private getDataProviderInfo(): DataProviderInfo { + const ghostfolioDataProviderService = new GhostfolioDataProviderService( + this.configurationService, + this.propertyService + ); + return { + ...ghostfolioDataProviderService.getDataProviderInfo(), isPremium: false, - name: 'Ghostfolio Premium', - url: 'https://ghostfol.io' + name: 'Ghostfolio Premium' }; } diff --git a/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts b/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts index f9593f0d0..1e8f7eefa 100644 --- a/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts +++ b/apps/api/src/services/data-provider/alpha-vantage/alpha-vantage.service.ts @@ -52,6 +52,7 @@ export class AlphaVantageService implements DataProviderInterface { public getDataProviderInfo(): DataProviderInfo { return { + dataSource: DataSource.ALPHA_VANTAGE, isPremium: false, name: 'Alpha Vantage', url: 'https://www.alphavantage.co' diff --git a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts index d53355b9c..7776ff46c 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -92,6 +92,7 @@ export class CoinGeckoService implements DataProviderInterface { public getDataProviderInfo(): DataProviderInfo { return { + dataSource: DataSource.COINGECKO, isPremium: false, name: 'CoinGecko', url: 'https://coingecko.com' diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index a4edd5bfa..3d8f2e553 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -26,6 +26,7 @@ import { LookupItem, LookupResponse } from '@ghostfolio/common/interfaces'; +import { hasRole } from '@ghostfolio/common/permissions'; import type { Granularity, UserWithSettings } from '@ghostfolio/common/types'; import { Inject, Injectable, Logger } from '@nestjs/common'; @@ -169,6 +170,7 @@ export class DataProviderService { let dataSourcesKey: 'DATA_SOURCES' | 'DATA_SOURCES_LEGACY' = 'DATA_SOURCES'; if ( + !hasRole(user, 'ADMIN') && isBefore(user.createdAt, new Date('2025-03-23')) && this.configurationService.get('DATA_SOURCES_LEGACY')?.length > 0 ) { @@ -185,7 +187,7 @@ export class DataProviderService { PROPERTY_API_KEY_GHOSTFOLIO )) as string; - if (ghostfolioApiKey) { + if (ghostfolioApiKey || hasRole(user, 'ADMIN')) { dataSources.push('GHOSTFOLIO'); } @@ -670,6 +672,7 @@ export class DataProviderService { lookupItem.dataProviderInfo.isPremium = false; } + lookupItem.dataProviderInfo.dataSource = undefined; lookupItem.dataProviderInfo.name = undefined; lookupItem.dataProviderInfo.url = undefined; } else { diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index 376b8f159..ddb94bb1a 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -68,6 +68,7 @@ export class EodHistoricalDataService implements DataProviderInterface { public getDataProviderInfo(): DataProviderInfo { return { + dataSource: DataSource.EOD_HISTORICAL_DATA, isPremium: true, name: 'EOD Historical Data', url: 'https://eodhd.com' diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index 4e42201d0..d0e674c4d 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -223,6 +223,7 @@ export class FinancialModelingPrepService implements DataProviderInterface { public getDataProviderInfo(): DataProviderInfo { return { + dataSource: DataSource.FINANCIAL_MODELING_PREP, isPremium: true, name: 'Financial Modeling Prep', url: 'https://financialmodelingprep.com/developer/docs' diff --git a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts index 097464e2f..90354ace5 100644 --- a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts @@ -92,9 +92,10 @@ export class GhostfolioService implements DataProviderInterface { public getDataProviderInfo(): DataProviderInfo { return { + dataSource: DataSource.GHOSTFOLIO, isPremium: true, name: 'Ghostfolio', - url: 'https://ghostfo.io' + url: 'https://ghostfol.io' }; } diff --git a/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts b/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts index 0c466972d..f067f042c 100644 --- a/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts +++ b/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts @@ -47,6 +47,7 @@ export class GoogleSheetsService implements DataProviderInterface { public getDataProviderInfo(): DataProviderInfo { return { + dataSource: DataSource.GOOGLE_SHEETS, isPremium: false, name: 'Google Sheets', url: 'https://docs.google.com/spreadsheets' diff --git a/apps/api/src/services/data-provider/manual/manual.service.ts b/apps/api/src/services/data-provider/manual/manual.service.ts index 331806098..66e625e47 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -64,6 +64,7 @@ export class ManualService implements DataProviderInterface { public getDataProviderInfo(): DataProviderInfo { return { + dataSource: DataSource.MANUAL, isPremium: false }; } diff --git a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts index 7762be426..05f1c0e5d 100644 --- a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts +++ b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts @@ -43,6 +43,7 @@ export class RapidApiService implements DataProviderInterface { public getDataProviderInfo(): DataProviderInfo { return { + dataSource: DataSource.RAPID_API, isPremium: false, name: 'Rapid API', url: 'https://rapidapi.com' diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index 6b42c9283..b9be5553e 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts @@ -51,6 +51,7 @@ export class YahooFinanceService implements DataProviderInterface { public getDataProviderInfo(): DataProviderInfo { return { + dataSource: DataSource.YAHOO, isPremium: false, name: 'Yahoo Finance', url: 'https://finance.yahoo.com' diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.html b/apps/client/src/app/components/admin-settings/admin-settings.component.html index 305d6ce49..977c8a372 100644 --- a/apps/client/src/app/components/admin-settings/admin-settings.component.html +++ b/apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -4,74 +4,100 @@

Data Providers

-
-
- - @if (isGhostfolioApiKeyValid === false) { - Early Access - } - Ghostfolio Premium - - - @if (isGhostfolioApiKeyValid === true) { -
- - Valid until - {{ - ghostfolioApiStatus?.subscription?.expiresAt - | date: defaultDateFormat - }} -
- } -
-
- @if (isGhostfolioApiKeyValid === true) { -
-
- {{ ghostfolioApiStatus.dailyRequests }} - of - {{ ghostfolioApiStatus.dailyRequestsMax }} - daily requests + @for (dataProvider of dataProviders; track dataProvider.name) { +
+ @if (dataProvider.name === 'Ghostfolio') { +
+
+ +
+ + Ghostfolio Premium + + @if (isGhostfolioApiKeyValid === false) { + Early Access + } + + @if (isGhostfolioApiKeyValid === true) { +
+ + Valid until + {{ + ghostfolioApiStatus?.subscription?.expiresAt + | date: defaultDateFormat + }} +
+ } +
- - -
+
+ @if (isGhostfolioApiKeyValid === true) { +
+
+ {{ ghostfolioApiStatus.dailyRequests }} + of + {{ ghostfolioApiStatus.dailyRequestsMax }} + daily requests +
+ + + + +
+ } @else if (isGhostfolioApiKeyValid === false) { + - + } +
+ } @else { +
+
+ + {{ dataProvider.name }} +
- } @else if (isGhostfolioApiKeyValid === false) { - +
}
-
+ }
diff --git a/apps/client/src/app/components/admin-settings/admin-settings.component.ts b/apps/client/src/app/components/admin-settings/admin-settings.component.ts index d72466bb4..68c196962 100644 --- a/apps/client/src/app/components/admin-settings/admin-settings.component.ts +++ b/apps/client/src/app/components/admin-settings/admin-settings.component.ts @@ -10,6 +10,7 @@ import { import { getDateFormatString } from '@ghostfolio/common/helper'; import { DataProviderGhostfolioStatusResponse, + DataProviderInfo, User } from '@ghostfolio/common/interfaces'; @@ -35,6 +36,7 @@ import { GhostfolioPremiumApiDialogParams } from './ghostfolio-premium-api-dialo standalone: false }) export class AdminSettingsComponent implements OnDestroy, OnInit { + public dataProviders: DataProviderInfo[]; public defaultDateFormat: string; public ghostfolioApiStatus: DataProviderGhostfolioStatusResponse; public isGhostfolioApiKeyValid: boolean; @@ -124,23 +126,36 @@ export class AdminSettingsComponent implements OnDestroy, OnInit { private initialize() { this.adminService - .fetchGhostfolioDataProviderStatus() - .pipe( - catchError(() => { - this.isGhostfolioApiKeyValid = false; - - this.changeDetectorRef.markForCheck(); - - return of(null); - }), - filter((status) => { - return status !== null; - }), - takeUntil(this.unsubscribeSubject) - ) - .subscribe((status) => { - this.ghostfolioApiStatus = status; - this.isGhostfolioApiKeyValid = true; + .fetchAdminData() + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe(({ dataProviders, settings }) => { + this.dataProviders = dataProviders.filter(({ dataSource }) => { + return dataSource !== 'MANUAL'; + }); + + this.adminService + .fetchGhostfolioDataProviderStatus( + settings[PROPERTY_API_KEY_GHOSTFOLIO] as string + ) + .pipe( + catchError(() => { + this.isGhostfolioApiKeyValid = false; + + this.changeDetectorRef.markForCheck(); + + return of(null); + }), + filter((status) => { + return status !== null; + }), + takeUntil(this.unsubscribeSubject) + ) + .subscribe((status) => { + this.ghostfolioApiStatus = status; + this.isGhostfolioApiKeyValid = true; + + this.changeDetectorRef.markForCheck(); + }); this.changeDetectorRef.markForCheck(); }); diff --git a/apps/client/src/app/components/admin-settings/admin-settings.module.ts b/apps/client/src/app/components/admin-settings/admin-settings.module.ts index 5a5c39cde..79b269a62 100644 --- a/apps/client/src/app/components/admin-settings/admin-settings.module.ts +++ b/apps/client/src/app/components/admin-settings/admin-settings.module.ts @@ -1,5 +1,6 @@ import { GfAdminPlatformModule } from '@ghostfolio/client/components/admin-platform/admin-platform.module'; import { GfAdminTagModule } from '@ghostfolio/client/components/admin-tag/admin-tag.module'; +import { GfAssetProfileIconComponent } from '@ghostfolio/client/components/asset-profile-icon/asset-profile-icon.component'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { CommonModule } from '@angular/common'; @@ -17,6 +18,7 @@ import { AdminSettingsComponent } from './admin-settings.component'; CommonModule, GfAdminPlatformModule, GfAdminTagModule, + GfAssetProfileIconComponent, GfPremiumIndicatorComponent, MatButtonModule, MatCardModule, diff --git a/apps/client/src/app/services/admin.service.ts b/apps/client/src/app/services/admin.service.ts index 89769122d..cb72fb9fd 100644 --- a/apps/client/src/app/services/admin.service.ts +++ b/apps/client/src/app/services/admin.service.ts @@ -4,8 +4,7 @@ import { UpdatePlatformDto } from '@ghostfolio/api/app/platform/update-platform. import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { HEADER_KEY_SKIP_INTERCEPTOR, - HEADER_KEY_TOKEN, - PROPERTY_API_KEY_GHOSTFOLIO + HEADER_KEY_TOKEN } from '@ghostfolio/common/config'; import { DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config'; import { @@ -24,7 +23,6 @@ import { Injectable } from '@angular/core'; import { SortDirection } from '@angular/material/sort'; import { DataSource, MarketData, Platform } from '@prisma/client'; import { JobStatus } from 'bull'; -import { switchMap } from 'rxjs'; import { environment } from '../../environments/environment'; import { DataService } from './data.service'; @@ -115,19 +113,15 @@ export class AdminService { }); } - public fetchGhostfolioDataProviderStatus() { - return this.fetchAdminData().pipe( - switchMap(({ settings }) => { - const headers = new HttpHeaders({ - [HEADER_KEY_SKIP_INTERCEPTOR]: 'true', - [HEADER_KEY_TOKEN]: `Api-Key ${settings[PROPERTY_API_KEY_GHOSTFOLIO]}` - }); - - return this.http.get( - `${environment.production ? 'https://ghostfol.io' : ''}/api/v2/data-providers/ghostfolio/status`, - { headers } - ); - }) + public fetchGhostfolioDataProviderStatus(aApiKey: string) { + const headers = new HttpHeaders({ + [HEADER_KEY_SKIP_INTERCEPTOR]: 'true', + [HEADER_KEY_TOKEN]: `Api-Key ${aApiKey}` + }); + + return this.http.get( + `${environment.production ? 'https://ghostfol.io' : ''}/api/v2/data-providers/ghostfolio/status`, + { headers } ); } diff --git a/libs/common/src/lib/interfaces/admin-data.interface.ts b/libs/common/src/lib/interfaces/admin-data.interface.ts index e14429493..dba85d3ef 100644 --- a/libs/common/src/lib/interfaces/admin-data.interface.ts +++ b/libs/common/src/lib/interfaces/admin-data.interface.ts @@ -1,4 +1,7 @@ +import { DataProviderInfo } from './data-provider-info.interface'; + export interface AdminData { + dataProviders: DataProviderInfo[]; settings: { [key: string]: boolean | object | string | string[] }; transactionCount: number; userCount: number; diff --git a/libs/common/src/lib/interfaces/data-provider-info.interface.ts b/libs/common/src/lib/interfaces/data-provider-info.interface.ts index 79d7d6940..9fba0e62d 100644 --- a/libs/common/src/lib/interfaces/data-provider-info.interface.ts +++ b/libs/common/src/lib/interfaces/data-provider-info.interface.ts @@ -1,4 +1,7 @@ +import { DataSource } from '@prisma/client'; + export interface DataProviderInfo { + dataSource?: DataSource; isPremium: boolean; name?: string; url?: string; From 82cf4afd7d99c425aa223116234a11b9d4c4f9f9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 28 Apr 2025 19:44:44 +0200 Subject: [PATCH 08/12] Release 2.157.0 (#4622) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87f700f30..bacfac1c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.157.0 - 2025-04-28 ### Added diff --git a/package-lock.json b/package-lock.json index 4557a6c61..023184042 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.156.0", + "version": "2.157.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.156.0", + "version": "2.157.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 111232548..7acb5e8f5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.156.0", + "version": "2.157.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From a5fe259761f39a1db1f41f3ce8f76e9c30e8ea4f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 29 Apr 2025 20:31:53 +0200 Subject: [PATCH 09/12] Feature/update locales (#4623) Co-authored-by: github-actions[bot] --- apps/client/src/locales/messages.ca.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.de.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.es.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.fr.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.it.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.nl.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.pl.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.pt.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.tr.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.uk.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.xlf | 20 ++++++++++---------- apps/client/src/locales/messages.zh.xlf | 20 ++++++++++---------- 12 files changed, 120 insertions(+), 120 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index f94cd9b80..504ea6e14 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -653,7 +653,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -2175,7 +2175,7 @@ Plataformes apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -2183,7 +2183,7 @@ Etiquetes apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -6659,7 +6659,7 @@ Valid until apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -7267,7 +7267,7 @@ Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -7373,7 +7373,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -7381,7 +7381,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -7389,7 +7389,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -7397,7 +7397,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7557,7 +7557,7 @@ Early Access apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index a8ddcfd0c..8612e948d 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -1326,7 +1326,7 @@ Tags apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -3398,7 +3398,7 @@ Gültig bis apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3958,7 +3958,7 @@ Plattformen apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -5449,7 +5449,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -7291,7 +7291,7 @@ API-Schlüssel setzen apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -7397,7 +7397,7 @@ von apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -7405,7 +7405,7 @@ täglichen Anfragen apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -7413,7 +7413,7 @@ API-Schlüssel löschen apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -7421,7 +7421,7 @@ Möchtest du den API-Schlüssel wirklich löschen? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7581,7 +7581,7 @@ Early Access apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index d321f5bde..e297e0021 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -1311,7 +1311,7 @@ Etiquetas apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -3383,7 +3383,7 @@ Válido hasta apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3935,7 +3935,7 @@ Platforms apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -5426,7 +5426,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -7268,7 +7268,7 @@ Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -7374,7 +7374,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -7382,7 +7382,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -7390,7 +7390,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -7398,7 +7398,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7558,7 +7558,7 @@ Early Access apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index d939feb0a..376a7cb30 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -918,7 +918,7 @@ Étiquettes apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -3382,7 +3382,7 @@ Valide jusqu’au apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3934,7 +3934,7 @@ Platformes apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -5425,7 +5425,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -7267,7 +7267,7 @@ Définir clé API apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -7373,7 +7373,7 @@ sur apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -7381,7 +7381,7 @@ requêtes journalières apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -7389,7 +7389,7 @@ Retirer la clé API apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -7397,7 +7397,7 @@ Voulez-vous vraiment supprimer la clé API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7557,7 +7557,7 @@ Accès anticipé apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 76de15e87..52beb2cbe 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -1311,7 +1311,7 @@ Tag apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -3383,7 +3383,7 @@ Valido fino a apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3935,7 +3935,7 @@ Piattaforme apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -5426,7 +5426,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -7268,7 +7268,7 @@ Imposta API Key apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -7374,7 +7374,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -7382,7 +7382,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -7390,7 +7390,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -7398,7 +7398,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7558,7 +7558,7 @@ Early Access apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index 4a30b72ad..b4c312517 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -1310,7 +1310,7 @@ Tags apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -3382,7 +3382,7 @@ Geldig tot apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3934,7 +3934,7 @@ Platforms apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -5425,7 +5425,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -7267,7 +7267,7 @@ Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -7373,7 +7373,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -7381,7 +7381,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -7389,7 +7389,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -7397,7 +7397,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7557,7 +7557,7 @@ Early Access apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 82d530de3..ef5caf612 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -272,7 +272,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -2007,7 +2007,7 @@ Platformy apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -2015,7 +2015,7 @@ Tagi apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -6059,7 +6059,7 @@ Ważność do apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -7267,7 +7267,7 @@ Skonfiguruj klucz API apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -7373,7 +7373,7 @@ z apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -7381,7 +7381,7 @@ codzienne żądania apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -7389,7 +7389,7 @@ Usuń klucz API apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -7397,7 +7397,7 @@ Czy na pewno chcesz usunąć klucz API?? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7557,7 +7557,7 @@ Wczesny dostęp apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index d9b68e76d..b4d2510be 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -1614,7 +1614,7 @@ Marcadores apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -3382,7 +3382,7 @@ Válido até apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -3934,7 +3934,7 @@ Plataformas apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -5425,7 +5425,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -7267,7 +7267,7 @@ Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -7373,7 +7373,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -7381,7 +7381,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -7389,7 +7389,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -7397,7 +7397,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7557,7 +7557,7 @@ Early Access apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 75b9b407f..47a489c62 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -272,7 +272,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -1747,7 +1747,7 @@ Etiketler apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -1911,7 +1911,7 @@ Platformlar apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -4939,7 +4939,7 @@ Geçerli tarih apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -7267,7 +7267,7 @@ Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -7373,7 +7373,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -7381,7 +7381,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -7389,7 +7389,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -7397,7 +7397,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7557,7 +7557,7 @@ Erken Erişim apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 423876a65..6f5611d46 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -653,7 +653,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -2171,7 +2171,7 @@ Дійсне до apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -2183,7 +2183,7 @@ з apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -2191,7 +2191,7 @@ щоденних запитів apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -2199,7 +2199,7 @@ Вилучити ключ API apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -2207,7 +2207,7 @@ Встановити ключ API apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -2215,7 +2215,7 @@ Платформи apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -2223,7 +2223,7 @@ Теги apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -2239,7 +2239,7 @@ Ви дійсно хочете видалити ключ API? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7557,7 +7557,7 @@ Ранній доступ apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index d5e6126a5..cc48e4081 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -267,7 +267,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -1925,14 +1925,14 @@ Platforms apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 Tags apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -5593,7 +5593,7 @@ Valid until apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -6607,7 +6607,7 @@ Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -6709,14 +6709,14 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -6730,14 +6730,14 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -6863,7 +6863,7 @@ Early Access apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index c32a62f7d..c1c7ac5fa 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -273,7 +273,7 @@ apps/client/src/app/components/admin-settings/admin-settings.component.ts - 75 + 77 apps/client/src/app/components/header/header.component.ts @@ -2016,7 +2016,7 @@ 平台 apps/client/src/app/components/admin-settings/admin-settings.component.html - 81 + 107 @@ -2024,7 +2024,7 @@ 标签 apps/client/src/app/components/admin-settings/admin-settings.component.html - 87 + 113 libs/ui/src/lib/tags-selector/tags-selector.component.html @@ -6116,7 +6116,7 @@ 有效期至 apps/client/src/app/components/admin-settings/admin-settings.component.html - 28 + 36 libs/ui/src/lib/membership-card/membership-card.component.html @@ -7268,7 +7268,7 @@ Set API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 70 + 83 @@ -7374,7 +7374,7 @@ of apps/client/src/app/components/admin-settings/admin-settings.component.html - 42 + 52 @@ -7382,7 +7382,7 @@ daily requests apps/client/src/app/components/admin-settings/admin-settings.component.html - 44 + 54 @@ -7390,7 +7390,7 @@ Remove API key apps/client/src/app/components/admin-settings/admin-settings.component.html - 58 + 71 @@ -7398,7 +7398,7 @@ Do you really want to delete the API key? apps/client/src/app/components/admin-settings/admin-settings.component.ts - 94 + 96 @@ -7558,7 +7558,7 @@ Early Access apps/client/src/app/components/admin-settings/admin-settings.component.html - 16 + 29 From d919622932799f8289621acc3f3f88b0bf52cdac Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 29 Apr 2025 20:56:28 +0200 Subject: [PATCH 10/12] Bugfix/fix create watchlist item for new asset profile (#4625) * Fix create watchlist item for new asset profile --- .../endpoints/watchlist/watchlist.module.ts | 6 ++++ .../endpoints/watchlist/watchlist.service.ts | 33 ++++++++++++++++--- .../src/app/pages/home/home-page.component.ts | 2 +- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/apps/api/src/app/endpoints/watchlist/watchlist.module.ts b/apps/api/src/app/endpoints/watchlist/watchlist.module.ts index 15115888b..2addd2de0 100644 --- a/apps/api/src/app/endpoints/watchlist/watchlist.module.ts +++ b/apps/api/src/app/endpoints/watchlist/watchlist.module.ts @@ -1,6 +1,9 @@ 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 { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; +import { DataGatheringModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module'; +import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; import { Module } from '@nestjs/common'; @@ -10,7 +13,10 @@ import { WatchlistService } from './watchlist.service'; @Module({ controllers: [WatchlistController], imports: [ + DataGatheringModule, + DataProviderModule, PrismaModule, + SymbolProfileModule, TransformDataSourceInRequestModule, TransformDataSourceInResponseModule ], diff --git a/apps/api/src/app/endpoints/watchlist/watchlist.service.ts b/apps/api/src/app/endpoints/watchlist/watchlist.service.ts index fdb9dd97a..6ff71ec50 100644 --- a/apps/api/src/app/endpoints/watchlist/watchlist.service.ts +++ b/apps/api/src/app/endpoints/watchlist/watchlist.service.ts @@ -1,12 +1,20 @@ +import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; +import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service'; +import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; -import { Injectable, NotFoundException } from '@nestjs/common'; -import { DataSource } from '@prisma/client'; +import { BadRequestException, Injectable } from '@nestjs/common'; +import { DataSource, Prisma } from '@prisma/client'; @Injectable() export class WatchlistService { - public constructor(private readonly prismaService: PrismaService) {} + public constructor( + private readonly dataGatheringService: DataGatheringService, + private readonly dataProviderService: DataProviderService, + private readonly prismaService: PrismaService, + private readonly symbolProfileService: SymbolProfileService + ) {} public async createWatchlistItem({ dataSource, @@ -24,11 +32,26 @@ export class WatchlistService { }); if (!symbolProfile) { - throw new NotFoundException( - `Asset profile not found for ${symbol} (${dataSource})` + const assetProfiles = await this.dataProviderService.getAssetProfiles([ + { dataSource, symbol } + ]); + + if (!assetProfiles[symbol]?.currency) { + throw new BadRequestException( + `Asset profile not found for ${symbol} (${dataSource})` + ); + } + + await this.symbolProfileService.add( + assetProfiles[symbol] as Prisma.SymbolProfileCreateInput ); } + await this.dataGatheringService.gatherSymbol({ + dataSource, + symbol + }); + await this.prismaService.user.update({ data: { watchlist: { diff --git a/apps/client/src/app/pages/home/home-page.component.ts b/apps/client/src/app/pages/home/home-page.component.ts index 70e0c34fe..928ad2931 100644 --- a/apps/client/src/app/pages/home/home-page.component.ts +++ b/apps/client/src/app/pages/home/home-page.component.ts @@ -54,7 +54,7 @@ export class HomePageComponent implements OnDestroy, OnInit { path: ['/home', 'market'] }, { - iconName: 'star-outline', + iconName: 'bookmark-outline', label: $localize`Watchlist`, path: ['/home', 'watchlist'], showCondition: this.user?.settings?.isExperimentalFeatures From afac9daeab56e3e4787fbe14506485c798f2e029 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 29 Apr 2025 20:58:28 +0200 Subject: [PATCH 11/12] Release 2.157.1 (#4627) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bacfac1c5..3850390e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## 2.157.0 - 2025-04-28 +## 2.157.1 - 2025-04-29 ### Added diff --git a/package-lock.json b/package-lock.json index 023184042..54ce11db7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.157.0", + "version": "2.157.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.157.0", + "version": "2.157.1", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 7acb5e8f5..42e173d4c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.157.0", + "version": "2.157.1", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 73f009e43b26ebacd8a39eaf6b880824aaaf4719 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Wed, 30 Apr 2025 16:00:03 +0700 Subject: [PATCH 12/12] Feature/extend GUI to delete watchlist item (#4624) * Extend GUI to delete watchlist item * Update changelog --- CHANGELOG.md | 6 ++++ .../home-watchlist.component.ts | 25 ++++++++++++- .../home-watchlist/home-watchlist.html | 2 ++ apps/client/src/app/services/data.service.ts | 4 +++ .../lib/benchmark/benchmark.component.html | 33 +++++++++++++++++ .../src/lib/benchmark/benchmark.component.ts | 35 +++++++++++++++++-- 6 files changed, 101 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3850390e6..d103ff6e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added support to delete an asset from the watchlist (experimental) + ## 2.157.1 - 2025-04-29 ### Added diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts index 0198ab27a..daf512b34 100644 --- a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts @@ -1,6 +1,10 @@ import { DataService } from '@ghostfolio/client/services/data.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { Benchmark, User } from '@ghostfolio/common/interfaces'; +import { + AssetProfileIdentifier, + Benchmark, + User +} from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfBenchmarkComponent } from '@ghostfolio/ui/benchmark'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; @@ -41,6 +45,7 @@ import { CreateWatchlistItemDialogParams } from './create-watchlist-item-dialog/ export class HomeWatchlistComponent implements OnDestroy, OnInit { public deviceType: string; public hasPermissionToCreateWatchlistItem: boolean; + public hasPermissionToDeleteWatchlistItem: boolean; public user: User; public watchlist: Benchmark[]; @@ -75,6 +80,10 @@ export class HomeWatchlistComponent implements OnDestroy, OnInit { this.user.permissions, permissions.createWatchlistItem ); + this.hasPermissionToDeleteWatchlistItem = hasPermission( + this.user.permissions, + permissions.deleteWatchlistItem + ); this.changeDetectorRef.markForCheck(); } @@ -85,6 +94,20 @@ export class HomeWatchlistComponent implements OnDestroy, OnInit { this.loadWatchlistData(); } + public onWatchlistItemDeleted({ + dataSource, + symbol + }: AssetProfileIdentifier) { + this.dataService + .deleteWatchlistItem({ dataSource, symbol }) + .pipe(takeUntil(this.unsubscribeSubject)) + .subscribe({ + next: () => { + return this.loadWatchlistData(); + } + }); + } + public ngOnDestroy() { this.unsubscribeSubject.next(); this.unsubscribeSubject.complete(); diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.html b/apps/client/src/app/components/home-watchlist/home-watchlist.html index 0a2e37279..ef073d331 100644 --- a/apps/client/src/app/components/home-watchlist/home-watchlist.html +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.html @@ -12,8 +12,10 @@
diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index 526c61972..353bc4153 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -327,6 +327,10 @@ export class DataService { return this.http.delete(`/api/v1/user/${aId}`); } + public deleteWatchlistItem({ dataSource, symbol }: AssetProfileIdentifier) { + return this.http.delete(`/api/v1/watchlist/${dataSource}/${symbol}`); + } + public fetchAccesses() { return this.http.get('/api/v1/access'); } diff --git a/libs/ui/src/lib/benchmark/benchmark.component.html b/libs/ui/src/lib/benchmark/benchmark.component.html index 270690f35..14ff7f9f2 100644 --- a/libs/ui/src/lib/benchmark/benchmark.component.html +++ b/libs/ui/src/lib/benchmark/benchmark.component.html @@ -113,6 +113,39 @@ + +
+ + + (); + + public displayedColumns = [ + 'name', + 'date', + 'change', + 'marketCondition', + 'actions' + ]; public isLoading = true; public isNumber = isNumber; public resolveMarketCondition = resolveMarketCondition; @@ -58,6 +75,7 @@ export class GfBenchmarkComponent implements OnChanges, OnDestroy { public constructor( private dialog: MatDialog, + private notificationService: NotificationService, private route: ActivatedRoute, private router: Router ) { @@ -89,11 +107,22 @@ export class GfBenchmarkComponent implements OnChanges, OnDestroy { 'trend200d', 'date', 'change', - 'marketCondition' + 'marketCondition', + 'actions' ]; } } + public onDeleteItem({ dataSource, symbol }: AssetProfileIdentifier) { + this.notificationService.confirm({ + confirmFn: () => { + this.itemDeleted.emit({ dataSource, symbol }); + }, + confirmType: ConfirmationDialogType.Warn, + title: $localize`Do you really want to delete this item?` + }); + } + public onOpenBenchmarkDialog({ dataSource, symbol }: AssetProfileIdentifier) { this.router.navigate([], { queryParams: { dataSource, symbol, benchmarkDetailDialog: true }
IndexName {{ element?.name }} + @if (hasPermissionToDeleteItem) { + + } + + + +