import { Component, OnInit, NgZone } from '@angular/core'; import { MainPageService } from './../../../main-page.service'; import { Subject } from 'rxjs'; import { BasicDictionaryModel } from '../../../../models/dictionaries/basic-dictionary.model'; import { FormGroup, FormBuilder } from '@angular/forms'; import { WorkingPiperingModel } from '../../../../models/settings/working-pipering.model'; import { PipeRingModel } from '../../../../models/parts/pipering.model.'; @Component({ selector: 'app-pipe-to-piperings-managment', templateUrl: './pipe-to-piperings-managment.component.html', styleUrls: ['./pipe-to-piperings-managment.component.scss'] }) export class PipeToPiperingsManagmentComponent implements OnInit { public pipeToPiperingData: any; public isPipeToPiperingNew: boolean = false; public stateSubject: Subject = new Subject(); public pipeFunctionsArray: BasicDictionaryModel[] = []; public pipeMaterialTypesArray: BasicDictionaryModel[] = []; public workingPiperingsArray: WorkingPiperingModel[] = []; public editedWorkingPiperingData: WorkingPiperingModel; public canAddRowToPiperingsGrid = true; private piperingsOpenedGridRows: number = 0; public isPiperingsGridInChangeMode = false; public currentOpenRow: number; public formGroup: FormGroup; public rowNumber: number; private removeData: any; public piperingsArray: PipeRingModel[] = []; public orientationsArray: any[] = [{ id: 0, name: 'All' }, { id: 1, name: 'Veritcal' }, { id: 2, name: 'Horizontal' }]; constructor(private mainPageService: MainPageService, private formBuilder: FormBuilder) { } public ngOnInit(): void { this.loadData(); } loadData(): void { this.mainPageService.loadAllPipeFunctions().subscribe((res) => { this.pipeFunctionsArray = res; }); this.mainPageService.loadAllPipeMaterialTypes().subscribe((res) => { this.pipeMaterialTypesArray = res; }); this.mainPageService.loadAllPiperings().subscribe((res) => { this.piperingsArray = res; }); } private loadWorkingPiperings() { this.mainPageService.loadWorkingPiperings(this.pipeToPiperingData._id).subscribe((res) => { this.workingPiperingsArray = res; }); } public showManagmentPage(sender, isNew) { this.pipeToPiperingData = sender; this.isPipeToPiperingNew = isNew; this.loadWorkingPiperings(); } save(): void { this.pipeToPiperingData.pipeFunctionName = this.pipeFunctionsArray.find(x => x.id == this.pipeToPiperingData.pipeFunctionId).name; this.pipeToPiperingData._pipeFunctionId = this.pipeFunctionsArray.find(x => x.id == this.pipeToPiperingData.pipeFunctionId)._id; this.pipeToPiperingData.pipeMaterialTypeName = this.pipeMaterialTypesArray.find(x => x.id == this.pipeToPiperingData.pipeMaterialTypeId).name; this.pipeToPiperingData._pipeMaterialTypeId = this.pipeMaterialTypesArray.find(x => x.id == this.pipeToPiperingData.pipeMaterialTypeId)._id; this.mainPageService.updatePipeToPiperingInDb(JSON.stringify(this.pipeToPiperingData)).subscribe(() => { }); if (this.isPipeToPiperingNew) { this.isPipeToPiperingNew = false; } } returnHandler() { if (this.isPipeToPiperingNew) { this.mainPageService.removePipeToPipering(this.pipeToPiperingData._id).subscribe(() => { }); this.mainPageService.deletePipeToPiperingSubject.next(this.pipeToPiperingData._id); this.pipeToPiperingData = null; } this.stateSubject.next(this.pipeToPiperingData); this.pipeToPiperingData = null; } public editHandlerForPiperingData({ sender, rowIndex }) { this.canAddRowToPiperingsGrid = false; this.piperingsOpenedGridRows++; this.isPiperingsGridInChangeMode = true; this.currentOpenRow = rowIndex; this.formGroup = this.createFormGroupForPiperingsData(); sender.editRow(rowIndex, this.formGroup); } public cancelHandlerForPiperingData({ sender, rowIndex }) { if (this.isPiperingsGridInChangeMode) { this.piperingsOpenedGridRows--; sender.closeRow(rowIndex); if (this.piperingsOpenedGridRows === 0) { this.isPiperingsGridInChangeMode = false; } this.canAddRowToPiperingsGrid = true; } else { this.piperingsOpenedGridRows--; this.workingPiperingsArray = this.workingPiperingsArray.filter( item => item !== this.workingPiperingsArray[rowIndex] ); sender.closeRow(rowIndex); this.canAddRowToPiperingsGrid = true; } } public saveHandlerForPiperingData({ sender, formGroup, rowIndex }) { this.rowNumber = rowIndex; if (this.isPiperingsGridInChangeMode) { if (this.formGroup.valid ) { this.piperingsOpenedGridRows--; this.overwriteDataInGrid(rowIndex); sender.closeRow(rowIndex); this.canAddRowToPiperingsGrid = true; if (this.piperingsOpenedGridRows === 0) { this.isPiperingsGridInChangeMode = false; } // this.changeElementUnitsToSI(rowIndex); this.editedWorkingPiperingData = this.workingPiperingsArray[rowIndex]; this.saveEditedPipering(); } } else { if (this.formGroup.valid ) { this.piperingsOpenedGridRows--; this.overwriteDataInGrid(rowIndex); sender.closeRow(rowIndex); this.canAddRowToPiperingsGrid = true; if (this.piperingsOpenedGridRows === 0) { this.isPiperingsGridInChangeMode = false; } // this.changeElementUnitsToSI(rowIndex); this.editedWorkingPiperingData = this.workingPiperingsArray[rowIndex]; this.saveNewPipering(); } } } public addHandlerForPiperingData({ sender }) { this.piperingsOpenedGridRows++; this.workingPiperingsArray.push(new WorkingPiperingModel(null, null, this.pipeToPiperingData.id, this.pipeToPiperingData._id)); this.canAddRowToPiperingsGrid = false; this.currentOpenRow = this.workingPiperingsArray.length - 1; sender.editRow( this.workingPiperingsArray.length - 1, this.formGroup = this.createFormGroupForPiperingsData( ) ); } public removeHandler({ dataItem }) { this.removeData = dataItem; } public createFormGroupForPiperingsData(): FormGroup { return this.formBuilder.group({ }); } overwriteDataInGrid(rowIndex) { // this.workingPiperingsArray[rowIndex]._piperingId = // this.piperingsArray.find(x => x.id == this.workingPiperingsArray[rowIndex].piperingId)._id; this.workingPiperingsArray[rowIndex].piperingName = this.piperingsArray.find(x => x._id == this.workingPiperingsArray[rowIndex]._piperingId).name; } saveNewPipering() { console.log(this.editedWorkingPiperingData); this.mainPageService.addNewWorkingPiperingIntoDb( JSON.stringify(this.workingPiperingsArray[this.rowNumber])).subscribe((response) => { this.editedWorkingPiperingData._id = response._id; this.editedWorkingPiperingData.id = response.id; this.workingPiperingsArray[this.rowNumber] = this.editedWorkingPiperingData; }); } saveEditedPipering() { console.log(this.workingPiperingsArray[this.rowNumber]); this.mainPageService.updateWorkingPiperingInDb(JSON.stringify(this.editedWorkingPiperingData)).subscribe(() => { }); } public removePipering() { let index; for (let i = 0; i < this.workingPiperingsArray.length; i++) { if (this.workingPiperingsArray[i]._id === this.removeData._id) { index = i; } } this.deletePipePipering(this.workingPiperingsArray[index]); } deletePipePipering(size) { this.mainPageService.removeWorkingPipering(size._id).subscribe(() => { }, () => { }); this.mainPageService.deleteWorkingPiperingSubject.next(size._id); } }