gantt-task-react-powern 0.6.22 → 0.6.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/gantt/task-gantt-content.d.ts +2 -0
- package/dist/components/other/tooltip.d.ts +1 -0
- package/dist/index.js +287 -81
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +287 -81
- package/dist/index.modern.js.map +1 -1
- package/dist/types/public-types.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.modern.js
CHANGED
|
@@ -721,7 +721,8 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
721
721
|
fontFamily = _ref.fontFamily,
|
|
722
722
|
headerHeight = _ref.headerHeight,
|
|
723
723
|
taskListWidth = _ref.taskListWidth,
|
|
724
|
-
TooltipContent = _ref.TooltipContent
|
|
724
|
+
TooltipContent = _ref.TooltipContent,
|
|
725
|
+
isDragging = _ref.isDragging;
|
|
725
726
|
var tooltipRef = useRef(null);
|
|
726
727
|
|
|
727
728
|
var _useState = useState(0),
|
|
@@ -739,6 +740,14 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
739
740
|
var newRelatedY = task.index * rowHeight - scrollY + headerHeight;
|
|
740
741
|
var newRelatedX;
|
|
741
742
|
|
|
743
|
+
if (isDragging) {
|
|
744
|
+
newRelatedX = taskListWidth + svgContainerWidth - tooltipWidth - 10;
|
|
745
|
+
newRelatedY = headerHeight + 5;
|
|
746
|
+
setRelatedY(newRelatedY);
|
|
747
|
+
setRelatedX(newRelatedX);
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
750
|
+
|
|
742
751
|
if (rtl) {
|
|
743
752
|
newRelatedX = task.x1 - arrowIndent * 1.5 - tooltipWidth - scrollX;
|
|
744
753
|
|
|
@@ -778,7 +787,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
778
787
|
setRelatedY(newRelatedY);
|
|
779
788
|
setRelatedX(newRelatedX);
|
|
780
789
|
}
|
|
781
|
-
}, [tooltipRef, task, arrowIndent, scrollX, scrollY, headerHeight, taskListWidth, rowHeight, svgContainerHeight, svgContainerWidth, rtl]);
|
|
790
|
+
}, [tooltipRef, task, arrowIndent, scrollX, scrollY, headerHeight, taskListWidth, rowHeight, svgContainerHeight, svgContainerWidth, rtl, isDragging]);
|
|
782
791
|
return React.createElement("div", {
|
|
783
792
|
ref: tooltipRef,
|
|
784
793
|
className: relatedX ? styles$2.tooltipDetailsContainer : styles$2.tooltipDetailsContainerHidden,
|
|
@@ -794,6 +803,8 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
794
803
|
}));
|
|
795
804
|
};
|
|
796
805
|
var StandardTooltipContent = function StandardTooltipContent(_ref2) {
|
|
806
|
+
var _task$plannedDuration, _task$actualDuration;
|
|
807
|
+
|
|
797
808
|
var task = _ref2.task,
|
|
798
809
|
fontSize = _ref2.fontSize,
|
|
799
810
|
fontFamily = _ref2.fontFamily,
|
|
@@ -802,6 +813,8 @@ var StandardTooltipContent = function StandardTooltipContent(_ref2) {
|
|
|
802
813
|
fontSize: fontSize,
|
|
803
814
|
fontFamily: fontFamily
|
|
804
815
|
};
|
|
816
|
+
var computedPlannedDuration = task.start && task.end && task.end.getTime() - task.start.getTime() > 0 ? Math.max(1, Math.round((task.end.getTime() - task.start.getTime()) / (1000 * 60 * 60 * 24))) : (_task$plannedDuration = task.plannedDuration) != null ? _task$plannedDuration : 0;
|
|
817
|
+
var computedActualDuration = task.actualStart && task.actualEnd && task.actualEnd.getTime() - task.actualStart.getTime() > 0 ? Math.max(1, Math.round((task.actualEnd.getTime() - task.actualStart.getTime()) / (1000 * 60 * 60 * 24))) : (_task$actualDuration = task.actualDuration) != null ? _task$actualDuration : 0;
|
|
805
818
|
if (type == "planned") return React.createElement("div", {
|
|
806
819
|
className: styles$2.tooltipDefaultContainer,
|
|
807
820
|
style: style
|
|
@@ -811,7 +824,7 @@ var StandardTooltipContent = function StandardTooltipContent(_ref2) {
|
|
|
811
824
|
}
|
|
812
825
|
}, task.name + ": Planned dates: "), React.createElement("b", null, task.start.getMonth() + 1 + "/" + task.start.getDate() + "/" + task.start.getFullYear() + " - " + (task.end.getMonth() + 1) + "/" + task.end.getDate() + "/" + task.end.getFullYear()), task.end.getTime() - task.start.getTime() !== 0 && React.createElement("p", {
|
|
813
826
|
className: styles$2.tooltipDefaultContainerParagraph
|
|
814
|
-
}, "Duration: " +
|
|
827
|
+
}, "Duration: " + computedPlannedDuration + " day(s)"), React.createElement("p", {
|
|
815
828
|
className: styles$2.tooltipDefaultContainerParagraph
|
|
816
829
|
}, !!task.progress && "Progress: " + task.progress + " %"));else return React.createElement("div", {
|
|
817
830
|
className: styles$2.tooltipDefaultContainer,
|
|
@@ -822,7 +835,7 @@ var StandardTooltipContent = function StandardTooltipContent(_ref2) {
|
|
|
822
835
|
}
|
|
823
836
|
}, task.name + ": Actual dates: "), React.createElement("b", null, task.actualStart.getMonth() + 1 + "/" + task.actualStart.getDate() + "/" + task.actualStart.getFullYear() + " - " + (task.actualEnd.getMonth() + 1) + "/" + task.actualEnd.getDate() + "/" + task.actualEnd.getFullYear()), task.actualEnd.getTime() - task.actualStart.getTime() !== 0 && React.createElement("p", {
|
|
824
837
|
className: styles$2.tooltipDefaultContainerParagraph
|
|
825
|
-
}, "Duration: " +
|
|
838
|
+
}, "Duration: " + computedActualDuration + " day(s)"), React.createElement("p", {
|
|
826
839
|
className: styles$2.tooltipDefaultContainerParagraph
|
|
827
840
|
}, !!task.progress && "Progress: " + task.progress + " %"));
|
|
828
841
|
};
|
|
@@ -3053,6 +3066,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3053
3066
|
setGanttEvent = _ref.setGanttEvent,
|
|
3054
3067
|
setFailedTask = _ref.setFailedTask,
|
|
3055
3068
|
setSelectedTask = _ref.setSelectedTask,
|
|
3069
|
+
onBarTasksUpdate = _ref.onBarTasksUpdate,
|
|
3056
3070
|
onDateChange = _ref.onDateChange,
|
|
3057
3071
|
onProgressChange = _ref.onProgressChange,
|
|
3058
3072
|
onDoubleClick = _ref.onDoubleClick,
|
|
@@ -3061,7 +3075,8 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3061
3075
|
onCalendarError = _ref.onCalendarError,
|
|
3062
3076
|
projectCalendar = _ref.projectCalendar,
|
|
3063
3077
|
visibleStartY = _ref.visibleStartY,
|
|
3064
|
-
visibleEndY = _ref.visibleEndY
|
|
3078
|
+
visibleEndY = _ref.visibleEndY,
|
|
3079
|
+
sliderTime = _ref.sliderTime;
|
|
3065
3080
|
var point = svg === null || svg === void 0 ? void 0 : (_svg$current = svg.current) === null || _svg$current === void 0 ? void 0 : _svg$current.createSVGPoint();
|
|
3066
3081
|
|
|
3067
3082
|
var _useState = useState(0),
|
|
@@ -3096,35 +3111,98 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3096
3111
|
changedTask = _handleTaskBySVGMouse.changedTask;
|
|
3097
3112
|
|
|
3098
3113
|
if (isChanged) {
|
|
3099
|
-
var finalTask = changedTask;
|
|
3114
|
+
var finalTask = _extends({}, changedTask);
|
|
3115
|
+
|
|
3116
|
+
var dragType = ganttEvent.type;
|
|
3100
3117
|
|
|
3101
3118
|
if (changedTask.calender && (ganttEvent.action === "end" || ganttEvent.action === "start" || ganttEvent.action === "move")) {
|
|
3102
|
-
finalTask = _extends({}, changedTask);
|
|
3103
3119
|
var cal = finalTask.calender;
|
|
3104
3120
|
|
|
3105
|
-
if (
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3121
|
+
if (dragType === "actual") {
|
|
3122
|
+
if (ganttEvent.action === "end") {
|
|
3123
|
+
var snapped = snapToWorkingTime(finalTask.actualEnd, cal, "forward");
|
|
3124
|
+
finalTask.actualEnd = snapped;
|
|
3125
|
+
finalTask.actualx2 = taskXCoordinate(snapped, dates, columnWidth);
|
|
3126
|
+
} else if (ganttEvent.action === "start") {
|
|
3127
|
+
var _snapped = snapToWorkingTime(finalTask.actualStart, cal, "forward");
|
|
3128
|
+
|
|
3129
|
+
finalTask.actualStart = _snapped;
|
|
3130
|
+
finalTask.actualx1 = taskXCoordinate(_snapped, dates, columnWidth);
|
|
3131
|
+
} else {
|
|
3132
|
+
var _snapped2 = snapToWorkingTime(finalTask.actualStart, cal, "forward");
|
|
3133
|
+
|
|
3134
|
+
var delta = _snapped2.getTime() - finalTask.actualStart.getTime();
|
|
3135
|
+
finalTask.actualStart = _snapped2;
|
|
3136
|
+
finalTask.actualEnd = new Date(finalTask.actualEnd.getTime() + delta);
|
|
3137
|
+
finalTask.actualx1 = taskXCoordinate(finalTask.actualStart, dates, columnWidth);
|
|
3138
|
+
finalTask.actualx2 = taskXCoordinate(finalTask.actualEnd, dates, columnWidth);
|
|
3139
|
+
}
|
|
3140
|
+
|
|
3141
|
+
var actEnd = addToDate(startOfDate(finalTask.actualEnd, "day"), 1, "day");
|
|
3142
|
+
var actIntervals = getWorkingIntervals(finalTask.actualStart, actEnd, cal);
|
|
3143
|
+
var actSegs = actIntervals.map(function (iv) {
|
|
3144
|
+
return {
|
|
3145
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3146
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3147
|
+
};
|
|
3148
|
+
}).filter(function (s) {
|
|
3149
|
+
return s.x2 > s.x1;
|
|
3150
|
+
});
|
|
3151
|
+
finalTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;
|
|
3152
|
+
var actDays = Math.max(1, Math.round((finalTask.actualEnd.getTime() - finalTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3153
|
+
finalTask.actualDuration = actDays;
|
|
3154
|
+
} else {
|
|
3155
|
+
if (ganttEvent.action === "end") {
|
|
3156
|
+
var _snapped3 = snapToWorkingTime(finalTask.end, cal, "forward");
|
|
3157
|
+
|
|
3158
|
+
finalTask.end = _snapped3;
|
|
3159
|
+
finalTask.x2 = taskXCoordinate(_snapped3, dates, columnWidth);
|
|
3160
|
+
} else if (ganttEvent.action === "start") {
|
|
3161
|
+
var _snapped4 = snapToWorkingTime(finalTask.start, cal, "forward");
|
|
3162
|
+
|
|
3163
|
+
finalTask.start = _snapped4;
|
|
3164
|
+
finalTask.x1 = taskXCoordinate(_snapped4, dates, columnWidth);
|
|
3165
|
+
} else {
|
|
3166
|
+
var _snapped5 = snapToWorkingTime(finalTask.start, cal, "forward");
|
|
3167
|
+
|
|
3168
|
+
var _delta = _snapped5.getTime() - finalTask.start.getTime();
|
|
3169
|
+
|
|
3170
|
+
finalTask.start = _snapped5;
|
|
3171
|
+
finalTask.end = new Date(finalTask.end.getTime() + _delta);
|
|
3172
|
+
finalTask.x1 = taskXCoordinate(finalTask.start, dates, columnWidth);
|
|
3173
|
+
finalTask.x2 = taskXCoordinate(finalTask.end, dates, columnWidth);
|
|
3174
|
+
}
|
|
3175
|
+
|
|
3176
|
+
var planEnd = addToDate(startOfDate(finalTask.end, "day"), 1, "day");
|
|
3177
|
+
var planIntervals = getWorkingIntervals(finalTask.start, planEnd, cal);
|
|
3178
|
+
var planSegs = planIntervals.map(function (iv) {
|
|
3179
|
+
return {
|
|
3180
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3181
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3182
|
+
};
|
|
3183
|
+
}).filter(function (s) {
|
|
3184
|
+
return s.x2 > s.x1;
|
|
3185
|
+
});
|
|
3186
|
+
finalTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;
|
|
3187
|
+
var planDays = Math.max(1, Math.round((finalTask.end.getTime() - finalTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3188
|
+
finalTask.plannedDuration = planDays;
|
|
3189
|
+
}
|
|
3190
|
+
} else {
|
|
3191
|
+
if (dragType === "actual") {
|
|
3192
|
+
var _actDays = Math.max(1, Math.round((finalTask.actualEnd.getTime() - finalTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3111
3193
|
|
|
3112
|
-
finalTask.
|
|
3113
|
-
finalTask.x1 = taskXCoordinate(_snapped, dates, columnWidth);
|
|
3194
|
+
finalTask.actualDuration = _actDays;
|
|
3114
3195
|
} else {
|
|
3115
|
-
var
|
|
3196
|
+
var _planDays = Math.max(1, Math.round((finalTask.end.getTime() - finalTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3116
3197
|
|
|
3117
|
-
|
|
3118
|
-
finalTask.start = _snapped2;
|
|
3119
|
-
finalTask.end = new Date(finalTask.end.getTime() + delta);
|
|
3120
|
-
finalTask.x1 = taskXCoordinate(finalTask.start, dates, columnWidth);
|
|
3121
|
-
finalTask.x2 = taskXCoordinate(finalTask.end, dates, columnWidth);
|
|
3198
|
+
finalTask.plannedDuration = _planDays;
|
|
3122
3199
|
}
|
|
3123
3200
|
}
|
|
3124
3201
|
|
|
3125
3202
|
setGanttEvent({
|
|
3126
3203
|
action: ganttEvent.action,
|
|
3127
|
-
changedTask: finalTask
|
|
3204
|
+
changedTask: finalTask,
|
|
3205
|
+
type: dragType
|
|
3128
3206
|
});
|
|
3129
3207
|
}
|
|
3130
3208
|
|
|
@@ -3157,56 +3235,123 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3157
3235
|
newChangedTask = _handleTaskBySVGMouse2.changedTask;
|
|
3158
3236
|
|
|
3159
3237
|
var isNotLikeOriginal = originalSelectedTask.start !== newChangedTask.start || originalSelectedTask.end !== newChangedTask.end || originalSelectedTask.actualStart !== newChangedTask.actualStart || originalSelectedTask.actualEnd !== newChangedTask.actualEnd || originalSelectedTask.progress !== newChangedTask.progress;
|
|
3238
|
+
var dropType = type;
|
|
3160
3239
|
|
|
3161
3240
|
if (newChangedTask.calender && (action === "move" || action === "end" || action === "start")) {
|
|
3162
3241
|
var cal = newChangedTask.calender;
|
|
3163
3242
|
|
|
3164
|
-
if (
|
|
3165
|
-
|
|
3166
|
-
|
|
3167
|
-
|
|
3168
|
-
|
|
3169
|
-
|
|
3243
|
+
if (dropType === "actual") {
|
|
3244
|
+
if (action === "end") {
|
|
3245
|
+
var snappedEnd = snapToWorkingTime(newChangedTask.actualEnd, cal, "forward");
|
|
3246
|
+
newChangedTask.actualEnd = snappedEnd;
|
|
3247
|
+
newChangedTask.actualx2 = taskXCoordinate(snappedEnd, dates, columnWidth);
|
|
3248
|
+
} else if (action === "start") {
|
|
3249
|
+
var snappedStart = snapToWorkingTime(newChangedTask.actualStart, cal, "forward");
|
|
3250
|
+
|
|
3251
|
+
if (snappedStart >= newChangedTask.actualEnd) {
|
|
3252
|
+
setFailedTask(originalSelectedTask);
|
|
3253
|
+
onCalendarError === null || onCalendarError === void 0 ? void 0 : onCalendarError(newChangedTask, "No working time in selected range");
|
|
3254
|
+
setGanttEvent({
|
|
3255
|
+
action: ""
|
|
3256
|
+
});
|
|
3257
|
+
setIsMoving(false);
|
|
3258
|
+
svg.current.removeEventListener("mousemove", handleMouseMove);
|
|
3259
|
+
svg.current.removeEventListener("mouseup", handleMouseUp);
|
|
3260
|
+
return Promise.resolve();
|
|
3261
|
+
}
|
|
3170
3262
|
|
|
3171
|
-
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3263
|
+
newChangedTask.actualStart = snappedStart;
|
|
3264
|
+
newChangedTask.actualx1 = taskXCoordinate(snappedStart, dates, columnWidth);
|
|
3265
|
+
} else {
|
|
3266
|
+
var _snappedStart = snapToWorkingTime(newChangedTask.actualStart, cal, "forward");
|
|
3267
|
+
|
|
3268
|
+
var delta = _snappedStart.getTime() - newChangedTask.actualStart.getTime();
|
|
3269
|
+
newChangedTask.actualStart = _snappedStart;
|
|
3270
|
+
newChangedTask.actualEnd = new Date(newChangedTask.actualEnd.getTime() + delta);
|
|
3271
|
+
newChangedTask.actualx1 = taskXCoordinate(_snappedStart, dates, columnWidth);
|
|
3272
|
+
newChangedTask.actualx2 = taskXCoordinate(newChangedTask.actualEnd, dates, columnWidth);
|
|
3181
3273
|
}
|
|
3182
3274
|
|
|
3183
|
-
newChangedTask.
|
|
3184
|
-
|
|
3275
|
+
var actEnd = addToDate(startOfDate(newChangedTask.actualEnd, "day"), 1, "day");
|
|
3276
|
+
var actIntervals = getWorkingIntervals(newChangedTask.actualStart, actEnd, cal);
|
|
3277
|
+
var actSegs = actIntervals.map(function (iv) {
|
|
3278
|
+
return {
|
|
3279
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3280
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3281
|
+
};
|
|
3282
|
+
}).filter(function (s) {
|
|
3283
|
+
return s.x2 > s.x1;
|
|
3284
|
+
});
|
|
3285
|
+
newChangedTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;
|
|
3286
|
+
var actDays = Math.max(1, Math.round((newChangedTask.actualEnd.getTime() - newChangedTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3287
|
+
newChangedTask.actualDuration = actDays;
|
|
3185
3288
|
} else {
|
|
3186
|
-
|
|
3289
|
+
if (action === "end") {
|
|
3290
|
+
var _snappedEnd = snapToWorkingTime(newChangedTask.end, cal, "forward");
|
|
3291
|
+
|
|
3292
|
+
newChangedTask.end = _snappedEnd;
|
|
3293
|
+
newChangedTask.x2 = taskXCoordinate(_snappedEnd, dates, columnWidth);
|
|
3294
|
+
} else if (action === "start") {
|
|
3295
|
+
var _snappedStart2 = snapToWorkingTime(newChangedTask.start, cal, "forward");
|
|
3296
|
+
|
|
3297
|
+
if (_snappedStart2 >= newChangedTask.end) {
|
|
3298
|
+
setFailedTask(originalSelectedTask);
|
|
3299
|
+
onCalendarError === null || onCalendarError === void 0 ? void 0 : onCalendarError(newChangedTask, "No working time in selected range");
|
|
3300
|
+
setGanttEvent({
|
|
3301
|
+
action: ""
|
|
3302
|
+
});
|
|
3303
|
+
setIsMoving(false);
|
|
3304
|
+
svg.current.removeEventListener("mousemove", handleMouseMove);
|
|
3305
|
+
svg.current.removeEventListener("mouseup", handleMouseUp);
|
|
3306
|
+
return Promise.resolve();
|
|
3307
|
+
}
|
|
3308
|
+
|
|
3309
|
+
newChangedTask.start = _snappedStart2;
|
|
3310
|
+
newChangedTask.x1 = taskXCoordinate(_snappedStart2, dates, columnWidth);
|
|
3311
|
+
} else {
|
|
3312
|
+
var _snappedStart3 = snapToWorkingTime(newChangedTask.start, cal, "forward");
|
|
3313
|
+
|
|
3314
|
+
var _delta2 = _snappedStart3.getTime() - newChangedTask.start.getTime();
|
|
3187
3315
|
|
|
3188
|
-
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3316
|
+
newChangedTask.start = _snappedStart3;
|
|
3317
|
+
newChangedTask.end = new Date(newChangedTask.end.getTime() + _delta2);
|
|
3318
|
+
newChangedTask.x1 = taskXCoordinate(_snappedStart3, dates, columnWidth);
|
|
3319
|
+
newChangedTask.x2 = taskXCoordinate(newChangedTask.end, dates, columnWidth);
|
|
3320
|
+
}
|
|
3321
|
+
|
|
3322
|
+
var planEnd = addToDate(startOfDate(newChangedTask.end, "day"), 1, "day");
|
|
3323
|
+
var planIntervals = getWorkingIntervals(newChangedTask.start, planEnd, cal);
|
|
3324
|
+
var planSegs = planIntervals.map(function (iv) {
|
|
3325
|
+
return {
|
|
3326
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3327
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3328
|
+
};
|
|
3329
|
+
}).filter(function (s) {
|
|
3330
|
+
return s.x2 > s.x1;
|
|
3331
|
+
});
|
|
3332
|
+
newChangedTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;
|
|
3333
|
+
var planDays = Math.max(1, Math.round((newChangedTask.end.getTime() - newChangedTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3334
|
+
newChangedTask.plannedDuration = planDays;
|
|
3193
3335
|
}
|
|
3336
|
+
} else if (action === "move" || action === "end" || action === "start") {
|
|
3337
|
+
if (dropType === "actual") {
|
|
3338
|
+
var _actDays2 = Math.max(1, Math.round((newChangedTask.actualEnd.getTime() - newChangedTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3194
3339
|
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
};
|
|
3202
|
-
}).filter(function (s) {
|
|
3203
|
-
return s.x2 > s.x1;
|
|
3204
|
-
});
|
|
3205
|
-
newChangedTask.plannedSegments = segs.length > 0 ? segs : undefined;
|
|
3340
|
+
newChangedTask.actualDuration = _actDays2;
|
|
3341
|
+
} else {
|
|
3342
|
+
var _planDays2 = Math.max(1, Math.round((newChangedTask.end.getTime() - newChangedTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3343
|
+
|
|
3344
|
+
newChangedTask.plannedDuration = _planDays2;
|
|
3345
|
+
}
|
|
3206
3346
|
}
|
|
3207
3347
|
|
|
3208
3348
|
svg.current.removeEventListener("mousemove", handleMouseMove);
|
|
3209
3349
|
svg.current.removeEventListener("mouseup", handleMouseUp);
|
|
3350
|
+
|
|
3351
|
+
if (onBarTasksUpdate && isNotLikeOriginal) {
|
|
3352
|
+
onBarTasksUpdate(newChangedTask);
|
|
3353
|
+
}
|
|
3354
|
+
|
|
3210
3355
|
setGanttEvent({
|
|
3211
3356
|
action: ""
|
|
3212
3357
|
});
|
|
@@ -3258,7 +3403,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3258
3403
|
svg.current.addEventListener("mouseup", handleMouseUp);
|
|
3259
3404
|
setIsMoving(true);
|
|
3260
3405
|
}
|
|
3261
|
-
}, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, onCalendarError, projectCalendar, svg, isMoving, point, rtl, setFailedTask, setGanttEvent, dates, columnWidth]);
|
|
3406
|
+
}, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, onCalendarError, projectCalendar, svg, isMoving, point, rtl, setFailedTask, setGanttEvent, onBarTasksUpdate, dates, columnWidth]);
|
|
3262
3407
|
|
|
3263
3408
|
var handleBarEventStart = function handleBarEventStart(action, task, event, type) {
|
|
3264
3409
|
try {
|
|
@@ -3344,7 +3489,9 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3344
3489
|
|
|
3345
3490
|
var getArrows = function getArrows(isCritical, criticalPathType) {
|
|
3346
3491
|
return tasks.flatMap(function (_task) {
|
|
3347
|
-
var
|
|
3492
|
+
var _live = ganttEvent.changedTask && ganttEvent.changedTask.id === _task.id ? ganttEvent.changedTask : _task;
|
|
3493
|
+
|
|
3494
|
+
var task = _live.start.getTime() > 0 && _live.end.getTime() > 0 ? _live : undefined;
|
|
3348
3495
|
|
|
3349
3496
|
if (!task) {
|
|
3350
3497
|
return [];
|
|
@@ -3386,9 +3533,32 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3386
3533
|
});
|
|
3387
3534
|
};
|
|
3388
3535
|
|
|
3536
|
+
var lineX = sliderTime !== undefined ? taskXCoordinate(new Date(sliderTime), dates, columnWidth) : null;
|
|
3537
|
+
var totalHeight = tasks.length * rowHeight;
|
|
3538
|
+
useEffect(function () {
|
|
3539
|
+
if (sliderTime !== undefined) {
|
|
3540
|
+
console.log('Vertical line debug:', {
|
|
3541
|
+
sliderTime: new Date(sliderTime).toLocaleString(),
|
|
3542
|
+
lineX: lineX,
|
|
3543
|
+
totalHeight: totalHeight,
|
|
3544
|
+
tasksCount: tasks.length,
|
|
3545
|
+
columnWidth: columnWidth,
|
|
3546
|
+
datesRange: dates.length > 0 ? dates[0].toLocaleString() + " - " + dates[dates.length - 1].toLocaleString() : 'empty'
|
|
3547
|
+
});
|
|
3548
|
+
}
|
|
3549
|
+
}, [sliderTime, lineX, totalHeight, tasks.length, dates, columnWidth]);
|
|
3389
3550
|
return React.createElement("g", {
|
|
3390
3551
|
className: "content"
|
|
3391
|
-
}, React.createElement("
|
|
3552
|
+
}, lineX !== null && lineX > 0 && React.createElement("line", {
|
|
3553
|
+
x1: lineX,
|
|
3554
|
+
y1: 0,
|
|
3555
|
+
x2: lineX,
|
|
3556
|
+
y2: totalHeight,
|
|
3557
|
+
stroke: "red",
|
|
3558
|
+
strokeWidth: 2,
|
|
3559
|
+
pointerEvents: "none",
|
|
3560
|
+
opacity: 0.8
|
|
3561
|
+
}), React.createElement("g", {
|
|
3392
3562
|
className: "arrows"
|
|
3393
3563
|
}, getArrows(false), getArrows(true, "secondary"), getArrows(true, "primary")), React.createElement("g", {
|
|
3394
3564
|
className: "bar",
|
|
@@ -3396,8 +3566,9 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3396
3566
|
fontSize: fontSize
|
|
3397
3567
|
}, virtualItems.map(function (vi) {
|
|
3398
3568
|
var _task = tasks[vi.index];
|
|
3399
|
-
|
|
3400
|
-
|
|
3569
|
+
var task = ganttEvent.changedTask && ganttEvent.changedTask.id === _task.id ? _extends({}, ganttEvent.changedTask, {
|
|
3570
|
+
y: 0
|
|
3571
|
+
}) : _extends({}, _task, {
|
|
3401
3572
|
y: 0
|
|
3402
3573
|
});
|
|
3403
3574
|
|
|
@@ -3643,7 +3814,8 @@ var Gantt = function Gantt(_ref) {
|
|
|
3643
3814
|
_ref$shouldNotShowLoa = _ref.shouldNotShowLoadingOverlay,
|
|
3644
3815
|
shouldNotShowLoadingOverlay = _ref$shouldNotShowLoa === void 0 ? true : _ref$shouldNotShowLoa,
|
|
3645
3816
|
projectCalendar = _ref.projectCalendar,
|
|
3646
|
-
onCalendarError = _ref.onCalendarError
|
|
3817
|
+
onCalendarError = _ref.onCalendarError,
|
|
3818
|
+
sliderTime = _ref.sliderTime;
|
|
3647
3819
|
var effectiveCalendar = (_tasks$find$calender = (_tasks$find = tasks.find(function (t) {
|
|
3648
3820
|
return t.calender;
|
|
3649
3821
|
})) === null || _tasks$find === void 0 ? void 0 : _tasks$find.calender) != null ? _tasks$find$calender : projectCalendar;
|
|
@@ -3749,6 +3921,14 @@ var Gantt = function Gantt(_ref) {
|
|
|
3749
3921
|
ganttEvent = _useState9[0],
|
|
3750
3922
|
setGanttEvent = _useState9[1];
|
|
3751
3923
|
|
|
3924
|
+
var handleBarTasksUpdate = function handleBarTasksUpdate(task) {
|
|
3925
|
+
setBarTasks(function (prev) {
|
|
3926
|
+
return prev.map(function (t) {
|
|
3927
|
+
return t.id === task.id ? task : t;
|
|
3928
|
+
});
|
|
3929
|
+
});
|
|
3930
|
+
};
|
|
3931
|
+
|
|
3752
3932
|
var taskHeight = useMemo(function () {
|
|
3753
3933
|
return rowHeight * barFill / 100;
|
|
3754
3934
|
}, [rowHeight, barFill]);
|
|
@@ -3893,17 +4073,6 @@ var Gantt = function Gantt(_ref) {
|
|
|
3893
4073
|
setBarTasks(barTasks.filter(function (t) {
|
|
3894
4074
|
return t.id !== changedTask.id;
|
|
3895
4075
|
}));
|
|
3896
|
-
} else if (action === "move" || action === "end" || action === "start" || action === "progress") {
|
|
3897
|
-
var prevStateTask = barTasks.find(function (t) {
|
|
3898
|
-
return t.id === changedTask.id;
|
|
3899
|
-
});
|
|
3900
|
-
|
|
3901
|
-
if (prevStateTask && (prevStateTask.start.getTime() >= 0 && prevStateTask.start.getTime() !== changedTask.start.getTime() || prevStateTask.end.getTime() >= 0 && prevStateTask.end.getTime() !== changedTask.end.getTime() || (prevStateTask.actualStart.getTime() >= 0 && prevStateTask.actualStart.getTime()) !== changedTask.actualStart.getTime() || prevStateTask.actualEnd.getTime() >= 0 && prevStateTask.actualEnd.getTime() !== changedTask.actualEnd.getTime() || prevStateTask.progress !== changedTask.progress)) {
|
|
3902
|
-
var newTaskList = barTasks.map(function (t) {
|
|
3903
|
-
return t.id === changedTask.id ? changedTask : t;
|
|
3904
|
-
});
|
|
3905
|
-
setBarTasks(newTaskList);
|
|
3906
|
-
}
|
|
3907
4076
|
}
|
|
3908
4077
|
}
|
|
3909
4078
|
}, [ganttEvent, barTasks]);
|
|
@@ -4175,6 +4344,7 @@ var Gantt = function Gantt(_ref) {
|
|
|
4175
4344
|
setGanttEvent: setGanttEvent,
|
|
4176
4345
|
setFailedTask: setFailedTask,
|
|
4177
4346
|
setSelectedTask: handleSelectedTask,
|
|
4347
|
+
onBarTasksUpdate: handleBarTasksUpdate,
|
|
4178
4348
|
onDateChange: onDateChange,
|
|
4179
4349
|
onProgressChange: onProgressChange,
|
|
4180
4350
|
onDoubleClick: onDoubleClick,
|
|
@@ -4183,14 +4353,20 @@ var Gantt = function Gantt(_ref) {
|
|
|
4183
4353
|
onCalendarError: onCalendarError,
|
|
4184
4354
|
projectCalendar: effectiveCalendar,
|
|
4185
4355
|
visibleStartY: visibleStartY,
|
|
4186
|
-
visibleEndY: visibleEndY
|
|
4356
|
+
visibleEndY: visibleEndY,
|
|
4357
|
+
sliderTime: sliderTime
|
|
4187
4358
|
};
|
|
4359
|
+
var tableTasks = useMemo(function () {
|
|
4360
|
+
return ganttEvent.changedTask ? barTasks.map(function (t) {
|
|
4361
|
+
return t.id === ganttEvent.changedTask.id ? ganttEvent.changedTask : t;
|
|
4362
|
+
}) : barTasks;
|
|
4363
|
+
}, [barTasks, ganttEvent.changedTask]);
|
|
4188
4364
|
var tableProps = {
|
|
4189
4365
|
rowHeight: rowHeight,
|
|
4190
4366
|
rowWidth: listCellWidth,
|
|
4191
4367
|
fontFamily: fontFamily,
|
|
4192
4368
|
fontSize: fontSize,
|
|
4193
|
-
tasks:
|
|
4369
|
+
tasks: tableTasks,
|
|
4194
4370
|
leafTasks: leafTasks,
|
|
4195
4371
|
scheduleType: scheduleType,
|
|
4196
4372
|
locale: locale,
|
|
@@ -4258,7 +4434,8 @@ var Gantt = function Gantt(_ref) {
|
|
|
4258
4434
|
taskListWidth: taskListWidth,
|
|
4259
4435
|
TooltipContent: TooltipContent,
|
|
4260
4436
|
rtl: rtl,
|
|
4261
|
-
svgWidth: svgWidth
|
|
4437
|
+
svgWidth: svgWidth,
|
|
4438
|
+
isDragging: ganttEvent.action === "move" || ganttEvent.action === "start" || ganttEvent.action === "end" || ganttEvent.action === "progress"
|
|
4262
4439
|
}), React.createElement(VerticalScroll, {
|
|
4263
4440
|
ganttFullHeight: ganttFullHeight,
|
|
4264
4441
|
ganttHeight: ganttHeight,
|
|
@@ -4468,12 +4645,41 @@ function computeCriticalPath(taskID, taskMap) {
|
|
|
4468
4645
|
taskMap[taskID].paths = [];
|
|
4469
4646
|
|
|
4470
4647
|
for (var j = 0; j < dependents.length; j++) {
|
|
4471
|
-
var
|
|
4472
|
-
var
|
|
4648
|
+
var depStart = taskMap[dependents[j]].task.start.getTime();
|
|
4649
|
+
var depEnd = taskMap[dependents[j]].task.end.getTime();
|
|
4650
|
+
var depDuration = depEnd - depStart;
|
|
4651
|
+
var startWeek = Math.floor((depStart / 86400000 + 4) / 7);
|
|
4652
|
+
var endWeek = Math.floor((depEnd / 86400000 + 4) / 7);
|
|
4653
|
+
var offTime = 0;
|
|
4654
|
+
|
|
4655
|
+
for (var d = 0; d < ((_taskMap$dependents$j = taskMap[dependents[j]].task.calendar) === null || _taskMap$dependents$j === void 0 ? void 0 : (_taskMap$dependents$j2 = _taskMap$dependents$j.off_days) === null || _taskMap$dependents$j2 === void 0 ? void 0 : _taskMap$dependents$j2.length) || 0; d++) {
|
|
4656
|
+
var _taskMap$dependents$j, _taskMap$dependents$j2;
|
|
4657
|
+
|
|
4658
|
+
for (var w = startWeek; w <= endWeek; w++) {
|
|
4659
|
+
var dayOfTheWeek = taskMap[dependents[j]].task.calendar.off_days[d];
|
|
4660
|
+
var offDay = 86400000 * (7 * w - 4 + dayOfTheWeek);
|
|
4661
|
+
|
|
4662
|
+
if (offDay >= depStart && offDay <= depEnd && (offDay > taskMap[taskID].end || taskMap[taskID].task.calendar.off_days.includes(dayOfTheWeek))) {
|
|
4663
|
+
offTime += 86400000;
|
|
4664
|
+
}
|
|
4665
|
+
}
|
|
4666
|
+
}
|
|
4667
|
+
|
|
4668
|
+
for (var h = 0; h < ((_taskMap$dependents$j3 = taskMap[dependents[j]].task.calendar) === null || _taskMap$dependents$j3 === void 0 ? void 0 : (_taskMap$dependents$j4 = _taskMap$dependents$j3.holidays) === null || _taskMap$dependents$j4 === void 0 ? void 0 : _taskMap$dependents$j4.length) || 0; h++) {
|
|
4669
|
+
var _taskMap$dependents$j3, _taskMap$dependents$j4;
|
|
4670
|
+
|
|
4671
|
+
var holiday = taskMap[dependents[j]].task.calendar.holidays[h];
|
|
4672
|
+
|
|
4673
|
+
if (holiday >= depStart && holiday <= depEnd) {
|
|
4674
|
+
offTime += 86400000;
|
|
4675
|
+
}
|
|
4676
|
+
}
|
|
4677
|
+
|
|
4678
|
+
var overlap = Math.max(taskMap[taskID].end - depStart, 0);
|
|
4473
4679
|
var paths = taskMap[dependents[j]].paths;
|
|
4474
4680
|
|
|
4475
4681
|
for (var k = 0; k < paths.length; k++) {
|
|
4476
|
-
var totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap + paths[k].duration;
|
|
4682
|
+
var totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap - offTime + paths[k].duration;
|
|
4477
4683
|
|
|
4478
4684
|
if (taskMap[taskID].paths.length < 2) {
|
|
4479
4685
|
taskMap[taskID].paths.push({
|
|
@@ -4496,7 +4702,7 @@ function computeCriticalPath(taskID, taskMap) {
|
|
|
4496
4702
|
}
|
|
4497
4703
|
|
|
4498
4704
|
if (paths.length === 0) {
|
|
4499
|
-
var immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap;
|
|
4705
|
+
var immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap - offTime;
|
|
4500
4706
|
|
|
4501
4707
|
if (taskMap[taskID].paths.length < 2) {
|
|
4502
4708
|
taskMap[taskID].paths.push({
|