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
|
@@ -26,5 +26,7 @@ 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;
|
|
30
|
+
sliderTime?: number;
|
|
29
31
|
} & EventOption;
|
|
30
32
|
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,
|
|
@@ -3062,7 +3076,8 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3062
3076
|
onCalendarError = _ref.onCalendarError,
|
|
3063
3077
|
projectCalendar = _ref.projectCalendar,
|
|
3064
3078
|
visibleStartY = _ref.visibleStartY,
|
|
3065
|
-
visibleEndY = _ref.visibleEndY
|
|
3079
|
+
visibleEndY = _ref.visibleEndY,
|
|
3080
|
+
sliderTime = _ref.sliderTime;
|
|
3066
3081
|
var point = svg === null || svg === void 0 ? void 0 : (_svg$current = svg.current) === null || _svg$current === void 0 ? void 0 : _svg$current.createSVGPoint();
|
|
3067
3082
|
|
|
3068
3083
|
var _useState = React.useState(0),
|
|
@@ -3097,35 +3112,98 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3097
3112
|
changedTask = _handleTaskBySVGMouse.changedTask;
|
|
3098
3113
|
|
|
3099
3114
|
if (isChanged) {
|
|
3100
|
-
var finalTask = changedTask;
|
|
3115
|
+
var finalTask = _extends({}, changedTask);
|
|
3116
|
+
|
|
3117
|
+
var dragType = ganttEvent.type;
|
|
3101
3118
|
|
|
3102
3119
|
if (changedTask.calender && (ganttEvent.action === "end" || ganttEvent.action === "start" || ganttEvent.action === "move")) {
|
|
3103
|
-
finalTask = _extends({}, changedTask);
|
|
3104
3120
|
var cal = finalTask.calender;
|
|
3105
3121
|
|
|
3106
|
-
if (
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3122
|
+
if (dragType === "actual") {
|
|
3123
|
+
if (ganttEvent.action === "end") {
|
|
3124
|
+
var snapped = snapToWorkingTime(finalTask.actualEnd, cal, "forward");
|
|
3125
|
+
finalTask.actualEnd = snapped;
|
|
3126
|
+
finalTask.actualx2 = taskXCoordinate(snapped, dates, columnWidth);
|
|
3127
|
+
} else if (ganttEvent.action === "start") {
|
|
3128
|
+
var _snapped = snapToWorkingTime(finalTask.actualStart, cal, "forward");
|
|
3129
|
+
|
|
3130
|
+
finalTask.actualStart = _snapped;
|
|
3131
|
+
finalTask.actualx1 = taskXCoordinate(_snapped, dates, columnWidth);
|
|
3132
|
+
} else {
|
|
3133
|
+
var _snapped2 = snapToWorkingTime(finalTask.actualStart, cal, "forward");
|
|
3134
|
+
|
|
3135
|
+
var delta = _snapped2.getTime() - finalTask.actualStart.getTime();
|
|
3136
|
+
finalTask.actualStart = _snapped2;
|
|
3137
|
+
finalTask.actualEnd = new Date(finalTask.actualEnd.getTime() + delta);
|
|
3138
|
+
finalTask.actualx1 = taskXCoordinate(finalTask.actualStart, dates, columnWidth);
|
|
3139
|
+
finalTask.actualx2 = taskXCoordinate(finalTask.actualEnd, dates, columnWidth);
|
|
3140
|
+
}
|
|
3141
|
+
|
|
3142
|
+
var actEnd = addToDate(startOfDate(finalTask.actualEnd, "day"), 1, "day");
|
|
3143
|
+
var actIntervals = getWorkingIntervals(finalTask.actualStart, actEnd, cal);
|
|
3144
|
+
var actSegs = actIntervals.map(function (iv) {
|
|
3145
|
+
return {
|
|
3146
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3147
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3148
|
+
};
|
|
3149
|
+
}).filter(function (s) {
|
|
3150
|
+
return s.x2 > s.x1;
|
|
3151
|
+
});
|
|
3152
|
+
finalTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;
|
|
3153
|
+
var actDays = Math.max(1, Math.round((finalTask.actualEnd.getTime() - finalTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3154
|
+
finalTask.actualDuration = actDays;
|
|
3155
|
+
} else {
|
|
3156
|
+
if (ganttEvent.action === "end") {
|
|
3157
|
+
var _snapped3 = snapToWorkingTime(finalTask.end, cal, "forward");
|
|
3158
|
+
|
|
3159
|
+
finalTask.end = _snapped3;
|
|
3160
|
+
finalTask.x2 = taskXCoordinate(_snapped3, dates, columnWidth);
|
|
3161
|
+
} else if (ganttEvent.action === "start") {
|
|
3162
|
+
var _snapped4 = snapToWorkingTime(finalTask.start, cal, "forward");
|
|
3163
|
+
|
|
3164
|
+
finalTask.start = _snapped4;
|
|
3165
|
+
finalTask.x1 = taskXCoordinate(_snapped4, dates, columnWidth);
|
|
3166
|
+
} else {
|
|
3167
|
+
var _snapped5 = snapToWorkingTime(finalTask.start, cal, "forward");
|
|
3168
|
+
|
|
3169
|
+
var _delta = _snapped5.getTime() - finalTask.start.getTime();
|
|
3170
|
+
|
|
3171
|
+
finalTask.start = _snapped5;
|
|
3172
|
+
finalTask.end = new Date(finalTask.end.getTime() + _delta);
|
|
3173
|
+
finalTask.x1 = taskXCoordinate(finalTask.start, dates, columnWidth);
|
|
3174
|
+
finalTask.x2 = taskXCoordinate(finalTask.end, dates, columnWidth);
|
|
3175
|
+
}
|
|
3176
|
+
|
|
3177
|
+
var planEnd = addToDate(startOfDate(finalTask.end, "day"), 1, "day");
|
|
3178
|
+
var planIntervals = getWorkingIntervals(finalTask.start, planEnd, cal);
|
|
3179
|
+
var planSegs = planIntervals.map(function (iv) {
|
|
3180
|
+
return {
|
|
3181
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3182
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3183
|
+
};
|
|
3184
|
+
}).filter(function (s) {
|
|
3185
|
+
return s.x2 > s.x1;
|
|
3186
|
+
});
|
|
3187
|
+
finalTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;
|
|
3188
|
+
var planDays = Math.max(1, Math.round((finalTask.end.getTime() - finalTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3189
|
+
finalTask.plannedDuration = planDays;
|
|
3190
|
+
}
|
|
3191
|
+
} else {
|
|
3192
|
+
if (dragType === "actual") {
|
|
3193
|
+
var _actDays = Math.max(1, Math.round((finalTask.actualEnd.getTime() - finalTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3112
3194
|
|
|
3113
|
-
finalTask.
|
|
3114
|
-
finalTask.x1 = taskXCoordinate(_snapped, dates, columnWidth);
|
|
3195
|
+
finalTask.actualDuration = _actDays;
|
|
3115
3196
|
} else {
|
|
3116
|
-
var
|
|
3197
|
+
var _planDays = Math.max(1, Math.round((finalTask.end.getTime() - finalTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3117
3198
|
|
|
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);
|
|
3199
|
+
finalTask.plannedDuration = _planDays;
|
|
3123
3200
|
}
|
|
3124
3201
|
}
|
|
3125
3202
|
|
|
3126
3203
|
setGanttEvent({
|
|
3127
3204
|
action: ganttEvent.action,
|
|
3128
|
-
changedTask: finalTask
|
|
3205
|
+
changedTask: finalTask,
|
|
3206
|
+
type: dragType
|
|
3129
3207
|
});
|
|
3130
3208
|
}
|
|
3131
3209
|
|
|
@@ -3158,56 +3236,123 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3158
3236
|
newChangedTask = _handleTaskBySVGMouse2.changedTask;
|
|
3159
3237
|
|
|
3160
3238
|
var isNotLikeOriginal = originalSelectedTask.start !== newChangedTask.start || originalSelectedTask.end !== newChangedTask.end || originalSelectedTask.actualStart !== newChangedTask.actualStart || originalSelectedTask.actualEnd !== newChangedTask.actualEnd || originalSelectedTask.progress !== newChangedTask.progress;
|
|
3239
|
+
var dropType = type;
|
|
3161
3240
|
|
|
3162
3241
|
if (newChangedTask.calender && (action === "move" || action === "end" || action === "start")) {
|
|
3163
3242
|
var cal = newChangedTask.calender;
|
|
3164
3243
|
|
|
3165
|
-
if (
|
|
3166
|
-
|
|
3167
|
-
|
|
3168
|
-
|
|
3169
|
-
|
|
3170
|
-
|
|
3244
|
+
if (dropType === "actual") {
|
|
3245
|
+
if (action === "end") {
|
|
3246
|
+
var snappedEnd = snapToWorkingTime(newChangedTask.actualEnd, cal, "forward");
|
|
3247
|
+
newChangedTask.actualEnd = snappedEnd;
|
|
3248
|
+
newChangedTask.actualx2 = taskXCoordinate(snappedEnd, dates, columnWidth);
|
|
3249
|
+
} else if (action === "start") {
|
|
3250
|
+
var snappedStart = snapToWorkingTime(newChangedTask.actualStart, cal, "forward");
|
|
3251
|
+
|
|
3252
|
+
if (snappedStart >= newChangedTask.actualEnd) {
|
|
3253
|
+
setFailedTask(originalSelectedTask);
|
|
3254
|
+
onCalendarError === null || onCalendarError === void 0 ? void 0 : onCalendarError(newChangedTask, "No working time in selected range");
|
|
3255
|
+
setGanttEvent({
|
|
3256
|
+
action: ""
|
|
3257
|
+
});
|
|
3258
|
+
setIsMoving(false);
|
|
3259
|
+
svg.current.removeEventListener("mousemove", handleMouseMove);
|
|
3260
|
+
svg.current.removeEventListener("mouseup", handleMouseUp);
|
|
3261
|
+
return Promise.resolve();
|
|
3262
|
+
}
|
|
3171
3263
|
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3264
|
+
newChangedTask.actualStart = snappedStart;
|
|
3265
|
+
newChangedTask.actualx1 = taskXCoordinate(snappedStart, dates, columnWidth);
|
|
3266
|
+
} else {
|
|
3267
|
+
var _snappedStart = snapToWorkingTime(newChangedTask.actualStart, cal, "forward");
|
|
3268
|
+
|
|
3269
|
+
var delta = _snappedStart.getTime() - newChangedTask.actualStart.getTime();
|
|
3270
|
+
newChangedTask.actualStart = _snappedStart;
|
|
3271
|
+
newChangedTask.actualEnd = new Date(newChangedTask.actualEnd.getTime() + delta);
|
|
3272
|
+
newChangedTask.actualx1 = taskXCoordinate(_snappedStart, dates, columnWidth);
|
|
3273
|
+
newChangedTask.actualx2 = taskXCoordinate(newChangedTask.actualEnd, dates, columnWidth);
|
|
3182
3274
|
}
|
|
3183
3275
|
|
|
3184
|
-
newChangedTask.
|
|
3185
|
-
|
|
3276
|
+
var actEnd = addToDate(startOfDate(newChangedTask.actualEnd, "day"), 1, "day");
|
|
3277
|
+
var actIntervals = getWorkingIntervals(newChangedTask.actualStart, actEnd, cal);
|
|
3278
|
+
var actSegs = actIntervals.map(function (iv) {
|
|
3279
|
+
return {
|
|
3280
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3281
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3282
|
+
};
|
|
3283
|
+
}).filter(function (s) {
|
|
3284
|
+
return s.x2 > s.x1;
|
|
3285
|
+
});
|
|
3286
|
+
newChangedTask.actualSegments = actSegs.length > 0 ? actSegs : undefined;
|
|
3287
|
+
var actDays = Math.max(1, Math.round((newChangedTask.actualEnd.getTime() - newChangedTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3288
|
+
newChangedTask.actualDuration = actDays;
|
|
3186
3289
|
} else {
|
|
3187
|
-
|
|
3290
|
+
if (action === "end") {
|
|
3291
|
+
var _snappedEnd = snapToWorkingTime(newChangedTask.end, cal, "forward");
|
|
3292
|
+
|
|
3293
|
+
newChangedTask.end = _snappedEnd;
|
|
3294
|
+
newChangedTask.x2 = taskXCoordinate(_snappedEnd, dates, columnWidth);
|
|
3295
|
+
} else if (action === "start") {
|
|
3296
|
+
var _snappedStart2 = snapToWorkingTime(newChangedTask.start, cal, "forward");
|
|
3297
|
+
|
|
3298
|
+
if (_snappedStart2 >= newChangedTask.end) {
|
|
3299
|
+
setFailedTask(originalSelectedTask);
|
|
3300
|
+
onCalendarError === null || onCalendarError === void 0 ? void 0 : onCalendarError(newChangedTask, "No working time in selected range");
|
|
3301
|
+
setGanttEvent({
|
|
3302
|
+
action: ""
|
|
3303
|
+
});
|
|
3304
|
+
setIsMoving(false);
|
|
3305
|
+
svg.current.removeEventListener("mousemove", handleMouseMove);
|
|
3306
|
+
svg.current.removeEventListener("mouseup", handleMouseUp);
|
|
3307
|
+
return Promise.resolve();
|
|
3308
|
+
}
|
|
3309
|
+
|
|
3310
|
+
newChangedTask.start = _snappedStart2;
|
|
3311
|
+
newChangedTask.x1 = taskXCoordinate(_snappedStart2, dates, columnWidth);
|
|
3312
|
+
} else {
|
|
3313
|
+
var _snappedStart3 = snapToWorkingTime(newChangedTask.start, cal, "forward");
|
|
3314
|
+
|
|
3315
|
+
var _delta2 = _snappedStart3.getTime() - newChangedTask.start.getTime();
|
|
3188
3316
|
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3317
|
+
newChangedTask.start = _snappedStart3;
|
|
3318
|
+
newChangedTask.end = new Date(newChangedTask.end.getTime() + _delta2);
|
|
3319
|
+
newChangedTask.x1 = taskXCoordinate(_snappedStart3, dates, columnWidth);
|
|
3320
|
+
newChangedTask.x2 = taskXCoordinate(newChangedTask.end, dates, columnWidth);
|
|
3321
|
+
}
|
|
3322
|
+
|
|
3323
|
+
var planEnd = addToDate(startOfDate(newChangedTask.end, "day"), 1, "day");
|
|
3324
|
+
var planIntervals = getWorkingIntervals(newChangedTask.start, planEnd, cal);
|
|
3325
|
+
var planSegs = planIntervals.map(function (iv) {
|
|
3326
|
+
return {
|
|
3327
|
+
x1: taskXCoordinate(iv.start, dates, columnWidth),
|
|
3328
|
+
x2: taskXCoordinate(iv.end, dates, columnWidth)
|
|
3329
|
+
};
|
|
3330
|
+
}).filter(function (s) {
|
|
3331
|
+
return s.x2 > s.x1;
|
|
3332
|
+
});
|
|
3333
|
+
newChangedTask.plannedSegments = planSegs.length > 0 ? planSegs : undefined;
|
|
3334
|
+
var planDays = Math.max(1, Math.round((newChangedTask.end.getTime() - newChangedTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3335
|
+
newChangedTask.plannedDuration = planDays;
|
|
3194
3336
|
}
|
|
3337
|
+
} else if (action === "move" || action === "end" || action === "start") {
|
|
3338
|
+
if (dropType === "actual") {
|
|
3339
|
+
var _actDays2 = Math.max(1, Math.round((newChangedTask.actualEnd.getTime() - newChangedTask.actualStart.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3195
3340
|
|
|
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;
|
|
3341
|
+
newChangedTask.actualDuration = _actDays2;
|
|
3342
|
+
} else {
|
|
3343
|
+
var _planDays2 = Math.max(1, Math.round((newChangedTask.end.getTime() - newChangedTask.start.getTime()) / (1000 * 60 * 60 * 24)));
|
|
3344
|
+
|
|
3345
|
+
newChangedTask.plannedDuration = _planDays2;
|
|
3346
|
+
}
|
|
3207
3347
|
}
|
|
3208
3348
|
|
|
3209
3349
|
svg.current.removeEventListener("mousemove", handleMouseMove);
|
|
3210
3350
|
svg.current.removeEventListener("mouseup", handleMouseUp);
|
|
3351
|
+
|
|
3352
|
+
if (onBarTasksUpdate && isNotLikeOriginal) {
|
|
3353
|
+
onBarTasksUpdate(newChangedTask);
|
|
3354
|
+
}
|
|
3355
|
+
|
|
3211
3356
|
setGanttEvent({
|
|
3212
3357
|
action: ""
|
|
3213
3358
|
});
|
|
@@ -3259,7 +3404,7 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3259
3404
|
svg.current.addEventListener("mouseup", handleMouseUp);
|
|
3260
3405
|
setIsMoving(true);
|
|
3261
3406
|
}
|
|
3262
|
-
}, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, onCalendarError, projectCalendar, svg, isMoving, point, rtl, setFailedTask, setGanttEvent, dates, columnWidth]);
|
|
3407
|
+
}, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, onCalendarError, projectCalendar, svg, isMoving, point, rtl, setFailedTask, setGanttEvent, onBarTasksUpdate, dates, columnWidth]);
|
|
3263
3408
|
|
|
3264
3409
|
var handleBarEventStart = function handleBarEventStart(action, task, event, type) {
|
|
3265
3410
|
try {
|
|
@@ -3345,7 +3490,9 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3345
3490
|
|
|
3346
3491
|
var getArrows = function getArrows(isCritical, criticalPathType) {
|
|
3347
3492
|
return tasks.flatMap(function (_task) {
|
|
3348
|
-
var
|
|
3493
|
+
var _live = ganttEvent.changedTask && ganttEvent.changedTask.id === _task.id ? ganttEvent.changedTask : _task;
|
|
3494
|
+
|
|
3495
|
+
var task = _live.start.getTime() > 0 && _live.end.getTime() > 0 ? _live : undefined;
|
|
3349
3496
|
|
|
3350
3497
|
if (!task) {
|
|
3351
3498
|
return [];
|
|
@@ -3387,9 +3534,32 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3387
3534
|
});
|
|
3388
3535
|
};
|
|
3389
3536
|
|
|
3537
|
+
var lineX = sliderTime !== undefined ? taskXCoordinate(new Date(sliderTime), dates, columnWidth) : null;
|
|
3538
|
+
var totalHeight = tasks.length * rowHeight;
|
|
3539
|
+
React.useEffect(function () {
|
|
3540
|
+
if (sliderTime !== undefined) {
|
|
3541
|
+
console.log('Vertical line debug:', {
|
|
3542
|
+
sliderTime: new Date(sliderTime).toLocaleString(),
|
|
3543
|
+
lineX: lineX,
|
|
3544
|
+
totalHeight: totalHeight,
|
|
3545
|
+
tasksCount: tasks.length,
|
|
3546
|
+
columnWidth: columnWidth,
|
|
3547
|
+
datesRange: dates.length > 0 ? dates[0].toLocaleString() + " - " + dates[dates.length - 1].toLocaleString() : 'empty'
|
|
3548
|
+
});
|
|
3549
|
+
}
|
|
3550
|
+
}, [sliderTime, lineX, totalHeight, tasks.length, dates, columnWidth]);
|
|
3390
3551
|
return React__default.createElement("g", {
|
|
3391
3552
|
className: "content"
|
|
3392
|
-
}, React__default.createElement("
|
|
3553
|
+
}, lineX !== null && lineX > 0 && React__default.createElement("line", {
|
|
3554
|
+
x1: lineX,
|
|
3555
|
+
y1: 0,
|
|
3556
|
+
x2: lineX,
|
|
3557
|
+
y2: totalHeight,
|
|
3558
|
+
stroke: "red",
|
|
3559
|
+
strokeWidth: 2,
|
|
3560
|
+
pointerEvents: "none",
|
|
3561
|
+
opacity: 0.8
|
|
3562
|
+
}), React__default.createElement("g", {
|
|
3393
3563
|
className: "arrows"
|
|
3394
3564
|
}, getArrows(false), getArrows(true, "secondary"), getArrows(true, "primary")), React__default.createElement("g", {
|
|
3395
3565
|
className: "bar",
|
|
@@ -3397,8 +3567,9 @@ var TaskGanttContent = function TaskGanttContent(_ref) {
|
|
|
3397
3567
|
fontSize: fontSize
|
|
3398
3568
|
}, virtualItems.map(function (vi) {
|
|
3399
3569
|
var _task = tasks[vi.index];
|
|
3400
|
-
|
|
3401
|
-
|
|
3570
|
+
var task = ganttEvent.changedTask && ganttEvent.changedTask.id === _task.id ? _extends({}, ganttEvent.changedTask, {
|
|
3571
|
+
y: 0
|
|
3572
|
+
}) : _extends({}, _task, {
|
|
3402
3573
|
y: 0
|
|
3403
3574
|
});
|
|
3404
3575
|
|
|
@@ -3644,7 +3815,8 @@ var Gantt = function Gantt(_ref) {
|
|
|
3644
3815
|
_ref$shouldNotShowLoa = _ref.shouldNotShowLoadingOverlay,
|
|
3645
3816
|
shouldNotShowLoadingOverlay = _ref$shouldNotShowLoa === void 0 ? true : _ref$shouldNotShowLoa,
|
|
3646
3817
|
projectCalendar = _ref.projectCalendar,
|
|
3647
|
-
onCalendarError = _ref.onCalendarError
|
|
3818
|
+
onCalendarError = _ref.onCalendarError,
|
|
3819
|
+
sliderTime = _ref.sliderTime;
|
|
3648
3820
|
var effectiveCalendar = (_tasks$find$calender = (_tasks$find = tasks.find(function (t) {
|
|
3649
3821
|
return t.calender;
|
|
3650
3822
|
})) === null || _tasks$find === void 0 ? void 0 : _tasks$find.calender) != null ? _tasks$find$calender : projectCalendar;
|
|
@@ -3750,6 +3922,14 @@ var Gantt = function Gantt(_ref) {
|
|
|
3750
3922
|
ganttEvent = _useState9[0],
|
|
3751
3923
|
setGanttEvent = _useState9[1];
|
|
3752
3924
|
|
|
3925
|
+
var handleBarTasksUpdate = function handleBarTasksUpdate(task) {
|
|
3926
|
+
setBarTasks(function (prev) {
|
|
3927
|
+
return prev.map(function (t) {
|
|
3928
|
+
return t.id === task.id ? task : t;
|
|
3929
|
+
});
|
|
3930
|
+
});
|
|
3931
|
+
};
|
|
3932
|
+
|
|
3753
3933
|
var taskHeight = React.useMemo(function () {
|
|
3754
3934
|
return rowHeight * barFill / 100;
|
|
3755
3935
|
}, [rowHeight, barFill]);
|
|
@@ -3894,17 +4074,6 @@ var Gantt = function Gantt(_ref) {
|
|
|
3894
4074
|
setBarTasks(barTasks.filter(function (t) {
|
|
3895
4075
|
return t.id !== changedTask.id;
|
|
3896
4076
|
}));
|
|
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
4077
|
}
|
|
3909
4078
|
}
|
|
3910
4079
|
}, [ganttEvent, barTasks]);
|
|
@@ -4176,6 +4345,7 @@ var Gantt = function Gantt(_ref) {
|
|
|
4176
4345
|
setGanttEvent: setGanttEvent,
|
|
4177
4346
|
setFailedTask: setFailedTask,
|
|
4178
4347
|
setSelectedTask: handleSelectedTask,
|
|
4348
|
+
onBarTasksUpdate: handleBarTasksUpdate,
|
|
4179
4349
|
onDateChange: onDateChange,
|
|
4180
4350
|
onProgressChange: onProgressChange,
|
|
4181
4351
|
onDoubleClick: onDoubleClick,
|
|
@@ -4184,14 +4354,20 @@ var Gantt = function Gantt(_ref) {
|
|
|
4184
4354
|
onCalendarError: onCalendarError,
|
|
4185
4355
|
projectCalendar: effectiveCalendar,
|
|
4186
4356
|
visibleStartY: visibleStartY,
|
|
4187
|
-
visibleEndY: visibleEndY
|
|
4357
|
+
visibleEndY: visibleEndY,
|
|
4358
|
+
sliderTime: sliderTime
|
|
4188
4359
|
};
|
|
4360
|
+
var tableTasks = React.useMemo(function () {
|
|
4361
|
+
return ganttEvent.changedTask ? barTasks.map(function (t) {
|
|
4362
|
+
return t.id === ganttEvent.changedTask.id ? ganttEvent.changedTask : t;
|
|
4363
|
+
}) : barTasks;
|
|
4364
|
+
}, [barTasks, ganttEvent.changedTask]);
|
|
4189
4365
|
var tableProps = {
|
|
4190
4366
|
rowHeight: rowHeight,
|
|
4191
4367
|
rowWidth: listCellWidth,
|
|
4192
4368
|
fontFamily: fontFamily,
|
|
4193
4369
|
fontSize: fontSize,
|
|
4194
|
-
tasks:
|
|
4370
|
+
tasks: tableTasks,
|
|
4195
4371
|
leafTasks: leafTasks,
|
|
4196
4372
|
scheduleType: scheduleType,
|
|
4197
4373
|
locale: locale,
|
|
@@ -4259,7 +4435,8 @@ var Gantt = function Gantt(_ref) {
|
|
|
4259
4435
|
taskListWidth: taskListWidth,
|
|
4260
4436
|
TooltipContent: TooltipContent,
|
|
4261
4437
|
rtl: rtl,
|
|
4262
|
-
svgWidth: svgWidth
|
|
4438
|
+
svgWidth: svgWidth,
|
|
4439
|
+
isDragging: ganttEvent.action === "move" || ganttEvent.action === "start" || ganttEvent.action === "end" || ganttEvent.action === "progress"
|
|
4263
4440
|
}), React__default.createElement(VerticalScroll, {
|
|
4264
4441
|
ganttFullHeight: ganttFullHeight,
|
|
4265
4442
|
ganttHeight: ganttHeight,
|
|
@@ -4469,12 +4646,41 @@ function computeCriticalPath(taskID, taskMap) {
|
|
|
4469
4646
|
taskMap[taskID].paths = [];
|
|
4470
4647
|
|
|
4471
4648
|
for (var j = 0; j < dependents.length; j++) {
|
|
4472
|
-
var
|
|
4473
|
-
var
|
|
4649
|
+
var depStart = taskMap[dependents[j]].task.start.getTime();
|
|
4650
|
+
var depEnd = taskMap[dependents[j]].task.end.getTime();
|
|
4651
|
+
var depDuration = depEnd - depStart;
|
|
4652
|
+
var startWeek = Math.floor((depStart / 86400000 + 4) / 7);
|
|
4653
|
+
var endWeek = Math.floor((depEnd / 86400000 + 4) / 7);
|
|
4654
|
+
var offTime = 0;
|
|
4655
|
+
|
|
4656
|
+
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++) {
|
|
4657
|
+
var _taskMap$dependents$j, _taskMap$dependents$j2;
|
|
4658
|
+
|
|
4659
|
+
for (var w = startWeek; w <= endWeek; w++) {
|
|
4660
|
+
var dayOfTheWeek = taskMap[dependents[j]].task.calendar.off_days[d];
|
|
4661
|
+
var offDay = 86400000 * (7 * w - 4 + dayOfTheWeek);
|
|
4662
|
+
|
|
4663
|
+
if (offDay >= depStart && offDay <= depEnd && (offDay > taskMap[taskID].end || taskMap[taskID].task.calendar.off_days.includes(dayOfTheWeek))) {
|
|
4664
|
+
offTime += 86400000;
|
|
4665
|
+
}
|
|
4666
|
+
}
|
|
4667
|
+
}
|
|
4668
|
+
|
|
4669
|
+
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++) {
|
|
4670
|
+
var _taskMap$dependents$j3, _taskMap$dependents$j4;
|
|
4671
|
+
|
|
4672
|
+
var holiday = taskMap[dependents[j]].task.calendar.holidays[h];
|
|
4673
|
+
|
|
4674
|
+
if (holiday >= depStart && holiday <= depEnd) {
|
|
4675
|
+
offTime += 86400000;
|
|
4676
|
+
}
|
|
4677
|
+
}
|
|
4678
|
+
|
|
4679
|
+
var overlap = Math.max(taskMap[taskID].end - depStart, 0);
|
|
4474
4680
|
var paths = taskMap[dependents[j]].paths;
|
|
4475
4681
|
|
|
4476
4682
|
for (var k = 0; k < paths.length; k++) {
|
|
4477
|
-
var totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap + paths[k].duration;
|
|
4683
|
+
var totalDuration = taskMap[taskID].end - taskMap[taskID].start - overlap - offTime + paths[k].duration;
|
|
4478
4684
|
|
|
4479
4685
|
if (taskMap[taskID].paths.length < 2) {
|
|
4480
4686
|
taskMap[taskID].paths.push({
|
|
@@ -4497,7 +4703,7 @@ function computeCriticalPath(taskID, taskMap) {
|
|
|
4497
4703
|
}
|
|
4498
4704
|
|
|
4499
4705
|
if (paths.length === 0) {
|
|
4500
|
-
var immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap;
|
|
4706
|
+
var immediateChildDuration = taskMap[taskID].end - taskMap[taskID].start + depDuration - overlap - offTime;
|
|
4501
4707
|
|
|
4502
4708
|
if (taskMap[taskID].paths.length < 2) {
|
|
4503
4709
|
taskMap[taskID].paths.push({
|