blob: c2dbb35d718f1e969f6554c6c824200e7630e38a [file] [log] [blame]
import {
Component,
OnInit,
Input,
ElementRef,
AfterViewInit,
ViewChild,
} from '@angular/core';
import * as shape from 'd3-shape';
import * as _ from 'lodash';
import { Workflow, Job } from '../shared/workflow.model';
@Component({
selector: 'hi-workflow-dag',
templateUrl: './workflow-dag.component.html',
styleUrls: ['./workflow-dag.component.scss'],
})
export class WorkflowDagComponent implements OnInit, AfterViewInit {
@Input()
workflow: Workflow;
curve: any = shape.curveLinear;
view = [800, 600];
data = {
nodes: [],
links: [],
};
jobNameToId = {};
@ViewChild('graph', { static: true })
graph;
constructor(protected el: ElementRef) {}
ngOnInit() {
this.loadJobs();
}
ngAfterViewInit() {
// console.log(this.el);
// console.log(this.graph);
}
protected loadJobs() {
// process nodes
_.forEach(this.workflow.jobs, (job: Job) => {
const newId = (this.data.nodes.length + 1).toString();
this.data.nodes.push({
id: newId,
label: job.name,
description: job.rawName,
state: job.state,
});
this.jobNameToId[job.name] = newId;
});
// process edges/links
_.forEach(this.workflow.jobs, (job: Job) => {
_.forEach(job.parents, (parentName) => {
this.data.links.push({
source: this.jobNameToId[parentName],
target: this.jobNameToId[job.name],
});
});
});
}
}