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