mirror of
https://github.com/bitwarden/browser
synced 2025-12-13 06:43:35 +00:00
[PM-10437][PM-10438] Copy toast message (#10366)
* add option to include a label for copy success message * add label text to copy success messages for all cipher types
This commit is contained in:
@@ -12,12 +12,14 @@ import { CopyClickDirective } from "./copy-click.directive";
|
||||
<button appCopyClick="no toast shown" #noToast></button>
|
||||
<button appCopyClick="info toast shown" showToast="info" #infoToast></button>
|
||||
<button appCopyClick="success toast shown" showToast #successToast></button>
|
||||
<button appCopyClick="toast with label" showToast valueLabel="Content" #toastWithLabel></button>
|
||||
`,
|
||||
})
|
||||
class TestCopyClickComponent {
|
||||
@ViewChild("noToast") noToastButton: ElementRef<HTMLButtonElement>;
|
||||
@ViewChild("infoToast") infoToastButton: ElementRef<HTMLButtonElement>;
|
||||
@ViewChild("successToast") successToastButton: ElementRef<HTMLButtonElement>;
|
||||
@ViewChild("toastWithLabel") toastWithLabelButton: ElementRef<HTMLButtonElement>;
|
||||
}
|
||||
|
||||
describe("CopyClickDirective", () => {
|
||||
@@ -32,7 +34,17 @@ describe("CopyClickDirective", () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [CopyClickDirective, TestCopyClickComponent],
|
||||
providers: [
|
||||
{ provide: I18nService, useValue: { t: (key: string) => key } },
|
||||
{
|
||||
provide: I18nService,
|
||||
useValue: {
|
||||
t: (key: string, ...rest: string[]) => {
|
||||
if (rest?.length) {
|
||||
return `${key} ${rest.join("")}`;
|
||||
}
|
||||
return key;
|
||||
},
|
||||
},
|
||||
},
|
||||
{ provide: PlatformUtilsService, useValue: { copyToClipboard } },
|
||||
{ provide: ToastService, useValue: { showToast } },
|
||||
],
|
||||
@@ -87,4 +99,16 @@ describe("CopyClickDirective", () => {
|
||||
variant: "info",
|
||||
});
|
||||
});
|
||||
|
||||
it('includes label in toast message when "copyLabel" is set', () => {
|
||||
const toastWithLabelButton = fixture.componentInstance.toastWithLabelButton.nativeElement;
|
||||
|
||||
toastWithLabelButton.click();
|
||||
|
||||
expect(showToast).toHaveBeenCalledWith({
|
||||
message: "valueCopied Content",
|
||||
title: null,
|
||||
variant: "success",
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -20,6 +20,12 @@ export class CopyClickDirective {
|
||||
|
||||
@Input("appCopyClick") valueToCopy = "";
|
||||
|
||||
/**
|
||||
* When set, the toast displayed will show `<valueLabel> copied`
|
||||
* instead of the default messaging.
|
||||
*/
|
||||
@Input() valueLabel: string;
|
||||
|
||||
/**
|
||||
* When set without a value, a success toast will be shown when the value is copied
|
||||
* @example
|
||||
@@ -47,10 +53,14 @@ export class CopyClickDirective {
|
||||
this.platformUtilsService.copyToClipboard(this.valueToCopy);
|
||||
|
||||
if (this._showToast) {
|
||||
const message = this.valueLabel
|
||||
? this.i18nService.t("valueCopied", this.valueLabel)
|
||||
: this.i18nService.t("copySuccessful");
|
||||
|
||||
this.toastService.showToast({
|
||||
variant: this.toastVariant,
|
||||
title: null,
|
||||
message: this.i18nService.t("copySuccessful"),
|
||||
message,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user