2 * Created by rc2122 on 6/3/2018.
4 import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
5 import * as _ from 'lodash';
6 import { SdcUiServices } from 'onap-ui-angular';
7 import { ComponentMetadata, IComponentMetadata } from '../../../../models/component-metadata';
8 import { IUserProperties } from '../../../../models/user';
10 import { Resource } from '../../../../models/components/resource';
11 import { ComponentType } from '../../../../utils/constants';
12 import { CacheService } from '../../../services/cache.service';
13 import { FileUtilsService } from '../../../services/file-utils.service';
14 import { OnboardingService } from '../../../services/onboarding.service';
15 import { TranslateService } from '../../../shared/translator/translate.service';
17 export interface ImportVSPdata {
18 componentCsar: Resource;
19 previousComponent?: Resource;
23 // tslint:disable-next-line:interface-name
24 export interface IPoint {
30 selector: 'onboarding-modal',
31 templateUrl: './onboarding-modal.component.html',
32 styleUrls: ['onboarding-modal.component.less', '../../../../../assets/styles/table-style.less']
34 export class OnboardingModalComponent implements OnInit {
35 @Input() currentCsarUUID: string;
36 @Input() currentCsarVersion: string;
37 @ViewChild('componentsMetadataTable') table: any;
38 @Output() closeModalEvent: EventEmitter<ImportVSPdata> = new EventEmitter<ImportVSPdata>();
41 {name: 'Name', prop: 'name', flexGrow: 22},
42 {name: 'Vendor', prop: 'vendorName', flexGrow: 26},
43 {name: 'Category', prop: 'categories', flexGrow: 33},
44 {name: 'Version', prop: 'csarVersion', flexGrow: 10},
45 {name: 'Type', prop: 'resourceType', flexGrow: 10},
46 {name: '#', prop: '', flexGrow: 20}
48 private componentsMetadataList: IComponentMetadata[] = [];
49 private temp: IComponentMetadata[] = [];
50 private componentFromServer: ComponentMetadata;
51 private isCsarComponentExists: boolean = false;
52 private selectedComponent: ComponentMetadata;
53 private isLoading: boolean;
54 private user: IUserProperties;
56 constructor(private onBoardingService: OnboardingService,
57 private translateService: TranslateService,
58 private cacheService: CacheService,
59 private fileUtilsService: FileUtilsService,
60 private popoverService: SdcUiServices.PopoverService,
61 private loaderService: SdcUiServices.LoaderService) {
64 public ngOnInit(): void {
65 this.initOnboardingComponentsList();
66 this.user = this.cacheService.get('user');
69 initMaxVersionOfItemsInList = (onboardingResponse: IComponentMetadata[]): void => {
70 // Get only the latest version of each item
71 this.componentsMetadataList = [];
73 // group all items according to packageId
74 const groupByPackageIdItems = _.groupBy(onboardingResponse, 'packageId');
75 // Loop on all the groups and push to componentsMetadataList the max version for each package
76 _.each(groupByPackageIdItems, (items: any): void => {
77 let maxItem: any = items[0];
78 items.forEach((item) => {
79 if (parseFloat(maxItem.csarVersion) < parseFloat(item.csarVersion)) {
84 this.componentsMetadataList.push(maxItem);
89 onSelectComponent({selected}) {
90 this.table.rowDetail.collapseAllRows();
91 if (selected[0] === this.selectedComponent) {
92 this.selectedComponent = undefined;
93 this.componentFromServer = undefined;
94 this.table.rowDetail.toggleExpandRow(null);
97 this.isLoading = true;
98 this.componentFromServer = undefined;
99 this.selectedComponent = selected[0];
100 this.onBoardingService.getComponentFromCsarUuid(this.selectedComponent.csarUUID).subscribe(
101 (componentFromServer: ComponentMetadata) => {
102 this.isLoading = false;
103 if (componentFromServer) {
104 this.componentFromServer = componentFromServer;
105 this.populateRowDetails(true);
107 this.populateRowDetails(false);
110 this.isLoading = false;
111 this.populateRowDetails(false);
115 populateRowDetails(isCsarComponentExists: boolean) {
116 this.isCsarComponentExists = isCsarComponentExists;
117 this.table.rowDetail.toggleExpandRow(this.selectedComponent);
120 importOrUpdateCsar = (): void => {
121 const selectedComponentConverted = this.onBoardingService.convertMetaDataToComponent(this.selectedComponent);
122 const componentFromServerConverted = this.componentFromServer ?
123 this.onBoardingService.convertMetaDataToComponent(this.componentFromServer) : undefined;
124 const importVSPdata: ImportVSPdata = {
125 componentCsar: selectedComponentConverted,
126 previousComponent: componentFromServerConverted,
127 type: ComponentType.RESOURCE.toLowerCase()
129 this.closeModalEvent.emit(importVSPdata);
132 downloadCsar = (packageId: string): void => {
133 this.isLoading = true;
134 this.onBoardingService.downloadOnboardingCsar(packageId).subscribe(
135 (file: any): void => {
136 this.isLoading = false;
138 this.fileUtilsService.downloadFile(file.body, packageId + '.csar');
141 this.isLoading = false;
146 updateFilter(event) {
147 const val = event.target.value.toLowerCase();
150 const temp = this.temp.filter((componentMetadata: ComponentMetadata) => {
152 (componentMetadata.name && componentMetadata.name.toLowerCase().indexOf(val) !== -1) ||
153 (componentMetadata.vendorName && componentMetadata.vendorName.toLowerCase().indexOf(val) !== -1) ||
154 (componentMetadata.categories[0] && componentMetadata.categories[0].name.toLowerCase().indexOf(val) !== -1) ||
155 (componentMetadata.categories[0] && componentMetadata.categories[0].subcategories[0] && componentMetadata.categories[0].subcategories[0].name.toLowerCase().indexOf(val) !== -1) ||
156 (componentMetadata.csarVersion && componentMetadata.csarVersion.toLowerCase().indexOf(val) !== -1) ||
157 (componentMetadata.description && componentMetadata.description.toLowerCase().indexOf(val) !== -1);
161 this.componentsMetadataList = temp;
164 checkNotCertified = (): boolean => {
165 return this.componentFromServer && this.componentFromServer.lifecycleState === 'NOT_CERTIFIED_CHECKOUT' &&
166 this.componentFromServer.lastUpdaterUserId !== this.user.userId;
169 openPopover = ($event: any, popoverContent): void => {
170 this.popoverService.createPopOver('', this.translateService.translate(popoverContent), {
176 private initOnboardingComponentsList = (): void => {
177 this.loaderService.activate();
178 this.onBoardingService.getOnboardingComponents().subscribe(
179 (onboardingResponse: IComponentMetadata[]) => {
180 this.loaderService.deactivate();
181 if (this.currentCsarUUID) {
182 onboardingResponse = _.filter(onboardingResponse, (input): boolean => {
183 return (input as ComponentMetadata).csarUUID === this.currentCsarUUID;
186 this.initMaxVersionOfItemsInList(onboardingResponse);
187 this.temp = [...this.componentsMetadataList];
189 this.loaderService.deactivate();