UNPKG

@visactor/vtable-gantt

Version:

canvas table width high performance

478 lines (472 loc) 32.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.updateLinkLinePoints = exports.generateLinkLinePoints = exports.DependencyLink = void 0; const vrender_1 = require("@visactor/vtable/es/vrender"), util_1 = require("../tools/util"), gantt_helper_1 = require("../gantt-helper"), ts_types_1 = require("../ts-types"); class DependencyLink { constructor(scene) { this._scene = scene, this.width = scene._gantt.tableNoFrameWidth, this.height = scene._gantt.gridHeight, this.group = new vrender_1.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 ((0, gantt_helper_1.clearRecordLinkInfos)(this._scene._gantt.records), this.linkLinesContainer = new vrender_1.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 = (0, gantt_helper_1.findRecordByTaskKey)(this._scene._gantt.records, taskKeyField, linkedToTaskKey), linkedFromTaskRecord = (0, gantt_helper_1.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 === ts_types_1.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 === ts_types_1.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 === ts_types_1.TaskType.PROJECT && "expand" !== fromParentRecord.hierarchyState && !1 !== this._scene._gantt.parsedOptions.projectSubTasksExpandable ? fromParentRecordShowIndex : this._scene._gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index), linkedToTaskShowIndex = toParentRecord.type === ts_types_1.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 === ts_types_1.TasksShowMode.Sub_Tasks_Separate || this._scene._gantt.parsedOptions.tasksShowMode === ts_types_1.TasksShowMode.Sub_Tasks_Arrange || this._scene._gantt.parsedOptions.tasksShowMode === ts_types_1.TasksShowMode.Sub_Tasks_Compact) { linkedFromTaskShowIndex = this._scene._gantt.getRowsHeightByIndex(0, linkedFromTaskRecord.index[0] - 1) / this._scene._gantt.parsedOptions.rowHeight + (this._scene._gantt.parsedOptions.tasksShowMode === ts_types_1.TasksShowMode.Sub_Tasks_Arrange || this._scene._gantt.parsedOptions.tasksShowMode === ts_types_1.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 === ts_types_1.TasksShowMode.Sub_Tasks_Arrange || this._scene._gantt.parsedOptions.tasksShowMode === ts_types_1.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; (0, util_1.createDateAtMidnight)(this._scene._gantt.parsedOptions.minDate); const {arrowPoints: arrowPoints, linePoints: linePoints} = generateLinkLinePoints(type, linkedFromTaskStartDate, linkedFromTaskEndDate, linkedFromTaskShowIndex, linkedFromTaskTaskDays, linkedFromTaskRecord.record.type === ts_types_1.TaskType.MILESTONE, linkedToTaskStartDate, linkedToTaskEndDate, linkedToTaskShowIndex, linkedToTaskTaskDays, linkedToTaskRecord.record.type === ts_types_1.TaskType.MILESTONE, this._scene._gantt), lineStyle = this._scene._gantt.parsedOptions.dependencyLinkLineStyle, lineObj = (0, vrender_1.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 vrender_1.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(); } } 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 === ts_types_1.DependencyType.FinishToStart) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = (0, util_1.computeCountToTimeScale)(linkedFromTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX = (0, util_1.computeCountToTimeScale)(linkedFromTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2); let linkToPointX = (0, util_1.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 === ts_types_1.DependencyType.StartToFinish) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = (0, util_1.computeCountToTimeScale)(linkedFromTaskStartDate, minDate, unit, step) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX -= taskBarMilestoneHypotenuse / 2); let linkToPointX = (0, util_1.computeCountToTimeScale)(linkedToTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX = (0, util_1.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 === ts_types_1.DependencyType.StartToStart) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = (0, util_1.computeCountToTimeScale)(linkedFromTaskStartDate, minDate, unit, step) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX -= taskBarMilestoneHypotenuse / 2); let linkToPointX = (0, util_1.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 === ts_types_1.DependencyType.FinishToFinish) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = (0, util_1.computeCountToTimeScale)(linkedFromTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX = (0, util_1.computeCountToTimeScale)(linkedFromTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2); let linkToPointX = (0, util_1.computeCountToTimeScale)(linkedToTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX = (0, util_1.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 }; } 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 === ts_types_1.DependencyType.FinishToStart) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x + linkedFromMovedTaskBarNode.attribute.width : (0, util_1.computeCountToTimeScale)(linkedFromTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x + linkedFromMovedTaskBarNode.attribute.width + (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2 : (0, util_1.computeCountToTimeScale)(linkedFromTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2); let linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x : (0, util_1.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 === ts_types_1.DependencyType.StartToFinish) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x : (0, util_1.computeCountToTimeScale)(linkedFromTaskStartDate, minDate, unit, step) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX -= (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2); let linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x + linkedToMovedTaskBarNode.attribute.width : (0, util_1.computeCountToTimeScale)(linkedToTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x + linkedToMovedTaskBarNode.attribute.width + (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2 : (0, util_1.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 === ts_types_1.DependencyType.StartToStart) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x : (0, util_1.computeCountToTimeScale)(linkedFromTaskStartDate, minDate, unit, step) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX -= (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2); let linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x : (0, util_1.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 === ts_types_1.DependencyType.FinishToFinish) { startDate = linkedFromTaskStartDate, endDate = linkedToTaskStartDate; let linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x + linkedFromMovedTaskBarNode.attribute.width : (0, util_1.computeCountToTimeScale)(linkedFromTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedFromTaskIsMilestone && (linkFromPointX = linkedFromMovedTaskBarNode ? linkedFromMovedTaskBarNode.attribute.x + linkedFromMovedTaskBarNode.attribute.width + (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2 : (0, util_1.computeCountToTimeScale)(linkedFromTaskStartDate, minDate, unit, step, 1) * timelineColWidth + taskBarMilestoneHypotenuse / 2); let linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x + linkedToMovedTaskBarNode.attribute.width : (0, util_1.computeCountToTimeScale)(linkedToTaskEndDate, minDate, unit, step, 1) * timelineColWidth; linkedToTaskIsMilestone && (linkToPointX = linkedToMovedTaskBarNode ? linkedToMovedTaskBarNode.attribute.x + linkedToMovedTaskBarNode.attribute.width + (taskBarMilestoneHypotenuse - milestoneTaskbarHeight) / 2 : (0, util_1.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 }; } exports.DependencyLink = DependencyLink, exports.generateLinkLinePoints = generateLinkLinePoints, exports.updateLinkLinePoints = updateLinkLinePoints; //# sourceMappingURL=dependency-link.js.map