diff --git a/CHANGELOG.md b/CHANGELOG.md index 55341f399..0e5525c61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,12 +9,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Added a close holding button to the holding detail dialog - Extended the holdings endpoint to include the performance with currency effect for cash + +## 2.213.0 - 2025-10-30 + +### Added + +- Extended the activities table menu with a _View Holding_ item +- Added the error logging to the symbol lookup in the _Trackinsight_ data enhancer + +### Changed + +- Improved the icon of the holdings tab on the home page +- Improved the icon of the holdings tab on the home page for the _Zen Mode_ +- Improved the icon of the holdings tab in the account detail dialog +- Migrated the tags selector component in the holding detail dialog to form control +- Improved the language localization for German (`de`) +- Upgraded `nestjs` from version `11.1.3` to `11.1.8` + +## 2.212.0 - 2025-10-29 + +### Added + +- Added a close holding button to the holding detail dialog +- Added the _Sponsors_ section to the about page - Extended the user detail dialog in the users section of the admin control panel ### Changed +- Refactored the generation of the holdings table in the _Copy AI prompt to clipboard for analysis_ action on the analysis page (experimental) +- Refactored the generation of the holdings table in the _Copy portfolio data to clipboard for AI prompt_ action on the analysis page (experimental) +- Improved the usability of the user detail dialog in the users section of the admin control panel - Improved the language localization for German (`de`) ### Fixed diff --git a/README.md b/README.md index 82d5710d1..1a5cc6e95 100644 --- a/README.md +++ b/README.md @@ -297,7 +297,18 @@ Ghostfolio is **100% free** and **open source**. We encourage and support an act Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22%20no%3Aassignee), even for [newcomers](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22%20no%3Aassignee). Please join the Ghostfolio [Slack](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) channel or post to [@ghostfolio\_](https://x.com/ghostfolio_) on _X_. We would love to hear from you. -If you like to support this project, get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio). +If you like to support this project, become a [**Sponsor**](https://github.com/sponsors/ghostfolio), get [**Ghostfolio Premium**](https://ghostfol.io/en/pricing) or [**Buy me a coffee**](https://www.buymeacoffee.com/ghostfolio). + +## Sponsors + +
+

+ Browser testing via
+ + LambdaTest Logo + +

+
## Analytics diff --git a/apps/api/src/app/endpoints/ai/ai.service.ts b/apps/api/src/app/endpoints/ai/ai.service.ts index 4cc4fde65..d07768d69 100644 --- a/apps/api/src/app/endpoints/ai/ai.service.ts +++ b/apps/api/src/app/endpoints/ai/ai.service.ts @@ -14,6 +14,27 @@ import type { ColumnDescriptor } from 'tablemark'; @Injectable() export class AiService { + private static readonly HOLDINGS_TABLE_COLUMN_DEFINITIONS: ({ + key: + | 'ALLOCATION_PERCENTAGE' + | 'ASSET_CLASS' + | 'ASSET_SUB_CLASS' + | 'CURRENCY' + | 'NAME' + | 'SYMBOL'; + } & ColumnDescriptor)[] = [ + { key: 'NAME', name: 'Name' }, + { key: 'SYMBOL', name: 'Symbol' }, + { key: 'CURRENCY', name: 'Currency' }, + { key: 'ASSET_CLASS', name: 'Asset Class' }, + { key: 'ASSET_SUB_CLASS', name: 'Asset Sub Class' }, + { + align: 'right', + key: 'ALLOCATION_PERCENTAGE', + name: 'Allocation in Percentage' + } + ]; + public constructor( private readonly portfolioService: PortfolioService, private readonly propertyService: PropertyService @@ -59,14 +80,10 @@ export class AiService { userId }); - const holdingsTableColumns: ColumnDescriptor[] = [ - { name: 'Name' }, - { name: 'Symbol' }, - { name: 'Currency' }, - { name: 'Asset Class' }, - { name: 'Asset Sub Class' }, - { align: 'right', name: 'Allocation in Percentage' } - ]; + const holdingsTableColumns: ColumnDescriptor[] = + AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.map(({ align, name }) => { + return { name, align: align ?? 'left' }; + }); const holdingsTableRows = Object.values(holdings) .sort((a, b) => { @@ -78,17 +95,45 @@ export class AiService { assetClass, assetSubClass, currency, - name, + name: label, symbol }) => { - return { - Name: name, - Symbol: symbol, - Currency: currency, - 'Asset Class': assetClass ?? '', - 'Asset Sub Class': assetSubClass ?? '', - 'Allocation in Percentage': `${(allocationInPercentage * 100).toFixed(3)}%` - }; + return AiService.HOLDINGS_TABLE_COLUMN_DEFINITIONS.reduce( + (row, { key, name }) => { + switch (key) { + case 'ALLOCATION_PERCENTAGE': + row[name] = `${(allocationInPercentage * 100).toFixed(3)}%`; + break; + + case 'ASSET_CLASS': + row[name] = assetClass ?? ''; + break; + + case 'ASSET_SUB_CLASS': + row[name] = assetSubClass ?? ''; + break; + + case 'CURRENCY': + row[name] = currency; + break; + + case 'NAME': + row[name] = label; + break; + + case 'SYMBOL': + row[name] = symbol; + break; + + default: + row[name] = ''; + break; + } + + return row; + }, + {} as Record + ); } ); diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts index 8b885c013..1e297b93b 100644 --- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts @@ -4,7 +4,7 @@ import { Holding } from '@ghostfolio/common/interfaces'; import { Country } from '@ghostfolio/common/interfaces/country.interface'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; -import { Injectable } from '@nestjs/common'; +import { Injectable, Logger } from '@nestjs/common'; import { SymbolProfile } from '@prisma/client'; import { countries } from 'countries-list'; @@ -202,7 +202,12 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { return undefined; }) - .catch(() => { + .catch(({ message }) => { + Logger.error( + `Failed to search Trackinsight symbol for ${symbol} (${message})`, + 'TrackinsightDataEnhancerService' + ); + return undefined; }); } diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index bddd7d3da..5ecb7bf8b 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -276,7 +276,10 @@ export class AppComponent implements OnDestroy, OnInit { .subscribe((user) => { this.user = user; - const dialogRef = this.dialog.open(GfHoldingDetailDialogComponent, { + const dialogRef = this.dialog.open< + GfHoldingDetailDialogComponent, + HoldingDetailDialogParams + >(GfHoldingDetailDialogComponent, { autoFocus: false, data: { dataSource, @@ -302,7 +305,7 @@ export class AppComponent implements OnDestroy, OnInit { hasPermission(this.user?.permissions, permissions.updateOrder) && !this.user?.settings?.isRestrictedView, locale: this.user?.settings?.locale - } as HoldingDetailDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : '80vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts index bdc2424f5..94cb22699 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts @@ -43,9 +43,9 @@ import { Big } from 'big.js'; import { format, parseISO } from 'date-fns'; import { addIcons } from 'ionicons'; import { + albumsOutline, cashOutline, - swapVerticalOutline, - walletOutline + swapVerticalOutline } from 'ionicons/icons'; import { isNumber } from 'lodash'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @@ -129,7 +129,7 @@ export class GfAccountDetailDialogComponent implements OnDestroy, OnInit { } }); - addIcons({ cashOutline, swapVerticalOutline, walletOutline }); + addIcons({ albumsOutline, cashOutline, swapVerticalOutline }); } public ngOnInit() { diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html index eff500d0a..07ea17038 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html @@ -98,7 +98,7 @@ > - +
Holdings
{ this.user = user; - const dialogRef = this.dialog.open(GfAssetProfileDialogComponent, { + const dialogRef = this.dialog.open< + GfAssetProfileDialogComponent, + AssetProfileDialogParams + >(GfAssetProfileDialogComponent, { autoFocus: false, data: { dataSource, @@ -438,7 +441,7 @@ export class GfAdminMarketDataComponent colorScheme: this.user?.settings.colorScheme, deviceType: this.deviceType, locale: this.user?.settings?.locale - } as AssetProfileDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : '80vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); @@ -465,17 +468,17 @@ export class GfAdminMarketDataComponent .subscribe((user) => { this.user = user; - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfCreateAssetProfileDialogComponent, - { - autoFocus: false, - data: { - deviceType: this.deviceType, - locale: this.user?.settings?.locale - } as CreateAssetProfileDialogParams, - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + CreateAssetProfileDialogParams + >(GfCreateAssetProfileDialogComponent, { + autoFocus: false, + data: { + deviceType: this.deviceType, + locale: this.user?.settings?.locale + }, + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.ts b/apps/client/src/app/components/admin-platform/admin-platform.component.ts index 845c7f375..6c95cee0b 100644 --- a/apps/client/src/app/components/admin-platform/admin-platform.component.ts +++ b/apps/client/src/app/components/admin-platform/admin-platform.component.ts @@ -34,6 +34,7 @@ import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject, takeUntil } from 'rxjs'; import { GfCreateOrUpdatePlatformDialogComponent } from './create-or-update-platform-dialog/create-or-update-platform-dialog.component'; +import { CreateOrUpdatePlatformDialogParams } from './create-or-update-platform-dialog/interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -153,19 +154,20 @@ export class GfAdminPlatformComponent implements OnInit, OnDestroy { } private openCreatePlatformDialog() { - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfCreateOrUpdatePlatformDialogComponent, - { - data: { - platform: { - name: null, - url: null - } - }, - height: this.deviceType === 'mobile' ? '98vh' : undefined, - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + CreateOrUpdatePlatformDialogParams + >(GfCreateOrUpdatePlatformDialogComponent, { + data: { + platform: { + id: null, + name: null, + url: null + } + }, + height: this.deviceType === 'mobile' ? '98vh' : undefined, + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() @@ -191,21 +193,29 @@ export class GfAdminPlatformComponent implements OnInit, OnDestroy { }); } - private openUpdatePlatformDialog({ id, name, url }) { - const dialogRef = this.dialog.open( + private openUpdatePlatformDialog({ + id, + name, + url + }: { + id: string; + name: string; + url: string; + }) { + const dialogRef = this.dialog.open< GfCreateOrUpdatePlatformDialogComponent, - { - data: { - platform: { - id, - name, - url - } - }, - height: this.deviceType === 'mobile' ? '98vh' : undefined, - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + CreateOrUpdatePlatformDialogParams + >(GfCreateOrUpdatePlatformDialogComponent, { + data: { + platform: { + id, + name, + url + } + }, + height: this.deviceType === 'mobile' ? '98vh' : undefined, + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/app/components/admin-tag/admin-tag.component.ts b/apps/client/src/app/components/admin-tag/admin-tag.component.ts index de4c8cedc..5552fa01b 100644 --- a/apps/client/src/app/components/admin-tag/admin-tag.component.ts +++ b/apps/client/src/app/components/admin-tag/admin-tag.component.ts @@ -32,6 +32,7 @@ import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject, takeUntil } from 'rxjs'; import { GfCreateOrUpdateTagDialogComponent } from './create-or-update-tag-dialog/create-or-update-tag-dialog.component'; +import { CreateOrUpdateTagDialogParams } from './create-or-update-tag-dialog/interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -149,9 +150,13 @@ export class GfAdminTagComponent implements OnInit, OnDestroy { } private openCreateTagDialog() { - const dialogRef = this.dialog.open(GfCreateOrUpdateTagDialogComponent, { + const dialogRef = this.dialog.open< + GfCreateOrUpdateTagDialogComponent, + CreateOrUpdateTagDialogParams + >(GfCreateOrUpdateTagDialogComponent, { data: { tag: { + id: null, name: null } }, @@ -183,8 +188,11 @@ export class GfAdminTagComponent implements OnInit, OnDestroy { }); } - private openUpdateTagDialog({ id, name }) { - const dialogRef = this.dialog.open(GfCreateOrUpdateTagDialogComponent, { + private openUpdateTagDialog({ id, name }: { id: string; name: string }) { + const dialogRef = this.dialog.open< + GfCreateOrUpdateTagDialogComponent, + CreateOrUpdateTagDialogParams + >(GfCreateOrUpdateTagDialogComponent, { data: { tag: { id, diff --git a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts index bd7214786..4b7f83e93 100644 --- a/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/components/admin-tag/create-or-update-tag-dialog/interfaces/interfaces.ts @@ -1,5 +1,5 @@ import { Tag } from '@prisma/client'; export interface CreateOrUpdateTagDialogParams { - tag: Tag; + tag: Pick; } diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index 4c20f3fe9..c0d058ad2 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -288,14 +288,17 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { return; } - const dialogRef = this.dialog.open(GfUserDetailDialogComponent, { + const dialogRef = this.dialog.open< + GfUserDetailDialogComponent, + UserDetailDialogParams + >(GfUserDetailDialogComponent, { autoFocus: false, data: { userData, deviceType: this.deviceType, hasPermissionForSubscription: this.hasPermissionForSubscription, locale: this.user?.settings?.locale - } as UserDetailDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : '60vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); @@ -304,7 +307,6 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit { .afterClosed() .pipe(takeUntil(this.unsubscribeSubject)) .subscribe(() => { - this.fetchUsers(); this.router.navigate(['.'], { relativeTo: this.route }); }); } diff --git a/apps/client/src/app/components/header/header.component.ts b/apps/client/src/app/components/header/header.component.ts index 6e1a909a1..3f011fec4 100644 --- a/apps/client/src/app/components/header/header.component.ts +++ b/apps/client/src/app/components/header/header.component.ts @@ -1,4 +1,5 @@ import { UpdateUserSettingDto } from '@ghostfolio/api/app/user/update-user-setting.dto'; +import { LoginWithAccessTokenDialogParams } from '@ghostfolio/client/components/login-with-access-token-dialog/interfaces/interfaces'; import { GfLoginWithAccessTokenDialogComponent } from '@ghostfolio/client/components/login-with-access-token-dialog/login-with-access-token-dialog.component'; import { LayoutService } from '@ghostfolio/client/core/layout.service'; import { NotificationService } from '@ghostfolio/client/core/notification/notification.service'; @@ -271,7 +272,10 @@ export class GfHeaderComponent implements OnChanges { } public openLoginDialog() { - const dialogRef = this.dialog.open(GfLoginWithAccessTokenDialogComponent, { + const dialogRef = this.dialog.open< + GfLoginWithAccessTokenDialogComponent, + LoginWithAccessTokenDialogParams + >(GfLoginWithAccessTokenDialogComponent, { autoFocus: false, data: { accessToken: '', diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 93005c11f..b443a37e7 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -39,7 +39,7 @@ import { OnDestroy, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; +import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatChipsModule } from '@angular/material/chips'; import { @@ -94,6 +94,7 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces'; MatFormFieldModule, MatTabsModule, NgxSkeletonLoaderModule, + ReactiveFormsModule, RouterModule ], schemas: [CUSTOM_ELEMENTS_SCHEMA], @@ -103,7 +104,6 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces'; }) export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { public activitiesCount: number; - public activityForm: FormGroup; public accounts: Account[]; public assetClass: string; public assetSubClass: string; @@ -124,6 +124,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { public hasPermissionToCreateOwnTag: boolean; public hasPermissionToReadMarketDataOfOwnAssetProfile: boolean; public historicalDataItems: LineChartItem[]; + public holdingForm: FormGroup; public investmentInBaseCurrencyWithCurrencyEffect: number; public investmentInBaseCurrencyWithCurrencyEffectPrecision = 2; public isUUID = isUUID; @@ -180,16 +181,16 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { } public ngOnInit() { - this.activityForm = this.formBuilder.group({ - tags: [] as string[] - }); - const filters: Filter[] = [ { id: this.data.dataSource, type: 'DATA_SOURCE' }, { id: this.data.symbol, type: 'SYMBOL' } ]; - this.activityForm + this.holdingForm = this.formBuilder.group({ + tags: [] as string[] + }); + + this.holdingForm .get('tags') .valueChanges.pipe(takeUntil(this.unsubscribeSubject)) .subscribe((tags: Tag[]) => { @@ -430,7 +431,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { }; }); - this.activityForm.setValue({ tags: this.tags }, { emitEvent: false }); + this.holdingForm.setValue({ tags: this.tags }, { emitEvent: false }); this.value = value; @@ -617,10 +618,6 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit { } } - public onTagsChanged(tags: Tag[]) { - this.activityForm.get('tags').setValue(tags); - } - public onUpdateActivity(aActivity: Activity) { this.router.navigate( internalRoutes.portfolio.subRoutes.activities.routerLink, diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index b0e462a96..f52286160 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -411,13 +411,14 @@ } - +
+ + @if ( data.hasPermissionToAccessAdminControl || 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 4c0b614c0..ab43e54dd 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 @@ -149,17 +149,17 @@ export class GfHomeWatchlistComponent implements OnDestroy, OnInit { .subscribe((user) => { this.user = user; - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfCreateWatchlistItemDialogComponent, - { - autoFocus: false, - data: { - deviceType: this.deviceType, - locale: this.user?.settings?.locale - } as CreateWatchlistItemDialogParams, - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + CreateWatchlistItemDialogParams + >(GfCreateWatchlistItemDialogComponent, { + autoFocus: false, + data: { + deviceType: this.deviceType, + locale: this.user?.settings?.locale + }, + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts new file mode 100644 index 000000000..2fa8b7ea4 --- /dev/null +++ b/apps/client/src/app/components/login-with-access-token-dialog/interfaces/interfaces.ts @@ -0,0 +1,5 @@ +export interface LoginWithAccessTokenDialogParams { + accessToken: string; + hasPermissionToUseSocialLogin: boolean; + title: string; +} diff --git a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts index 3812a18b9..aaca03594 100644 --- a/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts +++ b/apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.component.ts @@ -26,6 +26,8 @@ import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { eyeOffOutline, eyeOutline } from 'ionicons/icons'; +import { LoginWithAccessTokenDialogParams } from './interfaces/interfaces'; + @Component({ changeDetection: ChangeDetectionStrategy.OnPush, imports: [ @@ -51,7 +53,7 @@ export class GfLoginWithAccessTokenDialogComponent { public isAccessTokenHidden = true; public constructor( - @Inject(MAT_DIALOG_DATA) public data: any, + @Inject(MAT_DIALOG_DATA) public data: LoginWithAccessTokenDialogParams, public dialogRef: MatDialogRef, private internetIdentityService: InternetIdentityService, private router: Router, diff --git a/apps/client/src/app/components/rule/rule.component.ts b/apps/client/src/app/components/rule/rule.component.ts index a4e9f4dea..5ed39d5be 100644 --- a/apps/client/src/app/components/rule/rule.component.ts +++ b/apps/client/src/app/components/rule/rule.component.ts @@ -79,13 +79,16 @@ export class GfRuleComponent implements OnInit { } public onCustomizeRule(rule: PortfolioReportRule) { - const dialogRef = this.dialog.open(GfRuleSettingsDialogComponent, { + const dialogRef = this.dialog.open< + GfRuleSettingsDialogComponent, + RuleSettingsDialogParams + >(GfRuleSettingsDialogComponent, { data: { rule, categoryName: this.categoryName, locale: this.locale, settings: this.settings - } as RuleSettingsDialogParams, + }, width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/components/user-account-access/user-account-access.component.ts b/apps/client/src/app/components/user-account-access/user-account-access.component.ts index bdb9af6ed..afcb9d9c8 100644 --- a/apps/client/src/app/components/user-account-access/user-account-access.component.ts +++ b/apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -31,6 +31,7 @@ import { EMPTY, Subject } from 'rxjs'; import { catchError, takeUntil } from 'rxjs/operators'; import { GfCreateOrUpdateAccessDialogComponent } from './create-or-update-access-dialog/create-or-update-access-dialog.component'; +import { CreateOrUpdateAccessDialogParams } from './create-or-update-access-dialog/interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -187,10 +188,15 @@ export class GfUserAccountAccessComponent implements OnDestroy, OnInit { } private openCreateAccessDialog() { - const dialogRef = this.dialog.open(GfCreateOrUpdateAccessDialogComponent, { + const dialogRef = this.dialog.open< + GfCreateOrUpdateAccessDialogComponent, + CreateOrUpdateAccessDialogParams + >(GfCreateOrUpdateAccessDialogComponent, { data: { access: { alias: '', + grantee: null, + id: null, permissions: ['READ_RESTRICTED'], type: 'PRIVATE' } @@ -219,12 +225,15 @@ export class GfUserAccountAccessComponent implements OnDestroy, OnInit { return; } - const dialogRef = this.dialog.open(GfCreateOrUpdateAccessDialogComponent, { + const dialogRef = this.dialog.open< + GfCreateOrUpdateAccessDialogComponent, + CreateOrUpdateAccessDialogParams + >(GfCreateOrUpdateAccessDialogComponent, { data: { access: { alias: access.alias, - id: access.id, grantee: access.grantee === 'Public' ? null : access.grantee, + id: access.id, permissions: access.permissions, type: access.type } diff --git a/apps/client/src/app/pages/about/overview/about-overview-page.html b/apps/client/src/app/pages/about/overview/about-overview-page.html index 4085498a9..654ee9e6d 100644 --- a/apps/client/src/app/pages/about/overview/about-overview-page.html +++ b/apps/client/src/app/pages/about/overview/about-overview-page.html @@ -175,7 +175,7 @@ -
+
}
+ +
+
+

Sponsors

+
+ Browser testing via +
+ + LambdaTest Logo + +
+
+
diff --git a/apps/client/src/app/pages/accounts/accounts-page.component.ts b/apps/client/src/app/pages/accounts/accounts-page.component.ts index f09901e45..3a1616b6f 100644 --- a/apps/client/src/app/pages/accounts/accounts-page.component.ts +++ b/apps/client/src/app/pages/accounts/accounts-page.component.ts @@ -23,6 +23,8 @@ import { EMPTY, Subject, Subscription } from 'rxjs'; import { catchError, takeUntil } from 'rxjs/operators'; import { GfCreateOrUpdateAccountDialogComponent } from './create-or-update-account-dialog/create-or-update-account-dialog.component'; +import { CreateOrUpdateAccountDialogParams } from './create-or-update-account-dialog/interfaces/interfaces'; +import { TransferBalanceDialogParams } from './transfer-balance/interfaces/interfaces'; import { GfTransferBalanceDialogComponent } from './transfer-balance/transfer-balance-dialog.component'; @Component({ @@ -179,7 +181,10 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { name, platformId }: AccountModel) { - const dialogRef = this.dialog.open(GfCreateOrUpdateAccountDialogComponent, { + const dialogRef = this.dialog.open< + GfCreateOrUpdateAccountDialogComponent, + CreateOrUpdateAccountDialogParams + >(GfCreateOrUpdateAccountDialogComponent, { data: { account: { balance, @@ -227,7 +232,10 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { } private openAccountDetailDialog(aAccountId: string) { - const dialogRef = this.dialog.open(GfAccountDetailDialogComponent, { + const dialogRef = this.dialog.open< + GfAccountDetailDialogComponent, + AccountDetailDialogParams + >(GfAccountDetailDialogComponent, { autoFocus: false, data: { accountId: aAccountId, @@ -237,7 +245,7 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { !this.hasImpersonationId && hasPermission(this.user?.permissions, permissions.createOrder) && !this.user?.settings?.isRestrictedView - } as AccountDetailDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : '80vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); @@ -253,12 +261,16 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { } private openCreateAccountDialog() { - const dialogRef = this.dialog.open(GfCreateOrUpdateAccountDialogComponent, { + const dialogRef = this.dialog.open< + GfCreateOrUpdateAccountDialogComponent, + CreateOrUpdateAccountDialogParams + >(GfCreateOrUpdateAccountDialogComponent, { data: { account: { balance: 0, comment: null, currency: this.user?.settings?.baseCurrency, + id: null, isExcluded: false, name: null, platformId: null @@ -295,7 +307,10 @@ export class GfAccountsPageComponent implements OnDestroy, OnInit { } private openTransferBalanceDialog() { - const dialogRef = this.dialog.open(GfTransferBalanceDialogComponent, { + const dialogRef = this.dialog.open< + GfTransferBalanceDialogComponent, + TransferBalanceDialogParams + >(GfTransferBalanceDialogComponent, { data: { accounts: this.accounts }, diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts index ffe4f14f6..a3e6272f8 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/interfaces/interfaces.ts @@ -1,5 +1,5 @@ import { Account } from '@prisma/client'; export interface CreateOrUpdateAccountDialogParams { - account: Account; + account: Omit; } 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 eb1ad62d9..fd860ced5 100644 --- a/apps/client/src/app/pages/home/home-page.component.ts +++ b/apps/client/src/app/pages/home/home-page.component.ts @@ -16,11 +16,11 @@ import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; import { + albumsOutline, analyticsOutline, bookmarkOutline, newspaperOutline, - readerOutline, - walletOutline + readerOutline } from 'ionicons/icons'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; @@ -61,7 +61,7 @@ export class GfHomePageComponent implements OnDestroy, OnInit { routerLink: internalRoutes.home.routerLink }, { - iconName: 'wallet-outline', + iconName: 'albums-outline', label: internalRoutes.home.subRoutes.holdings.title, routerLink: internalRoutes.home.subRoutes.holdings.routerLink }, @@ -97,11 +97,11 @@ export class GfHomePageComponent implements OnDestroy, OnInit { }); addIcons({ + albumsOutline, analyticsOutline, bookmarkOutline, newspaperOutline, - readerOutline, - walletOutline + readerOutline }); } diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts index ce99fbf77..6ee02bd8e 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts @@ -28,6 +28,7 @@ import { Subject, Subscription } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { GfCreateOrUpdateActivityDialogComponent } from './create-or-update-activity-dialog/create-or-update-activity-dialog.component'; +import { CreateOrUpdateActivityDialogParams } from './create-or-update-activity-dialog/interfaces/interfaces'; import { GfImportActivitiesDialogComponent } from './import-activities-dialog/import-activities-dialog.component'; import { ImportActivitiesDialogParams } from './import-activities-dialog/interfaces/interfaces'; @@ -245,11 +246,14 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { } public onImport() { - const dialogRef = this.dialog.open(GfImportActivitiesDialogComponent, { + const dialogRef = this.dialog.open< + GfImportActivitiesDialogComponent, + ImportActivitiesDialogParams + >(GfImportActivitiesDialogComponent, { data: { deviceType: this.deviceType, user: this.user - } as ImportActivitiesDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : undefined, width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); @@ -268,12 +272,15 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { } public onImportDividends() { - const dialogRef = this.dialog.open(GfImportActivitiesDialogComponent, { + const dialogRef = this.dialog.open< + GfImportActivitiesDialogComponent, + ImportActivitiesDialogParams + >(GfImportActivitiesDialogComponent, { data: { activityTypes: ['DIVIDEND'], deviceType: this.deviceType, user: this.user - } as ImportActivitiesDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : undefined, width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); @@ -306,18 +313,18 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { } public openUpdateActivityDialog(aActivity: Activity) { - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfCreateOrUpdateActivityDialogComponent, - { - data: { - activity: aActivity, - accounts: this.user?.accounts, - user: this.user - }, - height: this.deviceType === 'mobile' ? '98vh' : '80vh', - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + CreateOrUpdateActivityDialogParams + >(GfCreateOrUpdateActivityDialogComponent, { + data: { + activity: aActivity, + accounts: this.user?.accounts, + user: this.user + }, + height: this.deviceType === 'mobile' ? '98vh' : '80vh', + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() @@ -350,26 +357,26 @@ export class GfActivitiesPageComponent implements OnDestroy, OnInit { .subscribe((user) => { this.updateUser(user); - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfCreateOrUpdateActivityDialogComponent, - { - data: { - accounts: this.user?.accounts, - activity: { - ...aActivity, - accountId: aActivity?.accountId, - date: new Date(), - id: null, - fee: 0, - type: aActivity?.type ?? 'BUY', - unitPrice: null - }, - user: this.user + CreateOrUpdateActivityDialogParams + >(GfCreateOrUpdateActivityDialogComponent, { + data: { + accounts: this.user?.accounts, + activity: { + ...aActivity, + accountId: aActivity?.accountId, + date: new Date(), + id: null, + fee: 0, + type: aActivity?.type ?? 'BUY', + unitPrice: null }, - height: this.deviceType === 'mobile' ? '98vh' : '80vh', - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + user: this.user + }, + height: this.deviceType === 'mobile' ? '98vh' : '80vh', + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts index 60a39d361..cc454a66a 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/interfaces/interfaces.ts @@ -4,7 +4,6 @@ import { User } from '@ghostfolio/common/interfaces'; import { Account } from '@prisma/client'; export interface CreateOrUpdateActivityDialogParams { - accountId: string; accounts: Account[]; activity: Activity; user: User; diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts index a2131db88..051345e60 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/interfaces/interfaces.ts @@ -3,7 +3,7 @@ import { User } from '@ghostfolio/common/interfaces'; import { Type } from '@prisma/client'; export interface ImportActivitiesDialogParams { - activityTypes: Type[]; + activityTypes?: Type[]; deviceType: string; user: User; } diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index da909a78d..b4de51701 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -558,7 +558,10 @@ export class GfAllocationsPageComponent implements OnDestroy, OnInit { } private openAccountDetailDialog(aAccountId: string) { - const dialogRef = this.dialog.open(GfAccountDetailDialogComponent, { + const dialogRef = this.dialog.open< + GfAccountDetailDialogComponent, + AccountDetailDialogParams + >(GfAccountDetailDialogComponent, { autoFocus: false, data: { accountId: aAccountId, @@ -568,7 +571,7 @@ export class GfAllocationsPageComponent implements OnDestroy, OnInit { !this.hasImpersonationId && hasPermission(this.user?.permissions, permissions.createOrder) && !this.user?.settings?.isRestrictedView - } as AccountDetailDialogParams, + }, height: this.deviceType === 'mobile' ? '98vh' : '80vh', width: this.deviceType === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/pages/register/register-page.component.ts b/apps/client/src/app/pages/register/register-page.component.ts index eff4e308b..acf3c40eb 100644 --- a/apps/client/src/app/pages/register/register-page.component.ts +++ b/apps/client/src/app/pages/register/register-page.component.ts @@ -84,18 +84,18 @@ export class GfRegisterPageComponent implements OnDestroy, OnInit { } public openShowAccessTokenDialog() { - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfUserAccountRegistrationDialogComponent, - { - data: { - deviceType: this.deviceType, - needsToAcceptTermsOfService: this.hasPermissionForSubscription - } as UserAccountRegistrationDialogParams, - disableClose: true, - height: this.deviceType === 'mobile' ? '98vh' : undefined, - width: this.deviceType === 'mobile' ? '100vw' : '30rem' - } - ); + UserAccountRegistrationDialogParams + >(GfUserAccountRegistrationDialogComponent, { + data: { + deviceType: this.deviceType, + needsToAcceptTermsOfService: this.hasPermissionForSubscription + }, + disableClose: true, + height: this.deviceType === 'mobile' ? '98vh' : undefined, + width: this.deviceType === 'mobile' ? '100vw' : '30rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html index b65054bba..fa74cd084 100644 --- a/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html +++ b/apps/client/src/app/pages/resources/glossary/resources-glossary.component.html @@ -5,7 +5,7 @@
-

Buy and Hold

+

Buy and Hold

Buy and hold is a passive investment strategy where you buy assets and hold them for a long period regardless of fluctuations in the @@ -22,7 +22,7 @@
-

Deflation

+

Deflation

Deflation is a decrease of the general price level for goods and services in an economy over a period of time. @@ -38,7 +38,7 @@
-

Dollar-Cost Averaging (DCA)

+

Dollar-Cost Averaging (DCA)

Dollar-cost averaging is an investment strategy where you split the total amount to be invested across periodic purchases of a @@ -56,7 +56,7 @@
-

Financial Independence

+

Financial Independence

Financial independence is the status of having enough income, for example with a passive income like dividends, to cover your living @@ -73,7 +73,7 @@
-

FIRE

+

FIRE

FIRE is a movement that promotes saving and investing to achieve financial independence and early retirement. @@ -85,7 +85,7 @@
-

Inflation

+

Inflation

Inflation is an increase of the general price level for goods and services in an economy over a period of time. @@ -102,7 +102,7 @@ @if (hasPermissionForSubscription) {
-

Personal Finance Tools

+

Personal Finance Tools

Personal finance tools are software applications that help manage your money, track expenses, set budgets, monitor @@ -118,7 +118,7 @@ }
-

Stagflation

+

Stagflation

Stagflation describes a situation in which there is a stagnant economy with high unemployment and high inflation. @@ -134,7 +134,7 @@
-

Stealth Wealth

+

Stealth Wealth

Stealth wealth is a lifestyle choice where you don’t openly show off your wealth, but instead live quietly to maintain privacy and diff --git a/apps/client/src/app/pages/resources/guides/resources-guides.component.html b/apps/client/src/app/pages/resources/guides/resources-guides.component.html index 3bd8efec6..54b3d1f3e 100644 --- a/apps/client/src/app/pages/resources/guides/resources-guides.component.html +++ b/apps/client/src/app/pages/resources/guides/resources-guides.component.html @@ -5,7 +5,7 @@
-

Boringly Getting Rich

+

Boringly Getting Rich

The Boringly Getting Rich guide supports you to get started with investing. It introduces a strategy utilizing a broadly @@ -21,7 +21,7 @@
-

How do I get my finances in order?

+

How do I get my finances in order?

Before you can think of long-term investing, you have to get your finances in order. Learn how you can reach your financial goals diff --git a/apps/client/src/app/pages/resources/markets/resources-markets.component.html b/apps/client/src/app/pages/resources/markets/resources-markets.component.html index 74d4bb82b..ce780aedf 100644 --- a/apps/client/src/app/pages/resources/markets/resources-markets.component.html +++ b/apps/client/src/app/pages/resources/markets/resources-markets.component.html @@ -3,7 +3,7 @@
-

Crypto Coins Heatmap

+

Crypto Coins Heatmap

With the Crypto Coins Heatmap you can track the daily market movements of cryptocurrencies as a visual snapshot. @@ -17,7 +17,7 @@
-

Fear & Greed Index

+

Fear & Greed Index

The fear and greed index was developed by CNNMoney to measure the primary emotions (fear and greed) that influence how much @@ -32,7 +32,7 @@
-

Inflation Chart

+

Inflation Chart

Inflation Chart helps you find the intrinsic value of stock markets, stock prices, goods and services by adjusting them to the @@ -48,7 +48,7 @@
-

Stock Heatmap

+

Stock Heatmap

With the Stock Heatmap you can track the daily market movements of stocks as a visual snapshot. diff --git a/apps/client/src/app/pages/resources/overview/resources-overview.component.html b/apps/client/src/app/pages/resources/overview/resources-overview.component.html index 39d7c1e62..3a6f18d40 100644 --- a/apps/client/src/app/pages/resources/overview/resources-overview.component.html +++ b/apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -5,7 +5,7 @@
@for (item of overviewItems; track item) {
-

{{ item.title }}

+

{{ item.title }}

{{ item.description }}

Explore {{ item.title }} →
diff --git a/apps/client/src/app/pages/zen/zen-page.component.ts b/apps/client/src/app/pages/zen/zen-page.component.ts index 0224c13c7..5ed9fe09c 100644 --- a/apps/client/src/app/pages/zen/zen-page.component.ts +++ b/apps/client/src/app/pages/zen/zen-page.component.ts @@ -8,7 +8,7 @@ import { MatTabsModule } from '@angular/material/tabs'; import { RouterModule } from '@angular/router'; import { IonIcon } from '@ionic/angular/standalone'; import { addIcons } from 'ionicons'; -import { analyticsOutline, walletOutline } from 'ionicons/icons'; +import { albumsOutline, analyticsOutline } from 'ionicons/icons'; import { DeviceDetectorService } from 'ngx-device-detector'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @@ -43,7 +43,7 @@ export class GfZenPageComponent implements OnDestroy, OnInit { routerLink: internalRoutes.zen.routerLink }, { - iconName: 'wallet-outline', + iconName: 'albums-outline', label: internalRoutes.zen.subRoutes.holdings.title, routerLink: internalRoutes.zen.subRoutes.holdings.routerLink } @@ -54,7 +54,7 @@ export class GfZenPageComponent implements OnDestroy, OnInit { } }); - addIcons({ analyticsOutline, walletOutline }); + addIcons({ albumsOutline, analyticsOutline }); } public ngOnInit() { diff --git a/apps/client/src/app/services/user/user.service.ts b/apps/client/src/app/services/user/user.service.ts index f52a52975..bd9d7d04c 100644 --- a/apps/client/src/app/services/user/user.service.ts +++ b/apps/client/src/app/services/user/user.service.ts @@ -116,18 +116,18 @@ export class UserService extends ObservableStore { permissions.enableSubscriptionInterstitial ) ) { - const dialogRef = this.dialog.open( + const dialogRef = this.dialog.open< GfSubscriptionInterstitialDialogComponent, - { - autoFocus: false, - data: { - user - } as SubscriptionInterstitialDialogParams, - disableClose: true, - height: this.deviceType === 'mobile' ? '98vh' : '80vh', - width: this.deviceType === 'mobile' ? '100vw' : '50rem' - } - ); + SubscriptionInterstitialDialogParams + >(GfSubscriptionInterstitialDialogComponent, { + autoFocus: false, + data: { + user + }, + disableClose: true, + height: this.deviceType === 'mobile' ? '98vh' : '80vh', + width: this.deviceType === 'mobile' ? '100vw' : '50rem' + }); dialogRef .afterClosed() diff --git a/apps/client/src/assets/images/sponsors/logo-lambdatest.png b/apps/client/src/assets/images/sponsors/logo-lambdatest.png new file mode 100644 index 000000000..9e05b1cde Binary files /dev/null and b/apps/client/src/assets/images/sponsors/logo-lambdatest.png differ diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index d7e986436..7c676e092 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -38,7 +38,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -603,7 +603,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -639,7 +639,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -1387,7 +1387,7 @@ Està segur que vol eliminar aquesta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -1451,7 +1451,7 @@ Està segur que vol eliminar aquesta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -1659,11 +1659,11 @@ Oooh! El testimoni de seguretat és incorrecte. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2895,7 +2895,7 @@ Vaja, la transferència del saldo en efectiu ha fallat. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -5325,7 +5325,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -5333,7 +5333,7 @@ Exporta l’esborrany com a ICS libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -5341,7 +5341,7 @@ De veritat vols suprimir aquestes activitats? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -5349,7 +5349,7 @@ Realment vols suprimir aquesta activitat? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -6428,6 +6428,14 @@ 83 + + View Holding + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada Canada @@ -7247,7 +7255,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -7511,7 +7519,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8128,7 +8136,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 4d7820831..fa47cc6a6 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -242,7 +242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -278,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -718,7 +718,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -738,11 +738,11 @@ Ups! Falsches Sicherheits-Token. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2242,7 +2242,7 @@ Kopieren libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -2250,7 +2250,7 @@ Geplante Aktivität als ICS exportieren libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -2258,7 +2258,7 @@ Möchtest du diese Aktivität wirklich löschen? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -3750,7 +3750,7 @@ Möchtest du diese Aktivitäten wirklich löschen? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -3810,7 +3810,7 @@ Möchtest du diese Plattform wirklich löschen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -5376,7 +5376,7 @@ Möchtest du diesen Tag wirklich löschen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -5568,7 +5568,7 @@ Ups, der Cash-Bestand Transfer ist fehlgeschlagen. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -6452,6 +6452,14 @@ 83 + + View Holding + Position ansehen + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada Kanada @@ -7271,7 +7279,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -7535,7 +7543,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8128,7 +8136,7 @@ Möchtest du wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index 5c064d234..4c380b007 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -243,7 +243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -279,7 +279,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -703,7 +703,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -723,11 +723,11 @@ Vaya! Token de seguridad incorrecto. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2227,7 +2227,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -2235,7 +2235,7 @@ Exportar borrador como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -2243,7 +2243,7 @@ ¿Estás seguro de eliminar esta operación? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -3727,7 +3727,7 @@ ¿Realmente deseas eliminar estas actividades? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -3787,7 +3787,7 @@ ¿Realmente deseas eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -5353,7 +5353,7 @@ ¿Realmente deseas eliminar esta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -5545,7 +5545,7 @@ Oops, el saldo de efectivo no se ha transferido. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -6429,6 +6429,14 @@ 83 + + View Holding + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada Canadá @@ -7248,7 +7256,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -7512,7 +7520,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8129,7 +8137,7 @@ ¿Realmente deseas generar un nuevo token de seguridad? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index a616256d1..b25a87570 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -298,7 +298,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -334,7 +334,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -950,7 +950,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -970,11 +970,11 @@ Oups! Jeton de Sécurité Incorrect. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2702,7 +2702,7 @@ Dupliquer libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -2710,7 +2710,7 @@ Exporter Brouillon sous ICS libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -2718,7 +2718,7 @@ Voulez-vous vraiment supprimer cette activité ? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -3726,7 +3726,7 @@ Voulez-vous vraiment supprimer toutes vos activités ? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -3786,7 +3786,7 @@ Voulez-vous vraiment supprimer cette plateforme ? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -5352,7 +5352,7 @@ Confirmez la suppression de ce tag ? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -5544,7 +5544,7 @@ Oops, échec du transfert de la cash balance. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -6428,6 +6428,14 @@ 83 + + View Holding + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada Canada @@ -7247,7 +7255,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -7511,7 +7519,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8128,7 +8136,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index f65b225f4..f5c8f799c 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -243,7 +243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -279,7 +279,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -703,7 +703,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -723,11 +723,11 @@ Ops! Token di sicurezza errato. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2227,7 +2227,7 @@ Clona libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -2235,7 +2235,7 @@ Esporta la bozza come ICS libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -2243,7 +2243,7 @@ Vuoi davvero eliminare questa attività? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -3727,7 +3727,7 @@ Vuoi davvero eliminare tutte le tue attività? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -3787,7 +3787,7 @@ Vuoi davvero eliminare questa piattaforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -5353,7 +5353,7 @@ Sei sicuro di voler eliminare questo tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -5545,7 +5545,7 @@ Ops, il trasferimento del saldo di cassa è fallito. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -6429,6 +6429,14 @@ 83 + + View Holding + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada Canada @@ -7248,7 +7256,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -7512,7 +7520,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8129,7 +8137,7 @@ Vuoi davvero generare un nuovo token di sicurezza? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index adf4bd27b..1ec127b22 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -242,7 +242,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -278,7 +278,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -702,7 +702,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -722,11 +722,11 @@ Oeps! Onjuiste beveiligingstoken. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2226,7 +2226,7 @@ Kloon libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -2234,7 +2234,7 @@ Concept exporteren als ICS libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -2242,7 +2242,7 @@ Wil je deze activiteit echt verwijderen? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -3726,7 +3726,7 @@ Weet je zeker dat je alle activiteiten wilt verwijderen? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -3786,7 +3786,7 @@ Wil je dit platform echt verwijderen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -5352,7 +5352,7 @@ Weet u zetker dat u dit label wilt verwijderen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -5544,7 +5544,7 @@ Oeps, geldoverdracht is mislukt. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -6428,6 +6428,14 @@ 83 + + View Holding + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada Canada @@ -7247,7 +7255,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -7511,7 +7519,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8128,7 +8136,7 @@ Wilt u echt een nieuwe securitytoken genereren? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 378b0a81a..d8e342569 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -519,7 +519,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -555,7 +555,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -1207,7 +1207,7 @@ Czy naprawdę chcesz usunąć tę platformę? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -1271,7 +1271,7 @@ Czy naprawdę chcesz usunąć ten tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -1439,7 +1439,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1459,11 +1459,11 @@ Ups! Nieprawidłowy token bezpieczeństwa. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2563,7 +2563,7 @@ Ups, transfer salda nie powiódł się. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -3567,7 +3567,7 @@ Czy na pewno chcesz usunąć te aktywności? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -4844,7 +4844,7 @@ Sklonuj libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -4852,7 +4852,7 @@ Eksportuj Wersję Roboczą jako ICS libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -4860,7 +4860,7 @@ Czy na pewno chcesz usunąć tę działalność? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -6428,6 +6428,14 @@ 83 + + View Holding + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada Kanada @@ -7247,7 +7255,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -7511,7 +7519,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8128,7 +8136,7 @@ Czy na pewno chcesz wygenerować nowy token bezpieczeństwa? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 6a652b5c6..9280de1dd 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -298,7 +298,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -334,7 +334,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -822,7 +822,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -842,11 +842,11 @@ Oops! Token de Segurança Incorreto. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2602,7 +2602,7 @@ Clonar libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -2610,7 +2610,7 @@ Exportar Rascunho como ICS libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -2618,7 +2618,7 @@ Deseja realmente eliminar esta atividade? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -3726,7 +3726,7 @@ Deseja mesmo eliminar estas atividades? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -3786,7 +3786,7 @@ Deseja mesmo eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -5352,7 +5352,7 @@ Você realmente deseja excluir esta tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -5544,7 +5544,7 @@ Ops, a transferência do saldo em dinheiro falhou. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -6428,6 +6428,14 @@ 83 + + View Holding + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada Canadá @@ -7247,7 +7255,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -7511,7 +7519,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8128,7 +8136,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index d0dd4191d..b867b8da8 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -479,7 +479,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -515,7 +515,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -1119,7 +1119,7 @@ Bu platformu silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -1295,7 +1295,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1315,11 +1315,11 @@ Hay Allah! Güvenlik anahtarı yanlış. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -3071,7 +3071,7 @@ Tüm işlemlerinizi silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -4564,7 +4564,7 @@ Klonla libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -4572,7 +4572,7 @@ Taslakları ICS Olarak Dışa Aktar libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -4580,7 +4580,7 @@ TBu işlemi silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -5352,7 +5352,7 @@ Bu etiketi silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -5544,7 +5544,7 @@ Hay Allah, Nakit bakiyesi tranferi başarısız oldu. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -6428,6 +6428,14 @@ 83 + + View Holding + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada Kanada @@ -7247,7 +7255,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -7511,7 +7519,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8128,7 +8136,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 6698f404a..0305608c2 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -38,7 +38,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -631,7 +631,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -667,7 +667,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -1387,7 +1387,7 @@ Ви дійсно хочете видалити цю платформу? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -1571,7 +1571,7 @@ Ви дійсно хочете видалити цей тег? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -1775,11 +1775,11 @@ Упс! Неправильний Секретний Токен. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2647,7 +2647,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -3183,7 +3183,7 @@ Упс, перенесення балансу готівки не вдалося. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -6067,7 +6067,7 @@ Клонувати libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -6075,7 +6075,7 @@ Експортувати чернетку як ICS libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -6083,7 +6083,7 @@ Ви дійсно хочете видалити ці дії? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -6091,7 +6091,7 @@ Ви дійсно хочете видалити цю активність? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -7054,6 +7054,14 @@ 83 + + View Holding + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada Канада @@ -7511,7 +7519,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8128,7 +8136,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 1fb1b659d..34502dbc9 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -498,7 +498,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -533,7 +533,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -1143,7 +1143,7 @@ Do you really want to delete this platform? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -1200,7 +1200,7 @@ Do you really want to delete this tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -1351,7 +1351,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1370,11 +1370,11 @@ Oops! Incorrect Security Token. apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2375,7 +2375,7 @@ Oops, cash balance transfer has failed. apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -3290,7 +3290,7 @@ Do you really want to delete these activities? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -4459,21 +4459,21 @@ Clone libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 Export Draft as ICS libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 Do you really want to delete this activity? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -5807,6 +5807,13 @@ 99 + + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada @@ -6611,7 +6618,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -6845,7 +6852,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -7371,7 +7378,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index bb136c783..6d490fc0e 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -528,7 +528,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 443 + 451 @@ -564,7 +564,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 470 + 478 libs/ui/src/lib/benchmark/benchmark.component.html @@ -1216,7 +1216,7 @@ 您真的要删除这个平台吗? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 107 + 108 @@ -1280,7 +1280,7 @@ 您真的要删除此标签吗? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 103 + 104 @@ -1448,7 +1448,7 @@ apps/client/src/app/components/header/header.component.ts - 279 + 283 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1468,11 +1468,11 @@ 哎呀!安全令牌不正确。 apps/client/src/app/components/header/header.component.ts - 294 + 298 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 153 + 154 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -2572,7 +2572,7 @@ 糟糕,现金余额转账失败。 apps/client/src/app/pages/accounts/accounts-page.component.ts - 324 + 339 @@ -3576,7 +3576,7 @@ 您确定要删除这些活动吗? libs/ui/src/lib/activities-table/activities-table.component.ts - 270 + 276 @@ -4873,7 +4873,7 @@ 克隆 libs/ui/src/lib/activities-table/activities-table.component.html - 449 + 457 @@ -4881,7 +4881,7 @@ 将汇票导出为 ICS libs/ui/src/lib/activities-table/activities-table.component.html - 459 + 467 @@ -4889,7 +4889,7 @@ 您确实要删除此活动吗? libs/ui/src/lib/activities-table/activities-table.component.ts - 280 + 286 @@ -6429,6 +6429,14 @@ 83 + + View Holding + View Holding + + libs/ui/src/lib/activities-table/activities-table.component.html + 444 + + Canada 加拿大 @@ -7248,7 +7256,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 251 + 260 @@ -7512,7 +7520,7 @@ apps/client/src/app/components/user-account-access/user-account-access.component.ts - 169 + 170 @@ -8129,7 +8137,7 @@ 您真的想要生成一个新的安全令牌吗? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 174 + 175 diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index 843832e1a..e230c0bcd 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -437,6 +437,14 @@ class="no-max-width" xPosition="before" > + @if (canClickActivity(element)) { + + }