Catalog alignment
[sdc.git] / catalog-ui / src / app / ng2 / components / forms / artifacts-form / artifacts.service.ts
1 import { Injectable } from '@angular/core';
2 import { Store } from '@ngxs/store';
3 import { SdcUiCommon, SdcUiComponents, SdcUiServices } from 'onap-ui-angular';
4 import { ArtifactModel } from '../../../../models';
5 import { ArtifactGroupType, ArtifactType } from '../../../../utils/constants';
6 import { TopologyTemplateService } from '../../../services/component-services/topology-template.service';
7 import { TranslateService } from '../../../shared/translator/translate.service';
8 import { CreateOrUpdateArtifactAction, DeleteArtifactAction } from '../../../store/actions/artifacts.action';
9 import { EnvParamsComponent } from '../env-params/env-params.component';
10 import { ArtifactFormComponent } from './artifact-form.component';
11
12 import {
13     CreateInstanceArtifactAction,
14     DeleteInstanceArtifactAction,
15     UpdateInstanceArtifactAction
16 } from '../../../store/actions/instance-artifacts.actions';
17
18 @Injectable()
19 export class ArtifactsService {
20
21     constructor(private serviceLoader: SdcUiServices.LoaderService,
22                 private modalService: SdcUiServices.ModalService,
23                 private topologyTemplateService: TopologyTemplateService,
24                 private translateService: TranslateService,
25                 private store: Store) {
26     }
27
28     public dispatchArtifactAction = (componentId: string, componentType: string, artifact: ArtifactModel, artifactType: ArtifactGroupType, instanceId: string) => {
29         const artifactObj = {
30             componentType,
31             componentId,
32             instanceId,
33             artifact
34         };
35
36         // Create or update instance artifact
37         if (instanceId) {
38             if (!artifact.uniqueId) {
39                 // create instance artifact
40                 return this.store.dispatch(new CreateInstanceArtifactAction(artifactObj));
41             } else {
42                 // update instance artifact
43                 return this.store.dispatch(new UpdateInstanceArtifactAction(artifactObj));
44             }
45         } else {
46             // Create or update artifact
47             return this.store.dispatch(new CreateOrUpdateArtifactAction(artifactObj));
48         }
49     }
50
51     public openArtifactModal = (componentId: string, componentType: string, artifact: ArtifactModel, artifactType: ArtifactGroupType, isViewOnly?: boolean, instanceId?: string) => {
52
53         let modalInstance;
54
55         const onOkPressed = () => {
56             const updatedArtifact = modalInstance.innerModalContent.instance.artifact;
57             this.serviceLoader.activate();
58             this.dispatchArtifactAction(componentId, componentType, updatedArtifact, artifactType, instanceId)
59                     .subscribe().add(() => this.serviceLoader.deactivate());
60         };
61
62         const addOrUpdateArtifactModalConfig = {
63             title: (artifact && artifact.uniqueId) ? 'Update Artifact' : 'Create Artifact',
64             size: 'md',
65             type: SdcUiCommon.ModalType.custom,
66             testId: 'upgradeVspModal',
67             buttons: [
68                 {
69                     id: 'done',
70                     text: 'DONE',
71                     disabled: isViewOnly,
72                     size: 'Add Another',
73                     closeModal: true,
74                     callback: onOkPressed
75                 },
76                 {text: 'CANCEL', size: 'sm', closeModal: true, type: 'secondary'}
77             ] as SdcUiCommon.IModalButtonComponent[]
78         } as SdcUiCommon.IModalConfig;
79
80         modalInstance = this.modalService.openCustomModal(addOrUpdateArtifactModalConfig, ArtifactFormComponent, {
81             artifact: new ArtifactModel(artifact),
82             artifactType,
83             instanceId,
84             componentType,
85             isViewOnly
86         });
87
88         if (!isViewOnly) {
89             modalInstance.innerModalContent.instance.onValidationChange.subscribe((isValid) => {
90                 modalInstance.getButtonById('done').disabled = !isValid;
91             });
92         }
93     }
94
95     public openViewEnvParams(componentType: string, componentId: string, artifact: ArtifactModel, instanceId?: string) {
96         const envParamsModal = {
97             title: artifact.artifactDisplayName,
98             size: 'xl',
99             type: SdcUiCommon.ModalType.custom,
100             testId: 'viewEnvParams',
101             isDisabled: false,
102         } as SdcUiCommon.IModalConfig;
103
104         this.modalService.openCustomModal(envParamsModal, EnvParamsComponent, {
105             isInstanceSelected: !!instanceId,    // equals to instanceId ? true : false
106             artifact: new ArtifactModel(artifact),
107             isViewOnly: true
108         });
109     }
110
111     public openUpdateEnvParams(componentType: string, componentId: string, artifact: ArtifactModel, instanceId?: string) {
112         let modalInstance;
113         const onOkPressed = () => {
114             const updatedArtifact = modalInstance.innerModalContent.instance.artifact;
115             this.serviceLoader.activate();
116             this.dispatchArtifactAction(componentId, componentType, updatedArtifact, ArtifactType.DEPLOYMENT, instanceId)
117                     .subscribe().add(() => this.serviceLoader.deactivate());
118         };
119
120         const envParamsModal = {
121             title: artifact.artifactDisplayName,
122             size: 'xl',
123             type: SdcUiCommon.ModalType.custom,
124             testId: 'envParams',
125             isDisabled: false,
126             buttons: [
127                 {
128                     id: 'save',
129                     text: 'Save',
130                     spinner_position: 'left',
131                     size: 'sm',
132                     callback: onOkPressed,
133                     closeModal: true
134                 },
135                 {text: 'Cancel', size: 'sm', closeModal: true, type: 'secondary'}
136             ] as SdcUiCommon.IModalButtonComponent[]
137         } as SdcUiCommon.IModalConfig;
138
139         modalInstance = this.modalService.openCustomModal(envParamsModal, EnvParamsComponent, {
140             isInstanceSelected: !!instanceId,    // equals to instanceId ? true : false
141             artifact: new ArtifactModel(artifact)
142         });
143
144         modalInstance.innerModalContent.instance.onValidationChange.subscribe((isValid) => {
145             modalInstance.getButtonById('save').disabled = !isValid;
146         });
147     }
148
149     public deleteArtifact = (componentType: string, componentId: string, artifact: ArtifactModel, instanceId?: string) => {
150
151         const artifactObject = {
152             componentType,
153             componentId,
154             artifact,
155             instanceId
156         };
157
158         const onOkPressed: Function = () => {
159             this.serviceLoader.activate();
160             this.store.dispatch((instanceId) ? new DeleteInstanceArtifactAction(artifactObject) : new DeleteArtifactAction(artifactObject))
161                     .subscribe().add(() => this.serviceLoader.deactivate());
162         };
163
164         const title = this.translateService.translate('ARTIFACT_VIEW_DELETE_MODAL_TITLE');
165         const text = this.translateService.translate('ARTIFACT_VIEW_DELETE_MODAL_TEXT', {name: artifact.artifactDisplayName});
166         const okButton = {
167             testId: 'OK',
168             text: 'OK',
169             type: SdcUiCommon.ButtonType.warning,
170             callback: onOkPressed,
171             closeModal: true
172         } as SdcUiComponents.ModalButtonComponent;
173         this.modalService.openWarningModal(title, text, 'delete-information-artifact-modal', [okButton]);
174     }
175 }