From 7017c727979e406a7fadb991540892562c1aeee0 Mon Sep 17 00:00:00 2001 From: Jose Chavez Date: Wed, 5 Jul 2023 09:28:32 -0600 Subject: [PATCH 01/12] Starting working to add the skill import component --- ui/src/app/app.module.ts | 8 ++- .../import-rsd/import-rsd.component.spec.ts | 21 +++++++ .../import/import-rsd/import-rsd.component.ts | 27 +++++++++ .../skill-import/skill-import.component.html | 13 +++++ .../skill-import/skill-import.component.scss | 0 .../skill-import.component.spec.ts | 21 +++++++ .../skill-import/skill-import.component.ts | 57 +++++++++++++++++++ 7 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 ui/src/app/import/import-rsd/import-rsd.component.spec.ts create mode 100644 ui/src/app/import/import-rsd/import-rsd.component.ts create mode 100644 ui/src/app/navigation/skill-import/skill-import.component.html create mode 100644 ui/src/app/navigation/skill-import/skill-import.component.scss create mode 100644 ui/src/app/navigation/skill-import/skill-import.component.spec.ts create mode 100644 ui/src/app/navigation/skill-import/skill-import.component.ts diff --git a/ui/src/app/app.module.ts b/ui/src/app/app.module.ts index a70f67182..3a8becced 100644 --- a/ui/src/app/app.module.ts +++ b/ui/src/app/app.module.ts @@ -108,7 +108,9 @@ import { OsmtFormModule } from "./form/osmt-form.module" import { ConvertToCollectionComponent } from "./my-workspace/convert-to-collection/convert-to-collection.component" import { SizePaginationComponent } from "./table/skills-library-table/size-pagination/size-pagination.component" import {OsmtTableModule} from "./table/osmt-table.module" -import { getBaseApi } from "./api-versions" +import { getBaseApi } from "./api-versions"; +import { SkillImportComponent } from './navigation/skill-import/skill-import.component'; +import { ImportRsdComponent } from './import/import-rsd/import-rsd.component' import { InlineHeadingComponent } from './richskill/import/inline-heading/inline-heading.component' import { InlineErrorComponent } from "./richskill/import/inline-error/inline-error.component" @@ -219,6 +221,7 @@ export function initializeApp( FieldMappingTableComponent, FieldMappingSelectComponent, ImportPreviewTableComponent, + InlineHeadingComponent, NamedReferenceComponent, InlineErrorComponent, AuditLogComponent, @@ -229,7 +232,8 @@ export function initializeApp( CollectionPipe, ConvertToCollectionComponent, SizePaginationComponent, - InlineHeadingComponent, + SkillImportComponent, + ImportRsdComponent, ], imports: [ NgIdleKeepaliveModule.forRoot(), diff --git a/ui/src/app/import/import-rsd/import-rsd.component.spec.ts b/ui/src/app/import/import-rsd/import-rsd.component.spec.ts new file mode 100644 index 000000000..af8239faa --- /dev/null +++ b/ui/src/app/import/import-rsd/import-rsd.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ImportRsdComponent } from './import-rsd.component'; + +describe('ImportRsdComponent', () => { + let component: ImportRsdComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ImportRsdComponent] + }); + fixture = TestBed.createComponent(ImportRsdComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/ui/src/app/import/import-rsd/import-rsd.component.ts b/ui/src/app/import/import-rsd/import-rsd.component.ts new file mode 100644 index 000000000..c5471d754 --- /dev/null +++ b/ui/src/app/import/import-rsd/import-rsd.component.ts @@ -0,0 +1,27 @@ +import {Component, Inject, LOCALE_ID} from '@angular/core'; +import {RichSkillService} from "../../richskill/service/rich-skill.service"; +import {ToastService} from "../../toast/toast.service"; +import {CollectionService} from "../../collection/service/collection.service"; + +@Component({ + selector: 'app-import-rsd', + template: `` +}) +export class ImportRsdComponent { + + uuid = ""; + matchingQuery: string[] = [""]; + + taskUuidInProgress: string | undefined; + intervalHandle: number | undefined; + + constructor( + protected collectionService: CollectionService, + protected toastService: ToastService, + @Inject(LOCALE_ID) protected locale: string + ) { + } + + + +} diff --git a/ui/src/app/navigation/skill-import/skill-import.component.html b/ui/src/app/navigation/skill-import/skill-import.component.html new file mode 100644 index 000000000..192dbe70e --- /dev/null +++ b/ui/src/app/navigation/skill-import/skill-import.component.html @@ -0,0 +1,13 @@ +
+ + + +
diff --git a/ui/src/app/navigation/skill-import/skill-import.component.scss b/ui/src/app/navigation/skill-import/skill-import.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/navigation/skill-import/skill-import.component.spec.ts b/ui/src/app/navigation/skill-import/skill-import.component.spec.ts new file mode 100644 index 000000000..a7d3e68cd --- /dev/null +++ b/ui/src/app/navigation/skill-import/skill-import.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SkillImportComponent } from './skill-import.component'; + +describe('SkillImportComponent', () => { + let component: SkillImportComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [SkillImportComponent] + }); + fixture = TestBed.createComponent(SkillImportComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/ui/src/app/navigation/skill-import/skill-import.component.ts b/ui/src/app/navigation/skill-import/skill-import.component.ts new file mode 100644 index 000000000..c21b33c76 --- /dev/null +++ b/ui/src/app/navigation/skill-import/skill-import.component.ts @@ -0,0 +1,57 @@ +import { Component } from '@angular/core'; +import {ButtonAction} from "../../auth/auth-roles"; +import {ActivatedRoute} from "@angular/router"; +import {AuthService} from "../../auth/auth-service"; +import {CollectionService} from "../../collection/service/collection.service"; +import {TableActionDefinition} from "../../table/skills-library-table/has-action-definitions"; + +@Component({ + selector: 'app-skill-import', + templateUrl: './skill-import.component.html', + styleUrls: ['./skill-import.component.scss'] +}) +export class SkillImportComponent { + + constructor(protected collectionService: CollectionService, protected route: ActivatedRoute, protected authService: AuthService) { + this.setEnableFlags() + } + + canSkillUpdate: boolean = false + canSkillCreate: boolean = false + canSkillPublish: boolean = false + canCollectionUpdate: boolean = false + canCollectionCreate: boolean = false + canCollectionPublish: boolean = false + canCollectionSkillsUpdate: boolean = false + canExportLibrary: boolean = false + + setEnableFlags(): void { + this.canSkillUpdate = this.authService.isEnabledByRoles(ButtonAction.SkillUpdate); + this.canSkillCreate = this.authService.isEnabledByRoles(ButtonAction.SkillCreate); + this.canSkillPublish = this.authService.isEnabledByRoles(ButtonAction.SkillPublish); + this.canCollectionUpdate = this.authService.isEnabledByRoles(ButtonAction.CollectionUpdate); + this.canCollectionCreate = this.authService.isEnabledByRoles(ButtonAction.CollectionCreate); + this.canCollectionPublish = this.authService.isEnabledByRoles(ButtonAction.CollectionPublish); + this.canCollectionSkillsUpdate = this.authService.isEnabledByRoles(ButtonAction.CollectionSkillsUpdate); + this.canExportLibrary = this.authService.isEnabledByRoles(ButtonAction.LibraryExport); + } + + get action(): TableActionDefinition { + return new TableActionDefinition({ + menu: [ + { + label: "Download as CSV", + visible: () => true, + callback: () => this.exporter.exportLibraryCsv(), + }, + { + label: "Download as Excel Workbook", + visible: () => true, + callback: () => this.exporter.exportLibraryXlsx(), + } + ], + visible: () => true + }) + } + +} From 58837ecddff98c4c2a7cca87f6af542bc5d05a3e Mon Sep 17 00:00:00 2001 From: Jose Chavez Date: Mon, 10 Jul 2023 11:22:16 -0600 Subject: [PATCH 02/12] removing import rsd component, adding batch import logic and custom button --- ui/src/app/app.module.ts | 2 - .../import-rsd/import-rsd.component.spec.ts | 21 ------ .../import/import-rsd/import-rsd.component.ts | 27 ------- .../navigation/commoncontrols.component.html | 7 +- .../skill-import/skill-import.component.html | 4 +- .../skill-import/skill-import.component.scss | 4 + .../skill-import.component.spec.ts | 29 ++++++- .../skill-import/skill-import.component.ts | 35 +++++++-- .../import/BatchImportOptionsEnum.ts | 5 ++ .../import/batch-import.component.html | 3 + .../import/batch-import.component.spec.ts | 4 +- .../import/batch-import.component.ts | 75 ++++++++++++++++++- 12 files changed, 148 insertions(+), 68 deletions(-) delete mode 100644 ui/src/app/import/import-rsd/import-rsd.component.spec.ts delete mode 100644 ui/src/app/import/import-rsd/import-rsd.component.ts create mode 100644 ui/src/app/richskill/import/BatchImportOptionsEnum.ts diff --git a/ui/src/app/app.module.ts b/ui/src/app/app.module.ts index 3a8becced..6a51eb18f 100644 --- a/ui/src/app/app.module.ts +++ b/ui/src/app/app.module.ts @@ -110,7 +110,6 @@ import { SizePaginationComponent } from "./table/skills-library-table/size-pagin import {OsmtTableModule} from "./table/osmt-table.module" import { getBaseApi } from "./api-versions"; import { SkillImportComponent } from './navigation/skill-import/skill-import.component'; -import { ImportRsdComponent } from './import/import-rsd/import-rsd.component' import { InlineHeadingComponent } from './richskill/import/inline-heading/inline-heading.component' import { InlineErrorComponent } from "./richskill/import/inline-error/inline-error.component" @@ -233,7 +232,6 @@ export function initializeApp( ConvertToCollectionComponent, SizePaginationComponent, SkillImportComponent, - ImportRsdComponent, ], imports: [ NgIdleKeepaliveModule.forRoot(), diff --git a/ui/src/app/import/import-rsd/import-rsd.component.spec.ts b/ui/src/app/import/import-rsd/import-rsd.component.spec.ts deleted file mode 100644 index af8239faa..000000000 --- a/ui/src/app/import/import-rsd/import-rsd.component.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { ImportRsdComponent } from './import-rsd.component'; - -describe('ImportRsdComponent', () => { - let component: ImportRsdComponent; - let fixture: ComponentFixture; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [ImportRsdComponent] - }); - fixture = TestBed.createComponent(ImportRsdComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/ui/src/app/import/import-rsd/import-rsd.component.ts b/ui/src/app/import/import-rsd/import-rsd.component.ts deleted file mode 100644 index c5471d754..000000000 --- a/ui/src/app/import/import-rsd/import-rsd.component.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {Component, Inject, LOCALE_ID} from '@angular/core'; -import {RichSkillService} from "../../richskill/service/rich-skill.service"; -import {ToastService} from "../../toast/toast.service"; -import {CollectionService} from "../../collection/service/collection.service"; - -@Component({ - selector: 'app-import-rsd', - template: `` -}) -export class ImportRsdComponent { - - uuid = ""; - matchingQuery: string[] = [""]; - - taskUuidInProgress: string | undefined; - intervalHandle: number | undefined; - - constructor( - protected collectionService: CollectionService, - protected toastService: ToastService, - @Inject(LOCALE_ID) protected locale: string - ) { - } - - - -} diff --git a/ui/src/app/navigation/commoncontrols.component.html b/ui/src/app/navigation/commoncontrols.component.html index a1a8d90ef..529d9de5c 100644 --- a/ui/src/app/navigation/commoncontrols.component.html +++ b/ui/src/app/navigation/commoncontrols.component.html @@ -59,12 +59,7 @@ Create Collection - - - - - Batch Import RSDs - +
diff --git a/ui/src/app/navigation/skill-import/skill-import.component.html b/ui/src/app/navigation/skill-import/skill-import.component.html index 192dbe70e..c4d7f59b2 100644 --- a/ui/src/app/navigation/skill-import/skill-import.component.html +++ b/ui/src/app/navigation/skill-import/skill-import.component.html @@ -1,9 +1,9 @@
- { let component: SkillImportComponent; let fixture: ComponentFixture; + let activatedRoute: ActivatedRouteStubSpec + + beforeEach(() => { + activatedRoute = new ActivatedRouteStubSpec() + }) beforeEach(() => { TestBed.configureTestingModule({ - declarations: [SkillImportComponent] + declarations: [SkillImportComponent], + providers: [ + { provide: ActivatedRoute, useValue: activatedRoute }, + { provide: AuthService, useClass: AuthServiceStub }, + { provide: CollectionService, useClass: CollectionServiceStub } + ] }); fixture = TestBed.createComponent(SkillImportComponent); component = fixture.componentInstance; diff --git a/ui/src/app/navigation/skill-import/skill-import.component.ts b/ui/src/app/navigation/skill-import/skill-import.component.ts index c21b33c76..02eda01b4 100644 --- a/ui/src/app/navigation/skill-import/skill-import.component.ts +++ b/ui/src/app/navigation/skill-import/skill-import.component.ts @@ -1,18 +1,26 @@ import { Component } from '@angular/core'; import {ButtonAction} from "../../auth/auth-roles"; -import {ActivatedRoute} from "@angular/router"; +import {ActivatedRoute, Router} from "@angular/router"; import {AuthService} from "../../auth/auth-service"; import {CollectionService} from "../../collection/service/collection.service"; import {TableActionDefinition} from "../../table/skills-library-table/has-action-definitions"; +import {BatchImportOptionsEnum} from "../../richskill/import/BatchImportOptionsEnum"; @Component({ selector: 'app-skill-import', templateUrl: './skill-import.component.html', - styleUrls: ['./skill-import.component.scss'] + styleUrls: [ + '../../table/skills-library-table/action-bar-item.components.scss', + './skill-import.component.scss' + ] }) export class SkillImportComponent { - constructor(protected collectionService: CollectionService, protected route: ActivatedRoute, protected authService: AuthService) { + constructor(protected collectionService: CollectionService, + protected route: ActivatedRoute, + protected authService: AuthService, + protected router: Router + ) { this.setEnableFlags() } @@ -40,18 +48,31 @@ export class SkillImportComponent { return new TableActionDefinition({ menu: [ { - label: "Download as CSV", + label: "Import to Existing Collection", visible: () => true, - callback: () => this.exporter.exportLibraryCsv(), + callback: () => {this.router.navigate(["/skills/import"], + {queryParams:{to:BatchImportOptionsEnum.existing}}) + }, }, { - label: "Download as Excel Workbook", + label: "Import to Workspace", visible: () => true, - callback: () => this.exporter.exportLibraryXlsx(), + callback: () => { + this.router.navigate(["/skills/import"], + {queryParams: {to: BatchImportOptionsEnum.workspace}}) + }, + }, + { + label: "Import to New Collection", + visible: () => true, + callback: () => {this.router.navigate(["/skills/import"], + {queryParams: {to: BatchImportOptionsEnum.new}}) + }, } ], visible: () => true }) } + } diff --git a/ui/src/app/richskill/import/BatchImportOptionsEnum.ts b/ui/src/app/richskill/import/BatchImportOptionsEnum.ts new file mode 100644 index 000000000..7b7a216ef --- /dev/null +++ b/ui/src/app/richskill/import/BatchImportOptionsEnum.ts @@ -0,0 +1,5 @@ +export enum BatchImportOptionsEnum { + existing = "existing", + new = "new", + workspace = "workspace", +} diff --git a/ui/src/app/richskill/import/batch-import.component.html b/ui/src/app/richskill/import/batch-import.component.html index 22336dd73..e507ff66f 100644 --- a/ui/src/app/richskill/import/batch-import.component.html +++ b/ui/src/app/richskill/import/batch-import.component.html @@ -198,6 +198,9 @@

Import More RSDs + diff --git a/ui/src/app/richskill/import/batch-import.component.spec.ts b/ui/src/app/richskill/import/batch-import.component.spec.ts index 5c1c07a74..6a50e97e1 100644 --- a/ui/src/app/richskill/import/batch-import.component.spec.ts +++ b/ui/src/app/richskill/import/batch-import.component.spec.ts @@ -7,12 +7,13 @@ import { ActivatedRoute, Router } from "@angular/router" import { Papa, ParseResult } from "ngx-papaparse" import { ActivatedRouteStubSpec } from "test/util/activated-route-stub.spec" import { TestPage } from "test/util/test-page.spec" -import { EnvironmentServiceStub, RichSkillServiceStub } from "../../../../test/resource/mock-stubs" +import {CollectionServiceStub, EnvironmentServiceStub, RichSkillServiceStub} from "../../../../test/resource/mock-stubs" import { AppConfig } from "../../app.config" import { EnvironmentService } from "../../core/environment.service" import { ToastService } from "../../toast/toast.service" import { RichSkillService } from "../service/rich-skill.service" import { BatchImportComponent, ImportStep } from "./batch-import.component" +import {CollectionService} from "../../collection/service/collection.service"; class Page extends TestPage { @@ -75,6 +76,7 @@ describe("BatchImportComponent", () => { { provide: ActivatedRoute, useValue: activatedRoute }, { provide: Router, useValue: routerSpy }, { provide: RichSkillService, useClass: RichSkillServiceStub }, + { provide: CollectionService, useClass: CollectionServiceStub } ] }) .compileComponents() diff --git a/ui/src/app/richskill/import/batch-import.component.ts b/ui/src/app/richskill/import/batch-import.component.ts index d66018b23..af91cf2e8 100644 --- a/ui/src/app/richskill/import/batch-import.component.ts +++ b/ui/src/app/richskill/import/batch-import.component.ts @@ -17,6 +17,9 @@ import {forkJoin, Observable} from "rxjs" import {SvgHelper, SvgIcon} from "../../core/SvgHelper" import {Title} from "@angular/platform-browser"; import {AppConfig} from "../../app.config" +import {BatchImportOptionsEnum} from "./BatchImportOptionsEnum"; +import {ApiSearch, ApiSkillListUpdate} from "../service/rich-skill-search.service"; +import {CollectionService} from "../../collection/service/collection.service"; import { ApiSkillSummary } from "../ApiSkillSummary" @@ -127,6 +130,7 @@ export class BatchImportComponent extends QuickLinksHelper implements OnInit { previewSkills?: ApiSkillUpdate[] auditedSkills?: AuditedImportSkill[] importedSkills?: AuditedImportSkill[] + skillsToBeImported?: ApiSkill[] alignmentCount: number = 3 @@ -136,6 +140,7 @@ export class BatchImportComponent extends QuickLinksHelper implements OnInit { docIcon = SvgHelper.path(SvgIcon.DOC) isHover: boolean = false + to: string = "" get similarSkillCount(): number { return (this.similarSkills?.filter(it => it).length ?? 0) @@ -147,10 +152,12 @@ export class BatchImportComponent extends QuickLinksHelper implements OnInit { protected route: ActivatedRoute, protected location: Location, protected papa: Papa, - protected titleService: Title + protected titleService: Title, + protected collectionService: CollectionService ) { super() this.resetState() + this.route.queryParams.subscribe(params => this.to = params.to) } ngOnInit(): void { @@ -531,6 +538,7 @@ export class BatchImportComponent extends QuickLinksHelper implements OnInit { ).subscribe(results => { if (results) { this.hideStepLoader() + this.skillsToBeImported = results } }) @@ -539,5 +547,70 @@ export class BatchImportComponent extends QuickLinksHelper implements OnInit { handleSimilarityOk(importSimilar: boolean): void { this.importSimilarSkills = importSimilar } + + protected handleClickAddToWorkspace(): void { + let skillListUpdate = new ApiSkillListUpdate({ + add: new ApiSearch( + {uuids:this.skillsToBeImported?.map(skill => skill.uuid)} + ) + }) + this.toastService.showBlockingLoader() + this.collectionService.getWorkspace().subscribe(workspace => { + this.collectionService.updateSkillsWithResult(workspace.uuid, skillListUpdate, undefined).subscribe(result => { + if (result) { + const message = `You added ${result.modifiedCount} RSDs to the workspace.` + this.toastService.showToast("Success!", message) + this.toastService.hideBlockingLoader() + } + }) + }) + } + + protected handleAddToExistingCollection() { + this.router.navigate(["/collections/add-skills"], + {state:{selectedSkills: this.skillsToBeImported, totalCount:this.skillsToBeImported?.length}} + ) + } + + protected handleAddToANewCollection() { + this.router.navigate(["collections/create"]) + } + + protected getBatchImportAction() { + switch (this.to) { + case BatchImportOptionsEnum.existing: { + this.handleAddToExistingCollection() + break + } + case BatchImportOptionsEnum.new: { + this.handleAddToANewCollection() + break + } + case BatchImportOptionsEnum.workspace: { + this.handleClickAddToWorkspace() + break + } + default: { + break + } + } + } + + protected getImportOptionButtonLabel(): string { + switch (this.to) { + case BatchImportOptionsEnum.existing: { + return "Add to existing Collection" + } + case BatchImportOptionsEnum.new: { + return "Add to a new Collection" + } + case BatchImportOptionsEnum.workspace: { + return "Add to Workspace" + } + default: { + return "" + } + } + } } From e29022354d083588e333ffc6391f677b3428eb0c Mon Sep 17 00:00:00 2001 From: Jose Chavez Date: Tue, 11 Jul 2023 09:18:06 -0600 Subject: [PATCH 03/12] reverting maven.yml and api-tests.yml, adding batch import component for collection creation. --- ui/src/app/app-routing.module.ts | 13 ++++- ui/src/app/app.module.ts | 2 + .../batch-import-collection.component.scss | 0 .../batch-import-collection.component.spec.ts | 21 ++++++++ .../batch-import-collection.component.ts | 54 +++++++++++++++++++ .../skill-import.component.spec.ts | 12 +---- .../skill-import/skill-import.component.ts | 6 ++- .../import/batch-import.component.ts | 6 ++- 8 files changed, 99 insertions(+), 15 deletions(-) create mode 100644 ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.scss create mode 100644 ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.spec.ts create mode 100644 ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.ts diff --git a/ui/src/app/app-routing.module.ts b/ui/src/app/app-routing.module.ts index c2cc34cc0..22f03404c 100644 --- a/ui/src/app/app-routing.module.ts +++ b/ui/src/app/app-routing.module.ts @@ -25,7 +25,9 @@ import {BatchImportComponent} from "./richskill/import/batch-import.component" import { ActionByRoles, ButtonAction } from "./auth/auth-roles" import {MyWorkspaceComponent} from "./my-workspace/my-workspace.component" import {ConvertToCollectionComponent} from "./my-workspace/convert-to-collection/convert-to-collection.component" - +import { + BatchImportCollectionComponent +} from "./collection/create-collection/batch-import-collection/batch-import-collection.component"; const routes: Routes = [ { path: "", redirectTo: "/skills", pathMatch: "full" }, @@ -106,6 +108,14 @@ const routes: Routes = [ }, canDeactivate: [FormDirtyGuard] }, + {path: "collections/create/batch-import", + component: BatchImportCollectionComponent, + canActivate: [AuthGuard], + data: { + roles: ActionByRoles.get(ButtonAction.CollectionCreate) + }, + canDeactivate: [FormDirtyGuard] + }, // collection search results {path: "collections/search", component: CollectionSearchResultsComponent, @@ -149,6 +159,7 @@ const routes: Routes = [ roles: ActionByRoles.get(ButtonAction.CollectionSkillsUpdate) }, }, + // collections library {path: "collections", component: CollectionsLibraryComponent, diff --git a/ui/src/app/app.module.ts b/ui/src/app/app.module.ts index 6a51eb18f..0469e81b0 100644 --- a/ui/src/app/app.module.ts +++ b/ui/src/app/app.module.ts @@ -112,6 +112,7 @@ import { getBaseApi } from "./api-versions"; import { SkillImportComponent } from './navigation/skill-import/skill-import.component'; import { InlineHeadingComponent } from './richskill/import/inline-heading/inline-heading.component' import { InlineErrorComponent } from "./richskill/import/inline-error/inline-error.component" +import { BatchImportCollectionComponent } from './collection/create-collection/batch-import-collection/batch-import-collection.component'; export function initializeApp( appConfig: AppConfig, @@ -232,6 +233,7 @@ export function initializeApp( ConvertToCollectionComponent, SizePaginationComponent, SkillImportComponent, + BatchImportCollectionComponent, ], imports: [ NgIdleKeepaliveModule.forRoot(), diff --git a/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.scss b/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.spec.ts b/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.spec.ts new file mode 100644 index 000000000..6a3a2379e --- /dev/null +++ b/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BatchImportCollectionComponent } from './batch-import-collection.component'; + +describe('BatchImportCollectionComponent', () => { + let component: BatchImportCollectionComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [BatchImportCollectionComponent] + }); + fixture = TestBed.createComponent(BatchImportCollectionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.ts b/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.ts new file mode 100644 index 000000000..993c21f67 --- /dev/null +++ b/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.ts @@ -0,0 +1,54 @@ +import { Component } from '@angular/core'; +import { Title } from "@angular/platform-browser"; +import { Location } from "@angular/common"; +import { ActivatedRoute, Router } from "@angular/router"; +import { CollectionFormComponent } from "../collection-form.component"; +import { ExtrasSelectedSkillsState } from "../../add-skills-collection.component"; +import { ApiSearch, ApiSkillListUpdate } from "../../../richskill/service/rich-skill-search.service"; +import { CollectionService } from "../../service/collection.service"; +import { ToastService } from "../../../toast/toast.service"; + +@Component({ + selector: 'app-batch-import-collection', + templateUrl: "../collection-form.component.html" +}) +export class BatchImportCollectionComponent extends CollectionFormComponent { + + state?: ExtrasSelectedSkillsState + + constructor( + protected collectionService: CollectionService, + protected loc: Location, + protected router: Router, + protected route: ActivatedRoute, + protected toastService: ToastService, + protected titleService: Title + ) { + super(collectionService, loc, router, route, toastService, titleService) + this.state = this.router.getCurrentNavigation()?.extras.state as ExtrasSelectedSkillsState + } + + onSubmit(): void { + console.log(this.state?.selectedSkills?.length) + const updateObject = this.updateObject() + this.collectionSaved = this.collectionService.createCollection(updateObject) + const update = new ApiSkillListUpdate({ + add: new ApiSearch({uuids: this.state?.selectedSkills?.map(it => it.uuid) }) + }) + + if (this.collectionSaved) { + this.collectionSaved.subscribe(collection => { + this.collectionForm.markAsPristine() + this.collectionService.updateSkillsWithResult(collection.uuid, update, undefined).subscribe(result => { + if (result) { + const message = `You added ${result.modifiedCount} RSDs to the collection.` + this.toastService.showToast("Success!", message) + this.toastService.hideBlockingLoader() + this.router.navigate([`/collections/${collection.uuid}/manage`]) + } + }) + }) + } + } + +} diff --git a/ui/src/app/navigation/skill-import/skill-import.component.spec.ts b/ui/src/app/navigation/skill-import/skill-import.component.spec.ts index 3f905c67b..d66e181ad 100644 --- a/ui/src/app/navigation/skill-import/skill-import.component.spec.ts +++ b/ui/src/app/navigation/skill-import/skill-import.component.spec.ts @@ -1,20 +1,10 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; - import { SkillImportComponent } from './skill-import.component'; -import {AppConfig} from "../../app.config"; -import {Location} from "@angular/common"; -import {ToastService} from "../../toast/toast.service"; -import {Papa} from "ngx-papaparse"; -import {Title} from "@angular/platform-browser"; -import {EnvironmentService} from "../../core/environment.service"; import { AuthServiceStub, CollectionServiceStub, - EnvironmentServiceStub, - RichSkillServiceStub } from "@test/resource/mock-stubs"; -import {ActivatedRoute, Router} from "@angular/router"; -import {RichSkillService} from "../../richskill/service/rich-skill.service"; +import {ActivatedRoute} from "@angular/router"; import {CollectionService} from "../../collection/service/collection.service"; import {ActivatedRouteStubSpec} from "@test/util/activated-route-stub.spec"; import {AuthService} from "../../auth/auth-service"; diff --git a/ui/src/app/navigation/skill-import/skill-import.component.ts b/ui/src/app/navigation/skill-import/skill-import.component.ts index 02eda01b4..ce0453713 100644 --- a/ui/src/app/navigation/skill-import/skill-import.component.ts +++ b/ui/src/app/navigation/skill-import/skill-import.component.ts @@ -50,7 +50,8 @@ export class SkillImportComponent { { label: "Import to Existing Collection", visible: () => true, - callback: () => {this.router.navigate(["/skills/import"], + callback: () => { + this.router.navigate(["/skills/import"], {queryParams:{to:BatchImportOptionsEnum.existing}}) }, }, @@ -65,7 +66,8 @@ export class SkillImportComponent { { label: "Import to New Collection", visible: () => true, - callback: () => {this.router.navigate(["/skills/import"], + callback: () => { + this.router.navigate(["/skills/import"], {queryParams: {to: BatchImportOptionsEnum.new}}) }, } diff --git a/ui/src/app/richskill/import/batch-import.component.ts b/ui/src/app/richskill/import/batch-import.component.ts index af91cf2e8..9ebcc4222 100644 --- a/ui/src/app/richskill/import/batch-import.component.ts +++ b/ui/src/app/richskill/import/batch-import.component.ts @@ -573,7 +573,11 @@ export class BatchImportComponent extends QuickLinksHelper implements OnInit { } protected handleAddToANewCollection() { - this.router.navigate(["collections/create"]) + this.router.navigate(["/collections/create/batch-import"], + {state: {selectedSkills: this.skillsToBeImported, totalCount: this.skillsToBeImported?.length}} + + ) + console.log(this.skillsToBeImported?.length) } protected getBatchImportAction() { From 45751ee12475440cd278e394d5e57ed09710eacd Mon Sep 17 00:00:00 2001 From: Jose Chavez Date: Tue, 11 Jul 2023 21:19:31 -0600 Subject: [PATCH 04/12] adding some unit testing --- .../batch-import-collection.component.scss | 0 .../batch-import-collection.component.spec.ts | 90 ++++++++++++++++--- .../skill-import.component.spec.ts | 12 ++- .../skill-import/skill-import.component.ts | 16 ++-- .../import/batch-import.component.spec.ts | 14 ++- .../import/batch-import.component.ts | 2 +- 6 files changed, 102 insertions(+), 32 deletions(-) delete mode 100644 ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.scss diff --git a/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.scss b/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.spec.ts b/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.spec.ts index 6a3a2379e..c232e85e8 100644 --- a/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.spec.ts +++ b/ui/src/app/collection/create-collection/batch-import-collection/batch-import-collection.component.spec.ts @@ -1,21 +1,83 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; +import { ActivatedRoute, Router } from "@angular/router"; +import { ActivatedRouteStubSpec } from "@test/util/activated-route-stub.spec"; +import { Type } from "@angular/core"; +import { RouterTestingModule } from "@angular/router/testing"; +import { HttpClientTestingModule } from "@angular/common/http/testing"; +import { Location } from "@angular/common"; +import { Title } from "@angular/platform-browser"; import { BatchImportCollectionComponent } from './batch-import-collection.component'; +import { AppConfig } from "../../../app.config"; +import { ToastService } from "../../../toast/toast.service"; +import { EnvironmentService } from "../../../core/environment.service"; +import { CollectionServiceStub, EnvironmentServiceStub, RouterStub } from "@test/resource/mock-stubs"; +import { CollectionService } from "../../service/collection.service"; + + +let activatedRoute: ActivatedRouteStubSpec +let component: BatchImportCollectionComponent +let fixture: ComponentFixture + +export function createComponent(T: Type): Promise { + fixture = TestBed.createComponent(T) + component = fixture.componentInstance + + // 1st change detection triggers ngOnInit which gets a hero + fixture.detectChanges() + + return fixture.whenStable().then(() => { + // 2nd change detection displays the async-fetched hero + fixture.detectChanges() + }) +} describe('BatchImportCollectionComponent', () => { - let component: BatchImportCollectionComponent; + beforeEach(() => { + activatedRoute = new ActivatedRouteStubSpec() + }) + let fixture: ComponentFixture; - beforeEach(() => { + beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [BatchImportCollectionComponent] - }); - fixture = TestBed.createComponent(BatchImportCollectionComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); + declarations: [BatchImportCollectionComponent], + imports: [ + RouterTestingModule, + HttpClientTestingModule + ], + providers: [ + AppConfig, + Location, + Title, + ToastService, + { provide: EnvironmentService, useClass: EnvironmentServiceStub }, + { provide: CollectionService, useClass: CollectionServiceStub }, + { provide: ActivatedRoute, useValue: activatedRoute }, + { provide: Router, useClass: RouterStub }, + ] + }) + .compileComponents() + + const appConfig = TestBed.inject(AppConfig) + AppConfig.settings = appConfig.defaultConfig() + + const environmentService = TestBed.inject(EnvironmentService) + environmentService.environment.editableAuthor = true + AppConfig.settings.editableAuthor = true // Doubly sure + + activatedRoute.setParams({ uuid: "uuid1" }) + createComponent(BatchImportCollectionComponent) + })); + + it("should be created", () => { + expect(component).toBeTruthy() + }) + + it("nameLabel should return", () => { + component.collectionUuid = "" + expect(component.nameLabel).toEqual("New Collection Name") + + component.collectionUuid = "uuid" + expect(component.nameLabel).toEqual("Collection Name") + }) }); diff --git a/ui/src/app/navigation/skill-import/skill-import.component.spec.ts b/ui/src/app/navigation/skill-import/skill-import.component.spec.ts index d66e181ad..c7b99d8be 100644 --- a/ui/src/app/navigation/skill-import/skill-import.component.spec.ts +++ b/ui/src/app/navigation/skill-import/skill-import.component.spec.ts @@ -1,13 +1,13 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ActivatedRoute } from "@angular/router"; +import { ActivatedRouteStubSpec } from "@test/util/activated-route-stub.spec"; import { SkillImportComponent } from './skill-import.component'; import { AuthServiceStub, CollectionServiceStub, } from "@test/resource/mock-stubs"; -import {ActivatedRoute} from "@angular/router"; -import {CollectionService} from "../../collection/service/collection.service"; -import {ActivatedRouteStubSpec} from "@test/util/activated-route-stub.spec"; -import {AuthService} from "../../auth/auth-service"; +import { CollectionService } from "../../collection/service/collection.service"; +import { AuthService } from "../../auth/auth-service"; describe('SkillImportComponent', () => { let component: SkillImportComponent; @@ -35,4 +35,8 @@ describe('SkillImportComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + it("actions definitions count should be correct", () => { + expect(component.action.menu?.length).toEqual(3) + }) }); diff --git a/ui/src/app/navigation/skill-import/skill-import.component.ts b/ui/src/app/navigation/skill-import/skill-import.component.ts index ce0453713..c14b50111 100644 --- a/ui/src/app/navigation/skill-import/skill-import.component.ts +++ b/ui/src/app/navigation/skill-import/skill-import.component.ts @@ -1,10 +1,10 @@ import { Component } from '@angular/core'; -import {ButtonAction} from "../../auth/auth-roles"; -import {ActivatedRoute, Router} from "@angular/router"; -import {AuthService} from "../../auth/auth-service"; -import {CollectionService} from "../../collection/service/collection.service"; -import {TableActionDefinition} from "../../table/skills-library-table/has-action-definitions"; -import {BatchImportOptionsEnum} from "../../richskill/import/BatchImportOptionsEnum"; +import { ActivatedRoute, Router } from "@angular/router"; +import { ButtonAction } from "../../auth/auth-roles"; +import { AuthService } from "../../auth/auth-service"; +import { CollectionService } from "../../collection/service/collection.service"; +import { TableActionDefinition } from "../../table/skills-library-table/has-action-definitions"; +import { BatchImportOptionsEnum } from "../../richskill/import/BatchImportOptionsEnum"; @Component({ selector: 'app-skill-import', @@ -31,7 +31,6 @@ export class SkillImportComponent { canCollectionCreate: boolean = false canCollectionPublish: boolean = false canCollectionSkillsUpdate: boolean = false - canExportLibrary: boolean = false setEnableFlags(): void { this.canSkillUpdate = this.authService.isEnabledByRoles(ButtonAction.SkillUpdate); @@ -41,7 +40,6 @@ export class SkillImportComponent { this.canCollectionCreate = this.authService.isEnabledByRoles(ButtonAction.CollectionCreate); this.canCollectionPublish = this.authService.isEnabledByRoles(ButtonAction.CollectionPublish); this.canCollectionSkillsUpdate = this.authService.isEnabledByRoles(ButtonAction.CollectionSkillsUpdate); - this.canExportLibrary = this.authService.isEnabledByRoles(ButtonAction.LibraryExport); } get action(): TableActionDefinition { @@ -75,6 +73,4 @@ export class SkillImportComponent { visible: () => true }) } - - } diff --git a/ui/src/app/richskill/import/batch-import.component.spec.ts b/ui/src/app/richskill/import/batch-import.component.spec.ts index 6a50e97e1..6c1938b4a 100644 --- a/ui/src/app/richskill/import/batch-import.component.spec.ts +++ b/ui/src/app/richskill/import/batch-import.component.spec.ts @@ -13,7 +13,8 @@ import { EnvironmentService } from "../../core/environment.service" import { ToastService } from "../../toast/toast.service" import { RichSkillService } from "../service/rich-skill.service" import { BatchImportComponent, ImportStep } from "./batch-import.component" -import {CollectionService} from "../../collection/service/collection.service"; +import { CollectionService } from "../../collection/service/collection.service"; +import { BatchImportOptionsEnum } from "./BatchImportOptionsEnum"; class Page extends TestPage { @@ -44,13 +45,11 @@ export function createComponent(T: Type): Promise { }) } - let activatedRoute: ActivatedRouteStubSpec let component: BatchImportComponent let fixture: ComponentFixture let page: Page - describe("BatchImportComponent", () => { beforeEach(() => { activatedRoute = new ActivatedRouteStubSpec() @@ -320,6 +319,15 @@ describe("BatchImportComponent", () => { // Assert expect(component.importSimilarSkills).toBeFalse() }) + + it("getImportOptionButtonLabel() should return correct values", () => { + component.to = BatchImportOptionsEnum.new + expect(component.getImportOptionButtonLabel()).toEqual("Add to a new Collection") + component.to = BatchImportOptionsEnum.workspace + expect(component.getImportOptionButtonLabel()).toEqual("Add to Workspace") + component.to = BatchImportOptionsEnum.existing + expect(component.getImportOptionButtonLabel()).toEqual("Add to existing Collection") + }) }) diff --git a/ui/src/app/richskill/import/batch-import.component.ts b/ui/src/app/richskill/import/batch-import.component.ts index 9ebcc4222..67a8e7dda 100644 --- a/ui/src/app/richskill/import/batch-import.component.ts +++ b/ui/src/app/richskill/import/batch-import.component.ts @@ -600,7 +600,7 @@ export class BatchImportComponent extends QuickLinksHelper implements OnInit { } } - protected getImportOptionButtonLabel(): string { + getImportOptionButtonLabel(): string { switch (this.to) { case BatchImportOptionsEnum.existing: { return "Add to existing Collection" From 7b10b1c9f83bb5a070a625a89dfc06d949761cf3 Mon Sep 17 00:00:00 2001 From: Jose Chavez Date: Thu, 13 Jul 2023 10:54:27 -0600 Subject: [PATCH 05/12] removing unnecessary skill import component, adding control to select import target in batch import parent --- ui/src/app/app.module.ts | 5 +- .../navigation/commoncontrols.component.html | 7 +- .../skill-import/skill-import.component.html | 13 ---- .../skill-import/skill-import.component.scss | 4 - .../skill-import.component.spec.ts | 42 ---------- .../skill-import/skill-import.component.ts | 76 ------------------- .../import/batch-import.component.html | 5 +- .../import/batch-import.component.spec.ts | 6 +- .../import/batch-import.component.ts | 21 +++-- .../import/field-mapping-table.component.ts | 44 ++++++++++- 10 files changed, 74 insertions(+), 149 deletions(-) delete mode 100644 ui/src/app/navigation/skill-import/skill-import.component.html delete mode 100644 ui/src/app/navigation/skill-import/skill-import.component.scss delete mode 100644 ui/src/app/navigation/skill-import/skill-import.component.spec.ts delete mode 100644 ui/src/app/navigation/skill-import/skill-import.component.ts diff --git a/ui/src/app/app.module.ts b/ui/src/app/app.module.ts index 0469e81b0..8b27056c8 100644 --- a/ui/src/app/app.module.ts +++ b/ui/src/app/app.module.ts @@ -84,7 +84,7 @@ import {PublishCollectionComponent} from "./collection/detail/publish-collection import {BlockingLoaderComponent} from "./core/blocking-loader.component" import {CollectionSkillSearchComponent} from "./collection/collection-skill-search.component" import {BatchImportComponent} from "./richskill/import/batch-import.component" -import {FieldMappingSelectComponent, FieldMappingTableComponent} from "./richskill/import/field-mapping-table.component" +import {FieldMappingSelectComponent, FieldMappingTableComponent, BatchImportDestinationSelectComponent} from "./richskill/import/field-mapping-table.component" import { ImportPreviewTableComponent, NamedReferenceComponent @@ -109,7 +109,6 @@ import { ConvertToCollectionComponent } from "./my-workspace/convert-to-collecti import { SizePaginationComponent } from "./table/skills-library-table/size-pagination/size-pagination.component" import {OsmtTableModule} from "./table/osmt-table.module" import { getBaseApi } from "./api-versions"; -import { SkillImportComponent } from './navigation/skill-import/skill-import.component'; import { InlineHeadingComponent } from './richskill/import/inline-heading/inline-heading.component' import { InlineErrorComponent } from "./richskill/import/inline-error/inline-error.component" import { BatchImportCollectionComponent } from './collection/create-collection/batch-import-collection/batch-import-collection.component'; @@ -219,6 +218,7 @@ export function initializeApp( CollectionSkillSearchComponent, BatchImportComponent, FieldMappingTableComponent, + BatchImportDestinationSelectComponent, FieldMappingSelectComponent, ImportPreviewTableComponent, InlineHeadingComponent, @@ -232,7 +232,6 @@ export function initializeApp( CollectionPipe, ConvertToCollectionComponent, SizePaginationComponent, - SkillImportComponent, BatchImportCollectionComponent, ], imports: [ diff --git a/ui/src/app/navigation/commoncontrols.component.html b/ui/src/app/navigation/commoncontrols.component.html index 529d9de5c..a1a8d90ef 100644 --- a/ui/src/app/navigation/commoncontrols.component.html +++ b/ui/src/app/navigation/commoncontrols.component.html @@ -59,7 +59,12 @@ Create Collection - + + + + + Batch Import RSDs +

diff --git a/ui/src/app/navigation/skill-import/skill-import.component.html b/ui/src/app/navigation/skill-import/skill-import.component.html deleted file mode 100644 index c4d7f59b2..000000000 --- a/ui/src/app/navigation/skill-import/skill-import.component.html +++ /dev/null @@ -1,13 +0,0 @@ -
- - - -
diff --git a/ui/src/app/navigation/skill-import/skill-import.component.scss b/ui/src/app/navigation/skill-import/skill-import.component.scss deleted file mode 100644 index 1a860f451..000000000 --- a/ui/src/app/navigation/skill-import/skill-import.component.scss +++ /dev/null @@ -1,4 +0,0 @@ -.dropup:hover .dropup-content.dropup-content-visible { - margin-left: 20px; - margin-bottom: -233px; -} diff --git a/ui/src/app/navigation/skill-import/skill-import.component.spec.ts b/ui/src/app/navigation/skill-import/skill-import.component.spec.ts deleted file mode 100644 index c7b99d8be..000000000 --- a/ui/src/app/navigation/skill-import/skill-import.component.spec.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ActivatedRoute } from "@angular/router"; -import { ActivatedRouteStubSpec } from "@test/util/activated-route-stub.spec"; -import { SkillImportComponent } from './skill-import.component'; -import { - AuthServiceStub, - CollectionServiceStub, -} from "@test/resource/mock-stubs"; -import { CollectionService } from "../../collection/service/collection.service"; -import { AuthService } from "../../auth/auth-service"; - -describe('SkillImportComponent', () => { - let component: SkillImportComponent; - let fixture: ComponentFixture; - let activatedRoute: ActivatedRouteStubSpec - - beforeEach(() => { - activatedRoute = new ActivatedRouteStubSpec() - }) - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [SkillImportComponent], - providers: [ - { provide: ActivatedRoute, useValue: activatedRoute }, - { provide: AuthService, useClass: AuthServiceStub }, - { provide: CollectionService, useClass: CollectionServiceStub } - ] - }); - fixture = TestBed.createComponent(SkillImportComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - it("actions definitions count should be correct", () => { - expect(component.action.menu?.length).toEqual(3) - }) -}); diff --git a/ui/src/app/navigation/skill-import/skill-import.component.ts b/ui/src/app/navigation/skill-import/skill-import.component.ts deleted file mode 100644 index c14b50111..000000000 --- a/ui/src/app/navigation/skill-import/skill-import.component.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { Component } from '@angular/core'; -import { ActivatedRoute, Router } from "@angular/router"; -import { ButtonAction } from "../../auth/auth-roles"; -import { AuthService } from "../../auth/auth-service"; -import { CollectionService } from "../../collection/service/collection.service"; -import { TableActionDefinition } from "../../table/skills-library-table/has-action-definitions"; -import { BatchImportOptionsEnum } from "../../richskill/import/BatchImportOptionsEnum"; - -@Component({ - selector: 'app-skill-import', - templateUrl: './skill-import.component.html', - styleUrls: [ - '../../table/skills-library-table/action-bar-item.components.scss', - './skill-import.component.scss' - ] -}) -export class SkillImportComponent { - - constructor(protected collectionService: CollectionService, - protected route: ActivatedRoute, - protected authService: AuthService, - protected router: Router - ) { - this.setEnableFlags() - } - - canSkillUpdate: boolean = false - canSkillCreate: boolean = false - canSkillPublish: boolean = false - canCollectionUpdate: boolean = false - canCollectionCreate: boolean = false - canCollectionPublish: boolean = false - canCollectionSkillsUpdate: boolean = false - - setEnableFlags(): void { - this.canSkillUpdate = this.authService.isEnabledByRoles(ButtonAction.SkillUpdate); - this.canSkillCreate = this.authService.isEnabledByRoles(ButtonAction.SkillCreate); - this.canSkillPublish = this.authService.isEnabledByRoles(ButtonAction.SkillPublish); - this.canCollectionUpdate = this.authService.isEnabledByRoles(ButtonAction.CollectionUpdate); - this.canCollectionCreate = this.authService.isEnabledByRoles(ButtonAction.CollectionCreate); - this.canCollectionPublish = this.authService.isEnabledByRoles(ButtonAction.CollectionPublish); - this.canCollectionSkillsUpdate = this.authService.isEnabledByRoles(ButtonAction.CollectionSkillsUpdate); - } - - get action(): TableActionDefinition { - return new TableActionDefinition({ - menu: [ - { - label: "Import to Existing Collection", - visible: () => true, - callback: () => { - this.router.navigate(["/skills/import"], - {queryParams:{to:BatchImportOptionsEnum.existing}}) - }, - }, - { - label: "Import to Workspace", - visible: () => true, - callback: () => { - this.router.navigate(["/skills/import"], - {queryParams: {to: BatchImportOptionsEnum.workspace}}) - }, - }, - { - label: "Import to New Collection", - visible: () => true, - callback: () => { - this.router.navigate(["/skills/import"], - {queryParams: {to: BatchImportOptionsEnum.new}}) - }, - } - ], - visible: () => true - }) - } -} diff --git a/ui/src/app/richskill/import/batch-import.component.html b/ui/src/app/richskill/import/batch-import.component.html index e507ff66f..d8abf316e 100644 --- a/ui/src/app/richskill/import/batch-import.component.html +++ b/ui/src/app/richskill/import/batch-import.component.html @@ -139,6 +139,9 @@

+
+ +
@@ -198,7 +201,7 @@

Import More RSDs -

@@ -201,7 +201,7 @@

Import More RSDs - + + + +
+ + + +
+
+ +
+ + -
+
@@ -139,9 +166,6 @@

-
- -
diff --git a/ui/src/app/richskill/import/batch-import.component.scss b/ui/src/app/richskill/import/batch-import.component.scss new file mode 100644 index 000000000..121fd156d --- /dev/null +++ b/ui/src/app/richskill/import/batch-import.component.scss @@ -0,0 +1,3 @@ +.t-import-margin-bottom { + margin-bottom: -133px; +} From a68c2694a3d0a1fd48f4c9fda87b7d57329df5ae Mon Sep 17 00:00:00 2001 From: Jose Chavez Date: Fri, 21 Jul 2023 14:02:32 -0600 Subject: [PATCH 11/12] refactoring validation for skills to be imported --- ui/src/app/richskill/import/batch-import.component.html | 4 ++-- ui/src/app/richskill/import/batch-import.component.ts | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ui/src/app/richskill/import/batch-import.component.html b/ui/src/app/richskill/import/batch-import.component.html index 0274ea9d3..a9549e301 100644 --- a/ui/src/app/richskill/import/batch-import.component.html +++ b/ui/src/app/richskill/import/batch-import.component.html @@ -39,7 +39,7 @@

Batch Import

- -