From 6e1a08d91a9eaf8ce622187b9ff02611e5681964 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 6 Jul 2026 08:41:28 +0200 Subject: [PATCH] Extend alert dialog with copy-to-clipboard functionality --- .../user-account-membership.component.ts | 7 ------- .../alert-dialog/alert-dialog.component.ts | 13 +++++++++++-- .../src/lib/notifications/interfaces/interfaces.ts | 1 - .../src/lib/notifications/notification.service.ts | 6 ++---- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts index 70248068d..1b23a6df9 100644 --- a/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts +++ b/apps/client/src/app/components/user-account-membership/user-account-membership.component.ts @@ -146,13 +146,6 @@ export class GfUserAccountMembershipComponent { ) .subscribe(({ apiKey }) => { this.notificationService.alert({ - copyFn: () => { - this.snackBar.open( - '✅ ' + $localize`${apiKey} has been copied to the clipboard`, - undefined, - { duration: ms('3 seconds') } - ); - }, copyValue: apiKey, discardLabel: $localize`Okay`, message: $localize`Set this API key in your self-hosted environment:`, diff --git a/libs/ui/src/lib/notifications/alert-dialog/alert-dialog.component.ts b/libs/ui/src/lib/notifications/alert-dialog/alert-dialog.component.ts index df91c6479..16fb4b47b 100644 --- a/libs/ui/src/lib/notifications/alert-dialog/alert-dialog.component.ts +++ b/libs/ui/src/lib/notifications/alert-dialog/alert-dialog.component.ts @@ -2,6 +2,8 @@ import { Clipboard } from '@angular/cdk/clipboard'; import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatDialogModule, MatDialogRef } from '@angular/material/dialog'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import ms from 'ms'; import { AlertDialogParams } from './interfaces/interfaces'; @@ -22,6 +24,7 @@ export class GfAlertDialogComponent { inject>(MatDialogRef); private readonly clipboard = inject(Clipboard); + private readonly snackBar = inject(MatSnackBar); public initialize({ copyValue, @@ -38,8 +41,14 @@ export class GfAlertDialogComponent { public onCopyToClipboard() { if (this.copyValue) { this.clipboard.copy(this.copyValue); - } - this.dialogRef.close('copy'); + this.snackBar.open( + '✅ ' + $localize`The value has been copied to the clipboard`, + undefined, + { + duration: ms('3 seconds') + } + ); + } } } diff --git a/libs/ui/src/lib/notifications/interfaces/interfaces.ts b/libs/ui/src/lib/notifications/interfaces/interfaces.ts index 326fd1c99..dcea7d53c 100644 --- a/libs/ui/src/lib/notifications/interfaces/interfaces.ts +++ b/libs/ui/src/lib/notifications/interfaces/interfaces.ts @@ -1,7 +1,6 @@ import { ConfirmationDialogType } from '@ghostfolio/common/enums'; export interface AlertParams { - copyFn?: () => void; copyValue?: string; discardFn?: () => void; discardLabel?: string; diff --git a/libs/ui/src/lib/notifications/notification.service.ts b/libs/ui/src/lib/notifications/notification.service.ts index 5b0c4587c..389f52180 100644 --- a/libs/ui/src/lib/notifications/notification.service.ts +++ b/libs/ui/src/lib/notifications/notification.service.ts @@ -37,10 +37,8 @@ export class NotificationService { title: aParams.title }); - return dialog.afterClosed().subscribe((result) => { - if (result === 'copy' && isFunction(aParams.copyFn)) { - aParams.copyFn(); - } else if (isFunction(aParams.discardFn)) { + return dialog.afterClosed().subscribe(() => { + if (isFunction(aParams.discardFn)) { aParams.discardFn(); } });