in src/gantt.ts [2561:2664]
private taskResourceRender(
taskSelection: Selection<Task>,
taskConfigHeight: number): void {
const groupTasks: boolean = this.viewModel.settings.general.groupTasks;
let newLabelPosition: ResourceLabelPositions | null = null;
if (groupTasks && !this.groupTasksPrevValue) {
newLabelPosition = ResourceLabelPositions.Inside;
}
if (!groupTasks && this.groupTasksPrevValue) {
newLabelPosition = ResourceLabelPositions.Right;
}
if (newLabelPosition) {
this.host.persistProperties(<VisualObjectInstancesToPersist>{
merge: [{
objectName: "taskResource",
selector: null,
properties: { position: newLabelPosition }
}]
});
this.viewModel.settings.taskResource.position = newLabelPosition;
newLabelPosition = null;
}
this.groupTasksPrevValue = groupTasks;
const isResourcesFilled: boolean = this.viewModel.isResourcesFilled;
const taskResourceShow: boolean = this.viewModel.settings.taskResource.show;
const taskResourceColor: string = this.viewModel.settings.taskResource.fill;
const taskResourceFontSize: number = this.viewModel.settings.taskResource.fontSize;
const taskResourcePosition: ResourceLabelPositions = this.viewModel.settings.taskResource.position;
const taskResourceFullText: boolean = this.viewModel.settings.taskResource.fullText;
const taskResourceWidthByTask: boolean = this.viewModel.settings.taskResource.widthByTask;
const isGroupedByTaskName: boolean = this.viewModel.settings.general.groupTasks;
if (isResourcesFilled && taskResourceShow) {
let taskResource: Selection<Task> = taskSelection
.selectAll(Selectors.TaskResource.selectorName)
.data((d: Task) => [d]);
const taskResourceMerged = taskResource
.enter()
.append("text")
.merge(taskResource);
taskResourceMerged.classed(Selectors.TaskResource.className, true);
taskResourceMerged
.attr("x", (task: Task) => this.getResourceLabelXCoordinate(task, taskConfigHeight, taskResourceFontSize, taskResourcePosition))
.attr("y", (task: Task) => Gantt.getBarYCoordinate(task.index, taskConfigHeight)
+ Gantt.getResourceLabelYOffset(taskConfigHeight, taskResourceFontSize, taskResourcePosition)
+ (task.index + 1) * this.getResourceLabelTopMargin())
.text((task: Task) => _.isEmpty(task.Milestones) && task.resource || "")
.style("fill", taskResourceColor)
.style("font-size", PixelConverter.fromPoint(taskResourceFontSize));
let self: Gantt = this;
let hasNotNullableDates: boolean = this.hasNotNullableDates;
const defaultWidth: number = Gantt.DefaultValues.ResourceWidth - Gantt.ResourceWidthPadding;
if (taskResourceWidthByTask) {
taskResourceMerged
.each(function (task: Task, outerIndex: number) {
const width: number = hasNotNullableDates ? self.taskDurationToWidth(task.start, task.end) : 0;
AxisHelper.LabelLayoutStrategy.clip(d3.select(this), width, textMeasurementService.svgEllipsis);
});
} else if (isGroupedByTaskName) {
taskResourceMerged
.each(function (task: Task, outerIndex: number) {
const sameRowNextTaskStart: Date = self.getSameRowNextTaskStartDate(task, outerIndex, taskResourceMerged);
if (sameRowNextTaskStart) {
let width: number = 0;
if (hasNotNullableDates) {
const startDate: Date = taskResourcePosition === ResourceLabelPositions.Top ? task.start : task.end;
width = self.taskDurationToWidth(startDate, sameRowNextTaskStart);
}
AxisHelper.LabelLayoutStrategy.clip(d3.select(this), width, textMeasurementService.svgEllipsis);
} else {
if (!taskResourceFullText) {
AxisHelper.LabelLayoutStrategy.clip(d3.select(this), defaultWidth, textMeasurementService.svgEllipsis);
}
}
});
} else if (!taskResourceFullText) {
taskResourceMerged
.each(function (task: Task, outerIndex: number) {
AxisHelper.LabelLayoutStrategy.clip(d3.select(this), defaultWidth, textMeasurementService.svgEllipsis);
});
}
taskResource
.exit()
.remove();
} else {
taskSelection
.selectAll(Selectors.TaskResource.selectorName)
.remove();
}
}