gantt-task-react-powern 0.6.22 → 0.6.23
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/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,
|
|
@@ -3096,35 +3110,98 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3096
3110
|
changedTask = _handleTaskBySVGMouse.changedTask;
|
|
3097
3111
|
|
|
3098
3112
|
if (isChanged) {
|
|
3099
|
-
var finalTask = changedTask;
|
|
3113
|
+
var finalTask = _extends({}, changedTask);
|
|
3114
|
+
|
|
3115
|
+
var dragType = ganttEvent.type;
|
|
3100
3116
|
|
|
3101
3117
|
if (changedTask.calender && (ganttEvent.action === "end" || ganttEvent.action === "start" || ganttEvent.action === "move")) {
|
|
3102
|
-
finalTask = _extends({}, changedTask);
|
|
3103
3118
|
var cal = finalTask.calender;
|
|
3104
3119
|
|
|
3105
|
-
if (
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3120
|
+
if (dragType === "actual") {
|
|
3121
|
+
if (ganttEvent.action === "end") {
|
|
3122
|
+
var snapped = snapToWorkingTime(finalTask.actualEnd, cal, "forward");
|
|
3123
|
+
finalTask.actualEnd = snapped;
|
|
3124
|
+
finalTask.actualx2 = taskXCoordinate(snapped, dates, columnWidth);
|
|
3125
|
+
} else if (ganttEvent.action === "start") {
|
|
3126
|
+
var _snapped = snapToWorkingTime(finalTask.actualStart, cal, "forward");
|
|
3127
|
+
|
|
3128
|
+
finalTask.actualStart = _snapped;
|
|
3129
|
+
finalTask.actualx1 = taskXCoordinate(_snapped, dates, columnWidth);
|
|
3130
|
+
} else {
|
|
3131
|
+
var _snapped2 = snapToWorkingTime(finalTask.actualStart, cal, "forward");
|
|
3132
|
+
|
|
3133
|
+
var delta = _snapped2.getTime() - finalTask.actualStart.getTime();
|
|
3134
|
+
finalTask.actualStart = _snapped2;
|
|
3135
|
+
finalTask.actualEnd = new Date(finalTask.actualEnd.getTime() + delta);
|
|
3136
|
+
finalTask.actualx1 = taskXCoordinate(finalTask.actualStart, dates, columnWidth);
|
|
3137
|
+
finalTask.actualx2 = taskXCoordinate(finalTask.actualEnd, dates, columnWidth);
|
|
3138
|
+
}
|
|
3139
|
+
|
|
3140
|
+
var actEnd = addToDate(startOfDate(finalTask.actualEnd, "day"), 1, "day");
|
|
3141
|
+
var actIntervals = getWorkingIntervals(finalTask.actualStart, actEnd, cal);
|
|
3142
|
+
var actSegs = actIntervals.map(function (iv) {
|
|
3143
|
+
return {
|
|
3144
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3145
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3146
|
+
};
|
|
3147
|
+
}).filter(function (s) {
|
|
3148
|
+
return s.x2 > s.x1;
|
|
3149
|
+
});
|
|
3150
|
+
finalTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;
|
|
3151
|
+
var actDays = Math.max(1, Math.round((finalTask.actualEnd.getTime() - finalTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3152
|
+
finalTask.actualDuration = actDays;
|
|
3153
|
+
} else {
|
|
3154
|
+
if (ganttEvent.action === "end") {
|
|
3155
|
+
var _snapped3 = snapToWorkingTime(finalTask.end, cal, "forward");
|
|
3156
|
+
|
|
3157
|
+
finalTask.end = _snapped3;
|
|
3158
|
+
finalTask.x2 = taskXCoordinate(_snapped3, dates, columnWidth);
|
|
3159
|
+
} else if (ganttEvent.action === "start") {
|
|
3160
|
+
var _snapped4 = snapToWorkingTime(finalTask.start, cal, "forward");
|
|
3161
|
+
|
|
3162
|
+
finalTask.start = _snapped4;
|
|
3163
|
+
finalTask.x1 = taskXCoordinate(_snapped4, dates, columnWidth);
|
|
3164
|
+
} else {
|
|
3165
|
+
var _snapped5 = snapToWorkingTime(finalTask.start, cal, "forward");
|
|
3166
|
+
|
|
3167
|
+
var _delta = _snapped5.getTime() - finalTask.start.getTime();
|
|
3168
|
+
|
|
3169
|
+
finalTask.start = _snapped5;
|
|
3170
|
+
finalTask.end = new Date(finalTask.end.getTime() + _delta);
|
|
3171
|
+
finalTask.x1 = taskXCoordinate(finalTask.start, dates, columnWidth);
|
|
3172
|
+
finalTask.x2 = taskXCoordinate(finalTask.end, dates, columnWidth);
|
|
3173
|
+
}
|
|
3174
|
+
|
|
3175
|
+
var planEnd = addToDate(startOfDate(finalTask.end, "day"), 1, "day");
|
|
3176
|
+
var planIntervals = getWorkingIntervals(finalTask.start, planEnd, cal);
|
|
3177
|
+
var planSegs = planIntervals.map(function (iv) {
|
|
3178
|
+
return {
|
|
3179
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3180
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3181
|
+
};
|
|
3182
|
+
}).filter(function (s) {
|
|
3183
|
+
return s.x2 > s.x1;
|
|
3184
|
+
});
|
|
3185
|
+
finalTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;
|
|
3186
|
+
var planDays = Math.max(1, Math.round((finalTask.end.getTime() - finalTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3187
|
+
finalTask.plannedDuration = planDays;
|
|
3188
|
+
}
|
|
3189
|
+
} else {
|
|
3190
|
+
if (dragType === "actual") {
|
|
3191
|
+
var _actDays = Math.max(1, Math.round((finalTask.actualEnd.getTime() - finalTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3111
3192
|
|
|
3112
|
-
finalTask.
|
|
3113
|
-
finalTask.x1 = taskXCoordinate(_snapped, dates, columnWidth);
|
|
3193
|
+
finalTask.actualDuration = _actDays;
|
|
3114
3194
|
} else {
|
|
3115
|
-
var
|
|
3195
|
+
var _planDays = Math.max(1, Math.round((finalTask.end.getTime() - finalTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3116
3196
|
|
|
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);
|
|
3197
|
+
finalTask.plannedDuration = _planDays;
|
|
3122
3198
|
}
|
|
3123
3199
|
}
|
|
3124
3200
|
|
|
3125
3201
|
setGanttEvent({
|
|
3126
3202
|
action: ganttEvent.action,
|
|
3127
|
-
changedTask: finalTask
|
|
3203
|
+
changedTask: finalTask,
|
|
3204
|
+
type: dragType
|
|
3128
3205
|
});
|
|
3129
3206
|
}
|
|
3130
3207
|
|
|
@@ -3157,56 +3234,123 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3157
3234
|
newChangedTask = _handleTaskBySVGMouse2.changedTask;
|
|
3158
3235
|
|
|
3159
3236
|
var isNotLikeOriginal = originalSelectedTask.start !== newChangedTask.start || originalSelectedTask.end !== newChangedTask.end || originalSelectedTask.actualStart !== newChangedTask.actualStart || originalSelectedTask.actualEnd !== newChangedTask.actualEnd || originalSelectedTask.progress !== newChangedTask.progress;
|
|
3237
|
+
var dropType = type;
|
|
3160
3238
|
|
|
3161
3239
|
if (newChangedTask.calender && (action === "move" || action === "end" || action === "start")) {
|
|
3162
3240
|
var cal = newChangedTask.calender;
|
|
3163
3241
|
|
|
3164
|
-
if (
|
|
3165
|
-
|
|
3166
|
-
|
|
3167
|
-
|
|
3168
|
-
|
|
3169
|
-
|
|
3242
|
+
if (dropType === "actual") {
|
|
3243
|
+
if (action === "end") {
|
|
3244
|
+
var snappedEnd = snapToWorkingTime(newChangedTask.actualEnd, cal, "forward");
|
|
3245
|
+
newChangedTask.actualEnd = snappedEnd;
|
|
3246
|
+
newChangedTask.actualx2 = taskXCoordinate(snappedEnd, dates, columnWidth);
|
|
3247
|
+
} else if (action === "start") {
|
|
3248
|
+
var snappedStart = snapToWorkingTime(newChangedTask.actualStart, cal, "forward");
|
|
3249
|
+
|
|
3250
|
+
if (snappedStart >= newChangedTask.actualEnd) {
|
|
3251
|
+
setFailedTask(originalSelectedTask);
|
|
3252
|
+
onCalendarError === null || onCalendarError === void 0 ? void 0 : onCalendarError(newChangedTask, "No working time in selected range");
|
|
3253
|
+
setGanttEvent({
|
|
3254
|
+
action: ""
|
|
3255
|
+
});
|
|
3256
|
+
setIsMoving(false);
|
|
3257
|
+
svg.current.removeEventListener("mousemove", handleMouseMove);
|
|
3258
|
+
svg.current.removeEventListener("mouseup", handleMouseUp);
|
|
3259
|
+
return Promise.resolve();
|
|
3260
|
+
}
|
|
3170
3261
|
|
|
3171
|
-
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3262
|
+
newChangedTask.actualStart = snappedStart;
|
|
3263
|
+
newChangedTask.actualx1 = taskXCoordinate(snappedStart, dates, columnWidth);
|
|
3264
|
+
} else {
|
|
3265
|
+
var _snappedStart = snapToWorkingTime(newChangedTask.actualStart, cal, "forward");
|
|
3266
|
+
|
|
3267
|
+
var delta = _snappedStart.getTime() - newChangedTask.actualStart.getTime();
|
|
3268
|
+
newChangedTask.actualStart = _snappedStart;
|
|
3269
|
+
newChangedTask.actualEnd = new Date(newChangedTask.actualEnd.getTime() + delta);
|
|
3270
|
+
newChangedTask.actualx1 = taskXCoordinate(_snappedStart, dates, columnWidth);
|
|
3271
|
+
newChangedTask.actualx2 = taskXCoordinate(newChangedTask.actualEnd, dates, columnWidth);
|
|
3181
3272
|
}
|
|
3182
3273
|
|
|
3183
|
-
newChangedTask.
|
|
3184
|
-
|
|
3274
|
+
var actEnd = addToDate(startOfDate(newChangedTask.actualEnd, "day"), 1, "day");
|
|
3275
|
+
var actIntervals = getWorkingIntervals(newChangedTask.actualStart, actEnd, cal);
|
|
3276
|
+
var actSegs = actIntervals.map(function (iv) {
|
|
3277
|
+
return {
|
|
3278
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3279
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3280
|
+
};
|
|
3281
|
+
}).filter(function (s) {
|
|
3282
|
+
return s.x2 > s.x1;
|
|
3283
|
+
});
|
|
3284
|
+
newChangedTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;
|
|
3285
|
+
var actDays = Math.max(1, Math.round((newChangedTask.actualEnd.getTime() - newChangedTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3286
|
+
newChangedTask.actualDuration = actDays;
|
|
3185
3287
|
} else {
|
|
3186
|
-
|
|
3288
|
+
if (action === "end") {
|
|
3289
|
+
var _snappedEnd = snapToWorkingTime(newChangedTask.end, cal, "forward");
|
|
3290
|
+
|
|
3291
|
+
newChangedTask.end = _snappedEnd;
|
|
3292
|
+
newChangedTask.x2 = taskXCoordinate(_snappedEnd, dates, columnWidth);
|
|
3293
|
+
} else if (action === "start") {
|
|
3294
|
+
var _snappedStart2 = snapToWorkingTime(newChangedTask.start, cal, "forward");
|
|
3295
|
+
|
|
3296
|
+
if (_snappedStart2 >= newChangedTask.end) {
|
|
3297
|
+
setFailedTask(originalSelectedTask);
|
|
3298
|
+
onCalendarError === null || onCalendarError === void 0 ? void 0 : onCalendarError(newChangedTask, "No working time in selected range");
|
|
3299
|
+
setGanttEvent({
|
|
3300
|
+
action: ""
|
|
3301
|
+
});
|
|
3302
|
+
setIsMoving(false);
|
|
3303
|
+
svg.current.removeEventListener("mousemove", handleMouseMove);
|
|
3304
|
+
svg.current.removeEventListener("mouseup", handleMouseUp);
|
|
3305
|
+
return Promise.resolve();
|
|
3306
|
+
}
|
|
3187
3307
|
|
|
3188
|
-
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3308
|
+
newChangedTask.start = _snappedStart2;
|
|
3309
|
+
newChangedTask.x1 = taskXCoordinate(_snappedStart2, dates, columnWidth);
|
|
3310
|
+
} else {
|
|
3311
|
+
var _snappedStart3 = snapToWorkingTime(newChangedTask.start, cal, "forward");
|
|
3312
|
+
|
|
3313
|
+
var _delta2 = _snappedStart3.getTime() - newChangedTask.start.getTime();
|
|
3314
|
+
|
|
3315
|
+
newChangedTask.start = _snappedStart3;
|
|
3316
|
+
newChangedTask.end = new Date(newChangedTask.end.getTime() + _delta2);
|
|
3317
|
+
newChangedTask.x1 = taskXCoordinate(_snappedStart3, dates, columnWidth);
|
|
3318
|
+
newChangedTask.x2 = taskXCoordinate(newChangedTask.end, dates, columnWidth);
|
|
3319
|
+
}
|
|
3320
|
+
|
|
3321
|
+
var planEnd = addToDate(startOfDate(newChangedTask.end, "day"), 1, "day");
|
|
3322
|
+
var planIntervals = getWorkingIntervals(newChangedTask.start, planEnd, cal);
|
|
3323
|
+
var planSegs = planIntervals.map(function (iv) {
|
|
3324
|
+
return {
|
|
3325
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3326
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3327
|
+
};
|
|
3328
|
+
}).filter(function (s) {
|
|
3329
|
+
return s.x2 > s.x1;
|
|
3330
|
+
});
|
|
3331
|
+
newChangedTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;
|
|
3332
|
+
var planDays = Math.max(1, Math.round((newChangedTask.end.getTime() - newChangedTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3333
|
+
newChangedTask.plannedDuration = planDays;
|
|
3193
3334
|
}
|
|
3335
|
+
} else if (action === "move" || action === "end" || action === "start") {
|
|
3336
|
+
if (dropType === "actual") {
|
|
3337
|
+
var _actDays2 = Math.max(1, Math.round((newChangedTask.actualEnd.getTime() - newChangedTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3194
3338
|
|
|
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;
|
|
3339
|
+
newChangedTask.actualDuration = _actDays2;
|
|
3340
|
+
} else {
|
|
3341
|
+
var _planDays2 = Math.max(1, Math.round((newChangedTask.end.getTime() - newChangedTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3342
|
+
|
|
3343
|
+
newChangedTask.plannedDuration = _planDays2;
|
|
3344
|
+
}
|
|
3206
3345
|
}
|
|
3207
3346
|
|
|
3208
3347
|
svg.current.removeEventListener("mousemove", handleMouseMove);
|
|
3209
3348
|
svg.current.removeEventListener("mouseup", handleMouseUp);
|
|
3349
|
+
|
|
3350
|
+
if (onBarTasksUpdate && isNotLikeOriginal) {
|
|
3351
|
+
onBarTasksUpdate(newChangedTask);
|
|
3352
|
+
}
|
|
3353
|
+
|
|
3210
3354
|
setGanttEvent({
|
|
3211
3355
|
action: ""
|
|
3212
3356
|
});
|
|
@@ -3258,7 +3402,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3258
3402
|
svg.current.addEventListener("mouseup", handleMouseUp);
|
|
3259
3403
|
setIsMoving(true);
|
|
3260
3404
|
}
|
|
3261
|
-
}, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, onCalendarError, projectCalendar, svg, isMoving, point, rtl, setFailedTask, setGanttEvent, dates, columnWidth]);
|
|
3405
|
+
}, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, onCalendarError, projectCalendar, svg, isMoving, point, rtl, setFailedTask, setGanttEvent, onBarTasksUpdate, dates, columnWidth]);
|
|
3262
3406
|
|
|
3263
3407
|
var handleBarEventStart = function handleBarEventStart(action, task, event, type) {
|
|
3264
3408
|
try {
|
|
@@ -3344,7 +3488,9 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3344
3488
|
|
|
3345
3489
|
var getArrows = function getArrows(isCritical, criticalPathType) {
|
|
3346
3490
|
return tasks.flatMap(function (_task) {
|
|
3347
|
-
var
|
|
3491
|
+
var _live = ganttEvent.changedTask && ganttEvent.changedTask.id === _task.id ? ganttEvent.changedTask : _task;
|
|
3492
|
+
|
|
3493
|
+
var task = _live.start.getTime() > 0 && _live.end.getTime() > 0 ? _live : undefined;
|
|
3348
3494
|
|
|
3349
3495
|
if (!task) {
|
|
3350
3496
|
return [];
|
|
@@ -3396,8 +3542,9 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3396
3542
|
fontSize: fontSize
|
|
3397
3543
|
}, virtualItems.map(function (vi) {
|
|
3398
3544
|
var _task = tasks[vi.index];
|
|
3399
|
-
|
|
3400
|
-
|
|
3545
|
+
var task = ganttEvent.changedTask && ganttEvent.changedTask.id === _task.id ? _extends({}, ganttEvent.changedTask, {
|
|
3546
|
+
y: 0
|
|
3547
|
+
}) : _extends({}, _task, {
|
|
3401
3548
|
y: 0
|
|
3402
3549
|
});
|
|
3403
3550
|
|
|
@@ -3749,6 +3896,14 @@ var Gantt = function Gantt(_ref) {
|
|
|
3749
3896
|
ganttEvent = _useState9[0],
|
|
3750
3897
|
setGanttEvent = _useState9[1];
|
|
3751
3898
|
|
|
3899
|
+
var handleBarTasksUpdate = function handleBarTasksUpdate(task) {
|
|
3900
|
+
setBarTasks(function (prev) {
|
|
3901
|
+
return prev.map(function (t) {
|
|
3902
|
+
return t.id === task.id ? task : t;
|
|
3903
|
+
});
|
|
3904
|
+
});
|
|
3905
|
+
};
|
|
3906
|
+
|
|
3752
3907
|
var taskHeight = useMemo(function () {
|
|
3753
3908
|
return rowHeight * barFill / 100;
|
|
3754
3909
|
}, [rowHeight, barFill]);
|
|
@@ -3893,17 +4048,6 @@ var Gantt = function Gantt(_ref) {
|
|
|
3893
4048
|
setBarTasks(barTasks.filter(function (t) {
|
|
3894
4049
|
return t.id !== changedTask.id;
|
|
3895
4050
|
}));
|
|
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
4051
|
}
|
|
3908
4052
|
}
|
|
3909
4053
|
}, [ganttEvent, barTasks]);
|
|
@@ -4175,6 +4319,7 @@ var Gantt = function Gantt(_ref) {
|
|
|
4175
4319
|
setGanttEvent: setGanttEvent,
|
|
4176
4320
|
setFailedTask: setFailedTask,
|
|
4177
4321
|
setSelectedTask: handleSelectedTask,
|
|
4322
|
+
onBarTasksUpdate: handleBarTasksUpdate,
|
|
4178
4323
|
onDateChange: onDateChange,
|
|
4179
4324
|
onProgressChange: onProgressChange,
|
|
4180
4325
|
onDoubleClick: onDoubleClick,
|
|
@@ -4185,12 +4330,17 @@ var Gantt = function Gantt(_ref) {
|
|
|
4185
4330
|
visibleStartY: visibleStartY,
|
|
4186
4331
|
visibleEndY: visibleEndY
|
|
4187
4332
|
};
|
|
4333
|
+
var tableTasks = useMemo(function () {
|
|
4334
|
+
return ganttEvent.changedTask ? barTasks.map(function (t) {
|
|
4335
|
+
return t.id === ganttEvent.changedTask.id ? ganttEvent.changedTask : t;
|
|
4336
|
+
}) : barTasks;
|
|
4337
|
+
}, [barTasks, ganttEvent.changedTask]);
|
|
4188
4338
|
var tableProps = {
|
|
4189
4339
|
rowHeight: rowHeight,
|
|
4190
4340
|
rowWidth: listCellWidth,
|
|
4191
4341
|
fontFamily: fontFamily,
|
|
4192
4342
|
fontSize: fontSize,
|
|
4193
|
-
tasks:
|
|
4343
|
+
tasks: tableTasks,
|
|
4194
4344
|
leafTasks: leafTasks,
|
|
4195
4345
|
scheduleType: scheduleType,
|
|
4196
4346
|
locale: locale,
|
|
@@ -4258,7 +4408,8 @@ var Gantt = function Gantt(_ref) {
|
|
|
4258
4408
|
taskListWidth: taskListWidth,
|
|
4259
4409
|
TooltipContent: TooltipContent,
|
|
4260
4410
|
rtl: rtl,
|
|
4261
|
-
svgWidth: svgWidth
|
|
4411
|
+
svgWidth: svgWidth,
|
|
4412
|
+
isDragging: ganttEvent.action === "move" || ganttEvent.action === "start" || ganttEvent.action === "end" || ganttEvent.action === "progress"
|
|
4262
4413
|
}), React.createElement(VerticalScroll, {
|
|
4263
4414
|
ganttFullHeight: ganttFullHeight,
|
|
4264
4415
|
ganttHeight: ganttHeight,
|
|
@@ -4468,12 +4619,41 @@ function computeCriticalPath(taskID, taskMap) {
|
|
|
4468
4619
|
taskMap[taskID].paths = [];
|
|
4469
4620
|
|
|
4470
4621
|
for (var j = 0; j < dependents.length; j++) {
|
|
4471
|
-
var
|
|
4472
|
-
var
|
|
4622
|
+
var depStart = taskMap[dependents[j]].task.start.getTime();
|
|
4623
|
+
var depEnd = taskMap[dependents[j]].task.end.getTime();
|
|
4624
|
+
var depDuration = depEnd - depStart;
|
|
4625
|
+
var startWeek = Math.floor((depStart / 86400000 + 4) / 7);
|
|
4626
|
+
var endWeek = Math.floor((depEnd / 86400000 + 4) / 7);
|
|
4627
|
+
var offTime = 0;
|
|
4628
|
+
|
|
4629
|
+
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++) {
|
|
4630
|
+
var _taskMap$dependents$j, _taskMap$dependents$j2;
|
|
4631
|
+
|
|
4632
|
+
for (var w = startWeek; w <= endWeek; w++) {
|
|
4633
|
+
var dayOfTheWeek = taskMap[dependents[j]].task.calendar.off_days[d];
|
|
4634
|
+
var offDay = 86400000 * (7 * w - 4 + dayOfTheWeek);
|
|
4635
|
+
|
|
4636
|
+
if (offDay >= depStart && offDay <= depEnd && (offDay > taskMap[taskID].end || taskMap[taskID].task.calendar.off_days.includes(dayOfTheWeek))) {
|
|
4637
|
+
offTime += 86400000;
|
|
4638
|
+
}
|
|
4639
|
+
}
|
|
4640
|
+
}
|
|
4641
|
+
|
|
4642
|
+
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++) {
|
|
4643
|
+
var _taskMap$dependents$j3, _taskMap$dependents$j4;
|
|
4644
|
+
|
|
4645
|
+
var holiday = taskMap[dependents[j]].task.calendar.holidays[h];
|
|
4646
|
+
|
|
4647
|
+
if (holiday >= depStart && holiday <= depEnd) {
|
|
4648
|
+
offTime += 86400000;
|
|
4649
|
+
}
|
|
4650
|
+
}
|
|
4651
|
+
|
|
4652
|
+
var overlap = Math.max(taskMap[taskID].end - depStart, 0);
|
|
4473
4653
|
var paths = taskMap[dependents[j]].paths;
|
|
4474
4654
|
|
|
4475
4655
|
for (var k = 0; k < paths.length; k++) {
|
|
4476
|
-
var totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap + paths[k].duration;
|
|
4656
|
+
var totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap - offTime + paths[k].duration;
|
|
4477
4657
|
|
|
4478
4658
|
if (taskMap[taskID].paths.length < 2) {
|
|
4479
4659
|
taskMap[taskID].paths.push({
|
|
@@ -4496,7 +4676,7 @@ function computeCriticalPath(taskID, taskMap) {
|
|
|
4496
4676
|
}
|
|
4497
4677
|
|
|
4498
4678
|
if (paths.length === 0) {
|
|
4499
|
-
var immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap;
|
|
4679
|
+
var immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap - offTime;
|
|
4500
4680
|
|
|
4501
4681
|
if (taskMap[taskID].paths.length < 2) {
|
|
4502
4682
|
taskMap[taskID].paths.push({
|