import { Component, Input, OnInit, SimpleChanges } from "@angular/core";
import { BUSINESS_STATUS } from "../../../../../constants/constants";
import { SlicingTaskServices } from ".././../../../core/services/slicingTaskServices";
import { NzModalService, NzMessageService } from "ng-zorro-antd";
import * as moment from "moment";
import { INTERVAL_TIME } from "../constant";
@Component({
selector: "app-csmf-slicing-business-management",
templateUrl: "./csmf-slicing-business-management.component.html",
styleUrls: ["./csmf-slicing-business-management.component.less"],
})
export class CsmfSlicingBusinessManagementComponent implements OnInit {
constructor(
private myhttp: SlicingTaskServices,
private modalService: NzModalService,
private message: NzMessageService
) {}
@Input() currentTabTitle;
intervalTime: number = INTERVAL_TIME;
ngOnChanges(changes: SimpleChanges) {
if (changes.currentTabTitle.currentValue === "Communication Service") {
this.getCSMFBusinessList();
} else {
this.progressingTimer.forEach((item) => {
clearInterval(item.timer);
});
this.progressingTimer = [];
}
}
ngOnInit() {}
ngOnDestroy() {
this.progressingTimer.forEach((item) => {
clearInterval(item.timer);
});
}
selectedValue: string = BUSINESS_STATUS[0];
listOfData: any[] = [];
pageIndex: number = 1;
pageSize: number = 10;
total: number = 0;
loading = false;
statusOptions: any[] = BUSINESS_STATUS;
progressingTimer: any[] = [];
terminateStart: any[] = [];
businessOrderShow: boolean = false;
inputBusinessOrderShow: boolean = false;
orderForm: any;
getCSMFBusinessList(): void {
this.loading = true;
// this.listOfData = []; //solve the problem of blank screen after each operation
const paramsObj = {
status: this.selectedValue.toLocaleLowerCase(),
pageNo: this.pageIndex,
pageSize: this.pageSize,
};
const getCSMFSlicingBusinessListFailedCallback = () => {
this.loading = false;
};
this.myhttp
.getCSMFSlicingBusinessList(
paramsObj,
getCSMFSlicingBusinessListFailedCallback
)
.then((res) => {
const {
result_body: { slicing_order_list, record_number },
} = res;
this.loading = false;
this.total = record_number;
if (
slicing_order_list !== null &&
slicing_order_list.length > 0
) {
this.listOfData = slicing_order_list.map((item, index) => {
item.order_creation_time = moment(
Number(item.order_creation_time)
).format("YYYY-MM-DD HH:mm:ss");
if (
item.last_operation_progress &&
item.last_operation_type &&
Number(item.last_operation_progress) < 100
) {
const updata = (prodata: {
operation_progress: string;
}) => {
item.last_operation_progress =
prodata.operation_progress ||
item.last_operation_progress;
};
const obj = { serviceId: item.order_id };
if (
item.last_operation_type.toUpperCase() ===
"DELETE"
)
this.terminateStart[index] = true;
else this.terminateStart[index] = false;
this.queryProgress(obj, index, updata).then(() => {
item.last_operation_progress = "100";
this.getCSMFBusinessList();
});
}
return item;
});
}
});
}
getListOfProcessingStatus(): void {
this.pageIndex = 1;
this.pageSize = 10;
this.progressingTimer.forEach((item) => {
clearInterval(item.timer);
});
this.progressingTimer = [];
this.getCSMFBusinessList();
}
searchData(): void {
this.progressingTimer.forEach((item) => {
clearInterval(item.timer);
});
this.progressingTimer = [];
this.getCSMFBusinessList();
}
switchChange(slicing: any, i: number): void {
this.modalService.confirm({
nzTitle: "Are you sure you want to perform this task?",
nzContent: "Name:" + slicing.order_name + "",
nzOnOk: () => {
let paramsObj = {
serviceId: slicing.order_id,
};
if (slicing.order_status === "activated") {
this.changeActivate(paramsObj, false, i);
} else {
this.changeActivate(paramsObj, true, i);
}
},
nzCancelText: "No",
nzOnCancel: () => {
const singleSlicing = Object.assign({}, this.listOfData[i]);
this.listOfData[i] = singleSlicing;
this.listOfData = [...this.listOfData];
},
});
}
changeActivate(paramsObj: any, isActivate: boolean, index: number): void {
const changeActivateFailedCallback = () => {
const singleSlicing = Object.assign({}, this.listOfData[index]);
this.listOfData[index] = singleSlicing;
this.listOfData = [...this.listOfData];
this.getCSMFBusinessList();
};
this.myhttp
.changeActivateSlicingService(
paramsObj,
isActivate,
changeActivateFailedCallback
)
.then((res) => {
this.getCSMFBusinessList();
});
}
terminate(slicing: any, index: number): void {
this.modalService.confirm({
nzTitle: "Are you sure you want to terminate this task?",
nzContent: "Name: " + slicing.order_name,
nzOnOk: () => {
const paramsObj = { serviceId: slicing.order_id };
this.terminateStart[index] = true;
const terminateFailedCallback = () => {
this.terminateStart[index] = false;
};
this.myhttp
.terminateSlicingService(paramsObj, terminateFailedCallback)
.then((res) => {
this.getCSMFBusinessList();
});
},
nzCancelText: "No",
nzOnCancel: () => {
console.info("Cancel termination");
},
});
}
queryProgress(obj: any, index: number, callback: any) {
return new Promise((res) => {
const requery = () => {
const queryProgressFailedCallback = () => {
this.progressingTimer.forEach((item) => {
if (item.serviceId === obj.serviceId) {
clearInterval(item.timer);
}
});
this.getCSMFBusinessList();
};
this.myhttp
.getSlicingBusinessProgress(
obj,
queryProgressFailedCallback
)
.then((data) => {
if (
data.result_body.operation_progress &&
Number(data.result_body.operation_progress) < 100
) {
callback(data.result_body);
let progressSetTimeOut = setTimeout(() => {
requery();
}, this.intervalTime);
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);
}
});
};
requery();
});
}
OrderModelShow(): void {
this.orderForm = null;
this.businessOrderShow = true;
}
orderModelClose($event: any): void {
this.businessOrderShow = $event;
this.getCSMFBusinessList();
}
inputOrderModelShow(): void {
this.inputBusinessOrderShow = true;
}
inputOrderModelClose($event: any): void {
this.inputBusinessOrderShow = false;
if ($event.cancel) {
return;
}
this.orderForm = $event.param;
this.businessOrderShow = true;
}
}