From e656277dd5990c5228ab8484dbe6c2ad14f2a4a3 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 13 Oct 2026 18:25:45 +0200 Subject: [PATCH 1/2] Feature/paste file in import activities dialog (#8152) * Add support to paste a file into drop area of import activities dialog * Update changelog --- CHANGELOG.md | 6 ++++++ .../app/directives/file-drop/file-drop.directive.ts | 10 ++++++++++ .../import-activities-dialog.component.ts | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8182f9d527..ebfc36204b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added support to paste a file in the import activities dialog + ## 3.85.0 - 2026-10-12 ### Added diff --git a/apps/client/src/app/directives/file-drop/file-drop.directive.ts b/apps/client/src/app/directives/file-drop/file-drop.directive.ts index b46357005c..ae772bb500 100644 --- a/apps/client/src/app/directives/file-drop/file-drop.directive.ts +++ b/apps/client/src/app/directives/file-drop/file-drop.directive.ts @@ -2,6 +2,7 @@ import { Directive, output } from '@angular/core'; @Directive({ host: { + '(document:paste)': 'onPaste($event)', '(dragenter)': 'onDragEnter($event)', '(dragover)': 'onDragOver($event)', '(drop)': 'onDrop($event)' @@ -31,4 +32,13 @@ export class GfFileDropDirective { this.filesDropped.emit(event.dataTransfer.files); } } + + public onPaste(event: ClipboardEvent) { + const files = event.clipboardData?.files; + + if (files?.length) { + event.preventDefault(); + this.filesDropped.emit(files); + } + } } diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts index 1d704c57c1..4ef31479e4 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts @@ -259,7 +259,7 @@ export class GfImportActivitiesDialogComponent { files: FileList; stepper: MatStepper; }) { - if (files.length === 0) { + if (files.length === 0 || this.importStep !== ImportStep.UPLOAD_FILE) { return; } From 3bdb73226e668b9ea750029aa260bd8476338905 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 13 Oct 2026 18:26:22 +0200 Subject: [PATCH 2/2] Task/improve wording of Ghostfolio AI option (#8150) Improve wording --- .../user-account-settings/user-account-settings.html | 2 +- .../import-activities-dialog.component.ts | 2 +- .../import-activities-dialog/import-activities-dialog.html | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/client/src/app/components/user-account-settings/user-account-settings.html b/apps/client/src/app/components/user-account-settings/user-account-settings.html index 6886baa46a..4fbe519a84 100644 --- a/apps/client/src/app/components/user-account-settings/user-account-settings.html +++ b/apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -295,7 +295,7 @@
Ghostfolio AI
- Data processing by a third-party AI provider + Powered by third-party AI providers
diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts index 4ef31479e4..43a28d8c54 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts @@ -123,7 +123,7 @@ export class GfImportActivitiesDialogComponent { protected details: any[] = []; protected dialogTitle = $localize`Import Activities`; protected errorMessages: string[] = []; - protected readonly ghostfolioAiTooltip = $localize`The content of your file will be processed by a third-party AI provider. Please remove any personal data before uploading.`; + protected readonly ghostfolioAiTooltip = $localize`The content of your file will be processed by third-party AI providers. Please remove any personal data before uploading.`; protected readonly hasPermissionToEnableGhostfolioAi = hasPermission( this.data.user?.permissions, diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html index b0b2aabf20..dea1acf5c6 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -134,9 +134,7 @@ [disabled]="isLoading" (change)="onGhostfolioAiChange($event)" > - Smart import with Ghostfolio AI + AI-assisted import