diff --git a/CHANGELOG.md b/CHANGELOG.md
index 36c8c3c29..220b29036 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
+### Added
+
+- Added a close holding button to the holding detail dialog
+- 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 language localization for German (`de`)
+
### Fixed
- Ensured the locale is available in the settings dialog to customize the rule thresholds of the _X-ray_ page
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
+
+
+
+
+
## 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/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/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
index e907f4b03..2b96bda3b 100644
--- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
+++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
@@ -430,7 +430,10 @@ export class GfAdminMarketDataComponent
.subscribe((user) => {
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 2a7076207..e4b81845d 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
@@ -276,9 +276,9 @@ export class GfAdminUsersComponent implements OnDestroy, OnInit {
});
}
- private openUserDetailDialog(userId: string) {
+ private openUserDetailDialog(aUserId: string) {
const userData = this.dataSource.data.find(({ id }) => {
- return id === userId;
+ return id === aUserId;
});
if (!userData) {
@@ -286,13 +286,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'
});
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 d4c1c59c1..93005c11f 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
@@ -1,3 +1,4 @@
+import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { GfDialogFooterComponent } from '@ghostfolio/client/components/dialog-footer/dialog-footer.component';
import { GfDialogHeaderComponent } from '@ghostfolio/client/components/dialog-header/dialog-header.component';
@@ -57,6 +58,7 @@ import { isUUID } from 'class-validator';
import { format, isSameMonth, isToday, parseISO } from 'date-fns';
import { addIcons } from 'ionicons';
import {
+ arrowDownCircleOutline,
createOutline,
flagOutline,
readerOutline,
@@ -167,6 +169,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
private userService: UserService
) {
addIcons({
+ arrowDownCircleOutline,
createOutline,
flagOutline,
readerOutline,
@@ -557,6 +560,37 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
this.dialogRef.close();
}
+ public onCloseHolding() {
+ const today = new Date();
+
+ const activity: CreateOrderDto = {
+ accountId: this.accounts.length === 1 ? this.accounts[0].id : null,
+ comment: null,
+ currency: this.SymbolProfile.currency,
+ dataSource: this.SymbolProfile.dataSource,
+ date: today.toISOString(),
+ fee: 0,
+ quantity: this.quantity,
+ symbol: this.SymbolProfile.symbol,
+ tags: this.tags.map(({ id }) => {
+ return id;
+ }),
+ type: 'SELL',
+ unitPrice: this.marketPrice
+ };
+
+ this.dataService
+ .postOrder(activity)
+ .pipe(takeUntil(this.unsubscribeSubject))
+ .subscribe(() => {
+ this.router.navigate(
+ internalRoutes.portfolio.subRoutes.activities.routerLink
+ );
+
+ this.dialogRef.close();
+ });
+ }
+
public onExport() {
const activityIds = this.dataSource.data.map(({ id }) => {
return id;
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 298692303..b0e462a96 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
@@ -428,6 +428,29 @@
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/components/user-detail-dialog/interfaces/interfaces.ts b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts
index 81cf84d12..5f3f4b87a 100644
--- a/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts
+++ b/apps/client/src/app/components/user-detail-dialog/interfaces/interfaces.ts
@@ -2,6 +2,7 @@ import { AdminUsers } from '@ghostfolio/common/interfaces';
export interface UserDetailDialogParams {
deviceType: string;
+ hasPermissionForSubscription: boolean;
locale: string;
userData: AdminUsers['users'][0];
}
diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
index d90a6abf6..6bc468b59 100644
--- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
@@ -8,9 +8,9 @@
- User ID
+
+ User ID
+
Registration Date
+ Registration Date
+
+
+
+
+
+ Role
+
+
+ @if (data.hasPermissionForSubscription) {
+
+
+ Country
+
+
+ }
+
+
+
+
+
+ Accounts
+
+
+
+
+ Activities
+
+
+
+
+ @if (data.hasPermissionForSubscription) {
+
+
+
+ Engagement per Day
+
+
+
+
+ API Requests Today
+
+
+
+ }
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/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/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/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf
index c68b369d4..d7e986436 100644
--- a/apps/client/src/locales/messages.ca.xlf
+++ b/apps/client/src/locales/messages.ca.xlf
@@ -1366,6 +1366,14 @@
200
+
+ Activities
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Add Platform
Afegeix Plataforma
@@ -1739,7 +1747,7 @@
Informar d’un Problema amb les Dades
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -2409,10 +2417,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Granted Access
@@ -4451,6 +4455,14 @@
91
+
+ Close Holding
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
Rendiment absolut dels actius
@@ -5112,6 +5124,14 @@
210
+
+ User ID
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
Pla gratuït
@@ -6565,7 +6585,7 @@
Inactive
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6668,6 +6688,14 @@
11
+
+ Role
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
Yes
@@ -6679,6 +6707,10 @@
Accounts
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6972,6 +7004,14 @@
293
+
+ Engagement per Day
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
Guides
@@ -7110,6 +7150,14 @@
167
+
+ Country
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
API Key
@@ -7258,6 +7306,14 @@
234
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
Default Market Price
@@ -8128,7 +8184,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8152,7 +8208,7 @@
Average Unit Price
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8543,12 +8599,12 @@
128
-
+
Registration Date
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf
index 2db1d100f..4d7820831 100644
--- a/apps/client/src/locales/messages.de.xlf
+++ b/apps/client/src/locales/messages.de.xlf
@@ -633,6 +633,14 @@
200
+
+ Activities
+ Aktivitäten
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Do you really want to delete this user?
Möchtest du diesen Benutzer wirklich löschen?
@@ -982,7 +990,7 @@
Datenfehler melden
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -1280,10 +1288,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Granted Access
@@ -4313,6 +4317,14 @@
210
+
+ User ID
+ Benutzer ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
Kostenlose Nutzung
@@ -5771,6 +5783,14 @@
364
+
+ Close Holding
+ Position abschliessen
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
Absolute Anlage Performance
@@ -6589,7 +6609,7 @@
Inaktiv
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6692,6 +6712,14 @@
11
+
+ Role
+ Rolle
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
Ja
@@ -6703,6 +6731,10 @@
Accounts
Konten
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6996,6 +7028,14 @@
293
+
+ Engagement per Day
+ Engagement pro Tag
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
Ratgeber
@@ -7134,6 +7174,14 @@
167
+
+ Country
+ Land
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
API-Schlüssel
@@ -7282,6 +7330,14 @@
234
+
+ API Requests Today
+ Heutige API Anfragen
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
Standardmarktpreis
@@ -8128,7 +8184,7 @@
Anlageprofil verwalten
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8152,7 +8208,7 @@
Ø Preis pro Einheit
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8543,12 +8599,12 @@
128
-
+
Registration Date
Registrierungsdatum
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf
index 29746f597..5c064d234 100644
--- a/apps/client/src/locales/messages.es.xlf
+++ b/apps/client/src/locales/messages.es.xlf
@@ -618,6 +618,14 @@
200
+
+ Activities
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Do you really want to delete this user?
¿Estás seguro de eliminar este usuario?
@@ -967,7 +975,7 @@
Reporta un anomalía de los datos
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -1265,10 +1273,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Granted Access
@@ -4290,6 +4294,14 @@
210
+
+ User ID
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
Plan gratuito
@@ -5748,6 +5760,14 @@
364
+
+ Close Holding
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
Rendimiento absoluto de los activos
@@ -6566,7 +6586,7 @@
Inactiva
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6669,6 +6689,14 @@
11
+
+ Role
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
Sí
@@ -6680,6 +6708,10 @@
Accounts
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6973,6 +7005,14 @@
293
+
+ Engagement per Day
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
Guías
@@ -7111,6 +7151,14 @@
167
+
+ Country
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
Clave API
@@ -7259,6 +7307,14 @@
234
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
Precio de mercado por defecto
@@ -8129,7 +8185,7 @@
Gestionar perfil de activo
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8153,7 +8209,7 @@
Precio medio por unidad
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8544,12 +8600,12 @@
128
-
+
Registration Date
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf
index 9b40a3031..a616256d1 100644
--- a/apps/client/src/locales/messages.fr.xlf
+++ b/apps/client/src/locales/messages.fr.xlf
@@ -825,6 +825,14 @@
200
+
+ Activities
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Do you really want to delete this user?
Voulez-vous vraiment supprimer cet·te utilisateur·rice ?
@@ -1254,7 +1262,7 @@
Signaler une Erreur de Données
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -1612,10 +1620,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Granted Access
@@ -4289,6 +4293,14 @@
210
+
+ User ID
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
Plan gratuit
@@ -5747,6 +5759,14 @@
364
+
+ Close Holding
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
Performance des Actifs en valeur absolue
@@ -6565,7 +6585,7 @@
Inactif
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6668,6 +6688,14 @@
11
+
+ Role
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
Oui
@@ -6679,6 +6707,10 @@
Accounts
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6972,6 +7004,14 @@
293
+
+ Engagement per Day
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
Guides
@@ -7110,6 +7150,14 @@
167
+
+ Country
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
Clé API
@@ -7258,6 +7306,14 @@
234
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
Prix du marché par défaut
@@ -8128,7 +8184,7 @@
Gérer le profil d’actif
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8152,7 +8208,7 @@
Average Unit Price
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8543,12 +8599,12 @@
128
-
+
Registration Date
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf
index f720742c8..f65b225f4 100644
--- a/apps/client/src/locales/messages.it.xlf
+++ b/apps/client/src/locales/messages.it.xlf
@@ -618,6 +618,14 @@
200
+
+ Activities
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Do you really want to delete this user?
Vuoi davvero eliminare questo utente?
@@ -967,7 +975,7 @@
Segnala un’anomalia dei dati
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -1265,10 +1273,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Granted Access
@@ -4290,6 +4294,14 @@
210
+
+ User ID
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
Piano gratuito
@@ -5748,6 +5760,14 @@
364
+
+ Close Holding
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
Rendimento assoluto dell’Asset
@@ -6566,7 +6586,7 @@
Inattivo
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6669,6 +6689,14 @@
11
+
+ Role
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
Si
@@ -6680,6 +6708,10 @@
Accounts
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6973,6 +7005,14 @@
293
+
+ Engagement per Day
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
Guide
@@ -7111,6 +7151,14 @@
167
+
+ Country
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
API Key
@@ -7259,6 +7307,14 @@
234
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
Prezzo di mercato predefinito
@@ -8129,7 +8185,7 @@
Gestisci profilo risorsa
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8153,7 +8209,7 @@
Average Unit Price
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8544,12 +8600,12 @@
128
-
+
Registration Date
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf
index 869b932aa..adf4bd27b 100644
--- a/apps/client/src/locales/messages.nl.xlf
+++ b/apps/client/src/locales/messages.nl.xlf
@@ -617,6 +617,14 @@
200
+
+ Activities
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Do you really want to delete this user?
Wilt je deze gebruiker echt verwijderen?
@@ -966,7 +974,7 @@
Gegevensstoring melden
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -1264,10 +1272,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Granted Access
@@ -4289,6 +4293,14 @@
210
+
+ User ID
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
Gratis abonnement
@@ -5747,6 +5759,14 @@
364
+
+ Close Holding
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
Absolute Activaprestaties
@@ -6565,7 +6585,7 @@
Inactief
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6668,6 +6688,14 @@
11
+
+ Role
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
Ja
@@ -6679,6 +6707,10 @@
Accounts
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6972,6 +7004,14 @@
293
+
+ Engagement per Day
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
Gidsen
@@ -7110,6 +7150,14 @@
167
+
+ Country
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
API-sleutel
@@ -7258,6 +7306,14 @@
234
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
Standaard Marktprijs
@@ -8128,7 +8184,7 @@
Beheer activaprofiel
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8152,7 +8208,7 @@
Gemiddelde eenheidsprijs
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8543,12 +8599,12 @@
128
-
+
Registration Date
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf
index 87c485b25..378b0a81a 100644
--- a/apps/client/src/locales/messages.pl.xlf
+++ b/apps/client/src/locales/messages.pl.xlf
@@ -1166,6 +1166,14 @@
200
+
+ Activities
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Add Platform
Dodaj Platformę
@@ -1875,7 +1883,7 @@
Zgłoś Błąd Danych
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -2353,10 +2361,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Export Data
@@ -4643,6 +4647,14 @@
210
+
+ User ID
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
Plan Darmowy
@@ -5747,6 +5759,14 @@
364
+
+ Close Holding
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
Łączny wynik aktywów
@@ -6565,7 +6585,7 @@
Nieaktywny
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6668,6 +6688,14 @@
11
+
+ Role
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
Tak
@@ -6679,6 +6707,10 @@
Accounts
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6972,6 +7004,14 @@
293
+
+ Engagement per Day
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
Poradniki
@@ -7110,6 +7150,14 @@
167
+
+ Country
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
Klucz API
@@ -7258,6 +7306,14 @@
234
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
Domyślna cena rynkowa
@@ -8128,7 +8184,7 @@
Zarządzaj profilem aktywów
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8152,7 +8208,7 @@
Średnia cena jednostkowa
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8543,12 +8599,12 @@
128
-
+
Registration Date
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf
index 8d93b9ecb..6a652b5c6 100644
--- a/apps/client/src/locales/messages.pt.xlf
+++ b/apps/client/src/locales/messages.pt.xlf
@@ -697,6 +697,14 @@
200
+
+ Activities
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Do you really want to delete this user?
Deseja realmente excluir este utilizador?
@@ -1214,7 +1222,7 @@
Dados do Relatório com Problema
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -1608,10 +1616,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Granted Access
@@ -4289,6 +4293,14 @@
210
+
+ User ID
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
Plano gratuito
@@ -5747,6 +5759,14 @@
364
+
+ Close Holding
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
Desempenho absoluto de ativos
@@ -6565,7 +6585,7 @@
Inativo
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6668,6 +6688,14 @@
11
+
+ Role
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
Sim
@@ -6679,6 +6707,10 @@
Accounts
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6972,6 +7004,14 @@
293
+
+ Engagement per Day
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
Guias
@@ -7110,6 +7150,14 @@
167
+
+ Country
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
Chave de API
@@ -7258,6 +7306,14 @@
234
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
Preço de mercado padrão
@@ -8128,7 +8184,7 @@
Gerenciar perfil de ativos
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8152,7 +8208,7 @@
Preço médio unitário
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8543,12 +8599,12 @@
128
-
+
Registration Date
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf
index fd87792f9..d0dd4191d 100644
--- a/apps/client/src/locales/messages.tr.xlf
+++ b/apps/client/src/locales/messages.tr.xlf
@@ -1078,6 +1078,14 @@
200
+
+ Activities
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Add Platform
Platform Ekle
@@ -1731,7 +1739,7 @@
Rapor Veri Sorunu
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -4131,6 +4139,14 @@
210
+
+ User ID
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
Ücretsiz Plan
@@ -4470,10 +4486,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Export Data
@@ -5747,6 +5759,14 @@
364
+
+ Close Holding
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
Mutlak Varlık Performansı
@@ -6565,7 +6585,7 @@
Pasif
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6668,6 +6688,14 @@
11
+
+ Role
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
Evet
@@ -6679,6 +6707,10 @@
Accounts
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6972,6 +7004,14 @@
293
+
+ Engagement per Day
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
Kılavuzlar
@@ -7110,6 +7150,14 @@
167
+
+ Country
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
API Anahtarı
@@ -7258,6 +7306,14 @@
234
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
Varsayılan Piyasa Fiyatı
@@ -8128,7 +8184,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8152,7 +8208,7 @@
Average Unit Price
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8543,12 +8599,12 @@
128
-
+
Registration Date
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf
index 61c9be112..6698f404a 100644
--- a/apps/client/src/locales/messages.uk.xlf
+++ b/apps/client/src/locales/messages.uk.xlf
@@ -345,6 +345,10 @@
Accounts
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -1362,6 +1366,14 @@
200
+
+ Activities
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Add Platform
Додати платформу
@@ -1875,7 +1887,7 @@
Повідомити про збій даних
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -2625,10 +2637,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Me
@@ -4779,6 +4787,14 @@
91
+
+ Close Holding
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
Абсолютна прибутковість активів
@@ -4936,7 +4952,7 @@
Неактивний
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -5255,6 +5271,14 @@
293
+
+ Engagement per Day
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
Посібники
@@ -5786,6 +5810,14 @@
210
+
+ User ID
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
can be used anonymously
може використовуватися анонімно
@@ -6750,6 +6782,14 @@
33
+
+ Role
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
Так
@@ -7166,6 +7206,14 @@
110
+
+ Country
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
Ключ API
@@ -7258,6 +7306,14 @@
234
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
Default Market Price
@@ -8128,7 +8184,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8152,7 +8208,7 @@
Average Unit Price
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8543,12 +8599,12 @@
128
-
+
Registration Date
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf
index b9b3fb451..1fb1b659d 100644
--- a/apps/client/src/locales/messages.xlf
+++ b/apps/client/src/locales/messages.xlf
@@ -1106,6 +1106,13 @@
200
+
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Add Platform
@@ -1747,7 +1754,7 @@
Report Data Glitch
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -2181,10 +2188,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Export Data
@@ -4261,6 +4264,13 @@
210
+
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
@@ -5233,6 +5243,13 @@
193
+
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
@@ -6000,6 +6017,13 @@
9
+
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
@@ -6018,7 +6042,7 @@
Inactive
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6136,6 +6160,10 @@
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6361,6 +6389,13 @@
291
+
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
@@ -6444,6 +6479,13 @@
26
+
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
@@ -6600,6 +6642,13 @@
450
+
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
@@ -7358,7 +7407,7 @@
Manage Asset Profile
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -7379,7 +7428,7 @@
Average Unit Price
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -7723,11 +7772,11 @@
128
-
+
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf
index 90e239595..bb136c783 100644
--- a/apps/client/src/locales/messages.zh.xlf
+++ b/apps/client/src/locales/messages.zh.xlf
@@ -1175,6 +1175,14 @@
200
+
+ Activities
+ Activities
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 61
+
+
Add Platform
添加平台
@@ -1884,7 +1892,7 @@
报告数据故障
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 452
+ 450
@@ -2362,10 +2370,6 @@
apps/client/src/app/components/user-account-settings/user-account-settings.html
252
-
- apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 12
-
Export Data
@@ -4652,6 +4656,14 @@
210
+
+ User ID
+ User ID
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 12
+
+
Free Plan
免费计划
@@ -5732,6 +5744,14 @@
193
+
+ Close Holding
+ Close Holding
+
+ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
+ 441
+
+
Absolute Asset Performance
绝对资产回报
@@ -6566,7 +6586,7 @@
非活跃
apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html
- 87
+ 88
@@ -6669,6 +6689,14 @@
11
+
+ Role
+ Role
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 31
+
+
Yes
是
@@ -6680,6 +6708,10 @@
Accounts
Accounts
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 51
+
libs/ui/src/lib/assistant/assistant.html
84
@@ -6973,6 +7005,14 @@
293
+
+ Engagement per Day
+ Engagement per Day
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 76
+
+
Guides
指南
@@ -7111,6 +7151,14 @@
167
+
+ Country
+ Country
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 37
+
+
API Key
API 密钥
@@ -7259,6 +7307,14 @@
234
+
+ API Requests Today
+ API Requests Today
+
+ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
+ 86
+
+
Default Market Price
默认市场价格
@@ -8129,7 +8185,7 @@
管理资产概况
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
- 442
+ 465
@@ -8153,7 +8209,7 @@
平均单位价格
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
- 111
+ 113
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
@@ -8544,12 +8600,12 @@
128
-
+
Registration Date
Registration Date
apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html
- 22
+ 23
diff --git a/libs/ui/src/lib/benchmark/benchmark.component.ts b/libs/ui/src/lib/benchmark/benchmark.component.ts
index 3af9bc674..bb66acba8 100644
--- a/libs/ui/src/lib/benchmark/benchmark.component.ts
+++ b/libs/ui/src/lib/benchmark/benchmark.component.ts
@@ -155,14 +155,17 @@ export class GfBenchmarkComponent implements OnChanges, OnDestroy {
dataSource,
symbol
}: AssetProfileIdentifier) {
- const dialogRef = this.dialog.open(GfBenchmarkDetailDialogComponent, {
+ const dialogRef = this.dialog.open<
+ GfBenchmarkDetailDialogComponent,
+ BenchmarkDetailDialogParams
+ >(GfBenchmarkDetailDialogComponent, {
data: {
dataSource,
symbol,
colorScheme: this.user?.settings?.colorScheme,
deviceType: this.deviceType,
locale: this.locale
- } as BenchmarkDetailDialogParams,
+ },
height: this.deviceType === 'mobile' ? '98vh' : undefined,
width: this.deviceType === 'mobile' ? '100vw' : '50rem'
});
diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
index 7fbb1e621..002422c57 100644
--- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
+++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts
@@ -199,21 +199,21 @@ export class GfHistoricalMarketDataEditorComponent
}) {
const marketPrice = this.marketDataByMonth[yearMonth]?.[day]?.marketPrice;
- const dialogRef = this.dialog.open(
+ const dialogRef = this.dialog.open<
GfHistoricalMarketDataEditorDialogComponent,
- {
- data: {
- marketPrice,
- currency: this.currency,
- dataSource: this.dataSource,
- dateString: `${yearMonth}-${day}`,
- symbol: this.symbol,
- user: this.user
- } as HistoricalMarketDataEditorDialogParams,
- height: this.deviceType === 'mobile' ? '98vh' : '80vh',
- width: this.deviceType === 'mobile' ? '100vw' : '50rem'
- }
- );
+ HistoricalMarketDataEditorDialogParams
+ >(GfHistoricalMarketDataEditorDialogComponent, {
+ data: {
+ marketPrice,
+ currency: this.currency,
+ dataSource: this.dataSource,
+ dateString: `${yearMonth}-${day}`,
+ symbol: this.symbol,
+ user: this.user
+ },
+ height: this.deviceType === 'mobile' ? '98vh' : '80vh',
+ width: this.deviceType === 'mobile' ? '100vw' : '50rem'
+ });
dialogRef
.afterClosed()