1 import {Injectable} from "@angular/core";
2 import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model";
3 import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum";
8 } from "../../../../models/formControlModels/formControl.model";
9 import {NgRedux} from "@angular-redux/store";
10 import {AppState} from "../../../../store/reducers";
11 import {AaiService} from "../../../../services/aaiService/aai.service";
12 import {ControlGeneratorUtil, SDN_C_PRE_LOAD} from "../control.generator.util.service";
13 import * as _ from "lodash";
14 import {FormGroup} from "@angular/forms";
15 import {Constants} from "../../../../utils/constants";
16 import {CheckboxFormControl} from "../../../../models/formControlModels/checkboxFormControl.model";
17 import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model";
18 import {NodeModel} from "../../../../models/nodeModel";
19 import {MultiselectFormControl} from "../../../../models/formControlModels/multiselectFormControl.model";
20 import {MultiSelectItem} from "../../../formControls/component/multiselect/multiselect.model";
23 export class SharedControllersService {
24 constructor(private _store : NgRedux<AppState>,
25 private _aaiService : AaiService,
26 private _basicControlGenerator : ControlGeneratorUtil){}
28 getTenantControl = (serviceId: string, instance?: any): DropdownFormControl => {
29 const service = this._store.getState().service.serviceInstance[serviceId];
30 const globalCustomerId: string = service.globalSubscriberId;
31 const serviceType: string = service.subscriptionServiceType;
32 return new DropdownFormControl({
33 type: FormControlType.DROPDOWN,
34 controlName: 'tenantId',
35 displayName: 'Tenant',
37 placeHolder: 'Select Tenant',
39 isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId),
40 onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null,
41 value: instance ? instance.tenantId : null,
42 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
43 onInit: instance ? this._basicControlGenerator.getSubscribeInitResult.bind(
45 this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)) : () => {
50 getRollbackOnFailureControl = (instance?: any): DropdownFormControl => {
51 return new DropdownFormControl({
52 type: FormControlType.DROPDOWN,
53 controlName: 'rollbackOnFailure',
54 displayName: 'Rollback on failure',
55 dataTestId: 'rollback',
56 placeHolder: 'Rollback on failure',
58 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
59 value: instance ? instance.rollbackOnFailure : 'true',
60 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._basicControlGenerator.getRollBackOnFailureOptions)
64 getLegacyRegion(instance: any): FormControlModel {
65 return new InputFormControl({
66 controlName: 'legacyRegion',
67 displayName: 'Legacy Region',
68 dataTestId: 'lcpRegionText',
69 placeHolder: 'Type Legacy Region',
71 isVisible: this._basicControlGenerator.isLegacyRegionShouldBeVisible(instance),
72 isDisabled : _.isNil(instance) ? true : Constants.LegacyRegion.MEGA_REGION.indexOf(instance.lcpCloudRegionId),
73 value: instance ? instance.legacyRegion : null
77 getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
78 const service = this._store.getState().service.serviceInstance[serviceId];
79 const globalCustomerId: string = service.globalSubscriberId;
80 const serviceType: string = service.subscriptionServiceType;
81 return new DropdownFormControl({
82 type: FormControlType.DROPDOWN,
83 controlName: 'lcpCloudRegionId',
84 displayName: 'LCP region',
85 dataTestId: 'lcpRegion',
86 placeHolder: 'Select LCP Region',
89 value: instance ? instance.lcpCloudRegionId : null,
90 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
91 onInitSelectedField: ['lcpRegionList'],
92 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(
94 this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)),
95 onChange: (param: string, form: FormGroup) => {
96 form.controls['tenantId'].enable();
97 form.controls['tenantId'].reset();
98 if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) {
99 this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => {
100 controls.find(item => item.controlName === 'tenantId')['options$'] = res.lcpRegionsTenantsMap[param];
101 if (res.lcpRegionsTenantsMap[param]) {
102 controls.find(item => item.controlName === 'tenantId')['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0;
107 if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) {
108 form.controls['legacyRegion'].enable();
109 controls.find(item => item.controlName === 'legacyRegion').isVisible = true;
112 controls.find(item => item.controlName === 'legacyRegion').isVisible = false;
113 form.controls['legacyRegion'].setValue(null);
114 form.controls['legacyRegion'].reset();
115 form.controls['legacyRegion'].disable();
124 getSDNCControl = (instance: any, checkedByDefault: boolean, extraContents? : object[]): FormControlModel => {
125 return new CheckboxFormControl({
126 controlName: SDN_C_PRE_LOAD,
127 displayName: 'SDN-C pre-load',
128 dataTestId: 'sdncPreLoad',
129 value: instance ? instance.sdncPreLoad : checkedByDefault,
130 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
135 getProductFamilyControl = (instance : any, controls : FormControlModel[], isMandatory?: boolean) : DropdownFormControl => {
136 return new DropdownFormControl({
137 type : FormControlType.DROPDOWN,
138 controlName : 'productFamilyId',
139 displayName : 'Product family',
140 dataTestId : 'productFamily',
141 placeHolder : 'Select Product Family',
143 name : "product-family-select",
144 value : instance ? instance.productFamilyId : null,
145 validations : _.isNil(isMandatory) || isMandatory === true ? [new ValidatorModel(ValidatorOptions.required, 'is required')]: [],
146 onInit : this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getProductFamilies),
150 getInstanceNameController(instance: any, serviceId: string, isEcompGeneratedNaming: boolean, model: NodeModel): FormControlModel {
151 let validations: ValidatorModel[] = this._basicControlGenerator.createValidationsForInstanceName(instance, serviceId, isEcompGeneratedNaming);
152 return new InputFormControl({
153 controlName: 'instanceName',
154 displayName: 'Instance name',
155 dataTestId: 'instanceName',
156 placeHolder: (!isEcompGeneratedNaming) ? 'Instance name' : 'Automatically generated when not provided',
157 validations: validations,
159 value : (!isEcompGeneratedNaming || (!_.isNil(instance) && !_.isNil(instance.instanceName) && instance.instanceName !== ""))
160 ? this._basicControlGenerator.getDefaultInstanceName(instance, model) : null,
161 onKeypress : (event) => {
162 const pattern:RegExp = ControlGeneratorUtil.INSTANCE_NAME_REG_EX;
164 if(!pattern.test(event['key'])){
165 event.preventDefault();
173 getInstanceName(instance : any, serviceId : string, isEcompGeneratedNaming: boolean): FormControlModel {
174 let formControlModel:FormControlModel = this.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, new NodeModel());
175 formControlModel.value = instance ? instance.instanceName : null;
176 return formControlModel;
179 getPlatformMultiselectControl = (instance: any, controls: FormControlModel[], isMultiSelected: boolean) : MultiselectFormControl => {
180 return this.getMultiSelectFormControl(
183 'multi-selectPlatform',
187 instance ? instance.platformName : null,
193 getLobMultiselectControl = (instance: any, isMultiSelected: boolean) : MultiselectFormControl => {
194 return this.getMultiSelectFormControl(
197 'multi-lineOfBusiness',
198 'Select Line Of Business',
201 instance ? instance.lineOfBusiness : null,
203 'lineOfBusinessList');
206 private getMultiSelectFormControl(controlName: string, displayName: string, dataTestId: string, placeholder: string,
207 name: string, instance: any, defaultValue, isMultiSelected: boolean, catagoryParamResponseFieldName: string) {
208 return new MultiselectFormControl({
209 type: FormControlType.MULTI_SELECT,
213 selectedFieldName: 'name',
215 placeHolder: placeholder,
218 value: instance ? defaultValue : '',
219 limitSelection: isMultiSelected ? 1000 : 1,
220 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
221 onInitSelectedField: [catagoryParamResponseFieldName],
222 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters),
223 onChange: (param: MultiSelectItem[], form: FormGroup) => {
224 form.controls[controlName].setValue(param.map((multiSelectItem: MultiSelectItem) => {
225 return multiSelectItem.itemName
228 convertOriginalDataToArray: (value?: string) => {
229 if (_.isNil(value)) return [];
230 return value.split(',');