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";
import { INTERVAL_TIME } from "../../../constant";
@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;
intervalTime: number = INTERVAL_TIME;
ngOnChanges(changes: SimpleChanges) {
if (
changes.currentTabName.currentValue ===
"Slicing Business Management"
) {
this.getBusinessList();
} 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;
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;
}
let getSlicingBusinessListFailedCallback = () => {
this.loading = false;
};
this.myhttp
.getSlicingBusinessList(
paramsObj,
this.isSelect,
getSlicingBusinessListFailedCallback
)
.then((res) => {
const {
result_body: { slicing_business_list, record_number },
} = res;
this.loading = false;
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;
let changeActivateFailedCallback = () => {
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();
};
this.myhttp
.changeActivateSlicingService(
paramsObj,
isActivate,
changeActivateFailedCallback
)
.then((res) => {
this.loading = false;
this.notification1.notificationSuccess(
"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;
let terminateFailedCallback = () => {
this.loading = false;
this.notification1.notificationFailed(
"slicing business",
"terminate",
slicing.service_instance_id
);
this.terminateStart[index] = false;
};
this.myhttp
.terminateSlicingService(paramsObj, terminateFailedCallback)
.then((res) => {
this.loading = false;
this.notification1.notificationSuccess(
"slicing business",
"terminate",
slicing.service_instance_id
);
this.getBusinessList();
});
},
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,
outerData: data,
},
});
}
queryProgress(obj, action, index, callback) {
return new Promise((res) => {
let requery = () => {
let queryProgressFailedCallback = () => {
this.progressingTimer.forEach((item) => {
if (item.serviceId === obj.serviceId) {
clearInterval(item.timer);
}
});
this.getBusinessList();
};
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();
});
}
}