When feature toggle is active then SDNC preload files is enable.
[vid.git] / vid-webpack-master / src / app / shared / components / genericForm / formControlsServices / sharedControlles / shared.controllers.service.ts
1 import {Injectable} from "@angular/core";
2 import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model";
3 import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum";
4 import {
5   FormControlModel,
6   ValidatorModel,
7   ValidatorOptions
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
20 @Injectable()
21 export class SharedControllersService {
22   constructor(private _store : NgRedux<AppState>,
23               private _aaiService : AaiService,
24               private _basicControlGenerator : ControlGeneratorUtil){}
25
26
27   getLineOfBusinessControl = (instance?: any): DropdownFormControl => {
28     return new DropdownFormControl({
29       type: FormControlType.DROPDOWN,
30       controlName: 'lineOfBusiness',
31       displayName: 'Line of business',
32       dataTestId: 'lineOfBusiness',
33       placeHolder: 'Select Line Of Business',
34       isDisabled: false,
35       name: "lineOfBusiness",
36       value: instance ? instance.lineOfBusiness : null,
37       validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
38       onInitSelectedField: ['lineOfBusinessList'],
39       onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters)
40     })
41   };
42
43   getTenantControl = (serviceId: string, instance?: any): DropdownFormControl => {
44     const service = this._store.getState().service.serviceInstance[serviceId];
45     const globalCustomerId: string = service.globalSubscriberId;
46     const serviceType: string = service.subscriptionServiceType;
47     return new DropdownFormControl({
48       type: FormControlType.DROPDOWN,
49       controlName: 'tenantId',
50       displayName: 'Tenant',
51       dataTestId: 'tenant',
52       placeHolder: 'Select Tenant',
53       name: 'tenant',
54       isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId),
55       onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null,
56       value: instance ? instance.tenantId : null,
57       validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
58       onInit: instance ? this._basicControlGenerator.getSubscribeInitResult.bind(
59         this._aaiService,
60         this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)) : () => {
61       }
62     })
63   };
64
65   getRollbackOnFailureControl = (instance?: any): DropdownFormControl => {
66     return new DropdownFormControl({
67       type: FormControlType.DROPDOWN,
68       controlName: 'rollbackOnFailure',
69       displayName: 'Rollback on failure',
70       dataTestId: 'rollback',
71       placeHolder: 'Rollback on failure',
72       isDisabled: false,
73       validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
74       value: instance ? instance.rollbackOnFailure : 'true',
75       onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._basicControlGenerator.getRollBackOnFailureOptions)
76     })
77   };
78
79   getLegacyRegion(instance: any): FormControlModel {
80     return new InputFormControl({
81       controlName: 'legacyRegion',
82       displayName: 'Legacy Region',
83       dataTestId: 'lcpRegionText',
84       placeHolder: 'Type Legacy Region',
85       validations: [],
86       isVisible: this._basicControlGenerator.isLegacyRegionShouldBeVisible(instance),
87       isDisabled : _.isNil(instance) ? true : Constants.LegacyRegion.MEGA_REGION.indexOf(instance.lcpCloudRegionId),
88       value: instance ? instance.legacyRegion : null
89     });
90   }
91
92   getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
93     const service = this._store.getState().service.serviceInstance[serviceId];
94     const globalCustomerId: string = service.globalSubscriberId;
95     const serviceType: string = service.subscriptionServiceType;
96     return new DropdownFormControl({
97       type: FormControlType.DROPDOWN,
98       controlName: 'lcpCloudRegionId',
99       displayName: 'LCP region',
100       dataTestId: 'lcpRegion',
101       placeHolder: 'Select LCP Region',
102       name: "lcpRegion",
103       isDisabled: false,
104       value: instance ? instance.lcpCloudRegionId : null,
105       validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
106       onInitSelectedField: ['lcpRegionList'],
107       onInit: this._basicControlGenerator.getSubscribeInitResult.bind(
108         this._aaiService,
109         this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)),
110       onChange: (param: string, form: FormGroup) => {
111         form.controls['tenantId'].enable();
112         form.controls['tenantId'].reset();
113         if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) {
114           this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => {
115             controls.find(item => item.controlName === 'tenantId')['options$'] = res.lcpRegionsTenantsMap[param];
116             if (res.lcpRegionsTenantsMap[param]) {
117               controls.find(item => item.controlName === 'tenantId')['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0;
118             }
119           }));
120         }
121
122         if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) {
123           form.controls['legacyRegion'].enable();
124           controls.find(item => item.controlName === 'legacyRegion').isVisible = true;
125
126         } else {
127           controls.find(item => item.controlName === 'legacyRegion').isVisible = false;
128           form.controls['legacyRegion'].setValue(null);
129           form.controls['legacyRegion'].reset();
130           form.controls['legacyRegion'].disable();
131         }
132       }
133     })
134   };
135
136   getSDNCControl = (instance: any, extraContents? : object[]): FormControlModel => {
137     return new CheckboxFormControl({
138       controlName: SDN_C_PRE_LOAD,
139       displayName: 'SDN-C pre-load',
140       dataTestId: 'sdncPreLoad',
141       value: instance ? instance.sdncPreLoad : false,
142       validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
143       extraContents
144     })
145   };
146
147   getProductFamilyControl = (instance : any, controls : FormControlModel[], isMandatory?: boolean) : DropdownFormControl => {
148     return new DropdownFormControl({
149       type : FormControlType.DROPDOWN,
150       controlName : 'productFamilyId',
151       displayName : 'Product family',
152       dataTestId : 'productFamily',
153       placeHolder : 'Select Product Family',
154       isDisabled : false,
155       name : "product-family-select",
156       value : instance ? instance.productFamilyId : null,
157       validations : _.isNil(isMandatory) || isMandatory === true ? [new ValidatorModel(ValidatorOptions.required, 'is required')]: [],
158       onInit : this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getProductFamilies),
159     })
160   };
161
162   getInstanceNameController(instance: any, serviceId: string, isEcompGeneratedNaming: boolean, model: NodeModel): FormControlModel {
163     let validations: ValidatorModel[] = this._basicControlGenerator.createValidationsForInstanceName(instance, serviceId, isEcompGeneratedNaming);
164     return new InputFormControl({
165       controlName: 'instanceName',
166       displayName: 'Instance name',
167       dataTestId: 'instanceName',
168       placeHolder: (!isEcompGeneratedNaming) ? 'Instance name' : 'Automatically generated when not provided',
169       validations: validations,
170       isVisible : true,
171       value : (!isEcompGeneratedNaming || (!_.isNil(instance) && !_.isNil(instance.instanceName) && instance.instanceName !== ""))
172         ? this._basicControlGenerator.getDefaultInstanceName(instance, model) : null,
173       onKeypress : (event) => {
174         const pattern:RegExp = ControlGeneratorUtil.INSTANCE_NAME_REG_EX;
175         if(pattern){
176           if(!pattern.test(event['key'])){
177             event.preventDefault();
178           }
179         }
180         return event;
181       }
182     });
183   }
184
185   getInstanceName(instance : any, serviceId : string, isEcompGeneratedNaming: boolean): FormControlModel {
186     let formControlModel:FormControlModel = this.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, new NodeModel());
187     formControlModel.value = instance ? instance.instanceName : null;
188     return formControlModel;
189   }
190 }