diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2ebc4f632b..a307d9b0a2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
+### Added
+
+- Added support to paste a file in the import activities dialog
+
### Fixed
- Fixed the missing platform icon in the preview step of the activities import
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/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..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,
@@ -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;
}
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