import {Component, Input, OnInit, ViewChild,SimpleChanges} from '@angular/core'; import { SlicingTaskServices } from '.././../../../../../core/services/slicingTaskServices'; import { BUSINESS_STATUS } from '../../../../../../../constants/constants'; import { NzModalService, NzMessageService } from 'ng-zorro-antd'; import { SlicingBusinessModelComponent } from '../slicing-business-model/slicing-business-model.component'; @Component({ selector: 'app-slicing-business-table', templateUrl: './slicing-business-table.component.html', styleUrls: ['./slicing-business-table.component.less'] }) export class SlicingBusinessTableComponent implements OnInit { constructor( private myhttp: SlicingTaskServices, private modalService: NzModalService, private message: NzMessageService ) { } @Input() currentTabName; ngOnChanges(changes: SimpleChanges) { if(changes.currentTabName.currentValue === 'Slicing Business Management'){ this.getBusinessList() }else { this.progressingTimer.forEach((item) => { clearInterval(item.timer); }); this.progressingTimer = []; } } ngOnInit() { } selectedValue: string = BUSINESS_STATUS[0]; listOfData: any[] = []; pageIndex: number = 1; pageSize: number = 10; total: number = 0; loading = false; isSelect: boolean = false; statusOptions: any[] = BUSINESS_STATUS; progressingTimer: any[] = []; terminateStart: any[] = []; @ViewChild('notification') notification1: any; getBusinessList(): void { this.loading = true; this.isSelect = false; this.listOfData = []; let paramsObj = { pageNo: this.pageIndex, pageSize: this.pageSize }; if (this.selectedValue !== BUSINESS_STATUS[0]) { paramsObj["businessStatus"] = this.selectedValue.toLocaleLowerCase(); this.isSelect = true; } this.myhttp.getSlicingBusinessList(paramsObj, this.isSelect).subscribe(res => { const { result_header: { result_code }, result_body: { slicing_business_list, record_number } } = res; this.loading = false; if (+result_code === 200) { this.total = record_number; if(slicing_business_list !==null && slicing_business_list.length >0){ this.listOfData = slicing_business_list.map((item, index) => { if (item.last_operation_progress && item.last_operation_type && Number(item.last_operation_progress) < 100) { let updata = (prodata: { operation_progress: string }) => { item.last_operation_progress = prodata.operation_progress || item.last_operation_progress; }; let obj = { serviceId: item.service_instance_id }; if (item.last_operation_type.toUpperCase() === 'DELETE') this.terminateStart[index] = true else this.terminateStart[index] = false; this.queryProgress(obj, item.orchestration_status, index, updata).then((res) => { item.last_operation_progress = '100'; this.getBusinessList(); }) } return item }); } } }) } getListOfProcessingStatus() { this.pageIndex = 1; this.pageSize = 10; this.progressingTimer.forEach((item) => { clearInterval(item.timer); }); this.progressingTimer = []; this.getBusinessList(); } searchData(reset: boolean = false) { this.progressingTimer.forEach((item) => { clearInterval(item.timer); }); this.progressingTimer = []; this.getBusinessList(); } switchChange(slicing, i) { this.modalService.confirm({ nzTitle: 'Do you Want to ' + (slicing.orchestration_status === 'activated' ? 'deactivate' : 'activate') + ' slicing business?', nzContent: 'Name:' + slicing.service_instance_name + '', nzOnOk: () => { this.notification1.notificationStart('slicing business', slicing.orchestration_status === 'activated' ? 'deactivate' : 'activate', slicing.service_instance_id); let paramsObj = { serviceId: slicing.service_instance_id }; if (slicing.orchestration_status === 'activated') { this.changeActivate(paramsObj, false, slicing, "deactivate", "deactivated", i) } else { this.changeActivate(paramsObj, true, slicing, "activate", "activated", i); } }, nzCancelText: 'No', nzOnCancel: () => { let singleSlicing = Object.assign({}, this.listOfData[i]); this.listOfData[i] = singleSlicing; this.listOfData = [...this.listOfData]; } }); } changeActivate(paramsObj, isActivate, slicing, activateValue, finished, index) { this.loading = true; this.myhttp.changeActivateSlicingService(paramsObj, isActivate).subscribe(res => { const { result_header: { result_code, result_message }, result_body: { operation_id } } = res; this.loading = false; if (+result_code === 200) { this.notification1.notificationSuccess('slicing business', finished, slicing.service_instance_id); this.getBusinessList(); } else { let singleSlicing = Object.assign({}, this.listOfData[index]); this.listOfData[index] = singleSlicing; this.listOfData = [...this.listOfData]; this.notification1.notificationFailed('slicing business', finished, slicing.service_instance_id); this.getBusinessList(); } this.getBusinessList(); }, () => { this.loading = false; let singleSlicing = Object.assign({}, this.listOfData[index]); this.listOfData[index] = singleSlicing; this.listOfData = [...this.listOfData]; this.notification1.notificationFailed('slicing business', finished, slicing.service_instance_id); this.getBusinessList(); }) } terminate(slicing,index) { this.modalService.confirm({ nzTitle: 'Do you Want to terminate slicing business?', nzContent: 'Name: ' + slicing.service_instance_name, nzOnOk: () => { this.notification1.notificationStart('slicing business', 'terminate', slicing.service_instance_id); let paramsObj = { serviceId: slicing.service_instance_id }; this.terminateStart[index] = true; this.loading = true; this.myhttp.terminateSlicingService(paramsObj).subscribe(res => { const { result_header: { result_code, result_message }, result_body: { operation_id } } = res; this.loading = false; if (+result_code === 200) { this.notification1.notificationSuccess('slicing business', 'terminate', slicing.service_instance_id); this.getBusinessList(); } else { this.notification1.notificationFailed('slicing business', 'terminate', slicing.service_instance_id); this.terminateStart[index] = false; } }, () => { this.loading = false; this.notification1.notificationFailed('slicing business', 'terminate', slicing.service_instance_id); this.terminateStart[index] = false; }) }, nzCancelText: 'No', nzOnCancel: () => { console.info('Cancel termination') } }); } showdetail(data) { const BusinessModal = this.modalService.create({ nzTitle: "Detail", nzContent: SlicingBusinessModelComponent, nzWidth: "70%", nzOkText: null, nzCancelText: null, nzComponentParams: { businessId: data.service_instance_id } }) } queryProgress(obj, action, index, callback) { return new Promise(res => { let requery = () => { this.myhttp.getSlicingBusinessProgress(obj) .subscribe((data) => { const { result_header: { result_code, result_message }, result_body: { operation_id } } = data; if (+result_code === 200) { if (data.result_body.operation_progress && Number(data.result_body.operation_progress) < 100) { callback(data.result_body); let progressSetTimeOut = setTimeout(() => { requery(); }, 5000); this.progressingTimer.push({ id: obj.serviceId, timer: progressSetTimeOut }) } else { this.progressingTimer.forEach((item) => { if (item.serviceId === obj.serviceId) { clearInterval(item.timer); } }); res(data.result_body); } } else { this.progressingTimer.forEach((item) => { if (item.serviceId === obj.serviceId) { clearInterval(item.timer); } }); this.getBusinessList(); this.message.error(result_message); } }, (err) => { this.progressingTimer.forEach((item) => { if (item.serviceId === obj.serviceId) { clearInterval(item.timer); } }); this.getBusinessList(); this.message.error(err); }) }; requery(); }) } }