From 152399752ff6242f900c5fd0f37941b29b251f12 Mon Sep 17 00:00:00 2001 From: Aaron James Arterburn Date: Sun, 5 Feb 2023 12:15:24 -0800 Subject: [PATCH] OSMT-299: Added 'Copy Public URL' to manage RSD action bar. --- ...skill-action-bar-horizontal.component.html | 12 ++++++++++ ...ll-action-bar-horizontal.component.spec.ts | 2 ++ ...e-skill-action-bar-horizontal.component.ts | 1 + ...e-skill-action-bar-vertical.component.html | 12 ++++++++++ ...kill-action-bar-vertical.component.spec.ts | 22 +++++++++++++++++++ ...age-skill-action-bar-vertical.component.ts | 1 + .../manage-rich-skill-action-bar.component.ts | 11 ++++++++++ .../rich-skill-manage.component.html | 2 ++ 8 files changed, 63 insertions(+) diff --git a/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-horizontal/manage-skill-action-bar-horizontal.component.html b/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-horizontal/manage-skill-action-bar-horizontal.component.html index a6e69ff75..9b31eda34 100644 --- a/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-horizontal/manage-skill-action-bar-horizontal.component.html +++ b/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-horizontal/manage-skill-action-bar-horizontal.component.html @@ -78,6 +78,18 @@ + + + + diff --git a/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-vertical/manage-skill-action-bar-vertical.component.spec.ts b/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-vertical/manage-skill-action-bar-vertical.component.spec.ts index 2174b8830..59bf0add4 100644 --- a/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-vertical/manage-skill-action-bar-vertical.component.spec.ts +++ b/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-vertical/manage-skill-action-bar-vertical.component.spec.ts @@ -21,6 +21,7 @@ import any = jasmine.any ` @@ -28,6 +29,7 @@ import any = jasmine.any class TestHostComponent { mySkillUuid = "1234" mySkillName = "my skill name" + mySkillPublicUrl = "mockUrl" myArchived = false myPublished = false } @@ -56,6 +58,8 @@ let childComponent: ManageSkillActionBarVerticalComponent describe("ManageSkillActionBarVerticalComponent", () => { + let toastService: ToastService + beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ @@ -80,6 +84,8 @@ describe("ManageSkillActionBarVerticalComponent", () => { const appConfig = TestBed.inject(AppConfig) AppConfig.settings = appConfig.defaultConfig() // This avoids the race condition on reading the config's whitelabel.toolName + toastService = TestBed.inject(ToastService) + createComponent(TestHostComponent) })) @@ -155,6 +161,7 @@ describe("ManageSkillActionBarVerticalComponent", () => { childComponent.reloadSkill.pipe(first()).subscribe( () => { clicked = true; return } ) + spyOn(window, "confirm").and.returnValue(true) // Act @@ -163,4 +170,19 @@ describe("ManageSkillActionBarVerticalComponent", () => { // Assert expect(clicked).toBeTruthy() }) + + it("handleCopyPublicUrl should return", async (done) => { + // Arrange + let clipboardWriteTextSpy = spyOn(navigator.clipboard, "writeText").and.returnValue(Promise.resolve()) + let showToastSpy = spyOn(toastService, "showToast").and.callFake(() => { done() }) + + // Act + childComponent.handleCopyPublicURL() + + await clipboardWriteTextSpy + + // Assert + expect(clipboardWriteTextSpy).toHaveBeenCalledWith("mockUrl") + expect(showToastSpy).toHaveBeenCalledWith("Success!", "URL copied to clipboard") + }) }) diff --git a/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-vertical/manage-skill-action-bar-vertical.component.ts b/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-vertical/manage-skill-action-bar-vertical.component.ts index d58d7acc7..17749c36f 100644 --- a/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-vertical/manage-skill-action-bar-vertical.component.ts +++ b/ui/src/app/richskill/detail/rich-skill-manage/action-bar/action-bar-vertical/manage-skill-action-bar-vertical.component.ts @@ -15,6 +15,7 @@ export class ManageSkillActionBarVerticalComponent extends ManageRichSkillAction @Input() skillUuid = "" @Input() skillName = "" + @Input() skillPublicUrl = "" @Input() archived = undefined @Input() published = undefined diff --git a/ui/src/app/richskill/detail/rich-skill-manage/action-bar/manage-rich-skill-action-bar.component.ts b/ui/src/app/richskill/detail/rich-skill-manage/action-bar/manage-rich-skill-action-bar.component.ts index 896380b29..5541531c7 100644 --- a/ui/src/app/richskill/detail/rich-skill-manage/action-bar/manage-rich-skill-action-bar.component.ts +++ b/ui/src/app/richskill/detail/rich-skill-manage/action-bar/manage-rich-skill-action-bar.component.ts @@ -15,6 +15,7 @@ export abstract class ManageRichSkillActionBarComponent implements OnInit { abstract skillUuid: string abstract skillName: string + abstract skillPublicUrl: string abstract archived: string | undefined abstract published: string | undefined @@ -127,6 +128,16 @@ export abstract class ManageRichSkillActionBarComponent implements OnInit { } } + handleCopyPublicURL(): void { + navigator.clipboard.writeText(this.skillPublicUrl) + .then( + () => this.toastService.showToast("Success!", "URL copied to clipboard") + ) + .catch( + () => this.toastService.showToast("Error", "Could not copy to clipboard") + ) + } + setEnableFlags(): void { this.canSkillUpdate = this.authService.isEnabledByRoles(ButtonAction.SkillUpdate); this.canSkillCreate = this.authService.isEnabledByRoles(ButtonAction.SkillCreate); diff --git a/ui/src/app/richskill/detail/rich-skill-manage/rich-skill-manage.component.html b/ui/src/app/richskill/detail/rich-skill-manage/rich-skill-manage.component.html index 3662ebdbe..50d2f409f 100644 --- a/ui/src/app/richskill/detail/rich-skill-manage/rich-skill-manage.component.html +++ b/ui/src/app/richskill/detail/rich-skill-manage/rich-skill-manage.component.html @@ -29,6 +29,7 @@ Quick Links