UNPKG

@visactor/vtable-gantt

Version:

canvas table width high performance

460 lines (454 loc) 31.3 kB
import { Group, createLine, Polygon } from "@visactor/vtable/es/vrender"; import { computeCountToTimeScale, createDateAtMidnight } from "../tools/util"; import { clearRecordLinkInfos, findRecordByTaskKey } from "../gantt-helper"; import { DependencyType, TasksShowMode, TaskType } from "../ts-types"; export class DependencyLink { constructor(scene) { this._scene = scene, this.width = scene._gantt.tableNoFrameWidth, this.height = scene._gantt.gridHeight, this.group = new Group({ x: 0, y: scene._gantt.getAllHeaderRowsHeight(), width: this.width, height: this.height, pickable: !1, clip: !0 }), this.group.name = "dependency-link-container", scene.ganttGroup.addChild(this.group), this.initLinkLines(); } initLinkLines() { var _a; if (clearRecordLinkInfos(this._scene._gantt.records), this.linkLinesContainer = new Group({ x: 0, y: 0, width: this._scene._gantt.getAllDateColsWidth(), height: this._scene._gantt.getAllTaskBarsHeight(), pickable: !1, clip: !0 }), this.group.appendChild(this.linkLinesContainer), null === (_a = this._scene._gantt.records) || void 0 === _a ? void 0 : _a.length) for (let i = 0; i < this._scene._gantt.parsedOptions.dependencyLinks.length; i++) this.initLinkLine(i); } initLinkLine(index) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; const {taskKeyField: taskKeyField, dependencyLinks: dependencyLinks} = this._scene._gantt.parsedOptions, link = dependencyLinks[index], {linkedToTaskKey: linkedToTaskKey, linkedFromTaskKey: linkedFromTaskKey, type: type} = link, linkedToTaskRecord = findRecordByTaskKey(this._scene._gantt.records, taskKeyField, linkedToTaskKey), linkedFromTaskRecord = findRecordByTaskKey(this._scene._gantt.records, taskKeyField, linkedFromTaskKey); if (!linkedToTaskRecord || !linkedFromTaskRecord) return; let linkedToTaskStartDate, linkedToTaskEndDate, linkedToTaskTaskDays, linkedFromTaskStartDate, linkedFromTaskEndDate, linkedFromTaskTaskDays, linkedToTaskShowIndex, linkedFromTaskShowIndex; if (linkedToTaskRecord.record.vtable_gantt_linkedTo || (linkedToTaskRecord.record.vtable_gantt_linkedTo = []), linkedToTaskRecord.record.vtable_gantt_linkedTo.push(link), linkedFromTaskRecord.record.vtable_gantt_linkedFrom || (linkedFromTaskRecord.record.vtable_gantt_linkedFrom = []), linkedFromTaskRecord.record.vtable_gantt_linkedFrom.push(link), this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Inline) linkedFromTaskShowIndex = linkedFromTaskRecord.index[0], linkedToTaskShowIndex = linkedToTaskRecord.index[0], ({startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate, taskDays: linkedToTaskTaskDays} = this._scene._gantt.getTaskInfoByTaskListIndex(linkedToTaskRecord.index[0], linkedToTaskRecord.index[1])), ({startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate, taskDays: linkedFromTaskTaskDays} = this._scene._gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index[0], linkedFromTaskRecord.index[1])); else if (this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Project_Sub_Tasks_Inline) { const fromParentRecordShowIndex = this._scene._gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index.slice(0, -1)), toParentRecordShowIndex = this._scene._gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index.slice(0, -1)), fromParentRecord = this._scene._gantt.getRecordByIndex(fromParentRecordShowIndex), toParentRecord = this._scene._gantt.getRecordByIndex(toParentRecordShowIndex); linkedFromTaskShowIndex = fromParentRecord.type === TaskType.PROJECT && "expand" !== fromParentRecord.hierarchyState && !1 !== this._scene._gantt.parsedOptions.projectSubTasksExpandable ? fromParentRecordShowIndex : this._scene._gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index), linkedToTaskShowIndex = toParentRecord.type === TaskType.PROJECT && "expand" !== toParentRecord.hierarchyState && !1 !== this._scene._gantt.parsedOptions.projectSubTasksExpandable ? toParentRecordShowIndex : this._scene._gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index), ({startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate, taskDays: linkedToTaskTaskDays} = this._scene._gantt.getTaskInfoByTaskListIndex(linkedToTaskShowIndex, linkedToTaskRecord.index)), ({startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate, taskDays: linkedFromTaskTaskDays} = this._scene._gantt.getTaskInfoByTaskListIndex(linkedFromTaskShowIndex, linkedFromTaskRecord.index)); } else if (this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate || this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange || this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact) { linkedFromTaskShowIndex = this._scene._gantt.getRowsHeightByIndex(0, linkedFromTaskRecord.index[0] - 1) / this._scene._gantt.parsedOptions.rowHeight + (this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange || this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact ? linkedFromTaskRecord.record.vtable_gantt_showIndex : null !== (_a = linkedFromTaskRecord.index[1]) && void 0 !== _a ? _a : 0); linkedToTaskShowIndex = this._scene._gantt.getRowsHeightByIndex(0, linkedToTaskRecord.index[0] - 1) / this._scene._gantt.parsedOptions.rowHeight + (this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange || this._scene._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact ? linkedToTaskRecord.record.vtable_gantt_showIndex : null !== (_b = linkedToTaskRecord.index[1]) && void 0 !== _b ? _b : 0), ({startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate, taskDays: linkedToTaskTaskDays} = this._scene._gantt.getTaskInfoByTaskListIndex(linkedToTaskRecord.index[0], linkedToTaskRecord.index[1])), ({startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate, taskDays: linkedFromTaskTaskDays} = this._scene._gantt.getTaskInfoByTaskListIndex(linkedFromTaskRecord.index[0], linkedFromTaskRecord.index[1])); } else linkedFromTaskShowIndex = this._scene._gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index), linkedToTaskShowIndex = this._scene._gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index), ({startDate: linkedToTaskStartDate, endDate: linkedToTaskEndDate, taskDays: linkedToTaskTaskDays} = this._scene._gantt.getTaskInfoByTaskListIndex(linkedToTaskShowIndex)), ({startDate: linkedFromTaskStartDate, endDate: linkedFromTaskEndDate, taskDays: linkedFromTaskTaskDays} = this._scene._gantt.getTaskInfoByTaskListIndex(linkedFromTaskShowIndex)); if (!linkedFromTaskTaskDays || !linkedToTaskTaskDays) return; createDateAtMidnight(this._scene._gantt.parsedOptions.minDate); const {arrowPoints: arrowPoints, linePoints: linePoints} = generateLinkLinePoints(type, linkedFromTaskStartDate, linkedFromTaskEndDate, linkedFromTaskShowIndex, linkedFromTaskTaskDays, linkedFromTaskRecord.record.type === TaskType.MILESTONE, linkedToTaskStartDate, linkedToTaskEndDate, linkedToTaskShowIndex, linkedToTaskTaskDays, linkedToTaskRecord.record.type === TaskType.MILESTONE, this._scene._gantt), lineStyle = this._scene._gantt.parsedOptions.dependencyLinkLineStyle, lineObj = createLine({ pickable: !0, stroke: null !== (_d = null === (_c = link.linkLineStyle) || void 0 === _c ? void 0 : _c.lineColor) && void 0 !== _d ? _d : lineStyle.lineColor, lineWidth: null !== (_f = null === (_e = link.linkLineStyle) || void 0 === _e ? void 0 : _e.lineWidth) && void 0 !== _f ? _f : lineStyle.lineWidth, lineDash: null !== (_h = null === (_g = link.linkLineStyle) || void 0 === _g ? void 0 : _g.lineDash) && void 0 !== _h ? _h : lineStyle.lineDash, points: linePoints, pickStrokeBuffer: 3, vtable_link: link }); this.linkLinesContainer.appendChild(lineObj), link.vtable_gantt_linkLineNode = lineObj; const arrow = new Polygon({ fill: null !== (_k = null === (_j = link.linkLineStyle) || void 0 === _j ? void 0 : _j.lineColor) && void 0 !== _k ? _k : lineStyle.lineColor, points: arrowPoints }); this.linkLinesContainer.appendChild(arrow), link.vtable_gantt_linkArrowNode = arrow; } setX(x) { this.linkLinesContainer.setAttribute("x", x); } setY(y) { this.linkLinesContainer.setAttribute("y", y); } refresh() { this.width = this._scene._gantt.tableNoFrameWidth, this.height = this._scene._gantt.gridHeight, this.group.setAttributes({ height: this.height, width: this.width, y: this._scene._gantt.getAllHeaderRowsHeight() }); const x = this.linkLinesContainer.attribute.x, y = this.linkLinesContainer.attribute.y; this.linkLinesContainer.removeAllChild(), this.group.removeChild(this.linkLinesContainer), this.initLinkLines(), this.setX(x), this.setY(y); } resize() { this.width = this._scene._gantt.tableNoFrameWidth, this.height = this._scene._gantt.gridHeight, this.group.setAttribute("width", this.width), this.group.setAttribute("height", this.height); } createSelectedLinkLine(selectedLink) { const lineNode = selectedLink.vtable_gantt_linkLineNode, arrowNode = selectedLink.vtable_gantt_linkArrowNode, selectedLineNodelineNode = lineNode.clone(), selectedLinkArrowNode = arrowNode.clone(); selectedLineNodelineNode.setAttribute("stroke", this._scene._gantt.parsedOptions.dependencyLinkSelectedLineStyle.lineColor), selectedLineNodelineNode.setAttribute("lineWidth", this._scene._gantt.parsedOptions.dependencyLinkSelectedLineStyle.lineWidth), selectedLineNodelineNode.setAttribute("shadowColor", this._scene._gantt.parsedOptions.dependencyLinkSelectedLineStyle.shadowColor), selectedLineNodelineNode.setAttribute("shadowOffsetX", this._scene._gantt.parsedOptions.dependencyLinkSelectedLineStyle.shadowOffset), selectedLineNodelineNode.setAttribute("shadowOffsetY", this._scene._gantt.parsedOptions.dependencyLinkSelectedLineStyle.shadowOffset), selectedLineNodelineNode.setAttribute("shadowBlur", this._scene._gantt.parsedOptions.dependencyLinkSelectedLineStyle.shadowBlur), this.linkLinesContainer.appendChild(selectedLineNodelineNode), selectedLinkArrowNode.setAttribute("fill", this._scene._gantt.parsedOptions.dependencyLinkSelectedLineStyle.lineColor), this.linkLinesContainer.appendChild(selectedLinkArrowNode), this.selectedEffectNodes = [ selectedLineNodelineNode, selectedLinkArrowNode ]; } removeSelectedLinkLine() { var _a; null === (_a = this.selectedEffectNodes) || void 0 === _a || _a.forEach((node => { node.delete(); })), this.selectedEffectNodes = []; } deleteLink(link) { const linkLineNode = link.vtable_gantt_linkLineNode, lineArrowNode = link.vtable_gantt_linkArrowNode; linkLineNode.delete(), lineArrowNode.delete(); } } export function generateLinkLinePoints(type, linkedFromTaskStartDate, linkedFromTaskEndDate, linkedFromTaskRecordRowIndex, linkedFromTaskTaskDays, linkedFromTaskIsMilestone, linkedToTaskStartDate, linkedToTaskEndDate, linkedToTaskRecordRowIndex, linkedToTaskTaskDays, linkedToTaskIsMilestone, gantt) { const {unit: unit, step: step} = gantt.parsedOptions.reverseSortedTimelineScales[0], {minDate: minDate, rowHeight: rowHeight, timelineColWidth: timelineColWidth} = gantt.parsedOptions, taskBarMilestoneHypotenuse = gantt.parsedOptions.taskBarMilestoneHypotenuse; let startDate, endDate, linePoints = [], arrowPoints = []; if (type === DependencyType.FinishToStart) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = computeCountToTimeScale(linkedFromTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX = computeCountToTimeScale(linkedFromTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2); let linkToPointX = computeCountToTimeScale(linkedToTaskStartDate, minDate, unit, step) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX -= taskBarMilestoneHypotenuse / 2), linePoints = [ { x: linkFromPointX, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) }, { x: linkFromPointX + 20, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) }, { x: linkFromPointX + 20, y: rowHeight * (linkedFromTaskRecordRowIndex + (linkedFromTaskRecordRowIndex > linkedToTaskRecordRowIndex ? 0 : 1)) }, { x: linkToPointX - 20, y: rowHeight * (linkedFromTaskRecordRowIndex + (linkedFromTaskRecordRowIndex > linkedToTaskRecordRowIndex ? 0 : 1)) }, { x: linkToPointX - 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) }, { x: linkToPointX, y: rowHeight * (linkedToTaskRecordRowIndex + .5) } ], linkFromPointX + 20 <= linkToPointX - 20 && linePoints.splice(2, 3, { x: linkFromPointX + 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) }); const lastPoint = linePoints[linePoints.length - 1]; arrowPoints = [ { x: lastPoint.x, y: lastPoint.y }, { x: lastPoint.x - 10, y: lastPoint.y - 5 }, { x: lastPoint.x - 10, y: lastPoint.y + 5 }, { x: lastPoint.x, y: lastPoint.y } ]; } else if (type === DependencyType.StartToFinish) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = computeCountToTimeScale(linkedFromTaskStartDate, minDate, unit, step) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX -= taskBarMilestoneHypotenuse / 2); let linkToPointX = computeCountToTimeScale(linkedToTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX = computeCountToTimeScale(linkedToTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2), linePoints = [ { x: linkFromPointX, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) }, { x: linkFromPointX - 20, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) }, { x: linkFromPointX - 20, y: rowHeight * (linkedFromTaskRecordRowIndex + (linkedFromTaskRecordRowIndex > linkedToTaskRecordRowIndex ? 0 : 1)) }, { x: linkToPointX + 20, y: rowHeight * (linkedFromTaskRecordRowIndex + (linkedFromTaskRecordRowIndex > linkedToTaskRecordRowIndex ? 0 : 1)) }, { x: linkToPointX + 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) }, { x: linkToPointX, y: rowHeight * (linkedToTaskRecordRowIndex + .5) } ], linkFromPointX - 20 >= linkToPointX + 20 && linePoints.splice(2, 3, { x: linkFromPointX - 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) }); const lastPoint = linePoints[linePoints.length - 1]; arrowPoints = [ { x: lastPoint.x, y: lastPoint.y }, { x: lastPoint.x + 10, y: lastPoint.y - 5 }, { x: lastPoint.x + 10, y: lastPoint.y + 5 }, { x: lastPoint.x, y: lastPoint.y } ]; } else if (type === DependencyType.StartToStart) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = computeCountToTimeScale(linkedFromTaskStartDate, minDate, unit, step) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX -= taskBarMilestoneHypotenuse / 2); let linkToPointX = computeCountToTimeScale(linkedToTaskStartDate, minDate, unit, step) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX -= taskBarMilestoneHypotenuse / 2), linePoints = [ { x: linkFromPointX, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) }, { x: (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? linkFromPointX : Math.min(linkFromPointX, linkToPointX)) - 20, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) }, { x: (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? linkFromPointX : Math.min(linkFromPointX, linkToPointX)) - 20, y: rowHeight * (linkedToTaskRecordRowIndex + (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? 1 : .5)) }, { x: linkToPointX - 20, y: rowHeight * (linkedToTaskRecordRowIndex + (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? 1 : .5)) }, { x: (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? linkToPointX : Math.min(linkFromPointX, linkToPointX)) - 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) }, { x: linkToPointX, y: rowHeight * (linkedToTaskRecordRowIndex + .5) } ]; const lastPoint = linePoints[linePoints.length - 1]; arrowPoints = [ { x: lastPoint.x, y: lastPoint.y }, { x: lastPoint.x - 10, y: lastPoint.y - 5 }, { x: lastPoint.x - 10, y: lastPoint.y + 5 }, { x: lastPoint.x, y: lastPoint.y } ]; } else if (type === DependencyType.FinishToFinish) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = computeCountToTimeScale(linkedFromTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX = computeCountToTimeScale(linkedFromTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2); let linkToPointX = computeCountToTimeScale(linkedToTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX = computeCountToTimeScale(linkedToTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2), linePoints = [ { x: linkFromPointX, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) }, { x: (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? linkFromPointX : Math.max(linkFromPointX, linkToPointX)) + 20, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) }, { x: (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? linkFromPointX : Math.max(linkFromPointX, linkToPointX)) + 20, y: rowHeight * (linkedToTaskRecordRowIndex + (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? 1 : .5)) }, { x: linkToPointX + 20, y: rowHeight * (linkedToTaskRecordRowIndex + (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? 1 : .5)) }, { x: linkToPointX + 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) }, { x: linkToPointX, y: rowHeight * (linkedToTaskRecordRowIndex + .5) } ]; const lastPoint = linePoints[linePoints.length - 1]; arrowPoints = [ { x: lastPoint.x, y: lastPoint.y }, { x: lastPoint.x + 10, y: lastPoint.y - 5 }, { x: lastPoint.x + 10, y: lastPoint.y + 5 }, { x: lastPoint.x, y: lastPoint.y } ]; } return { linePoints: linePoints, arrowPoints: arrowPoints }; } export function updateLinkLinePoints(type, linkedFromTaskStartDate, linkedFromTaskEndDate, linkedFromTaskRecordRowIndex, linkedFromTaskTaskDays, linkedFromTaskIsMilestone, linkedFromMovedTaskBarNode, fromNodeDiffY, linkedToTaskStartDate, linkedToTaskEndDate, linkedToTaskRecordRowIndex, linkedToTaskTaskDays, linkedToTaskIsMilestone, linkedToMovedTaskBarNode, toNodeDiffY, gantt) { const {unit: unit, step: step} = gantt.parsedOptions.reverseSortedTimelineScales[0], {minDate: minDate, rowHeight: rowHeight, timelineColWidth: timelineColWidth} = gantt.parsedOptions, taskBarMilestoneHypotenuse = gantt.parsedOptions.taskBarMilestoneHypotenuse, milestoneTaskbarHeight = gantt.parsedOptions.taskBarMilestoneStyle.width; let startDate, endDate, linePoints = [], arrowPoints = []; if (type === DependencyType.FinishToStart) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x + linkedFromMovedTaskBarNode.attribute.width : computeCountToTimeScale(linkedFromTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x + linkedFromMovedTaskBarNode.attribute.width + (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2 : computeCountToTimeScale(linkedFromTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2); let linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x : computeCountToTimeScale(linkedToTaskStartDate, minDate, unit, step) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX -= (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2), linePoints = [ { x: linkFromPointX, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) + fromNodeDiffY }, { x: linkFromPointX + 20, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) + fromNodeDiffY }, { x: linkFromPointX + 20, y: rowHeight * (linkedFromTaskRecordRowIndex + (linkedFromTaskRecordRowIndex > linkedToTaskRecordRowIndex ? 0 : 1)) + fromNodeDiffY }, { x: linkToPointX - 20, y: rowHeight * (linkedFromTaskRecordRowIndex + (linkedFromTaskRecordRowIndex > linkedToTaskRecordRowIndex ? 0 : 1)) + fromNodeDiffY }, { x: linkToPointX - 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) + toNodeDiffY }, { x: linkToPointX, y: rowHeight * (linkedToTaskRecordRowIndex + .5) + toNodeDiffY } ], linkFromPointX + 20 <= linkToPointX - 20 && linePoints.splice(2, 3, { x: linkFromPointX + 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) + toNodeDiffY }); const lastPoint = linePoints[linePoints.length - 1]; arrowPoints = [ { x: lastPoint.x, y: lastPoint.y }, { x: lastPoint.x - 10, y: lastPoint.y - 5 }, { x: lastPoint.x - 10, y: lastPoint.y + 5 }, { x: lastPoint.x, y: lastPoint.y } ]; } else if (type === DependencyType.StartToFinish) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x : computeCountToTimeScale(linkedFromTaskStartDate, minDate, unit, step) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX -= (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2); let linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x + linkedToMovedTaskBarNode.attribute.width : computeCountToTimeScale(linkedToTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x + linkedToMovedTaskBarNode.attribute.width + (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2 : computeCountToTimeScale(linkedToTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2), linePoints = [ { x: linkFromPointX, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) + fromNodeDiffY }, { x: linkFromPointX - 20, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) + fromNodeDiffY }, { x: linkFromPointX - 20, y: rowHeight * (linkedFromTaskRecordRowIndex + (linkedFromTaskRecordRowIndex > linkedToTaskRecordRowIndex ? 0 : 1)) + fromNodeDiffY }, { x: linkToPointX + 20, y: rowHeight * (linkedFromTaskRecordRowIndex + (linkedFromTaskRecordRowIndex > linkedToTaskRecordRowIndex ? 0 : 1)) + fromNodeDiffY }, { x: linkToPointX + 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) + toNodeDiffY }, { x: linkToPointX, y: rowHeight * (linkedToTaskRecordRowIndex + .5) + toNodeDiffY } ], linkFromPointX - 20 >= linkToPointX + 20 && linePoints.splice(2, 3, { x: linkFromPointX - 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) + toNodeDiffY }); const lastPoint = linePoints[linePoints.length - 1]; arrowPoints = [ { x: lastPoint.x, y: lastPoint.y }, { x: lastPoint.x + 10, y: lastPoint.y - 5 }, { x: lastPoint.x + 10, y: lastPoint.y + 5 }, { x: lastPoint.x, y: lastPoint.y } ]; } else if (type === DependencyType.StartToStart) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x : computeCountToTimeScale(linkedFromTaskStartDate, minDate, unit, step) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX -= (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2); let linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x : computeCountToTimeScale(linkedToTaskStartDate, minDate, unit, step) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX -= (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2), linePoints = [ { x: linkFromPointX, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) + fromNodeDiffY }, { x: (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? linkFromPointX : Math.min(linkFromPointX, linkToPointX)) - 20, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) + fromNodeDiffY }, { x: (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? linkFromPointX : Math.min(linkFromPointX, linkToPointX)) - 20, y: rowHeight * (linkedToTaskRecordRowIndex + (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? 1 : .5)) + toNodeDiffY }, { x: linkToPointX - 20, y: rowHeight * (linkedToTaskRecordRowIndex + (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? 1 : .5)) + toNodeDiffY }, { x: (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? linkToPointX : Math.min(linkFromPointX, linkToPointX)) - 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) + toNodeDiffY }, { x: linkToPointX, y: rowHeight * (linkedToTaskRecordRowIndex + .5) + toNodeDiffY } ]; const lastPoint = linePoints[linePoints.length - 1]; arrowPoints = [ { x: lastPoint.x, y: lastPoint.y }, { x: lastPoint.x - 10, y: lastPoint.y - 5 }, { x: lastPoint.x - 10, y: lastPoint.y + 5 }, { x: lastPoint.x, y: lastPoint.y } ]; } else if (type === DependencyType.FinishToFinish) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x + linkedFromMovedTaskBarNode.attribute.width : computeCountToTimeScale(linkedFromTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x + linkedFromMovedTaskBarNode.attribute.width + (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2 : computeCountToTimeScale(linkedFromTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2); let linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x + linkedToMovedTaskBarNode.attribute.width : computeCountToTimeScale(linkedToTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x + linkedToMovedTaskBarNode.attribute.width + (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2 : computeCountToTimeScale(linkedToTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2), linePoints = [ { x: linkFromPointX, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) + fromNodeDiffY }, { x: (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? linkFromPointX : Math.max(linkFromPointX, linkToPointX)) + 20, y: rowHeight * (linkedFromTaskRecordRowIndex + .5) + fromNodeDiffY }, { x: (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? linkFromPointX : Math.max(linkFromPointX, linkToPointX)) + 20, y: rowHeight * (linkedToTaskRecordRowIndex + (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? 1 : .5)) + toNodeDiffY }, { x: linkToPointX + 20, y: rowHeight * (linkedToTaskRecordRowIndex + (linkedFromTaskRecordRowIndex === linkedToTaskRecordRowIndex ? 1 : .5)) + toNodeDiffY }, { x: linkToPointX + 20, y: rowHeight * (linkedToTaskRecordRowIndex + .5) + toNodeDiffY }, { x: linkToPointX, y: rowHeight * (linkedToTaskRecordRowIndex + .5) + toNodeDiffY } ]; const lastPoint = linePoints[linePoints.length - 1]; arrowPoints = [ { x: lastPoint.x, y: lastPoint.y }, { x: lastPoint.x + 10, y: lastPoint.y - 5 }, { x: lastPoint.x + 10, y: lastPoint.y + 5 }, { x: lastPoint.x, y: lastPoint.y } ]; } return { linePoints: linePoints, arrowPoints: arrowPoints }; } //# sourceMappingURL=dependency-link.js.map