gantt-lib 0.86.1 → 0.87.0
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.d.mts +13 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.js +124 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +124 -2
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +14 -0
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -4642,6 +4642,8 @@ var TaskListRow = React9.memo(
|
|
|
4642
4642
|
isFilterMatch = false,
|
|
4643
4643
|
isFilterHideMode = false,
|
|
4644
4644
|
resolvedColumns,
|
|
4645
|
+
isTaskSelected = false,
|
|
4646
|
+
onTaskSelectionChange,
|
|
4645
4647
|
taskListMenuCommands = []
|
|
4646
4648
|
}) => {
|
|
4647
4649
|
const [editingColumnId, setEditingColumnId] = useState4(null);
|
|
@@ -5435,6 +5437,23 @@ var TaskListRow = React9.memo(
|
|
|
5435
5437
|
const isSelectedDependencyOwner = selectedChip != null && selectedChip.successorId === task.id;
|
|
5436
5438
|
const startDateISO = toISODate2(normalizedTask.startDate);
|
|
5437
5439
|
const endDateISO = editingDuration ? getEndDate(normalizedTask.startDate, durationValue) : toISODate2(normalizedTask.endDate);
|
|
5440
|
+
const selectionCell = /* @__PURE__ */ jsx12(
|
|
5441
|
+
"div",
|
|
5442
|
+
{
|
|
5443
|
+
className: "gantt-tl-cell gantt-tl-cell-selection",
|
|
5444
|
+
onClick: (e) => e.stopPropagation(),
|
|
5445
|
+
children: /* @__PURE__ */ jsx12(
|
|
5446
|
+
"input",
|
|
5447
|
+
{
|
|
5448
|
+
type: "checkbox",
|
|
5449
|
+
className: "gantt-tl-selection-checkbox",
|
|
5450
|
+
"aria-label": `\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0437\u0430\u0434\u0430\u0447\u0443 ${taskNumber ? `${taskNumber}. ` : ""}${task.name}`,
|
|
5451
|
+
checked: isTaskSelected,
|
|
5452
|
+
onChange: (event) => onTaskSelectionChange?.(task.id, event.target.checked)
|
|
5453
|
+
}
|
|
5454
|
+
)
|
|
5455
|
+
}
|
|
5456
|
+
);
|
|
5438
5457
|
const numberCell = /* @__PURE__ */ jsxs9(
|
|
5439
5458
|
"div",
|
|
5440
5459
|
{
|
|
@@ -6152,6 +6171,7 @@ var TaskListRow = React9.memo(
|
|
|
6152
6171
|
}
|
|
6153
6172
|
);
|
|
6154
6173
|
const builtInCells = {
|
|
6174
|
+
selection: selectionCell,
|
|
6155
6175
|
number: numberCell,
|
|
6156
6176
|
name: nameCell,
|
|
6157
6177
|
startDate: startDateCell,
|
|
@@ -6304,6 +6324,7 @@ var NewTaskRow = ({
|
|
|
6304
6324
|
|
|
6305
6325
|
// src/components/TaskList/columns/createBuiltInColumns.tsx
|
|
6306
6326
|
var BUILT_IN_COLUMN_WIDTHS = {
|
|
6327
|
+
selection: 36,
|
|
6307
6328
|
number: 40,
|
|
6308
6329
|
name: 200,
|
|
6309
6330
|
startDate: 90,
|
|
@@ -6314,7 +6335,7 @@ var BUILT_IN_COLUMN_WIDTHS = {
|
|
|
6314
6335
|
actions: 80
|
|
6315
6336
|
};
|
|
6316
6337
|
function createBuiltInColumns(opts) {
|
|
6317
|
-
|
|
6338
|
+
const columns = [
|
|
6318
6339
|
{ id: "number", header: "\u2116", width: BUILT_IN_COLUMN_WIDTHS.number, renderCell: () => null },
|
|
6319
6340
|
{ id: "name", header: "\u0418\u043C\u044F", width: BUILT_IN_COLUMN_WIDTHS.name, renderCell: () => null },
|
|
6320
6341
|
{ id: "startDate", header: "\u041D\u0430\u0447\u0430\u043B\u043E", width: BUILT_IN_COLUMN_WIDTHS.startDate, renderCell: () => null },
|
|
@@ -6323,6 +6344,15 @@ function createBuiltInColumns(opts) {
|
|
|
6323
6344
|
{ id: "progress", header: "%", width: BUILT_IN_COLUMN_WIDTHS.progress, renderCell: () => null },
|
|
6324
6345
|
{ id: "dependencies", header: null, width: BUILT_IN_COLUMN_WIDTHS.dependencies, renderCell: () => null }
|
|
6325
6346
|
];
|
|
6347
|
+
if (opts?.enableTaskMultiSelect) {
|
|
6348
|
+
columns.unshift({
|
|
6349
|
+
id: "selection",
|
|
6350
|
+
header: null,
|
|
6351
|
+
width: BUILT_IN_COLUMN_WIDTHS.selection,
|
|
6352
|
+
renderCell: () => null
|
|
6353
|
+
});
|
|
6354
|
+
}
|
|
6355
|
+
return columns;
|
|
6326
6356
|
}
|
|
6327
6357
|
|
|
6328
6358
|
// src/components/TaskList/columns/resolveTaskListColumns.ts
|
|
@@ -6383,6 +6413,7 @@ import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
|
6383
6413
|
var LINK_TYPE_ORDER2 = ["FS", "SS", "FF", "SF"];
|
|
6384
6414
|
var MIN_TASK_LIST_WIDTH = 530;
|
|
6385
6415
|
var BUILT_IN_CSS_CLASSES = {
|
|
6416
|
+
selection: "gantt-tl-cell-selection",
|
|
6386
6417
|
number: "gantt-tl-cell-number",
|
|
6387
6418
|
name: "gantt-tl-cell-name",
|
|
6388
6419
|
startDate: "gantt-tl-cell-date",
|
|
@@ -6458,6 +6489,30 @@ function getTaskNumber(tasks, taskIndex) {
|
|
|
6458
6489
|
}
|
|
6459
6490
|
return `${parentNumber}.${siblingIndex + 1}`;
|
|
6460
6491
|
}
|
|
6492
|
+
var SelectAllCheckbox = ({
|
|
6493
|
+
checked,
|
|
6494
|
+
indeterminate,
|
|
6495
|
+
onChange
|
|
6496
|
+
}) => {
|
|
6497
|
+
const ref = useRef6(null);
|
|
6498
|
+
useEffect6(() => {
|
|
6499
|
+
if (ref.current) {
|
|
6500
|
+
ref.current.indeterminate = indeterminate;
|
|
6501
|
+
}
|
|
6502
|
+
}, [indeterminate]);
|
|
6503
|
+
return /* @__PURE__ */ jsx14(
|
|
6504
|
+
"input",
|
|
6505
|
+
{
|
|
6506
|
+
ref,
|
|
6507
|
+
type: "checkbox",
|
|
6508
|
+
className: "gantt-tl-selection-checkbox",
|
|
6509
|
+
"aria-label": "\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435 \u0432\u0438\u0434\u0438\u043C\u044B\u0435 \u0437\u0430\u0434\u0430\u0447\u0438",
|
|
6510
|
+
checked,
|
|
6511
|
+
onChange: (event) => onChange(event.target.checked),
|
|
6512
|
+
onClick: (event) => event.stopPropagation()
|
|
6513
|
+
}
|
|
6514
|
+
);
|
|
6515
|
+
};
|
|
6461
6516
|
var TaskList = ({
|
|
6462
6517
|
tasks,
|
|
6463
6518
|
rowHeight,
|
|
@@ -6488,6 +6543,9 @@ var TaskList = ({
|
|
|
6488
6543
|
isWeekend: isWeekend3,
|
|
6489
6544
|
businessDays,
|
|
6490
6545
|
highlightedTaskIds = /* @__PURE__ */ new Set(),
|
|
6546
|
+
enableTaskMultiSelect = false,
|
|
6547
|
+
selectedTaskIds,
|
|
6548
|
+
onSelectedTaskIdsChange,
|
|
6491
6549
|
filterMode = "highlight",
|
|
6492
6550
|
filteredTaskIds = /* @__PURE__ */ new Set(),
|
|
6493
6551
|
isFilterActive = false,
|
|
@@ -6495,6 +6553,14 @@ var TaskList = ({
|
|
|
6495
6553
|
hiddenTaskListColumns,
|
|
6496
6554
|
taskListMenuCommands
|
|
6497
6555
|
}) => {
|
|
6556
|
+
const [internalSelectedTaskIds, setInternalSelectedTaskIds] = useState6(/* @__PURE__ */ new Set());
|
|
6557
|
+
const effectiveSelectedTaskIds = selectedTaskIds ?? internalSelectedTaskIds;
|
|
6558
|
+
const emitSelectedTaskIdsChange = useCallback5((nextSelectedTaskIds) => {
|
|
6559
|
+
if (!selectedTaskIds) {
|
|
6560
|
+
setInternalSelectedTaskIds(nextSelectedTaskIds);
|
|
6561
|
+
}
|
|
6562
|
+
onSelectedTaskIdsChange?.(nextSelectedTaskIds);
|
|
6563
|
+
}, [onSelectedTaskIdsChange, selectedTaskIds]);
|
|
6498
6564
|
const [internalCollapsedParentIds, setInternalCollapsedParentIds] = useState6(/* @__PURE__ */ new Set());
|
|
6499
6565
|
const collapsedParentIds = externalCollapsedParentIds ?? internalCollapsedParentIds;
|
|
6500
6566
|
const handleToggleCollapse = externalOnToggleCollapse ?? useCallback5((parentId) => {
|
|
@@ -6541,6 +6607,33 @@ var TaskList = ({
|
|
|
6541
6607
|
),
|
|
6542
6608
|
[visibleTasks]
|
|
6543
6609
|
);
|
|
6610
|
+
const visibleTaskIds = useMemo8(() => visibleTasks.map((task) => task.id), [visibleTasks]);
|
|
6611
|
+
const selectedVisibleTaskCount = useMemo8(
|
|
6612
|
+
() => visibleTaskIds.filter((taskId) => effectiveSelectedTaskIds.has(taskId)).length,
|
|
6613
|
+
[effectiveSelectedTaskIds, visibleTaskIds]
|
|
6614
|
+
);
|
|
6615
|
+
const areAllVisibleTasksSelected = visibleTaskIds.length > 0 && selectedVisibleTaskCount === visibleTaskIds.length;
|
|
6616
|
+
const areSomeVisibleTasksSelected = selectedVisibleTaskCount > 0 && !areAllVisibleTasksSelected;
|
|
6617
|
+
const handleToggleTaskSelection = useCallback5((taskId, checked) => {
|
|
6618
|
+
const nextSelectedTaskIds = new Set(effectiveSelectedTaskIds);
|
|
6619
|
+
if (checked) {
|
|
6620
|
+
nextSelectedTaskIds.add(taskId);
|
|
6621
|
+
} else {
|
|
6622
|
+
nextSelectedTaskIds.delete(taskId);
|
|
6623
|
+
}
|
|
6624
|
+
emitSelectedTaskIdsChange(nextSelectedTaskIds);
|
|
6625
|
+
}, [effectiveSelectedTaskIds, emitSelectedTaskIdsChange]);
|
|
6626
|
+
const handleToggleAllVisibleTaskSelection = useCallback5((checked) => {
|
|
6627
|
+
const nextSelectedTaskIds = new Set(effectiveSelectedTaskIds);
|
|
6628
|
+
for (const taskId of visibleTaskIds) {
|
|
6629
|
+
if (checked) {
|
|
6630
|
+
nextSelectedTaskIds.add(taskId);
|
|
6631
|
+
} else {
|
|
6632
|
+
nextSelectedTaskIds.delete(taskId);
|
|
6633
|
+
}
|
|
6634
|
+
}
|
|
6635
|
+
emitSelectedTaskIdsChange(nextSelectedTaskIds);
|
|
6636
|
+
}, [effectiveSelectedTaskIds, emitSelectedTaskIdsChange, visibleTaskIds]);
|
|
6544
6637
|
const originalTaskNumberMap = useMemo8(
|
|
6545
6638
|
() => {
|
|
6546
6639
|
const numberMap = /* @__PURE__ */ new Map();
|
|
@@ -7022,7 +7115,10 @@ var TaskList = ({
|
|
|
7022
7115
|
const duplicatedTasks = duplicateTaskSubtree(taskId, orderedTasks);
|
|
7023
7116
|
onReorder?.(duplicatedTasks);
|
|
7024
7117
|
}, [orderedTasks, onReorder]);
|
|
7025
|
-
const builtInColumns = useMemo8(
|
|
7118
|
+
const builtInColumns = useMemo8(
|
|
7119
|
+
() => createBuiltInColumns({ businessDays, enableTaskMultiSelect }),
|
|
7120
|
+
[businessDays, enableTaskMultiSelect]
|
|
7121
|
+
);
|
|
7026
7122
|
const resolvedColumns = useMemo8(
|
|
7027
7123
|
() => resolveTaskListColumns(
|
|
7028
7124
|
builtInColumns,
|
|
@@ -7046,6 +7142,24 @@ var TaskList = ({
|
|
|
7046
7142
|
style: { "--tasklist-width": `${effectiveTaskListWidth}px` },
|
|
7047
7143
|
children: /* @__PURE__ */ jsxs11("div", { className: "gantt-tl-table", children: [
|
|
7048
7144
|
/* @__PURE__ */ jsx14("div", { className: "gantt-tl-header", style: { height: `${tableHeaderHeight}px` }, children: resolvedColumns.map((col) => {
|
|
7145
|
+
if (col.id === "selection") {
|
|
7146
|
+
return /* @__PURE__ */ jsx14(
|
|
7147
|
+
"div",
|
|
7148
|
+
{
|
|
7149
|
+
className: "gantt-tl-headerCell gantt-tl-cell-selection",
|
|
7150
|
+
"data-column-id": "selection",
|
|
7151
|
+
children: /* @__PURE__ */ jsx14(
|
|
7152
|
+
SelectAllCheckbox,
|
|
7153
|
+
{
|
|
7154
|
+
checked: areAllVisibleTasksSelected,
|
|
7155
|
+
indeterminate: areSomeVisibleTasksSelected,
|
|
7156
|
+
onChange: handleToggleAllVisibleTaskSelection
|
|
7157
|
+
}
|
|
7158
|
+
)
|
|
7159
|
+
},
|
|
7160
|
+
col.id
|
|
7161
|
+
);
|
|
7162
|
+
}
|
|
7049
7163
|
if (col.id === "dependencies") {
|
|
7050
7164
|
return /* @__PURE__ */ jsxs11(
|
|
7051
7165
|
"div",
|
|
@@ -7171,6 +7285,8 @@ var TaskList = ({
|
|
|
7171
7285
|
isFilterMatch: filterMode === "highlight" ? highlightedTaskIds.has(task.id) : false,
|
|
7172
7286
|
isFilterHideMode: filterMode === "hide" && isFilterActive,
|
|
7173
7287
|
resolvedColumns,
|
|
7288
|
+
isTaskSelected: effectiveSelectedTaskIds.has(task.id),
|
|
7289
|
+
onTaskSelectionChange: handleToggleTaskSelection,
|
|
7174
7290
|
taskListMenuCommands
|
|
7175
7291
|
}
|
|
7176
7292
|
),
|
|
@@ -9251,6 +9367,9 @@ function TaskGanttChartInner(props, ref) {
|
|
|
9251
9367
|
collapsedParentIds: externalCollapsedParentIds,
|
|
9252
9368
|
onToggleCollapse: externalOnToggleCollapse,
|
|
9253
9369
|
highlightedTaskIds,
|
|
9370
|
+
enableTaskMultiSelect = false,
|
|
9371
|
+
selectedTaskIds,
|
|
9372
|
+
onSelectedTaskIdsChange,
|
|
9254
9373
|
disableTaskDrag = false,
|
|
9255
9374
|
showChart = true,
|
|
9256
9375
|
additionalColumns,
|
|
@@ -9821,6 +9940,9 @@ function TaskGanttChartInner(props, ref) {
|
|
|
9821
9940
|
onDemoteTask: onDemoteTask ?? handleDemoteTask,
|
|
9822
9941
|
onUngroupTask: onUngroupTask ?? handleUngroupTask,
|
|
9823
9942
|
highlightedTaskIds: taskListHighlightedTaskIds,
|
|
9943
|
+
enableTaskMultiSelect,
|
|
9944
|
+
selectedTaskIds,
|
|
9945
|
+
onSelectedTaskIdsChange,
|
|
9824
9946
|
customDays,
|
|
9825
9947
|
isWeekend: isWeekend3,
|
|
9826
9948
|
businessDays,
|