import {Component, OnInit, Input, EventEmitter, Output} from '@angular/core'; import {trigger, transition, style, animate} from '@angular/animations'; import {HttpClient} from '@angular/common/http'; import {ColumnService} from '../../column.service'; import {DrillDownModel} from './drill-down-model'; import { FormFieldsService } from '../../../form-fields/form-fields.service'; @Component({ selector: 'app-edit-drill-down-link', templateUrl: './edit-drill-down-link.component.html', styleUrls: ['./edit-drill-down-link.component.css'] }) export class EditDrillDownLinkComponent implements OnInit { @Input() closable = true; @Input() visible: boolean; @Input('reportId') reportId: number; @Input('drillDownObj') drillDownObj: {}; @Output() completed = new EventEmitter(); drillDownColsList: {}[]; valueOfColumnsList: {}[]; showSpinner: boolean; valueOfColumns: string; valueOfColumnsArr: any[]; valueOfFormFieldArr: any[]; fixedValueArr: any[]; noValueRadioArr: any[]; valueValueArr: any[]; radioButtonCheckedArr: boolean[]; fieldValuesArr: string[]; drillDownModel: DrillDownModel[] = []; postDrillDownObj: {}; drillDownArray: any[]; formFieldsListObj : any; constructor(private _http: HttpClient, private _columnService: ColumnService,private _formFieldsService : FormFieldsService) { this.drillDownColsList = []; this.valueOfColumnsList = []; this.showSpinner = true; this.valueOfColumnsArr = []; this.valueOfFormFieldArr = []; this.postDrillDownObj = {}; this.noValueRadioArr = []; this.valueValueArr = []; this.radioButtonCheckedArr = []; this.fieldValuesArr = []; this.drillDownArray = []; this.formFieldsListObj = []; } ngOnInit() { console.log(this.drillDownObj); this._formFieldsService.getListOfFormFields() .subscribe((responseFormFields) => { for (let m = 0; m < responseFormFields.length; m++) { responseFormFields[m]["orderSeq"] = m + 1; this.formFieldsListObj.push(responseFormFields[m]); } }); this._columnService.getDrillDownReportColumnDetails(this.drillDownObj['drillDownUrl']) .subscribe((response) => { console.log(response); let i = 0; while (response[i]) { this.drillDownColsList.push(response[i]); const model = new DrillDownModel(response[i]['id'], response[i]['name'], 'No Value'); this.drillDownModel.push(model); i++; } console.log(this.drillDownColsList); this._columnService.getColumnList() .subscribe((responseValueOfColumn) => { console.log(responseValueOfColumn); let k = 0; while (responseValueOfColumn[k]) { this.valueOfColumnsList.push(responseValueOfColumn[k]); k++; } this.drillDownArray = this.generateDrillDownArray(this.drillDownObj['drillDownParams']) ; let isFieldValue = false; let dda_cntr = 0; for (dda_cntr = 0; dda_cntr < this.drillDownArray.length; dda_cntr++) { let isFixedValue = true; let vcl_cntr = 0; for (vcl_cntr = 0; vcl_cntr < this.valueOfColumnsList.length; vcl_cntr++) { if (this.drillDownArray[dda_cntr]['value'] === this.valueOfColumnsList[vcl_cntr]['id']) { let ddm_cntr = 0; for (ddm_cntr = 0; ddm_cntr < this.drillDownModel.length; ddm_cntr++) { if (this.drillDownModel[ddm_cntr]['id'] === this.drillDownArray[dda_cntr]['id']) { this.drillDownModel[ddm_cntr].radioButtonValue = 'column'; this.drillDownModel[ddm_cntr].valueOfColumnData = this.valueOfColumnsList[vcl_cntr]['name']; this.drillDownModel[ddm_cntr].selected = 'column'; this.drillDownModel[ddm_cntr].columnID = this.valueOfColumnsList[vcl_cntr]['id']; isFixedValue = false; } } } } let ddcl_cntr = 0; for (ddcl_cntr = 0; ddcl_cntr < this.formFieldsListObj.length; ddcl_cntr++) { if (this.drillDownArray[dda_cntr]['value'] === this.formFieldsListObj[ddcl_cntr]['id']) { let ddm_cntr = 0; for (ddm_cntr = 0; ddm_cntr < this.drillDownModel.length; ddm_cntr++) { if (this.drillDownModel[ddm_cntr]['id'] === this.drillDownArray[dda_cntr]['id']) { this.drillDownModel[ddm_cntr].radioButtonValue = 'field'; this.drillDownModel[ddm_cntr].valueOfFormFieldData = this.formFieldsListObj[ddcl_cntr]['name']; this.drillDownModel[ddm_cntr].selected = 'field'; isFixedValue = false; isFieldValue = true; } } } } if (isFixedValue && this.drillDownArray[dda_cntr]['value'] !== null) { let ddm_cntr = 0; for (ddm_cntr = 0; ddm_cntr < this.drillDownModel.length; ddm_cntr++) { if (this.drillDownModel[ddm_cntr]['id'] === this.drillDownArray[dda_cntr]['id']) { this.drillDownModel[ddm_cntr].radioButtonValue = 'fixed'; this.drillDownModel[ddm_cntr].fixedValueData = this.drillDownArray[dda_cntr]['value']; this.drillDownModel[ddm_cntr].selected = 'fixed'; } } } } this.showSpinner = false; }); }); } ngDoCheck() { let outPut = ''; if (this.drillDownModel.length > 0) { let ddm_cntr = 0; for (ddm_cntr = 0; ddm_cntr < this.drillDownModel.length; ddm_cntr++) { const fixedValue = this.drillDownModel[ddm_cntr].fixedValueData; if (this.drillDownModel[ddm_cntr].radioButtonValue === 'fixed') { outPut = outPut + this.drillDownModel[ddm_cntr].id + '=' + fixedValue + '&;'; } if (this.drillDownModel[ddm_cntr].radioButtonValue === 'column') { let value_counter = 0; let valueOut = ''; for (value_counter = 0; value_counter < this.valueOfColumnsList.length; value_counter++) { if (this.valueOfColumnsList[value_counter]['name'] === this.drillDownModel[ddm_cntr].valueOfColumnData) { valueOut = this.valueOfColumnsList[value_counter]['id']; } } outPut = outPut + this.drillDownModel[ddm_cntr].id + '=' + '[' + valueOut + ']' + '&;'; } if (this.drillDownModel[ddm_cntr].radioButtonValue === 'field') { let fieldCntr = 0; let fieldOut = ''; for (fieldCntr = 0; fieldCntr < this.formFieldsListObj.length; fieldCntr++) { if (this.formFieldsListObj[fieldCntr]['name'] === this.drillDownModel[ddm_cntr].valueOfFormFieldData) { fieldOut = this.formFieldsListObj[fieldCntr]['id']; } } outPut = outPut + this.drillDownModel[ddm_cntr].id + '=' + '[!' + fieldOut + ']' + '&;'; } } if (outPut.endsWith('&;')) { outPut = outPut.substring(0, outPut.length - 2); } } this.completed.emit(outPut); } generateDrillDownArray(value: String) { const generatedArray = []; if (value != null) { value = value.replace(/\[/g, '').replace(/\]/g, '').replace(/;/g, '').replace(/\!/g, ''); const firstSplit = value.split('&'); for (let i = 0; i < firstSplit.length; i++) { const secondSplit = firstSplit[i].split('='); generatedArray.push({ id: secondSplit[0], value: secondSplit[1] }); } } return generatedArray; } save() { this.completed.emit('hello'); } }