gantt-task-react-powern 0.4.95 → 0.4.97
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/gantt.d.ts +1 -0
- package/dist/index.js +84 -56
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +84 -56
- package/dist/index.modern.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,3 +6,4 @@ export declare function getCriticalPaths(leafTasks: Task[]): any[][];
|
|
|
6
6
|
export declare function computeCriticalPath(taskID: string, taskMap: {}): void;
|
|
7
7
|
export declare function uncolorAll(tasks: Task[]): void;
|
|
8
8
|
export declare function colorPath(path: Task[], color: string, tasks: Task[], criticalPathType: string): void;
|
|
9
|
+
export declare const getParentWbs: (wbs: string) => string | undefined;
|
package/dist/index.js
CHANGED
|
@@ -433,6 +433,18 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
|
|
|
433
433
|
return t.id;
|
|
434
434
|
}));
|
|
435
435
|
}, [leafTasks]);
|
|
436
|
+
|
|
437
|
+
var hasSelectedAncestor = function hasSelectedAncestor(taskId, selectedSet, allTasks) {
|
|
438
|
+
var task = allTasks.find(function (t) {
|
|
439
|
+
return t.id === taskId;
|
|
440
|
+
});
|
|
441
|
+
if (!task) return false;
|
|
442
|
+
var parentWbs = getParentWbs(task.id);
|
|
443
|
+
if (!parentWbs) return false;
|
|
444
|
+
if (selectedSet.has(parentWbs)) return true;
|
|
445
|
+
return hasSelectedAncestor(parentWbs, selectedSet, allTasks);
|
|
446
|
+
};
|
|
447
|
+
|
|
436
448
|
return React__default.createElement("div", {
|
|
437
449
|
className: styles$1.taskListWrapper,
|
|
438
450
|
style: {
|
|
@@ -451,6 +463,7 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
|
|
|
451
463
|
}
|
|
452
464
|
|
|
453
465
|
var isSelected = selectedTasks.includes(t.id);
|
|
466
|
+
var isAncestorSelected = hasSelectedAncestor(t.id, new Set(selectedTasks), tasks);
|
|
454
467
|
return React__default.createElement("div", {
|
|
455
468
|
className: t.type === "milestone" ? styles$1.taskListMilestoneRow : scheduleType === "lookAhead" ? styles$1.taskListLookAheadRow : styles$1.taskListTableRow,
|
|
456
469
|
style: {
|
|
@@ -476,6 +489,7 @@ var TaskListTableDefault = function TaskListTableDefault(_ref) {
|
|
|
476
489
|
}, React__default.createElement("input", {
|
|
477
490
|
type: "checkbox",
|
|
478
491
|
checked: isSelected,
|
|
492
|
+
disabled: isAncestorSelected,
|
|
479
493
|
onChange: function onChange(e) {
|
|
480
494
|
return onTaskSelect(t.id, e.target.checked);
|
|
481
495
|
}
|
|
@@ -756,15 +770,54 @@ var TaskList = function TaskList(_ref) {
|
|
|
756
770
|
}
|
|
757
771
|
}, [selectedTasks, tasks, onMultiSelect]);
|
|
758
772
|
|
|
773
|
+
var getDescendants = function getDescendants(taskId, allTasks) {
|
|
774
|
+
var task = allTasks.find(function (t) {
|
|
775
|
+
return t.id === taskId;
|
|
776
|
+
});
|
|
777
|
+
if (!task) return [];
|
|
778
|
+
var children = allTasks.filter(function (t) {
|
|
779
|
+
return getParentWbs(t.id) === taskId;
|
|
780
|
+
});
|
|
781
|
+
return children.flatMap(function (child) {
|
|
782
|
+
return [child.id].concat(getDescendants(child.id, allTasks));
|
|
783
|
+
});
|
|
784
|
+
};
|
|
785
|
+
|
|
786
|
+
var recursiveOpen = function recursiveOpen(taskId, allTasks) {
|
|
787
|
+
var task = allTasks.find(function (t) {
|
|
788
|
+
return t.id === taskId;
|
|
789
|
+
});
|
|
790
|
+
if (!task) return;
|
|
791
|
+
|
|
792
|
+
if (task.hideChildren === true) {
|
|
793
|
+
onExpanderClick(task);
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
var children = allTasks.filter(function (t) {
|
|
797
|
+
return getParentWbs(t.id) === taskId;
|
|
798
|
+
});
|
|
799
|
+
children.forEach(function (c) {
|
|
800
|
+
return recursiveOpen(c.id, allTasks);
|
|
801
|
+
});
|
|
802
|
+
};
|
|
803
|
+
|
|
759
804
|
var handleTaskSelect = function handleTaskSelect(taskId, selected) {
|
|
805
|
+
var descendants = getDescendants(taskId, tasks);
|
|
806
|
+
|
|
760
807
|
if (selected) {
|
|
761
808
|
setSelectedTasks(function (prev) {
|
|
762
|
-
|
|
809
|
+
var newSelected = new Set(prev);
|
|
810
|
+
newSelected.add(taskId);
|
|
811
|
+
descendants.forEach(function (d) {
|
|
812
|
+
return newSelected.add(d);
|
|
813
|
+
});
|
|
814
|
+
return Array.from(newSelected);
|
|
763
815
|
});
|
|
816
|
+
recursiveOpen(taskId, tasks);
|
|
764
817
|
} else {
|
|
765
818
|
setSelectedTasks(function (prev) {
|
|
766
819
|
return prev.filter(function (id) {
|
|
767
|
-
return id !== taskId;
|
|
820
|
+
return id !== taskId && !descendants.includes(id);
|
|
768
821
|
});
|
|
769
822
|
});
|
|
770
823
|
}
|
|
@@ -772,9 +825,19 @@ var TaskList = function TaskList(_ref) {
|
|
|
772
825
|
|
|
773
826
|
var handleSelectAll = function handleSelectAll(selected) {
|
|
774
827
|
if (selected) {
|
|
775
|
-
|
|
776
|
-
return task.id;
|
|
777
|
-
})
|
|
828
|
+
var topLevelTasks = tasks.filter(function (task) {
|
|
829
|
+
return !getParentWbs(task.id);
|
|
830
|
+
});
|
|
831
|
+
var newSelected = new Set();
|
|
832
|
+
topLevelTasks.forEach(function (task) {
|
|
833
|
+
newSelected.add(task.id);
|
|
834
|
+
var descendants = getDescendants(task.id, tasks);
|
|
835
|
+
descendants.forEach(function (d) {
|
|
836
|
+
return newSelected.add(d);
|
|
837
|
+
});
|
|
838
|
+
recursiveOpen(task.id, tasks);
|
|
839
|
+
});
|
|
840
|
+
setSelectedTasks(Array.from(newSelected));
|
|
778
841
|
} else {
|
|
779
842
|
setSelectedTasks([]);
|
|
780
843
|
}
|
|
@@ -2020,7 +2083,7 @@ var Bar = function Bar(_ref) {
|
|
|
2020
2083
|
var handleHeight = task.height / 2 - 1;
|
|
2021
2084
|
|
|
2022
2085
|
if (type == "planned") {
|
|
2023
|
-
if ((task === null || task === void 0 ? void 0 : task.x1) >= 0 && (task === null || task === void 0 ? void 0 : task.x2)
|
|
2086
|
+
if ((task === null || task === void 0 ? void 0 : task.x1) >= 0 && (task === null || task === void 0 ? void 0 : task.x2) >= 0) return React__default.createElement("g", {
|
|
2024
2087
|
className: styles$6.barWrapper,
|
|
2025
2088
|
tabIndex: 0
|
|
2026
2089
|
}, React__default.createElement(BarDisplay, {
|
|
@@ -2068,7 +2131,7 @@ var Bar = function Bar(_ref) {
|
|
|
2068
2131
|
className: styles$6.barWrapper,
|
|
2069
2132
|
tabIndex: 0
|
|
2070
2133
|
});
|
|
2071
|
-
} else if ((task === null || task === void 0 ? void 0 : task.actualx1) >= 0 && (task === null || task === void 0 ? void 0 : task.actualx2)
|
|
2134
|
+
} else if ((task === null || task === void 0 ? void 0 : task.actualx1) >= 0 && (task === null || task === void 0 ? void 0 : task.actualx2) >= 0) {
|
|
2072
2135
|
return React__default.createElement("g", {
|
|
2073
2136
|
className: styles$6.barWrapper,
|
|
2074
2137
|
tabIndex: 0
|
|
@@ -2960,8 +3023,8 @@ var Gantt = function Gantt(_ref) {
|
|
|
2960
3023
|
if (leafTasks.length > 0 && primaryPath.length === 0 && secondaryPath.length === 0) {
|
|
2961
3024
|
setHasCircularDeps(true);
|
|
2962
3025
|
} else {
|
|
2963
|
-
if (hasCircularDeps && localStorage.getItem(
|
|
2964
|
-
localStorage.removeItem(
|
|
3026
|
+
if (hasCircularDeps && localStorage.getItem('hideCircularDepsAlert') === 'true') {
|
|
3027
|
+
localStorage.removeItem('hideCircularDepsAlert');
|
|
2965
3028
|
}
|
|
2966
3029
|
|
|
2967
3030
|
setHasCircularDeps(false);
|
|
@@ -3113,7 +3176,7 @@ var Gantt = function Gantt(_ref) {
|
|
|
3113
3176
|
var alert = document.getElementById("alert-container");
|
|
3114
3177
|
|
|
3115
3178
|
if (checkbox.checked) {
|
|
3116
|
-
localStorage.setItem(
|
|
3179
|
+
localStorage.setItem('hideCircularDepsAlert', 'true');
|
|
3117
3180
|
alert.style.display = "None";
|
|
3118
3181
|
}
|
|
3119
3182
|
};
|
|
@@ -3266,7 +3329,7 @@ var Gantt = function Gantt(_ref) {
|
|
|
3266
3329
|
taskLabelRenderer: taskLabelRenderer,
|
|
3267
3330
|
onMultiSelect: onMultiSelect
|
|
3268
3331
|
};
|
|
3269
|
-
return React__default.createElement("div", null, hasCircularDeps && localStorage.getItem(
|
|
3332
|
+
return React__default.createElement("div", null, hasCircularDeps && localStorage.getItem('hideCircularDepsAlert') !== 'true' && React__default.createElement("div", {
|
|
3270
3333
|
id: "alert-container",
|
|
3271
3334
|
className: styles$9.alertContainer + " " + styles$9.warning
|
|
3272
3335
|
}, React__default.createElement("input", {
|
|
@@ -3415,59 +3478,19 @@ function getCriticalPaths(leafTasks) {
|
|
|
3415
3478
|
secondaryLeaf = taskMap[secondaryLeaf].next;
|
|
3416
3479
|
}
|
|
3417
3480
|
|
|
3418
|
-
console.debug([primaryPath, secondaryPath]);
|
|
3419
3481
|
return [primaryPath, secondaryPath];
|
|
3420
3482
|
}
|
|
3421
3483
|
function computeCriticalPath(taskID, taskMap) {
|
|
3422
3484
|
var task = taskMap[taskID].task;
|
|
3423
3485
|
var dependents = taskMap[taskID].dependents;
|
|
3424
|
-
taskMap[taskID].start = task.start.getTime();
|
|
3425
3486
|
taskMap[taskID].end = task.end.getTime();
|
|
3426
|
-
var start = taskMap[taskID].start;
|
|
3427
|
-
|
|
3428
|
-
for (var _iterator = _createForOfIteratorHelperLoose(dependents), _step; !(_step = _iterator()).done;) {
|
|
3429
|
-
var _dependentTask$depend;
|
|
3430
|
-
|
|
3431
|
-
var depID = _step.value;
|
|
3432
|
-
var dependentTask = taskMap[depID].task;
|
|
3433
|
-
var dependency = (_dependentTask$depend = dependentTask.dependencies) === null || _dependentTask$depend === void 0 ? void 0 : _dependentTask$depend.find(function (d) {
|
|
3434
|
-
return d.id === taskID;
|
|
3435
|
-
});
|
|
3436
|
-
if (!dependency) continue;
|
|
3437
|
-
|
|
3438
|
-
switch (dependency.type) {
|
|
3439
|
-
case "FS":
|
|
3440
|
-
if (taskMap[depID].end > taskMap[taskID].end) {
|
|
3441
|
-
taskMap[taskID].next = depID;
|
|
3442
|
-
taskMap[taskID].end = taskMap[depID].end;
|
|
3443
|
-
}
|
|
3444
|
-
|
|
3445
|
-
break;
|
|
3446
3487
|
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
taskMap[taskID].next = depID;
|
|
3450
|
-
start = taskMap[depID].start;
|
|
3451
|
-
taskMap[taskID].end = taskMap[depID].end;
|
|
3452
|
-
}
|
|
3453
|
-
|
|
3454
|
-
break;
|
|
3488
|
+
for (var j = 0; j < dependents.length; j++) {
|
|
3489
|
+
var newDependentEnd = taskMap[dependents[j]].end;
|
|
3455
3490
|
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
taskMap[taskID].end = taskMap[depID].end;
|
|
3460
|
-
}
|
|
3461
|
-
|
|
3462
|
-
break;
|
|
3463
|
-
|
|
3464
|
-
case "SF":
|
|
3465
|
-
if (taskMap[depID].start > taskMap[taskID].end) {
|
|
3466
|
-
taskMap[taskID].next = depID;
|
|
3467
|
-
taskMap[taskID].end = taskMap[depID].start;
|
|
3468
|
-
}
|
|
3469
|
-
|
|
3470
|
-
break;
|
|
3491
|
+
if (newDependentEnd > taskMap[taskID].end) {
|
|
3492
|
+
taskMap[taskID].next = dependents[j];
|
|
3493
|
+
taskMap[taskID].end = newDependentEnd;
|
|
3471
3494
|
}
|
|
3472
3495
|
}
|
|
3473
3496
|
}
|
|
@@ -3538,6 +3561,11 @@ function colorPath(path, color, tasks, criticalPathType) {
|
|
|
3538
3561
|
_loop(_i7);
|
|
3539
3562
|
}
|
|
3540
3563
|
}
|
|
3564
|
+
var getParentWbs = function getParentWbs(wbs) {
|
|
3565
|
+
var segments = wbs.split('.');
|
|
3566
|
+
if (segments.length <= 1) return undefined;
|
|
3567
|
+
return segments.slice(0, -1).join('.');
|
|
3568
|
+
};
|
|
3541
3569
|
|
|
3542
3570
|
exports.Gantt = Gantt;
|
|
3543
3571
|
exports.getCriticalPaths = getCriticalPaths;
|