41 lines
1.1 KiB
TypeScript
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,
|
|
};
|
|
}
|
|
}
|