blob: ed45ce43cda801d0e94f8a40da3764749bb90994 [file] [log] [blame]
import {AfterViewChecked, Component, ViewChild} from '@angular/core';
import {ServiceInfoService} from '../shared/server/serviceInfo/serviceInfo.service';
import {ServiceInfoModel} from '../shared/server/serviceInfo/serviceInfo.model';
import {InstantiationStatusComponentService} from './instantiationStatus.component.service';
import {ContextMenuComponent, ContextMenuService} from 'ngx-contextmenu';
import {AuditInfoModalComponent} from "./auditInfoModal/auditInfoModal.component";
import * as _ from 'lodash';
import {ScrollToConfigOptions, ScrollToService} from '@nicky-lenaers/ngx-scroll-to';
import {ConfigurationService} from "../services/configuration.service";
import {LogService} from '../shared/utils/log/log.service';
@Component({
selector : 'instantiation-status',
templateUrl : './instantiationStatus.component.html',
styleUrls : ['./instantiationStatus.component.scss']
})
export class InstantiationStatusComponent implements AfterViewChecked{
TIMER_TIME_IN_SECONDS : number = 0;
timer = null;
dataIsReady : boolean = false;
scroll : boolean = false;
lastUpdatedDate: Date = null;
currentJobId: string = null;
instantiationStatusComponentService: InstantiationStatusComponentService;
configurationService : ConfigurationService;
serviceInfoData: Array<ServiceInfoModel> = null;
@ViewChild(ContextMenuComponent) public contextMenu: ContextMenuComponent;
constructor(private _serviceInfoService: ServiceInfoService,
private _instantiationStatusComponentService : InstantiationStatusComponentService,
private _contextMenuService: ContextMenuService,
private _configurationService : ConfigurationService,
private _scrollToService: ScrollToService,
private _logService : LogService) {
this.instantiationStatusComponentService = _instantiationStatusComponentService;
this.configurationService = this._configurationService;
this.configurationService.getConfiguration("refreshTimeInstantiationDashboard").subscribe(response => {
this.TIMER_TIME_IN_SECONDS = _.isNumber(response) ? response : 0;
this.activateInterval();
this.refreshData();
});
}
activateInterval() {
if (this.TIMER_TIME_IN_SECONDS > 0) {
this.timer = setInterval(() => {
this.refreshData();
}, this.TIMER_TIME_IN_SECONDS * 1000);
}
}
deactivateInterval() {
clearInterval(this.timer);
}
refreshData(): void {
this.dataIsReady = false;
this._serviceInfoService.getServicesJobInfo(true)
.subscribe((res: Array<ServiceInfoModel>) => {
this._instantiationStatusComponentService.convertObjectToArray(res).subscribe((res) => {
this._logService.info('refresh instantiation status table', res);
this.dataIsReady = true;
this.lastUpdatedDate = new Date();
if (!_.isEqual(this.serviceInfoData, res)) {
this.serviceInfoData = res;
this.scroll = true;
}
});
})
}
ngAfterViewChecked(){
if (this.scroll) {
this.scrollToElement();
this.scroll = false;
}
}
isDeleteEnabled(item):boolean {
return _.includes(['PENDING', 'STOPPED'], item.jobStatus);
}
deleteItem(item): void {
this._serviceInfoService.deleteJob(item.jobId).subscribe(() => {
this.refreshData();
});
}
hideItem(item): void {
this._serviceInfoService.hideJob(item.jobId).subscribe(() => {
this.refreshData();
});
}
auditInfo(jobData : ServiceInfoModel): void {
AuditInfoModalComponent.openModal.next(jobData);
}
isOpenVisible(item):boolean {
return _.includes(['COMPLETED', 'PAUSE'], item.jobStatus);
}
open(item): void {
let query =
`subscriberId=${item['subscriberName']}&` +
`serviceType=${item['serviceType']}&` +
`serviceInstanceId=${item['serviceInstanceId']}`;
window.parent.location.assign('../../serviceModels.htm#/instantiate?' + query);
}
public onContextMenu($event: MouseEvent, item: any): void {
this._contextMenuService.show.next({
contextMenu: this.contextMenu,
event: $event,
item: item,
});
$event.preventDefault();
$event.stopPropagation();
}
getImagesSrc(imageName : string) : string {
return './' + imageName + '.svg';
}
isHideEnabled(item: any):boolean {
return _.includes(['COMPLETED', 'FAILED', 'STOPPED'], item.jobStatus);
}
scrollToElement() {
if(this.currentJobId){
const config: ScrollToConfigOptions = {
target: this.currentJobId,
duration: 50,
offset: -35 //header height
};
this._scrollToService.scrollTo(config);
}
}
}