gantt-lib 0.118.0 → 0.118.2
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.css.map +1 -1
- package/dist/index.js +36 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +36 -7
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +52 -15
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -7666,11 +7666,13 @@ var TaskList = ({
|
|
|
7666
7666
|
const [pendingInsert, setPendingInsert] = (0, import_react13.useState)(null);
|
|
7667
7667
|
const [draggingIndex, setDraggingIndex] = (0, import_react13.useState)(null);
|
|
7668
7668
|
const [dragOverTarget, setDragOverTarget] = (0, import_react13.useState)(null);
|
|
7669
|
+
const [isBeforeFirstDropZoneActive, setIsBeforeFirstDropZoneActive] = (0, import_react13.useState)(false);
|
|
7669
7670
|
const dragOriginIndexRef = (0, import_react13.useRef)(null);
|
|
7670
7671
|
const dragTaskIdRef = (0, import_react13.useRef)(null);
|
|
7671
7672
|
const clearDragState = (0, import_react13.useCallback)(() => {
|
|
7672
7673
|
setDraggingIndex(null);
|
|
7673
7674
|
setDragOverTarget(null);
|
|
7675
|
+
setIsBeforeFirstDropZoneActive(false);
|
|
7674
7676
|
dragOriginIndexRef.current = null;
|
|
7675
7677
|
dragTaskIdRef.current = null;
|
|
7676
7678
|
}, []);
|
|
@@ -7721,18 +7723,18 @@ var TaskList = ({
|
|
|
7721
7723
|
}
|
|
7722
7724
|
return target;
|
|
7723
7725
|
}, [orderedTasks, visibleTasks]);
|
|
7724
|
-
const handleDragOver = (0, import_react13.useCallback)((index, e) => {
|
|
7726
|
+
const handleDragOver = (0, import_react13.useCallback)((index, e, forcedPlacement) => {
|
|
7725
7727
|
e.preventDefault();
|
|
7726
7728
|
const draggedTaskId = dragTaskIdRef.current;
|
|
7727
7729
|
if (!draggedTaskId) return;
|
|
7728
|
-
const rawPlacement = getDropPlacementFromEvent(e);
|
|
7730
|
+
const rawPlacement = forcedPlacement ?? getDropPlacementFromEvent(e);
|
|
7729
7731
|
const isSelfTopBefore = visibleTasks[index]?.id === draggedTaskId && rawPlacement === "before";
|
|
7730
7732
|
if (isSelfTopBefore) {
|
|
7731
7733
|
setDragOverTarget(null);
|
|
7732
7734
|
e.dataTransfer.dropEffect = "none";
|
|
7733
7735
|
return;
|
|
7734
7736
|
}
|
|
7735
|
-
const isFirstChildTopAfterParent = rawPlacement === "before" && visibleTasks[index]?.parentId === visibleTasks[index - 1]?.id;
|
|
7737
|
+
const isFirstChildTopAfterParent = index > 0 && rawPlacement === "before" && visibleTasks[index]?.parentId === visibleTasks[index - 1]?.id;
|
|
7736
7738
|
if (isFirstChildTopAfterParent) {
|
|
7737
7739
|
setDragOverTarget(null);
|
|
7738
7740
|
e.dataTransfer.dropEffect = "none";
|
|
@@ -7773,7 +7775,7 @@ var TaskList = ({
|
|
|
7773
7775
|
isDirectChildDrop: normalizedTarget.placement === "after" && reorderPlan.inferredParentId === targetTask.id
|
|
7774
7776
|
});
|
|
7775
7777
|
}, [isValidParentDrop, normalizeDropTarget, orderedTasks, visibleTasks]);
|
|
7776
|
-
const handleDrop = (0, import_react13.useCallback)((dropIndex, e) => {
|
|
7778
|
+
const handleDrop = (0, import_react13.useCallback)((dropIndex, e, forcedPlacement) => {
|
|
7777
7779
|
e.preventDefault();
|
|
7778
7780
|
const originVisibleIndex = dragOriginIndexRef.current;
|
|
7779
7781
|
const movedTaskId = dragTaskIdRef.current;
|
|
@@ -7781,13 +7783,13 @@ var TaskList = ({
|
|
|
7781
7783
|
clearDragState();
|
|
7782
7784
|
return;
|
|
7783
7785
|
}
|
|
7784
|
-
const rawPlacement = dropIndex >= visibleTasks.length ? "end" : getDropPlacementFromEvent(e);
|
|
7786
|
+
const rawPlacement = dropIndex >= visibleTasks.length ? "end" : forcedPlacement ?? getDropPlacementFromEvent(e);
|
|
7785
7787
|
const isSelfTopBefore = dropIndex < visibleTasks.length && visibleTasks[dropIndex]?.id === movedTaskId && rawPlacement === "before";
|
|
7786
7788
|
if (isSelfTopBefore) {
|
|
7787
7789
|
clearDragState();
|
|
7788
7790
|
return;
|
|
7789
7791
|
}
|
|
7790
|
-
const isFirstChildTopAfterParent = dropIndex < visibleTasks.length && rawPlacement === "before" && visibleTasks[dropIndex]?.parentId === visibleTasks[dropIndex - 1]?.id;
|
|
7792
|
+
const isFirstChildTopAfterParent = dropIndex < visibleTasks.length && dropIndex > 0 && rawPlacement === "before" && visibleTasks[dropIndex]?.parentId === visibleTasks[dropIndex - 1]?.id;
|
|
7791
7793
|
if (isFirstChildTopAfterParent) {
|
|
7792
7794
|
clearDragState();
|
|
7793
7795
|
return;
|
|
@@ -7840,9 +7842,18 @@ var TaskList = ({
|
|
|
7840
7842
|
onTaskSelect?.(moved.id);
|
|
7841
7843
|
clearDragState();
|
|
7842
7844
|
}, [orderedTasks, visibleTasks, onReorder, onTaskSelect, isValidParentDrop, clearDragState, normalizeDropTarget]);
|
|
7845
|
+
const handleBeforeFirstDragOver = (0, import_react13.useCallback)((e) => {
|
|
7846
|
+
const draggedTaskId = dragTaskIdRef.current;
|
|
7847
|
+
const firstTask = visibleTasks[0];
|
|
7848
|
+
const descendantIds = draggedTaskId ? new Set(getAllDescendants2(draggedTaskId, orderedTasks).map((task) => task.id)) : /* @__PURE__ */ new Set();
|
|
7849
|
+
const isValidBeforeFirstDrop = !!draggedTaskId && !!firstTask && firstTask.id !== draggedTaskId && !descendantIds.has(firstTask.id) && isValidParentDrop(draggedTaskId, 0);
|
|
7850
|
+
setIsBeforeFirstDropZoneActive(isValidBeforeFirstDrop);
|
|
7851
|
+
handleDragOver(0, e, "before");
|
|
7852
|
+
}, [handleDragOver, isValidParentDrop, orderedTasks, visibleTasks]);
|
|
7843
7853
|
const handleDragEnd = (0, import_react13.useCallback)(() => {
|
|
7844
7854
|
clearDragState();
|
|
7845
7855
|
}, [clearDragState]);
|
|
7856
|
+
const shouldShowBeforeFirstDropZone = !reorderDisabled && visibleTasks.length > 0 && draggingIndex !== null && draggingIndex > 0;
|
|
7846
7857
|
const handleConfirmNewTask = (0, import_react13.useCallback)((name) => {
|
|
7847
7858
|
const range = buildDefaultTaskDateRange(getTodayISODate(), {
|
|
7848
7859
|
businessDays,
|
|
@@ -8210,6 +8221,19 @@ var TaskList = ({
|
|
|
8210
8221
|
position: "relative"
|
|
8211
8222
|
},
|
|
8212
8223
|
children: [
|
|
8224
|
+
shouldShowBeforeFirstDropZone && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
8225
|
+
"div",
|
|
8226
|
+
{
|
|
8227
|
+
className: [
|
|
8228
|
+
"gantt-tl-before-first-drop-zone",
|
|
8229
|
+
isBeforeFirstDropZoneActive ? "gantt-tl-before-first-drop-zone-active" : ""
|
|
8230
|
+
].filter(Boolean).join(" "),
|
|
8231
|
+
onDragEnter: handleBeforeFirstDragOver,
|
|
8232
|
+
onDragOver: handleBeforeFirstDragOver,
|
|
8233
|
+
onDragLeave: () => setIsBeforeFirstDropZoneActive(false),
|
|
8234
|
+
onDrop: (e) => handleDrop(0, e, "before")
|
|
8235
|
+
}
|
|
8236
|
+
),
|
|
8213
8237
|
renderedVisibleTasks.map(({ task, index }) => {
|
|
8214
8238
|
const previousVisibleTask = index > 0 ? visibleTasks[index - 1] : void 0;
|
|
8215
8239
|
const canDemoteTask = index === 0 || !task.parentId || previousVisibleTask?.id !== task.parentId;
|
|
@@ -10847,6 +10871,7 @@ function PlanFactRowInner({
|
|
|
10847
10871
|
className: joinClasses2(
|
|
10848
10872
|
"gantt-pf-cell",
|
|
10849
10873
|
`gantt-pf-cell-${kind}`,
|
|
10874
|
+
todayDateIndex === dateIndex && "gantt-pf-cell-today",
|
|
10850
10875
|
!isParent && planned && kind === "plan" && "gantt-pf-cell-planned",
|
|
10851
10876
|
!isParent && value !== void 0 && "gantt-pf-cell-hasValue",
|
|
10852
10877
|
!isParent && (isFactBelowPlan || isPastDueMissingFact) && "gantt-pf-cell-factWarning",
|
|
@@ -12565,7 +12590,11 @@ function TaskGanttChartInner(props, ref) {
|
|
|
12565
12590
|
return t;
|
|
12566
12591
|
});
|
|
12567
12592
|
}
|
|
12568
|
-
const
|
|
12593
|
+
const orderedForCallback = updated.map((task, index) => ({
|
|
12594
|
+
...task,
|
|
12595
|
+
sortOrder: index
|
|
12596
|
+
}));
|
|
12597
|
+
const normalized = normalizeHierarchyTasks(orderedForCallback);
|
|
12569
12598
|
if (onReorder) {
|
|
12570
12599
|
onReorder(normalized, movedTaskId, inferredParentId);
|
|
12571
12600
|
return;
|