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.
|
@@ -26,5 +26,6 @@ export declare type TaskGanttContentProps = {
|
|
|
26
26
|
setGanttEvent: (value: GanttEvent) => void;
|
|
27
27
|
setFailedTask: (value: BarTask | null) => void;
|
|
28
28
|
setSelectedTask: (taskId: string) => void;
|
|
29
|
+
onBarTasksUpdate?: (task: BarTask) => void;
|
|
29
30
|
} & EventOption;
|
|
30
31
|
export declare const TaskGanttContent: React.FC<TaskGanttContentProps>;
|
package/dist/index.js
CHANGED
|
@@ -722,7 +722,8 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
722
722
|
fontFamily = _ref.fontFamily,
|
|
723
723
|
headerHeight = _ref.headerHeight,
|
|
724
724
|
taskListWidth = _ref.taskListWidth,
|
|
725
|
-
TooltipContent = _ref.TooltipContent
|
|
725
|
+
TooltipContent = _ref.TooltipContent,
|
|
726
|
+
isDragging = _ref.isDragging;
|
|
726
727
|
var tooltipRef = React.useRef(null);
|
|
727
728
|
|
|
728
729
|
var _useState = React.useState(0),
|
|
@@ -740,6 +741,14 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
740
741
|
var newRelatedY = task.index * rowHeight - scrollY + headerHeight;
|
|
741
742
|
var newRelatedX;
|
|
742
743
|
|
|
744
|
+
if (isDragging) {
|
|
745
|
+
newRelatedX = taskListWidth + svgContainerWidth - tooltipWidth - 10;
|
|
746
|
+
newRelatedY = headerHeight + 5;
|
|
747
|
+
setRelatedY(newRelatedY);
|
|
748
|
+
setRelatedX(newRelatedX);
|
|
749
|
+
return;
|
|
750
|
+
}
|
|
751
|
+
|
|
743
752
|
if (rtl) {
|
|
744
753
|
newRelatedX = task.x1 - arrowIndent * 1.5 - tooltipWidth - scrollX;
|
|
745
754
|
|
|
@@ -779,7 +788,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
779
788
|
setRelatedY(newRelatedY);
|
|
780
789
|
setRelatedX(newRelatedX);
|
|
781
790
|
}
|
|
782
|
-
}, [tooltipRef, task, arrowIndent, scrollX, scrollY, headerHeight, taskListWidth, rowHeight, svgContainerHeight, svgContainerWidth, rtl]);
|
|
791
|
+
}, [tooltipRef, task, arrowIndent, scrollX, scrollY, headerHeight, taskListWidth, rowHeight, svgContainerHeight, svgContainerWidth, rtl, isDragging]);
|
|
783
792
|
return React__default.createElement("div", {
|
|
784
793
|
ref: tooltipRef,
|
|
785
794
|
className: relatedX ? styles$2.tooltipDetailsContainer : styles$2.tooltipDetailsContainerHidden,
|
|
@@ -795,6 +804,8 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
795
804
|
}));
|
|
796
805
|
};
|
|
797
806
|
var StandardTooltipContent = function StandardTooltipContent(_ref2) {
|
|
807
|
+
var _task$plannedDuration, _task$actualDuration;
|
|
808
|
+
|
|
798
809
|
var task = _ref2.task,
|
|
799
810
|
fontSize = _ref2.fontSize,
|
|
800
811
|
fontFamily = _ref2.fontFamily,
|
|
@@ -803,6 +814,8 @@ var StandardTooltipContent = function StandardTooltipContent(_ref2) {
|
|
|
803
814
|
fontSize: fontSize,
|
|
804
815
|
fontFamily: fontFamily
|
|
805
816
|
};
|
|
817
|
+
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;
|
|
818
|
+
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;
|
|
806
819
|
if (type == "planned") return React__default.createElement("div", {
|
|
807
820
|
className: styles$2.tooltipDefaultContainer,
|
|
808
821
|
style: style
|
|
@@ -812,7 +825,7 @@ var StandardTooltipContent = function StandardTooltipContent(_ref2) {
|
|
|
812
825
|
}
|
|
813
826
|
}, task.name + ": Planned dates: "), React__default.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__default.createElement("p", {
|
|
814
827
|
className: styles$2.tooltipDefaultContainerParagraph
|
|
815
|
-
}, "Duration: " +
|
|
828
|
+
}, "Duration: " + computedPlannedDuration + " day(s)"), React__default.createElement("p", {
|
|
816
829
|
className: styles$2.tooltipDefaultContainerParagraph
|
|
817
830
|
}, !!task.progress && "Progress: " + task.progress + " %"));else return React__default.createElement("div", {
|
|
818
831
|
className: styles$2.tooltipDefaultContainer,
|
|
@@ -823,7 +836,7 @@ var StandardTooltipContent = function StandardTooltipContent(_ref2) {
|
|
|
823
836
|
}
|
|
824
837
|
}, task.name + ": Actual dates: "), React__default.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__default.createElement("p", {
|
|
825
838
|
className: styles$2.tooltipDefaultContainerParagraph
|
|
826
|
-
}, "Duration: " +
|
|
839
|
+
}, "Duration: " + computedActualDuration + " day(s)"), React__default.createElement("p", {
|
|
827
840
|
className: styles$2.tooltipDefaultContainerParagraph
|
|
828
841
|
}, !!task.progress && "Progress: " + task.progress + " %"));
|
|
829
842
|
};
|
|
@@ -3054,6 +3067,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3054
3067
|
setGanttEvent = _ref.setGanttEvent,
|
|
3055
3068
|
setFailedTask = _ref.setFailedTask,
|
|
3056
3069
|
setSelectedTask = _ref.setSelectedTask,
|
|
3070
|
+
onBarTasksUpdate = _ref.onBarTasksUpdate,
|
|
3057
3071
|
onDateChange = _ref.onDateChange,
|
|
3058
3072
|
onProgressChange = _ref.onProgressChange,
|
|
3059
3073
|
onDoubleClick = _ref.onDoubleClick,
|
|
@@ -3097,35 +3111,98 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3097
3111
|
changedTask = _handleTaskBySVGMouse.changedTask;
|
|
3098
3112
|
|
|
3099
3113
|
if (isChanged) {
|
|
3100
|
-
var finalTask = changedTask;
|
|
3114
|
+
var finalTask = _extends({}, changedTask);
|
|
3115
|
+
|
|
3116
|
+
var dragType = ganttEvent.type;
|
|
3101
3117
|
|
|
3102
3118
|
if (changedTask.calender && (ganttEvent.action === "end" || ganttEvent.action === "start" || ganttEvent.action === "move")) {
|
|
3103
|
-
finalTask = _extends({}, changedTask);
|
|
3104
3119
|
var cal = finalTask.calender;
|
|
3105
3120
|
|
|
3106
|
-
if (
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
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)));
|
|
3112
3193
|
|
|
3113
|
-
finalTask.
|
|
3114
|
-
finalTask.x1 = taskXCoordinate(_snapped, dates, columnWidth);
|
|
3194
|
+
finalTask.actualDuration = _actDays;
|
|
3115
3195
|
} else {
|
|
3116
|
-
var
|
|
3196
|
+
var _planDays = Math.max(1, Math.round((finalTask.end.getTime() - finalTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3117
3197
|
|
|
3118
|
-
|
|
3119
|
-
finalTask.start = _snapped2;
|
|
3120
|
-
finalTask.end = new Date(finalTask.end.getTime() + delta);
|
|
3121
|
-
finalTask.x1 = taskXCoordinate(finalTask.start, dates, columnWidth);
|
|
3122
|
-
finalTask.x2 = taskXCoordinate(finalTask.end, dates, columnWidth);
|
|
3198
|
+
finalTask.plannedDuration = _planDays;
|
|
3123
3199
|
}
|
|
3124
3200
|
}
|
|
3125
3201
|
|
|
3126
3202
|
setGanttEvent({
|
|
3127
3203
|
action: ganttEvent.action,
|
|
3128
|
-
changedTask: finalTask
|
|
3204
|
+
changedTask: finalTask,
|
|
3205
|
+
type: dragType
|
|
3129
3206
|
});
|
|
3130
3207
|
}
|
|
3131
3208
|
|
|
@@ -3158,56 +3235,123 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3158
3235
|
newChangedTask = _handleTaskBySVGMouse2.changedTask;
|
|
3159
3236
|
|
|
3160
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;
|
|
3161
3239
|
|
|
3162
3240
|
if (newChangedTask.calender && (action === "move" || action === "end" || action === "start")) {
|
|
3163
3241
|
var cal = newChangedTask.calender;
|
|
3164
3242
|
|
|
3165
|
-
if (
|
|
3166
|
-
|
|
3167
|
-
|
|
3168
|
-
|
|
3169
|
-
|
|
3170
|
-
|
|
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
|
+
}
|
|
3171
3262
|
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
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);
|
|
3182
3273
|
}
|
|
3183
3274
|
|
|
3184
|
-
newChangedTask.
|
|
3185
|
-
|
|
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;
|
|
3186
3288
|
} else {
|
|
3187
|
-
|
|
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
|
+
}
|
|
3188
3308
|
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
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();
|
|
3315
|
+
|
|
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;
|
|
3194
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)));
|
|
3195
3339
|
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
};
|
|
3203
|
-
}).filter(function (s) {
|
|
3204
|
-
return s.x2 > s.x1;
|
|
3205
|
-
});
|
|
3206
|
-
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
|
+
}
|
|
3207
3346
|
}
|
|
3208
3347
|
|
|
3209
3348
|
svg.current.removeEventListener("mousemove", handleMouseMove);
|
|
3210
3349
|
svg.current.removeEventListener("mouseup", handleMouseUp);
|
|
3350
|
+
|
|
3351
|
+
if (onBarTasksUpdate && isNotLikeOriginal) {
|
|
3352
|
+
onBarTasksUpdate(newChangedTask);
|
|
3353
|
+
}
|
|
3354
|
+
|
|
3211
3355
|
setGanttEvent({
|
|
3212
3356
|
action: ""
|
|
3213
3357
|
});
|
|
@@ -3259,7 +3403,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3259
3403
|
svg.current.addEventListener("mouseup", handleMouseUp);
|
|
3260
3404
|
setIsMoving(true);
|
|
3261
3405
|
}
|
|
3262
|
-
}, [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]);
|
|
3263
3407
|
|
|
3264
3408
|
var handleBarEventStart = function handleBarEventStart(action, task, event, type) {
|
|
3265
3409
|
try {
|
|
@@ -3345,7 +3489,9 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3345
3489
|
|
|
3346
3490
|
var getArrows = function getArrows(isCritical, criticalPathType) {
|
|
3347
3491
|
return tasks.flatMap(function (_task) {
|
|
3348
|
-
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;
|
|
3349
3495
|
|
|
3350
3496
|
if (!task) {
|
|
3351
3497
|
return [];
|
|
@@ -3397,8 +3543,9 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3397
3543
|
fontSize: fontSize
|
|
3398
3544
|
}, virtualItems.map(function (vi) {
|
|
3399
3545
|
var _task = tasks[vi.index];
|
|
3400
|
-
|
|
3401
|
-
|
|
3546
|
+
var task = ganttEvent.changedTask && ganttEvent.changedTask.id === _task.id ? _extends({}, ganttEvent.changedTask, {
|
|
3547
|
+
y: 0
|
|
3548
|
+
}) : _extends({}, _task, {
|
|
3402
3549
|
y: 0
|
|
3403
3550
|
});
|
|
3404
3551
|
|
|
@@ -3750,6 +3897,14 @@ var Gantt = function Gantt(_ref) {
|
|
|
3750
3897
|
ganttEvent = _useState9[0],
|
|
3751
3898
|
setGanttEvent = _useState9[1];
|
|
3752
3899
|
|
|
3900
|
+
var handleBarTasksUpdate = function handleBarTasksUpdate(task) {
|
|
3901
|
+
setBarTasks(function (prev) {
|
|
3902
|
+
return prev.map(function (t) {
|
|
3903
|
+
return t.id === task.id ? task : t;
|
|
3904
|
+
});
|
|
3905
|
+
});
|
|
3906
|
+
};
|
|
3907
|
+
|
|
3753
3908
|
var taskHeight = React.useMemo(function () {
|
|
3754
3909
|
return rowHeight * barFill / 100;
|
|
3755
3910
|
}, [rowHeight, barFill]);
|
|
@@ -3894,17 +4049,6 @@ var Gantt = function Gantt(_ref) {
|
|
|
3894
4049
|
setBarTasks(barTasks.filter(function (t) {
|
|
3895
4050
|
return t.id !== changedTask.id;
|
|
3896
4051
|
}));
|
|
3897
|
-
} else if (action === "move" || action === "end" || action === "start" || action === "progress") {
|
|
3898
|
-
var prevStateTask = barTasks.find(function (t) {
|
|
3899
|
-
return t.id === changedTask.id;
|
|
3900
|
-
});
|
|
3901
|
-
|
|
3902
|
-
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)) {
|
|
3903
|
-
var newTaskList = barTasks.map(function (t) {
|
|
3904
|
-
return t.id === changedTask.id ? changedTask : t;
|
|
3905
|
-
});
|
|
3906
|
-
setBarTasks(newTaskList);
|
|
3907
|
-
}
|
|
3908
4052
|
}
|
|
3909
4053
|
}
|
|
3910
4054
|
}, [ganttEvent, barTasks]);
|
|
@@ -4176,6 +4320,7 @@ var Gantt = function Gantt(_ref) {
|
|
|
4176
4320
|
setGanttEvent: setGanttEvent,
|
|
4177
4321
|
setFailedTask: setFailedTask,
|
|
4178
4322
|
setSelectedTask: handleSelectedTask,
|
|
4323
|
+
onBarTasksUpdate: handleBarTasksUpdate,
|
|
4179
4324
|
onDateChange: onDateChange,
|
|
4180
4325
|
onProgressChange: onProgressChange,
|
|
4181
4326
|
onDoubleClick: onDoubleClick,
|
|
@@ -4186,12 +4331,17 @@ var Gantt = function Gantt(_ref) {
|
|
|
4186
4331
|
visibleStartY: visibleStartY,
|
|
4187
4332
|
visibleEndY: visibleEndY
|
|
4188
4333
|
};
|
|
4334
|
+
var tableTasks = React.useMemo(function () {
|
|
4335
|
+
return ganttEvent.changedTask ? barTasks.map(function (t) {
|
|
4336
|
+
return t.id === ganttEvent.changedTask.id ? ganttEvent.changedTask : t;
|
|
4337
|
+
}) : barTasks;
|
|
4338
|
+
}, [barTasks, ganttEvent.changedTask]);
|
|
4189
4339
|
var tableProps = {
|
|
4190
4340
|
rowHeight: rowHeight,
|
|
4191
4341
|
rowWidth: listCellWidth,
|
|
4192
4342
|
fontFamily: fontFamily,
|
|
4193
4343
|
fontSize: fontSize,
|
|
4194
|
-
tasks:
|
|
4344
|
+
tasks: tableTasks,
|
|
4195
4345
|
leafTasks: leafTasks,
|
|
4196
4346
|
scheduleType: scheduleType,
|
|
4197
4347
|
locale: locale,
|
|
@@ -4259,7 +4409,8 @@ var Gantt = function Gantt(_ref) {
|
|
|
4259
4409
|
taskListWidth: taskListWidth,
|
|
4260
4410
|
TooltipContent: TooltipContent,
|
|
4261
4411
|
rtl: rtl,
|
|
4262
|
-
svgWidth: svgWidth
|
|
4412
|
+
svgWidth: svgWidth,
|
|
4413
|
+
isDragging: ganttEvent.action === "move" || ganttEvent.action === "start" || ganttEvent.action === "end" || ganttEvent.action === "progress"
|
|
4263
4414
|
}), React__default.createElement(VerticalScroll, {
|
|
4264
4415
|
ganttFullHeight: ganttFullHeight,
|
|
4265
4416
|
ganttHeight: ganttHeight,
|
|
@@ -4469,12 +4620,41 @@ function computeCriticalPath(taskID, taskMap) {
|
|
|
4469
4620
|
taskMap[taskID].paths = [];
|
|
4470
4621
|
|
|
4471
4622
|
for (var j = 0; j < dependents.length; j++) {
|
|
4472
|
-
var
|
|
4473
|
-
var
|
|
4623
|
+
var depStart = taskMap[dependents[j]].task.start.getTime();
|
|
4624
|
+
var depEnd = taskMap[dependents[j]].task.end.getTime();
|
|
4625
|
+
var depDuration = depEnd - depStart;
|
|
4626
|
+
var startWeek = Math.floor((depStart / 86400000 + 4) / 7);
|
|
4627
|
+
var endWeek = Math.floor((depEnd / 86400000 + 4) / 7);
|
|
4628
|
+
var offTime = 0;
|
|
4629
|
+
|
|
4630
|
+
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++) {
|
|
4631
|
+
var _taskMap$dependents$j, _taskMap$dependents$j2;
|
|
4632
|
+
|
|
4633
|
+
for (var w = startWeek; w <= endWeek; w++) {
|
|
4634
|
+
var dayOfTheWeek = taskMap[dependents[j]].task.calendar.off_days[d];
|
|
4635
|
+
var offDay = 86400000 * (7 * w - 4 + dayOfTheWeek);
|
|
4636
|
+
|
|
4637
|
+
if (offDay >= depStart && offDay <= depEnd && (offDay > taskMap[taskID].end || taskMap[taskID].task.calendar.off_days.includes(dayOfTheWeek))) {
|
|
4638
|
+
offTime += 86400000;
|
|
4639
|
+
}
|
|
4640
|
+
}
|
|
4641
|
+
}
|
|
4642
|
+
|
|
4643
|
+
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++) {
|
|
4644
|
+
var _taskMap$dependents$j3, _taskMap$dependents$j4;
|
|
4645
|
+
|
|
4646
|
+
var holiday = taskMap[dependents[j]].task.calendar.holidays[h];
|
|
4647
|
+
|
|
4648
|
+
if (holiday >= depStart && holiday <= depEnd) {
|
|
4649
|
+
offTime += 86400000;
|
|
4650
|
+
}
|
|
4651
|
+
}
|
|
4652
|
+
|
|
4653
|
+
var overlap = Math.max(taskMap[taskID].end - depStart, 0);
|
|
4474
4654
|
var paths = taskMap[dependents[j]].paths;
|
|
4475
4655
|
|
|
4476
4656
|
for (var k = 0; k < paths.length; k++) {
|
|
4477
|
-
var totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap + paths[k].duration;
|
|
4657
|
+
var totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap - offTime + paths[k].duration;
|
|
4478
4658
|
|
|
4479
4659
|
if (taskMap[taskID].paths.length < 2) {
|
|
4480
4660
|
taskMap[taskID].paths.push({
|
|
@@ -4497,7 +4677,7 @@ function computeCriticalPath(taskID, taskMap) {
|
|
|
4497
4677
|
}
|
|
4498
4678
|
|
|
4499
4679
|
if (paths.length === 0) {
|
|
4500
|
-
var immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap;
|
|
4680
|
+
var immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap - offTime;
|
|
4501
4681
|
|
|
4502
4682
|
if (taskMap[taskID].paths.length < 2) {
|
|
4503
4683
|
taskMap[taskID].paths.push({
|