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){}
29 getLineOfBusinessControl = (instance?: any): DropdownFormControl => {
30 return new DropdownFormControl({
31 type: FormControlType.DROPDOWN,
32 controlName: 'lineOfBusiness',
33 displayName: 'Line of business',
34 dataTestId: 'lineOfBusiness',
35 placeHolder: 'Select Line Of Business',
37 name: "lineOfBusiness",
38 value: instance ? instance.lineOfBusiness : null,
39 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
40 onInitSelectedField: ['lineOfBusinessList'],
41 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters)
45 getMultiSelectLineOfBusinessControl = (instance: any, isMultiSelected: boolean): MultiselectFormControl => {
46 return this.getLobMultiselectControl(instance, isMultiSelected);
49 getTenantControl = (serviceId: string, instance?: any): DropdownFormControl => {
50 const service = this._store.getState().service.serviceInstance[serviceId];
51 const globalCustomerId: string = service.globalSubscriberId;
52 const serviceType: string = service.subscriptionServiceType;
53 return new DropdownFormControl({
54 type: FormControlType.DROPDOWN,
55 controlName: 'tenantId',
56 displayName: 'Tenant',
58 placeHolder: 'Select Tenant',
60 isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId),
61 onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null,
62 value: instance ? instance.tenantId : null,
63 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
64 onInit: instance ? this._basicControlGenerator.getSubscribeInitResult.bind(
66 this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)) : () => {
71 getRollbackOnFailureControl = (instance?: any): DropdownFormControl => {
72 return new DropdownFormControl({
73 type: FormControlType.DROPDOWN,
74 controlName: 'rollbackOnFailure',
75 displayName: 'Rollback on failure',
76 dataTestId: 'rollback',
77 placeHolder: 'Rollback on failure',
79 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
80 value: instance ? instance.rollbackOnFailure : 'true',
81 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._basicControlGenerator.getRollBackOnFailureOptions)
85 getLegacyRegion(instance: any): FormControlModel {
86 return new InputFormControl({
87 controlName: 'legacyRegion',
88 displayName: 'Legacy Region',
89 dataTestId: 'lcpRegionText',
90 placeHolder: 'Type Legacy Region',
92 isVisible: this._basicControlGenerator.isLegacyRegionShouldBeVisible(instance),
93 isDisabled : _.isNil(instance) ? true : Constants.LegacyRegion.MEGA_REGION.indexOf(instance.lcpCloudRegionId),
94 value: instance ? instance.legacyRegion : null
98 getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
99 const service = this._store.getState().service.serviceInstance[serviceId];
100 const globalCustomerId: string = service.globalSubscriberId;
101 const serviceType: string = service.subscriptionServiceType;
102 return new DropdownFormControl({
103 type: FormControlType.DROPDOWN,
104 controlName: 'lcpCloudRegionId',
105 displayName: 'LCP region',
106 dataTestId: 'lcpRegion',
107 placeHolder: 'Select LCP Region',
110 value: instance ? instance.lcpCloudRegionId : null,
111 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
112 onInitSelectedField: ['lcpRegionList'],
113 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(
115 this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)),
116 onChange: (param: string, form: FormGroup) => {
117 form.controls['tenantId'].enable();
118 form.controls['tenantId'].reset();
119 if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) {
120 this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => {
121 controls.find(item => item.controlName === 'tenantId')['options$'] = res.lcpRegionsTenantsMap[param];
122 if (res.lcpRegionsTenantsMap[param]) {
123 controls.find(item => item.controlName === 'tenantId')['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0;
128 if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) {
129 form.controls['legacyRegion'].enable();
130 controls.find(item => item.controlName === 'legacyRegion').isVisible = true;
133 controls.find(item => item.controlName === 'legacyRegion').isVisible = false;
134 form.controls['legacyRegion'].setValue(null);
135 form.controls['legacyRegion'].reset();
136 form.controls['legacyRegion'].disable();
145 getSDNCControl = (instance: any, checkedByDefault: boolean, extraContents? : object[]): FormControlModel => {
146 return new CheckboxFormControl({
147 controlName: SDN_C_PRE_LOAD,
148 displayName: 'SDN-C pre-load',
149 dataTestId: 'sdncPreLoad',
150 value: instance ? instance.sdncPreLoad : checkedByDefault,
151 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
156 getProductFamilyControl = (instance : any, controls : FormControlModel[], isMandatory?: boolean) : DropdownFormControl => {
157 return new DropdownFormControl({
158 type : FormControlType.DROPDOWN,
159 controlName : 'productFamilyId',
160 displayName : 'Product family',
161 dataTestId : 'productFamily',
162 placeHolder : 'Select Product Family',
164 name : "product-family-select",
165 value : instance ? instance.productFamilyId : null,
166 validations : _.isNil(isMandatory) || isMandatory === true ? [new ValidatorModel(ValidatorOptions.required, 'is required')]: [],
167 onInit : this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getProductFamilies),
171 getInstanceNameController(instance: any, serviceId: string, isEcompGeneratedNaming: boolean, model: NodeModel): FormControlModel {
172 let validations: ValidatorModel[] = this._basicControlGenerator.createValidationsForInstanceName(instance, serviceId, isEcompGeneratedNaming);
173 return new InputFormControl({
174 controlName: 'instanceName',
175 displayName: 'Instance name',
176 dataTestId: 'instanceName',
177 placeHolder: (!isEcompGeneratedNaming) ? 'Instance name' : 'Automatically generated when not provided',
178 validations: validations,
180 value : (!isEcompGeneratedNaming || (!_.isNil(instance) && !_.isNil(instance.instanceName) && instance.instanceName !== ""))
181 ? this._basicControlGenerator.getDefaultInstanceName(instance, model) : null,
182 onKeypress : (event) => {
183 const pattern:RegExp = ControlGeneratorUtil.INSTANCE_NAME_REG_EX;
185 if(!pattern.test(event['key'])){
186 event.preventDefault();
194 getInstanceName(instance : any, serviceId : string, isEcompGeneratedNaming: boolean): FormControlModel {
195 let formControlModel:FormControlModel = this.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, new NodeModel());
196 formControlModel.value = instance ? instance.instanceName : null;
197 return formControlModel;
200 getPlatformMultiselectControl = (instance: any, controls: FormControlModel[], isMultiSelected: boolean) : MultiselectFormControl => {
201 return this.getMultiSelectFormControl(
204 'multi-selectPlatform',
208 instance ? instance.platformName : null,
214 getLobMultiselectControl = (instance: any, isMultiSelected: boolean) : MultiselectFormControl => {
215 return this.getMultiSelectFormControl(
218 'multi-lineOfBusiness',
219 'Select Line Of Business',
222 instance ? instance.lineOfBusiness : null,
224 'lineOfBusinessList');
227 private getMultiSelectFormControl(controlName: string, displayName: string, dataTestId: string, placeholder: string,
228 name: string, instance: any, defaultValue, isMultiSelected: boolean, catagoryParamResponseFieldName: string) {
229 return new MultiselectFormControl({
230 type: FormControlType.MULTI_SELECT,
234 selectedFieldName: 'name',
236 placeHolder: placeholder,
239 value: instance ? defaultValue : '',
240 limitSelection: isMultiSelected ? 1000 : 1,
241 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
242 onInitSelectedField: [catagoryParamResponseFieldName],
243 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters),
244 onChange: (param: MultiSelectItem[], form: FormGroup) => {
245 form.controls[controlName].setValue(param.map((multiSelectItem: MultiSelectItem) => {
246 return multiSelectItem.itemName
249 convertOriginalDataToArray: (value?: string) => {
250 if (_.isNil(value)) return [];
251 return value.split(',');