From f9f048905d24b966efb1b027b8a9d82fafa43db4 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 13 Oct 2026 19:03:41 +0200
Subject: [PATCH 1/2] Task/improve labels of client of last request (#8149)
* Improve labels
* Update changelog
---
CHANGELOG.md | 4 ++++
.../app/components/admin-users/admin-users.component.ts | 2 ++
.../src/app/components/admin-users/admin-users.html | 2 +-
.../user-detail-dialog/user-detail-dialog.component.ts | 2 ++
.../user-detail-dialog/user-detail-dialog.html | 4 +++-
libs/ui/src/lib/i18n.ts | 9 ++++++++-
6 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d2c687cf74..5db73ad9f1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added support to paste a file in the import activities dialog
+### Changed
+
+- Improved the labels of the client of the last request in the users section of the admin control panel
+
### Fixed
- Fixed the link of the _Manage Asset Profile_ button in the holding detail dialog before the holding has loaded
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 04d5daa907..8e459b4a40 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
@@ -22,6 +22,7 @@ import {
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import { internalRoutes } from '@ghostfolio/common/routes/routes';
import { RequestClient } from '@ghostfolio/prisma/enums';
+import { translate } from '@ghostfolio/ui/i18n';
import { NotificationService } from '@ghostfolio/ui/notifications';
import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator';
import { AdminService, DataService } from '@ghostfolio/ui/services';
@@ -114,6 +115,7 @@ export class GfAdminUsersComponent implements OnInit {
internalRoutes.adminControl.subRoutes.users.routerLink;
protected totalItems = 0;
+ protected readonly translate = translate;
protected user: User;
private readonly deviceType = computed(
diff --git a/apps/client/src/app/components/admin-users/admin-users.html b/apps/client/src/app/components/admin-users/admin-users.html
index 3b8b09235b..f61006e0cc 100644
--- a/apps/client/src/app/components/admin-users/admin-users.html
+++ b/apps/client/src/app/components/admin-users/admin-users.html
@@ -197,7 +197,7 @@
} @else {
diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
index db8c94abcd..f34555efc2 100644
--- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
+++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts
@@ -6,6 +6,7 @@ import {
} from '@ghostfolio/common/helper';
import { AdminUserResponse } from '@ghostfolio/common/interfaces';
import type { Subscription } from '@ghostfolio/prisma/browser';
+import { translate } from '@ghostfolio/ui/i18n';
import { AdminService, DataService } from '@ghostfolio/ui/services';
import { GfValueComponent } from '@ghostfolio/ui/value';
@@ -70,6 +71,7 @@ export class GfUserDetailDialogComponent implements OnInit {
'expiresAt'
];
+ protected readonly translate = translate;
protected user: AdminUserResponse;
protected readonly data = inject(MAT_DIALOG_DATA);
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 599b5cde71..d52a7d5b51 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
@@ -174,7 +174,9 @@
i18n
size="medium"
[isLoading]="isLoading"
- [value]="user?.lastRequestClient || '-'"
+ [value]="
+ user?.lastRequestClient ? translate(user.lastRequestClient) : '-'
+ "
>Client
diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts
index 4040b45c57..5dcf17b2b3 100644
--- a/libs/ui/src/lib/i18n.ts
+++ b/libs/ui/src/lib/i18n.ts
@@ -3,6 +3,7 @@ import type {
ProductPlatform,
SectorName
} from '@ghostfolio/common/types';
+import { RequestClient } from '@ghostfolio/prisma/enums';
import '@angular/localize/init';
@@ -121,9 +122,15 @@ const locales = {
LINUX: 'Linux',
MACOS: 'macOS',
WEB: $localize`Web`,
- WINDOWS: 'Windows'
+ WINDOWS: 'Windows',
+
+ // Request clients (WEB is defined above under Product platforms)
+ API: 'API',
+ MCP: 'MCP',
+ SELF_HOSTING: $localize`Self-Hosting`
} satisfies Record &
Record &
+ Record &
Record &
Record;
From 63132a29fe3341806b7108a4c6fcb61c846cf9c9 Mon Sep 17 00:00:00 2001
From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>
Date: Tue, 13 Oct 2026 19:04:09 +0200
Subject: [PATCH 2/2] Bugfix/platform icon in preview of activities import
(#8148)
* Fix missing platform icon in preview of activities import
* Update changelog
---
CHANGELOG.md | 1 +
apps/api/src/app/import/import.service.spec.ts | 2 +-
apps/api/src/app/import/import.service.ts | 16 ++++++++++------
3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5db73ad9f1..85f1b0f60c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
+- Fixed the missing platform icon in the preview step of the activities import
- Fixed the link of the _Manage Asset Profile_ button in the holding detail dialog before the holding has loaded
## 3.85.0 - 2026-10-12
diff --git a/apps/api/src/app/import/import.service.spec.ts b/apps/api/src/app/import/import.service.spec.ts
index 992ed353f3..d6d41134a5 100644
--- a/apps/api/src/app/import/import.service.spec.ts
+++ b/apps/api/src/app/import/import.service.spec.ts
@@ -69,7 +69,7 @@ describe('ImportService', () => {
importService = new ImportService(
{
- getAccounts: jest.fn().mockResolvedValue([])
+ accounts: jest.fn().mockResolvedValue([])
} as unknown as AccountService,
{
createActivity,
diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts
index 7616cd927b..1dbba4e137 100644
--- a/apps/api/src/app/import/import.service.ts
+++ b/apps/api/src/app/import/import.service.ts
@@ -38,6 +38,7 @@ import {
} from '@ghostfolio/common/interfaces';
import { hasPermission, permissions } from '@ghostfolio/common/permissions';
import {
+ AccountWithPlatform,
AccountWithValue,
OrderWithAccount,
UserWithSettings
@@ -769,11 +770,14 @@ export class ImportService {
userId: user.id
});
- const accounts = (await this.accountService.getAccounts(user.id)).map(
- ({ id, name }) => {
- return { id, name };
- }
- );
+ const accounts: Pick[] = (
+ await this.accountService.accounts({
+ include: { platform: true },
+ where: { userId: user.id }
+ })
+ ).map(({ id, name, platform }) => {
+ return { id, name, platform };
+ });
if (isDryRun) {
accountsWithBalancesDto
@@ -888,7 +892,7 @@ export class ImportService {
let order:
| OrderWithAccount
| (Omit & {
- account?: { id: string; name: string };
+ account?: Pick;
tags?: { id: string; name: string }[];
});