41 lines
1.1 KiB
TypeScript

// nx-ignore-next-line
import type { ProjectGraphProjectNode, Task } from '@nx/devkit';
import * as cy from 'cytoscape';
export interface TaskNodeDataDefinition extends cy.NodeDataDefinition {
id: string;
label: string;
executor: string;
description?: string;
}
export class TaskNode {
constructor(private task: Task, private project: ProjectGraphProjectNode) {}
getCytoscapeNodeDef(
groupByProject: boolean
): cy.NodeDefinition & { pannable: boolean } {
return {
group: 'nodes',
classes: 'taskNode',
data: this.getData(groupByProject),
selectable: false,
grabbable: false,
pannable: true,
};
}
private getData(groupByProject: boolean): TaskNodeDataDefinition {
const label = groupByProject
? this.task.id.split(':').slice(1).join(':')
: this.task.id;
return {
id: this.task.id,
label,
executor: this.project.data.targets[this.task.target.target].executor,
parent: groupByProject ? this.task.target.project : null,
description: this.project.data.description,
};
}
}