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