@visactor/vtable-gantt 1.19.4 → 1.19.5

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.
@@ -72,4 +72,5 @@ class DataSource {
72
72
  }
73
73
  }
74
74
 
75
- exports.DataSource = DataSource;
75
+ exports.DataSource = DataSource;
76
+ //# sourceMappingURL=DataSource.js.map
@@ -83,5 +83,4 @@ function isTouchEvent(e) {
83
83
  return !!e.changedTouches;
84
84
  }
85
85
 
86
- //# sourceMappingURL=touch.js.map
87
86
  exports.bindTouchListener = bindTouchListener;
package/cjs/index.d.ts CHANGED
@@ -6,5 +6,5 @@ import * as tools from './tools';
6
6
  import * as VRender from './vrender';
7
7
  import * as VTable from './vtable';
8
8
  import * as plugins from './plugins';
9
- export declare const version = "1.19.4";
9
+ export declare const version = "1.19.5";
10
10
  export { TYPES, GanttConstructorOptions, Gantt, ColumnsDefine, ColumnDefine, LinkColumnDefine, ChartColumnDefine, ImageColumnDefine, SparklineColumnDefine, ProgressbarColumnDefine, TextColumnDefine, GroupColumnDefine, TextAlignType, TextBaselineType, tools, VRender, VTable, plugins };
package/cjs/index.js CHANGED
@@ -56,5 +56,5 @@ exports.VTable = VTable;
56
56
 
57
57
  const plugins = __importStar(require("./plugins"));
58
58
 
59
- exports.plugins = plugins, exports.version = "1.19.4";
59
+ exports.plugins = plugins, exports.version = "1.19.5";
60
60
  //# sourceMappingURL=index.js.map
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAoC;AAwBlC,sBAAK;AAVP,mCAAgC;AAY9B,sFAZO,aAAK,OAYP;AAXP,+CAAiC;AAuB/B,sBAAK;AAtBP,mDAAqC;AAuBnC,0BAAO;AAtBT,iDAAmC;AAuBjC,wBAAM;AAtBR,mDAAqC;AAuBnC,0BAAO;AAtBI,QAAA,OAAO,GAAG,QAAQ,CAAC","file":"index.js","sourcesContent":["import type { GanttConstructorOptions } from './ts-types';\nimport * as TYPES from './ts-types';\nimport type {\n ColumnDefine,\n ColumnsDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType\n} from '@visactor/vtable';\nimport { Gantt } from './Gantt';\nimport * as tools from './tools';\nimport * as VRender from './vrender';\nimport * as VTable from './vtable';\nimport * as plugins from './plugins';\nexport const version = \"1.19.4\";\n/**\n * @namespace VTable\n */\nexport {\n TYPES,\n GanttConstructorOptions,\n Gantt,\n ColumnsDefine,\n ColumnDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType,\n tools,\n VRender,\n VTable,\n plugins\n};\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAoC;AAwBlC,sBAAK;AAVP,mCAAgC;AAY9B,sFAZO,aAAK,OAYP;AAXP,+CAAiC;AAuB/B,sBAAK;AAtBP,mDAAqC;AAuBnC,0BAAO;AAtBT,iDAAmC;AAuBjC,wBAAM;AAtBR,mDAAqC;AAuBnC,0BAAO;AAtBI,QAAA,OAAO,GAAG,QAAQ,CAAC","file":"index.js","sourcesContent":["import type { GanttConstructorOptions } from './ts-types';\nimport * as TYPES from './ts-types';\nimport type {\n ColumnDefine,\n ColumnsDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType\n} from '@visactor/vtable';\nimport { Gantt } from './Gantt';\nimport * as tools from './tools';\nimport * as VRender from './vrender';\nimport * as VTable from './vtable';\nimport * as plugins from './plugins';\nexport const version = \"1.19.5\";\n/**\n * @namespace VTable\n */\nexport {\n TYPES,\n GanttConstructorOptions,\n Gantt,\n ColumnsDefine,\n ColumnDefine,\n LinkColumnDefine,\n ChartColumnDefine,\n ImageColumnDefine,\n SparklineColumnDefine,\n ProgressbarColumnDefine,\n TextColumnDefine,\n GroupColumnDefine,\n TextAlignType,\n TextBaselineType,\n tools,\n VRender,\n VTable,\n plugins\n};\n"]}
@@ -185,5 +185,4 @@ class TimelineHeader {
185
185
  }
186
186
  }
187
187
 
188
- exports.TimelineHeader = TimelineHeader;
189
- //# sourceMappingURL=timeline-header.js.map
188
+ exports.TimelineHeader = TimelineHeader;
@@ -89,6 +89,7 @@ function _syncTableSize(gantt) {
89
89
  gantt._updateSize(), (0, gantt_helper_1.updateSplitLineAndResizeLine)(gantt));
90
90
  }
91
91
 
92
+ //# sourceMappingURL=gantt-table-sync.js.map
92
93
  exports.syncScrollStateToTable = syncScrollStateToTable, exports.syncScrollStateFromTable = syncScrollStateFromTable,
93
94
  exports.syncEditCellFromTable = syncEditCellFromTable, exports.syncTreeChangeFromTable = syncTreeChangeFromTable,
94
95
  exports.syncSortFromTable = syncSortFromTable, exports.syncDragOrderFromTable = syncDragOrderFromTable,
@@ -142,7 +142,7 @@ class StateManager {
142
142
  this.moveTaskBar.moveTaskBarXInertia.isInertiaScrolling() && this.moveTaskBar.moveTaskBarXInertia.endInertia();
143
143
  const deltaX = this.moveTaskBar.deltaX, deltaY = this.moveTaskBar.deltaY, target = this.moveTaskBar.target;
144
144
  if (Math.abs(deltaX) >= 1 || Math.abs(deltaY) >= 1) {
145
- const taskIndex = target.task_index, sub_task_index = target.sub_task_index, {startDate: oldStartDate, endDate: oldEndDate} = this._gantt.getTaskInfoByTaskListIndex(taskIndex, sub_task_index), targetEndY = this.moveTaskBar.targetStartY + this._gantt.parsedOptions.rowHeight * Math.round(deltaY / this._gantt.parsedOptions.rowHeight), milestoneTaskbarHeight = this._gantt.parsedOptions.taskBarMilestoneStyle.width, testDateX = this.moveTaskBar.target.attribute.x + (target.record.type === ts_types_1.TaskType.MILESTONE ? milestoneTaskbarHeight / 2 : 0), startDateColIndex = (0,
145
+ const oldRowIndex = target.task_index, taskIndex = target.task_index, sub_task_index = target.sub_task_index, {startDate: oldStartDate, endDate: oldEndDate} = this._gantt.getTaskInfoByTaskListIndex(taskIndex, sub_task_index), targetEndY = this.moveTaskBar.targetStartY + this._gantt.parsedOptions.rowHeight * Math.round(deltaY / this._gantt.parsedOptions.rowHeight), milestoneTaskbarHeight = this._gantt.parsedOptions.taskBarMilestoneStyle.width, testDateX = this.moveTaskBar.target.attribute.x + (target.record.type === ts_types_1.TaskType.MILESTONE ? milestoneTaskbarHeight / 2 : 0), startDateColIndex = (0,
146
146
  gantt_helper_1.getDateIndexByX)(testDateX - this._gantt.stateManager.scroll.horizontalBarPos, this._gantt), timelineStartDate = this._gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[startDateColIndex];
147
147
  if (!timelineStartDate) return;
148
148
  const newStartDate = timelineStartDate.startDate, newEndDate = new Date(newStartDate.getTime() + ((0,
@@ -160,6 +160,30 @@ class StateManager {
160
160
  index: taskIndex,
161
161
  record: newRecord
162
162
  });
163
+ const newRowIndex = (0, gantt_helper_1.getTaskIndexsByTaskY)(targetEndY, this._gantt).task_index;
164
+ this._gantt.hasListeners(ts_types_1.GANTT_EVENT_TYPE.MOVE_END_TASK_BAR) && this._gantt.fireListeners(ts_types_1.GANTT_EVENT_TYPE.MOVE_END_TASK_BAR, {
165
+ startDate: newRecord[this._gantt.parsedOptions.startDateField],
166
+ endDate: newRecord[this._gantt.parsedOptions.endDateField],
167
+ oldStartDate: oldStartDate,
168
+ oldEndDate: oldEndDate,
169
+ oldRowIndex: oldRowIndex,
170
+ newRowIndex: newRowIndex,
171
+ index: taskIndex,
172
+ record: newRecord
173
+ });
174
+ } else {
175
+ const newRecord = this._gantt.getRecordByIndex(taskIndex, sub_task_index), newRowIndex = (0,
176
+ gantt_helper_1.getTaskIndexsByTaskY)(targetEndY, this._gantt).task_index;
177
+ this._gantt.hasListeners(ts_types_1.GANTT_EVENT_TYPE.MOVE_END_TASK_BAR) && this._gantt.fireListeners(ts_types_1.GANTT_EVENT_TYPE.MOVE_END_TASK_BAR, {
178
+ startDate: newRecord[this._gantt.parsedOptions.startDateField],
179
+ endDate: newRecord[this._gantt.parsedOptions.endDateField],
180
+ oldStartDate: oldStartDate,
181
+ oldEndDate: oldEndDate,
182
+ oldRowIndex: oldRowIndex,
183
+ newRowIndex: newRowIndex,
184
+ index: newRowIndex,
185
+ record: newRecord
186
+ });
163
187
  }
164
188
  if (this._gantt.parsedOptions.tasksShowMode === ts_types_1.TasksShowMode.Sub_Tasks_Arrange || this._gantt.parsedOptions.tasksShowMode === ts_types_1.TasksShowMode.Sub_Tasks_Compact) {
165
189
  const indexs = (0, gantt_helper_1.getTaskIndexsByTaskY)(targetEndY, this._gantt);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/state/state-manager.ts"],"names":[],"mappings":"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","file":"state-manager.js","sourcesContent":["import { clone, cloneDeep, isValid, max } from '@visactor/vutils';\nimport type { Gantt } from '../Gantt';\nimport type { ITaskLink } from '../ts-types';\nimport { InteractionState, GANTT_EVENT_TYPE, DependencyType, TasksShowMode, TaskType } from '../ts-types';\nimport type { Group, FederatedPointerEvent, Polygon, Line, Circle } from '@visactor/vtable/es/vrender';\nimport {\n syncEditCellFromTable,\n syncScrollStateFromTable,\n syncScrollStateToTable,\n syncDragOrderFromTable,\n syncTreeChangeFromTable,\n syncSortFromTable,\n syncTableWidthFromTable\n} from './gantt-table-sync';\nimport {\n clearRecordShowIndex,\n findRecordByTaskKey,\n getDateIndexByX,\n getTaskIndexsByTaskY,\n getTextPos\n} from '../gantt-helper';\nimport { debounce } from '../tools/debounce';\nimport type { GanttTaskBarNode } from '../scenegraph/gantt-node';\nimport { TASKBAR_HOVER_ICON_WIDTH } from '../scenegraph/task-bar';\nimport { Inertia } from '../tools/inertia';\nimport { createDateAtMidnight, getEndDateByTimeUnit, getStartDateByTimeUnit, toBoxArray } from '../tools/util';\nexport class StateManager {\n _gantt: Gantt;\n\n scroll: {\n horizontalBarPos: number;\n verticalBarPos: number;\n };\n fastScrolling: boolean;\n /**\n * Default 默认展示\n * grabing 拖拽中\n * -Resize column 改变列宽\n * -column move 调整列顺序\n * -drag select 拖拽多选\n * Scrolling 滚动中\n */\n interactionState: InteractionState = InteractionState.default;\n\n moveTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n deltaX: number;\n deltaY: number;\n targetStartX: number;\n targetStartY: number;\n startOffsetY: number;\n moving: boolean;\n target: GanttTaskBarNode;\n moveTaskBarXSpeed: number;\n moveTaskBarXInertia: Inertia;\n };\n\n hoverTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n targetStartX: number;\n target: GanttTaskBarNode;\n };\n resizeTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n /** 刚开始时 任务条节点的offsetX */\n startOffsetY: number;\n targetStartX: number;\n targetEndX: number;\n target: GanttTaskBarNode;\n resizing: boolean;\n onIconName: string;\n };\n selectedTaskBar: {\n target: GanttTaskBarNode;\n };\n resizeTableWidth: {\n /** x坐标是相对table内坐标 */\n lastX: number;\n resizing: boolean;\n };\n\n selectedDenpendencyLink: {\n link: ITaskLink & { vtable_gantt_linkArrowNode: Polygon; vtable_gantt_linkLineNode: Line };\n };\n creatingDenpendencyLink: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n startOffsetY: number;\n targetStartX: number;\n startClickedPoint: Group;\n creating: boolean;\n firstTaskBarPosition: 'left' | 'right';\n secondTaskBarPosition: 'left' | 'right';\n secondTaskBarNode: GanttTaskBarNode;\n lastHighLightLinkPoint: Group;\n };\n marklineIcon: {\n target: any;\n };\n // 供滚动重置为default使用\n resetInteractionState = debounce(() => {\n this.updateInteractionState(InteractionState.default);\n }, 100);\n constructor(gantt: Gantt) {\n this._gantt = gantt;\n this.scroll = {\n horizontalBarPos: 0,\n verticalBarPos: 0\n };\n this.moveTaskBar = {\n targetStartX: null,\n targetStartY: null,\n deltaX: 0,\n deltaY: 0,\n startOffsetY: null,\n startX: null,\n startY: null,\n moving: false,\n target: null,\n moveTaskBarXSpeed: 0,\n moveTaskBarXInertia: new Inertia()\n };\n\n this.hoverTaskBar = {\n targetStartX: null,\n startX: null,\n target: null\n };\n this.marklineIcon = {\n target: null\n };\n\n this.selectedTaskBar = {\n target: null\n };\n this.resizeTaskBar = {\n startOffsetY: null,\n targetStartX: null,\n targetEndX: null,\n startX: null,\n startY: null,\n target: null,\n resizing: false,\n onIconName: ''\n };\n this.resizeTableWidth = {\n lastX: null,\n resizing: false\n };\n this.selectedDenpendencyLink = {\n link: null\n };\n this.creatingDenpendencyLink = {\n startClickedPoint: null,\n startX: null,\n startY: null,\n startOffsetY: null,\n targetStartX: null,\n creating: false,\n secondTaskBarNode: null\n };\n\n this.updateVerticalScrollBar = this.updateVerticalScrollBar.bind(this);\n this.updateHorizontalScrollBar = this.updateHorizontalScrollBar.bind(this);\n\n syncScrollStateFromTable(this._gantt);\n syncEditCellFromTable(this._gantt);\n syncDragOrderFromTable(this._gantt);\n syncTreeChangeFromTable(this._gantt);\n syncSortFromTable(this._gantt);\n if (this._gantt.options.taskListTable?.tableWidth === 'auto' || this._gantt.taskTableWidth === -1) {\n syncTableWidthFromTable(this._gantt);\n }\n }\n\n setScrollTop(top: number, triggerEvent: boolean = true) {\n // 矫正top值范围\n const totalHeight = this._gantt.getAllRowsHeight();\n top = Math.max(0, Math.min(top, totalHeight - this._gantt.scenegraph.height));\n top = Math.ceil(top);\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n this.scroll.verticalBarPos = top;\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n // 设置scenegraph坐标\n this._gantt.scenegraph.setY(-top);\n\n // 更新scrollbar位置\n const yRatio = top / (totalHeight - this._gantt.scenegraph.height);\n this._gantt.scenegraph.scrollbarComponent.updateVerticalScrollBarPos(yRatio);\n\n if (oldVerticalBarPos !== top && triggerEvent) {\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n }\n get scrollLeft() {\n return this.scroll.horizontalBarPos;\n }\n get scrollTop() {\n return this.scroll.verticalBarPos;\n }\n setScrollLeft(left: number, triggerEvent: boolean = true) {\n // 矫正left值范围\n const totalWidth = this._gantt.getAllDateColsWidth();\n\n left = Math.max(0, Math.min(left, totalWidth - this._gantt.scenegraph.width));\n left = Math.ceil(left);\n // 滚动期间清空选中清空\n // if (left !== this.scroll.horizontalBarPos) {\n // this.updateHoverPos(-1, -1);\n // }\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = left;\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n\n // 设置scenegraph坐标\n this._gantt.scenegraph.setX(-left);\n\n // 更新scrollbar位置\n const xRatio = left / (totalWidth - this._gantt.scenegraph.width);\n this._gantt.scenegraph.scrollbarComponent.updateHorizontalScrollBarPos(xRatio);\n\n if (oldHorizontalBarPos !== left && triggerEvent) {\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioX: xRatio\n });\n }\n }\n\n updateInteractionState(mode: InteractionState) {\n if (this.interactionState === mode) {\n return;\n }\n const oldState = this.interactionState;\n this.interactionState = mode;\n // 处理mode 更新后逻辑\n if (oldState === InteractionState.scrolling && mode === InteractionState.default) {\n // this.table.scenegraph.stage.disableDirtyBounds();\n // this.table.scenegraph.stage.render();\n // this.table.scenegraph.stage.enableDirtyBounds();\n }\n }\n\n updateVerticalScrollBar(yRatio: number) {\n const totalHeight = this._gantt.getAllRowsHeight();\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n this.scroll.verticalBarPos = Math.ceil(yRatio * (totalHeight - this._gantt.scenegraph.height));\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n this._gantt.scenegraph.setY(-this.scroll.verticalBarPos, yRatio === 1);\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n updateHorizontalScrollBar(xRatio: number) {\n const totalWidth = this._gantt.getAllDateColsWidth();\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = Math.ceil(xRatio * (totalWidth - this._gantt.scenegraph.width));\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n this._gantt.scenegraph.setX(-this.scroll.horizontalBarPos, xRatio === 1);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioY: xRatio\n });\n // this.scroll.horizontalBarPos -= this._gantt.scenegraph.proxy.deltaX;\n // this._gantt.scenegraph.proxy.deltaX = 0;\n\n // this._gantt.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n // scrollTop: this.scroll.verticalBarPos,\n // scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n // scrollDirection: 'horizontal',\n // scrollRatioX: xRatio\n // });\n\n // if (oldHorizontalBarPos !== this.scroll.horizontalBarPos) {\n // this.checkHorizontalScrollBarEnd();\n // }\n }\n\n startMoveTaskBar(target: GanttTaskBarNode, x: number, y: number, offsetY: number) {\n if (target.name === 'task-bar-hover-shadow') {\n target = target.parent;\n }\n this.moveTaskBar.moving = true;\n this.moveTaskBar.target = target;\n this.moveTaskBar.targetStartX = target.attribute.x;\n this.moveTaskBar.targetStartY = target.attribute.y;\n this.moveTaskBar.startX = x;\n this.moveTaskBar.startY = y;\n this.moveTaskBar.startOffsetY = offsetY;\n target.setAttribute('zIndex', 10000);\n }\n\n isMoveingTaskBar() {\n return this.moveTaskBar.moving;\n }\n endMoveTaskBar() {\n if (this.moveTaskBar.moveTaskBarXInertia.isInertiaScrolling()) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n\n const deltaX = this.moveTaskBar.deltaX;\n const deltaY = this.moveTaskBar.deltaY;\n const target = this.moveTaskBar.target;\n if (Math.abs(deltaX) >= 1 || Math.abs(deltaY) >= 1) {\n const taskIndex = target.task_index;\n const sub_task_index = target.sub_task_index;\n const { startDate: oldStartDate, endDate: oldEndDate } = this._gantt.getTaskInfoByTaskListIndex(\n taskIndex,\n sub_task_index\n );\n\n const targetEndY =\n this.moveTaskBar.targetStartY +\n this._gantt.parsedOptions.rowHeight * Math.round(deltaY / this._gantt.parsedOptions.rowHeight);\n const milestoneTaskbarHeight = this._gantt.parsedOptions.taskBarMilestoneStyle.width;\n const testDateX =\n this.moveTaskBar.target.attribute.x +\n (target.record.type === TaskType.MILESTONE ? milestoneTaskbarHeight / 2 : 0);\n const startDateColIndex = getDateIndexByX(\n testDateX - this._gantt.stateManager.scroll.horizontalBarPos,\n this._gantt\n );\n const timelineStartDate =\n this._gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[startDateColIndex];\n if (!timelineStartDate) {\n return;\n }\n const newStartDate = timelineStartDate.startDate;\n // const endDateColIndex = getDateIndexByX(\n // this.moveTaskBar.target.attribute.x +\n // this.moveTaskBar.target.attribute.width -\n // this._gantt.stateManager.scroll.horizontalBarPos,\n // this._gantt\n // );\n // const timelineEndDate = this._gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[endDateColIndex];\n const newEndDate = new Date(\n newStartDate.getTime() +\n (createDateAtMidnight(oldEndDate).getTime() - createDateAtMidnight(oldStartDate).getTime())\n );\n // 判断横向拖动 更新数据的date\n let dateChanged: 'left' | 'right';\n if (createDateAtMidnight(oldStartDate).getTime() !== newStartDate.getTime()) {\n dateChanged = createDateAtMidnight(oldStartDate).getTime() > newStartDate.getTime() ? 'left' : 'right';\n // this._gantt._updateDateToTaskRecord('move', days, taskIndex, sub_task_index);\n this._gantt._updateStartEndDateToTaskRecord(newStartDate, newEndDate, taskIndex, sub_task_index);\n const newRecord = this._gantt.getRecordByIndex(taskIndex, sub_task_index);\n\n if (this._gantt.hasListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE)) {\n this._gantt.fireListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE, {\n startDate: newRecord[this._gantt.parsedOptions.startDateField],\n endDate: newRecord[this._gantt.parsedOptions.endDateField],\n oldStartDate,\n oldEndDate,\n index: taskIndex,\n record: newRecord\n });\n }\n }\n if (\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n const indexs = getTaskIndexsByTaskY(targetEndY, this._gantt);\n this._gantt._dragOrderTaskRecord(\n target.task_index,\n target.sub_task_index,\n indexs.task_index,\n indexs.sub_task_index\n );\n clearRecordShowIndex(this._gantt.records);\n this._gantt.taskListTableInstance.renderWithRecreateCells();\n this._gantt._syncPropsFromTable();\n this._gantt.scenegraph.refreshTaskBarsAndGrid();\n } else {\n // 判断纵向拖动 处理数据的位置\n if (\n this._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Tasks_Separate &&\n Math.abs(Math.round(deltaY / this._gantt.parsedOptions.rowHeight)) >= 1\n ) {\n const indexs = getTaskIndexsByTaskY(targetEndY, this._gantt);\n this._gantt._dragOrderTaskRecord(\n target.task_index,\n target.sub_task_index,\n indexs.task_index,\n indexs.sub_task_index\n );\n if (this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate) {\n this._gantt.taskListTableInstance.renderWithRecreateCells();\n this._gantt.scenegraph.refreshTaskBarsAndGrid();\n } else {\n this._gantt.scenegraph.taskBar.refresh();\n this._gantt.scenegraph.dependencyLink.refresh();\n }\n // target = this._gantt.scenegraph.taskBar.getTaskBarNodeByIndex(indexs.task_index, indexs.sub_task_index);\n } else {\n let newX = startDateColIndex >= 1 ? this._gantt.getDateColsWidth(0, startDateColIndex - 1) : 0;\n if (target.record.type === TaskType.MILESTONE) {\n const milestoneTaskbarHeight = this._gantt.parsedOptions.taskBarMilestoneStyle.width;\n newX -= milestoneTaskbarHeight / 2;\n }\n moveTaskBar(target, newX - (target as Group).attribute.x, targetEndY - (target as Group).attribute.y, this);\n\n // 为了确保拖拽后 保持startDate日期晚的显示在上层不被盖住 这里需要重新排序一下\n if (dateChanged === 'right') {\n let insertAfterNode = target;\n while (\n (insertAfterNode as Group).nextSibling &&\n (insertAfterNode as Group).nextSibling.attribute.y === (target as Group).attribute.y &&\n (insertAfterNode as Group).nextSibling.record[this._gantt.parsedOptions.startDateField] <=\n target.record[this._gantt.parsedOptions.startDateField]\n ) {\n insertAfterNode = (insertAfterNode as Group).nextSibling;\n }\n if (insertAfterNode !== target) {\n (insertAfterNode as Group).parent.insertAfter(target, insertAfterNode);\n }\n } else if (dateChanged === 'left') {\n let insertBeforeNode = target;\n while (\n (insertBeforeNode as Group).previousSibling &&\n (insertBeforeNode as Group).previousSibling.attribute.y === (target as Group).attribute.y &&\n (insertBeforeNode as Group).previousSibling.record[this._gantt.parsedOptions.startDateField] >=\n target.record[this._gantt.parsedOptions.startDateField]\n ) {\n insertBeforeNode = (insertBeforeNode as Group).previousSibling;\n }\n if (insertBeforeNode !== target) {\n (insertBeforeNode as Group).parent.insertBefore(target, insertBeforeNode);\n }\n }\n }\n }\n this._gantt.scenegraph.updateNextFrame();\n }\n this.moveTaskBar.moving = false;\n if (this.selectedTaskBar.target !== target) {\n target.setAttribute('zIndex', 0);\n }\n target.updateTextPosition();\n this.moveTaskBar.target = null;\n this.moveTaskBar.deltaX = 0;\n this.moveTaskBar.deltaY = 0;\n this.moveTaskBar.moveTaskBarXSpeed = 0;\n }\n dealTaskBarMove(e: FederatedPointerEvent) {\n const gantt = this._gantt;\n let target = this.moveTaskBar.target;\n target.setAttribute('zIndex', 10000);\n // const taskIndex = getTaskIndexByY(this.moveTaskBar.startOffsetY, this._gantt);\n const x1 = gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n const y1 = gantt.eventManager.lastDragPointerXYOnWindow.y;\n const y2 = e.y;\n const dy = y2 - y1;\n\n this.moveTaskBar.deltaX += dx;\n this.moveTaskBar.deltaY += dy;\n // target.setAttribute('x', target.attribute.x + dx);\n moveTaskBar(target, dx, dy, this);\n\n // 处理向左拖拽任务条时,整体向左滚动\n if (target.attribute.x <= gantt.stateManager.scrollLeft && dx < 0) {\n if (gantt.parsedOptions.moveTaskBarToExtendDateRange && gantt.stateManager.scrollLeft === 0) {\n this.moveTaskBar.moveTaskBarXInertia?.endInertia();\n //已经在最左边了 扩展滚动区域\n const timeDiff =\n gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[1].startDate.getTime() -\n gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[0].startDate.getTime();\n const { unit: minTimeUnit, startOfWeek } = gantt.parsedOptions.reverseSortedTimelineScales[0];\n gantt.parsedOptions.minDate = getStartDateByTimeUnit(\n new Date(\n gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[0].startDate.getTime() - timeDiff / 2\n ),\n minTimeUnit,\n startOfWeek\n );\n gantt.parsedOptions._minDateTime = gantt.parsedOptions.minDate?.getTime();\n gantt._generateTimeLineDateMap();\n gantt._updateSize();\n // refreshAll 当数据量大时会有性能问题 TODO优化\n gantt.scenegraph.refreshAll();\n target = this.moveTaskBar.target = gantt.scenegraph.taskBar.getTaskBarNodeByIndex(\n this.moveTaskBar.target.task_index,\n this.moveTaskBar.target.sub_task_index\n );\n gantt.scrollLeft = gantt.parsedOptions.timelineColWidth - 1;\n gantt.eventManager.lastDragPointerXYOnWindow.x = e.x;\n if (target.record?.type === 'milestone') {\n moveTaskBar(target, gantt.scrollLeft - target.attribute.x, 0, this);\n } else {\n target.setAttribute('x', gantt.scrollLeft);\n }\n } else {\n this.moveTaskBar.moveTaskBarXSpeed = -gantt.parsedOptions.timelineColWidth / 100;\n\n this.moveTaskBar.moveTaskBarXInertia.startInertia(this.moveTaskBar.moveTaskBarXSpeed, 0, 1);\n this.moveTaskBar.moveTaskBarXInertia.setScrollHandle((dx: number, dy: number) => {\n this.moveTaskBar.deltaX += dx;\n this.moveTaskBar.deltaY += dy;\n moveTaskBar(target, dx, dy, this);\n\n gantt.stateManager.setScrollLeft(target.attribute.x);\n if (gantt.stateManager.scrollLeft === 0) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n });\n }\n } else if (\n target.attribute.x + target.attribute.width >= gantt.stateManager.scrollLeft + gantt.tableNoFrameWidth &&\n dx > 0\n ) {\n if (\n gantt.parsedOptions.moveTaskBarToExtendDateRange &&\n gantt.stateManager.scrollLeft + gantt.tableNoFrameWidth === gantt.getAllDateColsWidth()\n ) {\n this.moveTaskBar.moveTaskBarXInertia?.endInertia();\n //已经在最左边了 扩展滚动区域\n const timelineDates = gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates;\n const timeDiff = timelineDates[1].startDate.getTime() - timelineDates[0].startDate.getTime();\n const { unit: minTimeUnit, startOfWeek, step } = gantt.parsedOptions.reverseSortedTimelineScales[0];\n gantt.parsedOptions.maxDate = getEndDateByTimeUnit(\n gantt.parsedOptions.minDate,\n new Date(timelineDates[timelineDates.length - 1].endDate.getTime() + timeDiff / 2),\n minTimeUnit,\n step\n );\n gantt.parsedOptions._maxDateTime = gantt.parsedOptions.maxDate?.getTime();\n gantt._generateTimeLineDateMap();\n gantt._updateSize();\n // refreshAll 当数据量大时会有性能问题 TODO优化\n gantt.scenegraph.refreshAll();\n target = this.moveTaskBar.target = gantt.scenegraph.taskBar.getTaskBarNodeByIndex(\n this.moveTaskBar.target.task_index,\n this.moveTaskBar.target.sub_task_index\n );\n gantt.scrollLeft += 1;\n gantt.eventManager.lastDragPointerXYOnWindow.x = e.x;\n if (target.record?.type === 'milestone') {\n const newX = gantt.scrollLeft + gantt.tableNoFrameWidth - target.attribute.width;\n moveTaskBar(target, newX - target.attribute.x, 0, this);\n } else {\n target.setAttribute('x', gantt.scrollLeft + gantt.tableNoFrameWidth - target.attribute.width);\n }\n } else {\n // 处理向右拖拽任务条时,整体向右滚动\n this.moveTaskBar.moveTaskBarXSpeed = gantt.parsedOptions.timelineColWidth / 100;\n\n this.moveTaskBar.moveTaskBarXInertia.startInertia(this.moveTaskBar.moveTaskBarXSpeed, 0, 1);\n this.moveTaskBar.moveTaskBarXInertia.setScrollHandle((dx: number, dy: number) => {\n this.moveTaskBar.deltaX += dx;\n this.moveTaskBar.deltaY += dy;\n moveTaskBar(target, dx, dy, this);\n\n gantt.stateManager.setScrollLeft(target.attribute.x + target.attribute.width - gantt.tableNoFrameWidth);\n if (gantt.stateManager.scrollLeft === gantt.getAllDateColsWidth() - gantt.tableNoFrameWidth) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n });\n }\n } else if (this.moveTaskBar.moveTaskBarXInertia.isInertiaScrolling()) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n } else {\n this.moveTaskBar.moveTaskBarXSpeed = 0;\n }\n\n gantt.scenegraph.updateNextFrame();\n }\n //#region 调整拖拽任务条的大小\n startResizeTaskBar(target: Group, x: number, y: number, startOffsetY: number, onIconName: string) {\n // if (target.name === 'task-bar-hover-shadow') {\n // target = target.parent.parent;\n // }\n this.resizeTaskBar.onIconName = onIconName;\n this.resizeTaskBar.resizing = true;\n this.resizeTaskBar.target = target as GanttTaskBarNode;\n this.resizeTaskBar.targetStartX = target.attribute.x;\n this.resizeTaskBar.targetEndX = target.attribute.x + target.attribute.width;\n this.resizeTaskBar.startX = x;\n this.resizeTaskBar.startY = y;\n this.resizeTaskBar.startOffsetY = startOffsetY;\n }\n isResizingTaskBar() {\n return this.resizeTaskBar.resizing;\n }\n endResizeTaskBar(x: number) {\n const direction = this._gantt.stateManager.resizeTaskBar.onIconName;\n const deltaX = x - this.resizeTaskBar.startX;\n if (Math.abs(deltaX) >= 1) {\n // let diff_days =\n // Math.round(deltaX / this._gantt.parsedOptions.timelineColWidth) * this._gantt.getMinScaleUnitToDays();\n\n const colIndex = getDateIndexByX(\n (direction === 'left'\n ? this.resizeTaskBar.target.attribute.x\n : this.resizeTaskBar.target.attribute.x + this.resizeTaskBar.target.attribute.width) -\n this._gantt.stateManager.scroll.horizontalBarPos,\n this._gantt\n );\n const timelineDate = this._gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[colIndex];\n if (!timelineDate) {\n return;\n }\n const targetDate = direction === 'left' ? timelineDate.startDate : timelineDate.endDate;\n // diff_days = direction === 'left' ? -diff_days : diff_days;\n\n const taskBarGroup = this.resizeTaskBar.target;\n const clipGroupBox = taskBarGroup.clipGroupBox;\n const rect = taskBarGroup.barRect;\n const progressRect = taskBarGroup.progressRect;\n const textLabel = taskBarGroup.textLabel;\n const taskIndex = taskBarGroup.task_index;\n const sub_task_index = taskBarGroup.sub_task_index;\n\n const {\n taskDays,\n progress,\n startDate: oldStartDate,\n endDate: oldEndDate\n } = this._gantt.getTaskInfoByTaskListIndex(taskIndex, sub_task_index);\n\n let dateChanged = false;\n if (direction === 'left') {\n this._gantt._updateStartDateToTaskRecord(targetDate, taskIndex, sub_task_index);\n targetDate.getTime() !== new Date(oldStartDate).getTime() && (dateChanged = true);\n } else {\n this._gantt._updateEndDateToTaskRecord(targetDate, taskIndex, sub_task_index);\n targetDate.getTime() !== new Date(oldEndDate).getTime() && (dateChanged = true);\n }\n if (\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n this._gantt.taskListTableInstance.renderWithRecreateCells();\n this._gantt._syncPropsFromTable();\n this._gantt.scenegraph.refreshTaskBarsAndGrid();\n } else {\n if (direction === 'left') {\n const newX = colIndex >= 1 ? this._gantt.getDateColsWidth(0, colIndex - 1) : 0;\n taskBarGroup.setAttribute('x', newX);\n taskBarGroup.setAttribute('width', this.resizeTaskBar.targetEndX - newX);\n } else if (direction === 'right') {\n const newEndX = this._gantt.getDateColsWidth(0, colIndex);\n taskBarGroup.setAttribute('width', newEndX - this.resizeTaskBar.targetStartX);\n }\n clipGroupBox.setAttribute('width', taskBarGroup.attribute.width);\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n if (textLabel) {\n const { textAlign, textBaseline, padding } = this._gantt.parsedOptions.taskBarLabelStyle;\n const position = getTextPos(\n toBoxArray(padding),\n textAlign,\n textBaseline,\n taskBarGroup.attribute.width,\n taskBarGroup.attribute.height\n );\n textLabel.setAttribute('maxLineWidth', taskBarGroup.attribute.width - TASKBAR_HOVER_ICON_WIDTH * 2);\n textLabel.setAttribute('x', position.x);\n }\n this._gantt.scenegraph.refreshRecordLinkNodes(taskIndex, sub_task_index, taskBarGroup, 0); //更新关联线\n this.showTaskBarHover();\n reCreateCustomNode(this._gantt, taskBarGroup, taskIndex, sub_task_index);\n taskBarGroup.setAttribute('zIndex', 0);\n }\n taskBarGroup.updateTextPosition();\n this.resizeTaskBar.resizing = false;\n this.resizeTaskBar.target = null;\n\n if (dateChanged && this._gantt.hasListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE)) {\n const newRecord = this._gantt.getRecordByIndex(taskIndex, sub_task_index);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE, {\n startDate: newRecord[this._gantt.parsedOptions.startDateField],\n endDate: newRecord[this._gantt.parsedOptions.endDateField],\n oldStartDate,\n oldEndDate,\n index: taskIndex,\n record: newRecord\n });\n }\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n dealTaskBarResize(e: FederatedPointerEvent) {\n const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n // debugger;\n const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target;\n\n // const taskIndex = getTaskIndexByY(this.resizeTaskBar.startOffsetY, this._gantt);\n\n let diffWidth = this._gantt.stateManager.resizeTaskBar.onIconName === 'left' ? -dx : dx;\n const taskBarSize = Math.max(1, taskBarGroup.attribute.width + diffWidth);\n diffWidth = taskBarSize - taskBarGroup.attribute.width;\n\n resizeTaskBar(\n taskBarGroup,\n this._gantt.stateManager.resizeTaskBar.onIconName === 'left' ? -diffWidth : 0,\n\n taskBarSize,\n this\n );\n\n this._gantt.scenegraph.updateNextFrame();\n }\n //#endregion\n //#region 生成关联线的交互处理\n startCreateDependencyLine(target: Group, x: number, y: number, startOffsetY: number, position: 'left' | 'right') {\n // if (target.name === 'task-bar-hover-shadow') {\n // target = target.parent.parent;\n // }\n this.resizeTaskBar.resizing = false; // 关联线创建时,任务条resizing状态重置\n this.creatingDenpendencyLink.creating = true;\n this.creatingDenpendencyLink.startClickedPoint = target;\n this.creatingDenpendencyLink.startX = x;\n this.creatingDenpendencyLink.startY = y;\n this.creatingDenpendencyLink.startOffsetY = startOffsetY;\n this.creatingDenpendencyLink.firstTaskBarPosition = position;\n this.highlightLinkPointNode(target);\n }\n isCreatingDependencyLine() {\n return this.creatingDenpendencyLink.creating;\n }\n endCreateDependencyLine(offsetY: number) {\n const taskKeyField = this._gantt.parsedOptions.taskKeyField;\n // const fromTaskIndex = getTaskIndexByY(this.creatingDenpendencyLink.startOffsetY, this._gantt);\n const fromTaskIndex = this.selectedTaskBar.target.task_index;\n const from_sub_task_id = this.selectedTaskBar.target.sub_task_index;\n // const toTaskIndex = getTaskIndexByY(offsetY, this._gantt);\n const toTaskIndex = this.creatingDenpendencyLink.secondTaskBarNode.task_index;\n const to_sub_task_id = this.creatingDenpendencyLink.secondTaskBarNode.sub_task_index;\n const fromRecord = this._gantt.getRecordByIndex(fromTaskIndex, from_sub_task_id);\n const linkedFromTaskKey = fromRecord[taskKeyField];\n const toRecord = this._gantt.getRecordByIndex(toTaskIndex, to_sub_task_id);\n const linkedToTaskKey = toRecord[taskKeyField];\n const link = {\n linkedFromTaskKey,\n linkedToTaskKey,\n type:\n this.creatingDenpendencyLink.firstTaskBarPosition === 'left' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'left'\n ? DependencyType.StartToStart\n : this.creatingDenpendencyLink.firstTaskBarPosition === 'right' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'left'\n ? DependencyType.FinishToStart\n : this.creatingDenpendencyLink.firstTaskBarPosition === 'right' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'right'\n ? DependencyType.FinishToFinish\n : DependencyType.StartToFinish\n };\n this._gantt.addLink(link);\n // const oldRecord = this._gantt.getRecordByIndex(fromTaskIndex);\n this.hideTaskBarSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n this.creatingDenpendencyLink.creating = false;\n return link;\n }\n dealCreateDependencyLine(e: FederatedPointerEvent) {\n const x1 = this.creatingDenpendencyLink.startX;\n const y1 = this.creatingDenpendencyLink.startY;\n const x2 = e.x;\n const y2 = e.y;\n const dx = x2 - x1;\n const dy = y2 - y1;\n // debugger;\n const startClickedPoint = this.creatingDenpendencyLink.startClickedPoint;\n const x = startClickedPoint.attribute.x + startClickedPoint.attribute.width / 2;\n const y = startClickedPoint.attribute.y + startClickedPoint.attribute.height / 2;\n this._gantt.scenegraph.taskBar.updateCreatingDependencyLine(x, y, x + dx, y + dy);\n this._gantt.scenegraph.updateNextFrame();\n //\n }\n //#endregion\n //#region 调整左侧任务列表表格整体的宽度\n startResizeTableWidth(e: MouseEvent) {\n this.resizeTableWidth.resizing = true;\n this.resizeTableWidth.lastX = e.pageX;\n //this.resizeTableWidth.startWidth = this._gantt.tableNoFrameWidth;\n }\n isResizingTableWidth() {\n return this.resizeTableWidth.resizing;\n }\n endResizeTableWidth() {\n this.resizeTableWidth.resizing = false;\n }\n\n dealResizeTableWidth(e: MouseEvent) {\n if (!this.resizeTableWidth.resizing) {\n return;\n }\n const deltaX = e.pageX - this.resizeTableWidth.lastX;\n if (Math.abs(deltaX) >= 1) {\n const startWidth = this._gantt.taskTableWidth;\n let width = startWidth + deltaX;\n const maxWidth = Math.min(\n this._gantt.taskListTableInstance.getAllColsWidth() + this._gantt.parsedOptions.outerFrameStyle.borderLineWidth,\n this._gantt.options.taskListTable.maxTableWidth ?? 100000\n );\n const minWidth = Math.max(\n this._gantt.parsedOptions.outerFrameStyle.borderLineWidth,\n this._gantt.options.taskListTable.minTableWidth ?? 0\n );\n if (deltaX > 0 && width > maxWidth) {\n width = maxWidth;\n }\n if (deltaX < 0 && width < minWidth) {\n width = minWidth;\n }\n this._gantt.taskTableWidth = width;\n this._gantt.element.style.left = this._gantt.taskTableWidth ? `${this._gantt.taskTableWidth}px` : '0px';\n this._gantt.verticalSplitResizeLine.style.left = this._gantt.taskTableWidth\n ? `${this._gantt.taskTableWidth - 7}px`\n : '0px';\n this._gantt._resize();\n this.resizeTableWidth.lastX = e.pageX;\n }\n }\n //#endregion\n\n showTaskBarHover() {\n const target = this._gantt.stateManager.hoverTaskBar.target;\n if (target) {\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, target);\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n hideTaskBarHover(e: FederatedPointerEvent) {\n this._gantt.stateManager.hoverTaskBar.target = null;\n this._gantt.scenegraph.taskBar.hideHoverBar();\n this._gantt.scenegraph.updateNextFrame();\n }\n\n showTaskBarSelectedBorder(target: GanttTaskBarNode) {\n this._gantt.stateManager.selectedTaskBar.target?.setAttribute('zIndex', 0);\n this._gantt.stateManager.selectedTaskBar.target = target as any as GanttTaskBarNode;\n const linkCreatable = this._gantt.parsedOptions.dependencyLinkCreatable;\n target.setAttribute('zIndex', 10000);\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.createSelectedBorder(x, y, width, height, target, linkCreatable);\n this._gantt.scenegraph.updateNextFrame();\n }\n\n hideTaskBarSelectedBorder() {\n this._gantt.stateManager.selectedTaskBar.target?.setAttribute('zIndex', 0);\n this._gantt.stateManager.selectedTaskBar.target = null;\n this._gantt.scenegraph.taskBar.removeSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n showSecondTaskBarSelectedBorder() {\n const target = this._gantt.stateManager.creatingDenpendencyLink.secondTaskBarNode;\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.createSelectedBorder(x, y, width, height, target, true);\n this._gantt.scenegraph.updateNextFrame();\n }\n hideSecondTaskBarSelectedBorder() {\n this._gantt.stateManager.creatingDenpendencyLink.secondTaskBarNode = null;\n this._gantt.scenegraph.taskBar.removeSecondSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n showDependencyLinkSelectedLine() {\n const link = this._gantt.stateManager.selectedDenpendencyLink.link;\n this._gantt.scenegraph.dependencyLink.createSelectedLinkLine(link);\n\n const { taskKeyField, dependencyLinks } = this._gantt.parsedOptions;\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n let linkFrom_index;\n let linkFrom_sub_task_index;\n let linkTo_index;\n let linkTo_sub_task_index;\n const linkedToTaskRecord = findRecordByTaskKey(this._gantt.records, taskKeyField, linkedToTaskKey);\n const linkedFromTaskRecord = findRecordByTaskKey(this._gantt.records, taskKeyField, linkedFromTaskKey);\n if (\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Inline ||\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate ||\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n linkFrom_index = linkedFromTaskRecord.index[0];\n linkFrom_sub_task_index = linkedFromTaskRecord.index[1];\n linkTo_index = linkedToTaskRecord.index[0];\n linkTo_sub_task_index = linkedToTaskRecord.index[1];\n } else {\n linkFrom_index = this._gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n linkTo_index = this._gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n }\n const fromTaskNode = this._gantt.scenegraph.taskBar.getTaskBarNodeByIndex(\n linkFrom_index,\n linkFrom_sub_task_index\n ) as GanttTaskBarNode;\n this._gantt.scenegraph.taskBar.createSelectedBorder(\n fromTaskNode.attribute.x,\n fromTaskNode.attribute.y,\n fromTaskNode.attribute.width,\n fromTaskNode.attribute.height,\n fromTaskNode,\n false\n );\n const toTaskNode = this._gantt.scenegraph.taskBar.getTaskBarNodeByIndex(\n linkTo_index,\n linkTo_sub_task_index\n ) as GanttTaskBarNode;\n this._gantt.scenegraph.taskBar.createSelectedBorder(\n toTaskNode.attribute.x,\n toTaskNode.attribute.y,\n toTaskNode.attribute.width,\n toTaskNode.attribute.height,\n toTaskNode,\n false\n );\n\n this._gantt.scenegraph.updateNextFrame();\n }\n hideDependencyLinkSelectedLine() {\n this._gantt.stateManager.selectedDenpendencyLink.link = null;\n this._gantt.scenegraph.dependencyLink.removeSelectedLinkLine();\n this._gantt.scenegraph.taskBar.removeSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n highlightLinkPointNode(linkPointGroup: Group) {\n if (linkPointGroup?.children.length > 0) {\n const circle = linkPointGroup.children[0];\n circle.setAttribute('fill', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.fillColor);\n circle.setAttribute('stroke', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.strokeColor);\n circle.setAttribute('radius', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.radius);\n circle.setAttribute('lineWidth', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.strokeWidth);\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n unhighlightLinkPointNode(linkPointGroup: Group) {\n if (linkPointGroup?.children.length > 0) {\n const circle = linkPointGroup.children[0];\n circle.setAttribute('fill', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.fillColor);\n circle.setAttribute('stroke', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeColor);\n circle.setAttribute('radius', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.radius);\n circle.setAttribute('lineWidth', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeWidth);\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n showMarklineIconHover() {\n const target = this._gantt.stateManager.marklineIcon.target;\n if (target) {\n const marklineGroup = this._gantt.scenegraph.timelineHeader.showMarklineIcon(target.parent);\n if (marklineGroup && this._gantt.parsedOptions.markLineCreateOptions?.markLineCreationHoverToolTip?.tipContent) {\n this._gantt.scenegraph.showToolTip(marklineGroup);\n }\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n hideMarklineIconHover() {\n this._gantt.scenegraph.timelineHeader.hideMarklineIconHover(this._gantt.stateManager.marklineIcon.target.parent);\n this._gantt.scenegraph.hideToolTip();\n this._gantt.stateManager.marklineIcon.target = null;\n this._gantt.scenegraph.updateNextFrame();\n }\n\n /**\n * 更新项目任务的时间范围\n * 当子任务移动或调整大小时,需要更新父项目任务的时间范围\n * @param taskPath 任务路径\n */\n updateProjectTaskTimes(taskPath: number[]) {\n if (!taskPath || taskPath.length === 0 || !this._gantt || !this._gantt.records) {\n return;\n }\n\n const startDateField = this._gantt.parsedOptions.startDateField;\n const endDateField = this._gantt.parsedOptions.endDateField;\n\n // 从最底层的子任务开始,向上更新所有父任务\n // 先复制一份路径数组,避免修改原数组\n const pathCopy = [...taskPath];\n\n // 逐步向上处理每个父节点\n while (pathCopy.length > 0) {\n // 获取当前层级的父节点路径\n const parentPath = [...pathCopy];\n // 移除最后一个索引,得到父节点路径\n const childIndex = parentPath.pop();\n\n // 使用父节点路径获取父任务记录\n let parentRecord = this._gantt.records;\n const currentPath = [];\n for (const index of parentPath) {\n currentPath.push(index);\n if (!parentRecord[index] || !parentRecord[index].children) {\n console.warn('Invalid parent path:', currentPath);\n return; // 路径无效,直接返回\n }\n parentRecord = parentRecord[index].children;\n }\n\n // 如果parentPath为空,表示已经到了顶层\n const parent = parentPath.length === 0 ? this._gantt.records[childIndex] : parentRecord[childIndex];\n\n // 只处理project类型的父任务\n if (parent && parent.type === TaskType.PROJECT && parent.children && parent.children.length > 0) {\n let earliestStart: Date | null = null;\n let latestEnd: Date | null = null;\n\n // 遍历所有子任务,找出最早的开始时间和最晚的结束时间\n for (const child of parent.children) {\n if (child[startDateField] && child[endDateField]) {\n const childStartDate = new Date(child[startDateField]);\n const childEndDate = new Date(child[endDateField]);\n\n if (!earliestStart || childStartDate < earliestStart) {\n earliestStart = childStartDate;\n }\n\n if (!latestEnd || childEndDate > latestEnd) {\n latestEnd = childEndDate;\n }\n }\n }\n\n // 只有当有有效的时间范围时才更新父任务\n if (earliestStart && latestEnd) {\n // 获取当前父任务的时间范围\n const currentStartDate = parent[startDateField] ? new Date(parent[startDateField]) : null;\n const currentEndDate = parent[endDateField] ? new Date(parent[endDateField]) : null;\n\n // 检查是否需要更新(避免不必要的更新)\n const needUpdate =\n !currentStartDate ||\n !currentEndDate ||\n earliestStart.getTime() !== currentStartDate.getTime() ||\n latestEnd.getTime() !== currentEndDate.getTime();\n\n if (needUpdate) {\n // 获取日期格式\n const dateFormat =\n this._gantt.parsedOptions.dateFormat ??\n this._gantt.parseTimeFormat(parent[startDateField] || parent.children[0][startDateField]);\n\n // 格式化日期\n const formatDateValue = (date: Date) => {\n return this._gantt.formatDate\n ? this._gantt.formatDate(date, dateFormat)\n : date.toISOString().split('T')[0];\n };\n\n // 更新父任务的时间范围\n parent[startDateField] = formatDateValue(earliestStart);\n parent[endDateField] = formatDateValue(latestEnd);\n }\n }\n }\n\n // 继续向上遍历父节点\n pathCopy.pop();\n }\n\n // 更新UI\n this._gantt.scenegraph?.refreshAll();\n }\n}\n\nfunction reCreateCustomNode(gantt: Gantt, taskBarGroup: Group, taskIndex: number, sub_task_index?: number) {\n const taskBarCustomLayout = gantt.parsedOptions.taskBarCustomLayout;\n if (taskBarCustomLayout) {\n let customLayoutObj;\n if (typeof taskBarCustomLayout === 'function') {\n const { startDate, endDate, taskDays, progress, taskRecord } = gantt.getTaskInfoByTaskListIndex(\n taskIndex,\n sub_task_index\n );\n const arg = {\n width: taskBarGroup.attribute.width,\n height: taskBarGroup.attribute.height,\n index: taskIndex,\n startDate,\n endDate,\n taskDays,\n progress,\n taskRecord,\n ganttInstance: gantt\n };\n customLayoutObj = taskBarCustomLayout(arg);\n } else {\n customLayoutObj = taskBarCustomLayout;\n }\n if (customLayoutObj) {\n const rootContainer = customLayoutObj.rootContainer;\n rootContainer.name = 'task-bar-custom-render';\n const barGroup = taskBarGroup.children.find((node: any) => node.name === 'task-bar-group');\n if (barGroup) {\n const oldCustomIndex = barGroup.children.findIndex((node: any) => {\n return node.name === 'task-bar-custom-render';\n });\n const oldCustomNode = barGroup.children[oldCustomIndex] as Group;\n if (oldCustomNode) {\n barGroup.removeChild(oldCustomNode);\n barGroup.insertInto(rootContainer, oldCustomIndex);\n }\n }\n }\n }\n}\n\nfunction moveTaskBar(target: GanttTaskBarNode, dx: number, dy: number, state: StateManager) {\n // const taskIndex = getTaskIndexByY(state.moveTaskBar.startOffsetY, state._gantt);\n const taskIndex = target.task_index;\n const sub_task_index = target.sub_task_index;\n const record = target.record;\n const isMilestone = record.type === TaskType.MILESTONE;\n const oldX = target.attribute.x;\n const oldY = target.attribute.y;\n\n if (dx) {\n target.setAttribute('x', Math.max(0, target.attribute.x + dx));\n }\n if (\n state._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Tasks_Separate &&\n state._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Project_Sub_Tasks_Inline\n ) {\n if (dy) {\n target.setAttribute('y', target.attribute.y + dy);\n }\n } else {\n dy = 0;\n }\n if (isMilestone) {\n target.setAttribute('anchor', [\n target.attribute.x + target.attribute.width / 2,\n target.attribute.y + target.attribute.height / 2\n ]);\n\n if (target.milestoneTextContainer) {\n const deltaX = target.attribute.x - oldX;\n const deltaY = target.attribute.y - oldY;\n\n const currentX = target.milestoneTextContainer.attribute.x;\n const currentY = target.milestoneTextContainer.attribute.y;\n target.milestoneTextContainer.setAttribute('x', currentX + deltaX);\n target.milestoneTextContainer.setAttribute('y', currentY + deltaY);\n }\n }\n\n target.updateTextPosition();\n\n state._gantt.scenegraph.refreshRecordLinkNodes(taskIndex, sub_task_index, target, dy);\n}\n\nfunction resizeTaskBar(target: GanttTaskBarNode, dx: number, newWidth: number, state: StateManager) {\n const progressField = state._gantt.parsedOptions.progressField;\n const clipGroupBox = target.clipGroupBox;\n const rect = target.barRect;\n const progressRect = target.progressRect;\n const textLabel = target.textLabel;\n // const taskIndex = getTaskIndexByY(state.moveTaskBar.startOffsetY, state._gantt);\n const taskIndex = target.task_index;\n const sub_task_index = target.sub_task_index;\n const record = target.record;\n const progress = record[progressField];\n const isMilestone = record.type === TaskType.MILESTONE;\n target.setAttribute('zIndex', 10000);\n if (dx) {\n target.setAttribute('x', target.attribute.x + dx);\n }\n\n if (isMilestone) {\n target.setAttribute('anchor', [\n target.attribute.x + target.attribute.width / 2,\n target.attribute.y + target.attribute.height / 2\n ]);\n }\n\n if (newWidth) {\n target.setAttribute('width', newWidth);\n }\n clipGroupBox.setAttribute('width', target.attribute.width);\n rect?.setAttribute('width', target.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * target.attribute.width);\n if (textLabel) {\n const { textAlign, textBaseline, padding } = state._gantt.parsedOptions.taskBarLabelStyle;\n const position = getTextPos(toBoxArray(padding), textAlign, textBaseline, newWidth, target.attribute.height);\n textLabel.setAttribute('maxLineWidth', newWidth - TASKBAR_HOVER_ICON_WIDTH * 2);\n textLabel.setAttribute('x', position.x);\n }\n\n target.updateTextPosition();\n\n state.showTaskBarHover();\n\n reCreateCustomNode(state._gantt, target, taskIndex, sub_task_index);\n state._gantt.scenegraph.refreshRecordLinkNodes(taskIndex, sub_task_index, target, 0);\n}\n"]}
1
+ {"version":3,"sources":["../src/state/state-manager.ts"],"names":[],"mappings":"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","file":"state-manager.js","sourcesContent":["import { clone, cloneDeep, isValid, max } from '@visactor/vutils';\nimport type { Gantt } from '../Gantt';\nimport type { ITaskLink } from '../ts-types';\nimport { InteractionState, GANTT_EVENT_TYPE, DependencyType, TasksShowMode, TaskType } from '../ts-types';\nimport type { Group, FederatedPointerEvent, Polygon, Line, Circle } from '@visactor/vtable/es/vrender';\nimport {\n syncEditCellFromTable,\n syncScrollStateFromTable,\n syncScrollStateToTable,\n syncDragOrderFromTable,\n syncTreeChangeFromTable,\n syncSortFromTable,\n syncTableWidthFromTable\n} from './gantt-table-sync';\nimport {\n clearRecordShowIndex,\n findRecordByTaskKey,\n getDateIndexByX,\n getTaskIndexsByTaskY,\n getTextPos\n} from '../gantt-helper';\nimport { debounce } from '../tools/debounce';\nimport type { GanttTaskBarNode } from '../scenegraph/gantt-node';\nimport { TASKBAR_HOVER_ICON_WIDTH } from '../scenegraph/task-bar';\nimport { Inertia } from '../tools/inertia';\nimport { createDateAtMidnight, getEndDateByTimeUnit, getStartDateByTimeUnit, toBoxArray } from '../tools/util';\nexport class StateManager {\n _gantt: Gantt;\n\n scroll: {\n horizontalBarPos: number;\n verticalBarPos: number;\n };\n fastScrolling: boolean;\n /**\n * Default 默认展示\n * grabing 拖拽中\n * -Resize column 改变列宽\n * -column move 调整列顺序\n * -drag select 拖拽多选\n * Scrolling 滚动中\n */\n interactionState: InteractionState = InteractionState.default;\n\n moveTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n deltaX: number;\n deltaY: number;\n targetStartX: number;\n targetStartY: number;\n startOffsetY: number;\n moving: boolean;\n target: GanttTaskBarNode;\n moveTaskBarXSpeed: number;\n moveTaskBarXInertia: Inertia;\n };\n\n hoverTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n targetStartX: number;\n target: GanttTaskBarNode;\n };\n resizeTaskBar: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n /** 刚开始时 任务条节点的offsetX */\n startOffsetY: number;\n targetStartX: number;\n targetEndX: number;\n target: GanttTaskBarNode;\n resizing: boolean;\n onIconName: string;\n };\n selectedTaskBar: {\n target: GanttTaskBarNode;\n };\n resizeTableWidth: {\n /** x坐标是相对table内坐标 */\n lastX: number;\n resizing: boolean;\n };\n\n selectedDenpendencyLink: {\n link: ITaskLink & { vtable_gantt_linkArrowNode: Polygon; vtable_gantt_linkLineNode: Line };\n };\n creatingDenpendencyLink: {\n /** x坐标是相对table内坐标 */\n startX: number;\n startY: number;\n startOffsetY: number;\n targetStartX: number;\n startClickedPoint: Group;\n creating: boolean;\n firstTaskBarPosition: 'left' | 'right';\n secondTaskBarPosition: 'left' | 'right';\n secondTaskBarNode: GanttTaskBarNode;\n lastHighLightLinkPoint: Group;\n };\n marklineIcon: {\n target: any;\n };\n // 供滚动重置为default使用\n resetInteractionState = debounce(() => {\n this.updateInteractionState(InteractionState.default);\n }, 100);\n constructor(gantt: Gantt) {\n this._gantt = gantt;\n this.scroll = {\n horizontalBarPos: 0,\n verticalBarPos: 0\n };\n this.moveTaskBar = {\n targetStartX: null,\n targetStartY: null,\n deltaX: 0,\n deltaY: 0,\n startOffsetY: null,\n startX: null,\n startY: null,\n moving: false,\n target: null,\n moveTaskBarXSpeed: 0,\n moveTaskBarXInertia: new Inertia()\n };\n\n this.hoverTaskBar = {\n targetStartX: null,\n startX: null,\n target: null\n };\n this.marklineIcon = {\n target: null\n };\n\n this.selectedTaskBar = {\n target: null\n };\n this.resizeTaskBar = {\n startOffsetY: null,\n targetStartX: null,\n targetEndX: null,\n startX: null,\n startY: null,\n target: null,\n resizing: false,\n onIconName: ''\n };\n this.resizeTableWidth = {\n lastX: null,\n resizing: false\n };\n this.selectedDenpendencyLink = {\n link: null\n };\n this.creatingDenpendencyLink = {\n startClickedPoint: null,\n startX: null,\n startY: null,\n startOffsetY: null,\n targetStartX: null,\n creating: false,\n secondTaskBarNode: null\n };\n\n this.updateVerticalScrollBar = this.updateVerticalScrollBar.bind(this);\n this.updateHorizontalScrollBar = this.updateHorizontalScrollBar.bind(this);\n\n syncScrollStateFromTable(this._gantt);\n syncEditCellFromTable(this._gantt);\n syncDragOrderFromTable(this._gantt);\n syncTreeChangeFromTable(this._gantt);\n syncSortFromTable(this._gantt);\n if (this._gantt.options.taskListTable?.tableWidth === 'auto' || this._gantt.taskTableWidth === -1) {\n syncTableWidthFromTable(this._gantt);\n }\n }\n\n setScrollTop(top: number, triggerEvent: boolean = true) {\n // 矫正top值范围\n const totalHeight = this._gantt.getAllRowsHeight();\n top = Math.max(0, Math.min(top, totalHeight - this._gantt.scenegraph.height));\n top = Math.ceil(top);\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n this.scroll.verticalBarPos = top;\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n // 设置scenegraph坐标\n this._gantt.scenegraph.setY(-top);\n\n // 更新scrollbar位置\n const yRatio = top / (totalHeight - this._gantt.scenegraph.height);\n this._gantt.scenegraph.scrollbarComponent.updateVerticalScrollBarPos(yRatio);\n\n if (oldVerticalBarPos !== top && triggerEvent) {\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n }\n get scrollLeft() {\n return this.scroll.horizontalBarPos;\n }\n get scrollTop() {\n return this.scroll.verticalBarPos;\n }\n setScrollLeft(left: number, triggerEvent: boolean = true) {\n // 矫正left值范围\n const totalWidth = this._gantt.getAllDateColsWidth();\n\n left = Math.max(0, Math.min(left, totalWidth - this._gantt.scenegraph.width));\n left = Math.ceil(left);\n // 滚动期间清空选中清空\n // if (left !== this.scroll.horizontalBarPos) {\n // this.updateHoverPos(-1, -1);\n // }\n // this._gantt.stateManager.updateSelectPos(-1, -1);\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = left;\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n\n // 设置scenegraph坐标\n this._gantt.scenegraph.setX(-left);\n\n // 更新scrollbar位置\n const xRatio = left / (totalWidth - this._gantt.scenegraph.width);\n this._gantt.scenegraph.scrollbarComponent.updateHorizontalScrollBarPos(xRatio);\n\n if (oldHorizontalBarPos !== left && triggerEvent) {\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioX: xRatio\n });\n }\n }\n\n updateInteractionState(mode: InteractionState) {\n if (this.interactionState === mode) {\n return;\n }\n const oldState = this.interactionState;\n this.interactionState = mode;\n // 处理mode 更新后逻辑\n if (oldState === InteractionState.scrolling && mode === InteractionState.default) {\n // this.table.scenegraph.stage.disableDirtyBounds();\n // this.table.scenegraph.stage.render();\n // this.table.scenegraph.stage.enableDirtyBounds();\n }\n }\n\n updateVerticalScrollBar(yRatio: number) {\n const totalHeight = this._gantt.getAllRowsHeight();\n const oldVerticalBarPos = this.scroll.verticalBarPos;\n this.scroll.verticalBarPos = Math.ceil(yRatio * (totalHeight - this._gantt.scenegraph.height));\n if (!isValid(this.scroll.verticalBarPos) || isNaN(this.scroll.verticalBarPos)) {\n this.scroll.verticalBarPos = 0;\n }\n this._gantt.scenegraph.setY(-this.scroll.verticalBarPos, yRatio === 1);\n syncScrollStateToTable(this._gantt);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'vertical',\n scrollRatioY: yRatio\n });\n }\n updateHorizontalScrollBar(xRatio: number) {\n const totalWidth = this._gantt.getAllDateColsWidth();\n const oldHorizontalBarPos = this.scroll.horizontalBarPos;\n this.scroll.horizontalBarPos = Math.ceil(xRatio * (totalWidth - this._gantt.scenegraph.width));\n if (!isValid(this.scroll.horizontalBarPos) || isNaN(this.scroll.horizontalBarPos)) {\n this.scroll.horizontalBarPos = 0;\n }\n this._gantt.scenegraph.setX(-this.scroll.horizontalBarPos, xRatio === 1);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.SCROLL, {\n scrollTop: this.scroll.verticalBarPos,\n scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this.table.theme.scrollStyle?.width,\n // scrollWidth: this.table.theme.scrollStyle?.width,\n // viewHeight: this.table.tableNoFrameHeight,\n // viewWidth: this.table.tableNoFrameWidth,\n scrollDirection: 'horizontal',\n scrollRatioY: xRatio\n });\n // this.scroll.horizontalBarPos -= this._gantt.scenegraph.proxy.deltaX;\n // this._gantt.scenegraph.proxy.deltaX = 0;\n\n // this._gantt.fireListeners(TABLE_EVENT_TYPE.SCROLL, {\n // scrollTop: this.scroll.verticalBarPos,\n // scrollLeft: this.scroll.horizontalBarPos,\n // scrollHeight: this._gantt.theme.scrollStyle?.width,\n // scrollWidth: this._gantt.theme.scrollStyle?.width,\n // viewHeight: this._gantt.tableNoFrameHeight,\n // viewWidth: this._gantt.tableNoFrameWidth,\n // scrollDirection: 'horizontal',\n // scrollRatioX: xRatio\n // });\n\n // if (oldHorizontalBarPos !== this.scroll.horizontalBarPos) {\n // this.checkHorizontalScrollBarEnd();\n // }\n }\n\n startMoveTaskBar(target: GanttTaskBarNode, x: number, y: number, offsetY: number) {\n if (target.name === 'task-bar-hover-shadow') {\n target = target.parent;\n }\n this.moveTaskBar.moving = true;\n this.moveTaskBar.target = target;\n this.moveTaskBar.targetStartX = target.attribute.x;\n this.moveTaskBar.targetStartY = target.attribute.y;\n this.moveTaskBar.startX = x;\n this.moveTaskBar.startY = y;\n this.moveTaskBar.startOffsetY = offsetY;\n target.setAttribute('zIndex', 10000);\n }\n\n isMoveingTaskBar() {\n return this.moveTaskBar.moving;\n }\n endMoveTaskBar() {\n if (this.moveTaskBar.moveTaskBarXInertia.isInertiaScrolling()) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n\n const deltaX = this.moveTaskBar.deltaX;\n const deltaY = this.moveTaskBar.deltaY;\n const target = this.moveTaskBar.target;\n if (Math.abs(deltaX) >= 1 || Math.abs(deltaY) >= 1) {\n // 计算原始行号\n const oldRowIndex = target.task_index;\n const taskIndex = target.task_index;\n const sub_task_index = target.sub_task_index;\n const { startDate: oldStartDate, endDate: oldEndDate } = this._gantt.getTaskInfoByTaskListIndex(\n taskIndex,\n sub_task_index\n );\n\n const targetEndY =\n this.moveTaskBar.targetStartY +\n this._gantt.parsedOptions.rowHeight * Math.round(deltaY / this._gantt.parsedOptions.rowHeight);\n const milestoneTaskbarHeight = this._gantt.parsedOptions.taskBarMilestoneStyle.width;\n const testDateX =\n this.moveTaskBar.target.attribute.x +\n (target.record.type === TaskType.MILESTONE ? milestoneTaskbarHeight / 2 : 0);\n const startDateColIndex = getDateIndexByX(\n testDateX - this._gantt.stateManager.scroll.horizontalBarPos,\n this._gantt\n );\n const timelineStartDate =\n this._gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[startDateColIndex];\n if (!timelineStartDate) {\n return;\n }\n const newStartDate = timelineStartDate.startDate;\n // const endDateColIndex = getDateIndexByX(\n // this.moveTaskBar.target.attribute.x +\n // this.moveTaskBar.target.attribute.width -\n // this._gantt.stateManager.scroll.horizontalBarPos,\n // this._gantt\n // );\n // const timelineEndDate = this._gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[endDateColIndex];\n const newEndDate = new Date(\n newStartDate.getTime() +\n (createDateAtMidnight(oldEndDate).getTime() - createDateAtMidnight(oldStartDate).getTime())\n );\n // 判断横向拖动 更新数据的date\n let dateChanged: 'left' | 'right';\n if (createDateAtMidnight(oldStartDate).getTime() !== newStartDate.getTime()) {\n dateChanged = createDateAtMidnight(oldStartDate).getTime() > newStartDate.getTime() ? 'left' : 'right';\n // this._gantt._updateDateToTaskRecord('move', days, taskIndex, sub_task_index);\n this._gantt._updateStartEndDateToTaskRecord(newStartDate, newEndDate, taskIndex, sub_task_index);\n const newRecord = this._gantt.getRecordByIndex(taskIndex, sub_task_index);\n\n if (this._gantt.hasListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE)) {\n this._gantt.fireListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE, {\n startDate: newRecord[this._gantt.parsedOptions.startDateField],\n endDate: newRecord[this._gantt.parsedOptions.endDateField],\n oldStartDate,\n oldEndDate,\n index: taskIndex,\n record: newRecord\n });\n }\n\n const indexs = getTaskIndexsByTaskY(targetEndY, this._gantt);\n const newRowIndex = indexs.task_index;\n // 触发通用拖拽事件\n if (this._gantt.hasListeners(GANTT_EVENT_TYPE.MOVE_END_TASK_BAR)) {\n this._gantt.fireListeners(GANTT_EVENT_TYPE.MOVE_END_TASK_BAR, {\n startDate: newRecord[this._gantt.parsedOptions.startDateField],\n endDate: newRecord[this._gantt.parsedOptions.endDateField],\n oldStartDate,\n oldEndDate,\n oldRowIndex,\n newRowIndex,\n index: taskIndex,\n record: newRecord\n // dateChanged: !!dateChanged,\n // positionChanged: oldRowIndex !== newRowIndex\n });\n }\n } else {\n const newRecord = this._gantt.getRecordByIndex(taskIndex, sub_task_index);\n const indexs = getTaskIndexsByTaskY(targetEndY, this._gantt);\n const newRowIndex = indexs.task_index;\n // 触发通用拖拽事件\n if (this._gantt.hasListeners(GANTT_EVENT_TYPE.MOVE_END_TASK_BAR)) {\n this._gantt.fireListeners(GANTT_EVENT_TYPE.MOVE_END_TASK_BAR, {\n startDate: newRecord[this._gantt.parsedOptions.startDateField],\n endDate: newRecord[this._gantt.parsedOptions.endDateField],\n oldStartDate,\n oldEndDate,\n oldRowIndex,\n newRowIndex,\n index: newRowIndex,\n record: newRecord\n });\n }\n }\n if (\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n const indexs = getTaskIndexsByTaskY(targetEndY, this._gantt);\n this._gantt._dragOrderTaskRecord(\n target.task_index,\n target.sub_task_index,\n indexs.task_index,\n indexs.sub_task_index\n );\n clearRecordShowIndex(this._gantt.records);\n this._gantt.taskListTableInstance.renderWithRecreateCells();\n this._gantt._syncPropsFromTable();\n this._gantt.scenegraph.refreshTaskBarsAndGrid();\n } else {\n // 判断纵向拖动 处理数据的位置\n if (\n this._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Tasks_Separate &&\n Math.abs(Math.round(deltaY / this._gantt.parsedOptions.rowHeight)) >= 1\n ) {\n const indexs = getTaskIndexsByTaskY(targetEndY, this._gantt);\n this._gantt._dragOrderTaskRecord(\n target.task_index,\n target.sub_task_index,\n indexs.task_index,\n indexs.sub_task_index\n );\n if (this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate) {\n this._gantt.taskListTableInstance.renderWithRecreateCells();\n this._gantt.scenegraph.refreshTaskBarsAndGrid();\n } else {\n this._gantt.scenegraph.taskBar.refresh();\n this._gantt.scenegraph.dependencyLink.refresh();\n }\n // target = this._gantt.scenegraph.taskBar.getTaskBarNodeByIndex(indexs.task_index, indexs.sub_task_index);\n } else {\n let newX = startDateColIndex >= 1 ? this._gantt.getDateColsWidth(0, startDateColIndex - 1) : 0;\n if (target.record.type === TaskType.MILESTONE) {\n const milestoneTaskbarHeight = this._gantt.parsedOptions.taskBarMilestoneStyle.width;\n newX -= milestoneTaskbarHeight / 2;\n }\n moveTaskBar(target, newX - (target as Group).attribute.x, targetEndY - (target as Group).attribute.y, this);\n\n // 为了确保拖拽后 保持startDate日期晚的显示在上层不被盖住 这里需要重新排序一下\n if (dateChanged === 'right') {\n let insertAfterNode = target;\n while (\n (insertAfterNode as Group).nextSibling &&\n (insertAfterNode as Group).nextSibling.attribute.y === (target as Group).attribute.y &&\n (insertAfterNode as Group).nextSibling.record[this._gantt.parsedOptions.startDateField] <=\n target.record[this._gantt.parsedOptions.startDateField]\n ) {\n insertAfterNode = (insertAfterNode as Group).nextSibling;\n }\n if (insertAfterNode !== target) {\n (insertAfterNode as Group).parent.insertAfter(target, insertAfterNode);\n }\n } else if (dateChanged === 'left') {\n let insertBeforeNode = target;\n while (\n (insertBeforeNode as Group).previousSibling &&\n (insertBeforeNode as Group).previousSibling.attribute.y === (target as Group).attribute.y &&\n (insertBeforeNode as Group).previousSibling.record[this._gantt.parsedOptions.startDateField] >=\n target.record[this._gantt.parsedOptions.startDateField]\n ) {\n insertBeforeNode = (insertBeforeNode as Group).previousSibling;\n }\n if (insertBeforeNode !== target) {\n (insertBeforeNode as Group).parent.insertBefore(target, insertBeforeNode);\n }\n }\n }\n }\n this._gantt.scenegraph.updateNextFrame();\n }\n this.moveTaskBar.moving = false;\n if (this.selectedTaskBar.target !== target) {\n target.setAttribute('zIndex', 0);\n }\n target.updateTextPosition();\n this.moveTaskBar.target = null;\n this.moveTaskBar.deltaX = 0;\n this.moveTaskBar.deltaY = 0;\n this.moveTaskBar.moveTaskBarXSpeed = 0;\n }\n dealTaskBarMove(e: FederatedPointerEvent) {\n const gantt = this._gantt;\n let target = this.moveTaskBar.target;\n target.setAttribute('zIndex', 10000);\n // const taskIndex = getTaskIndexByY(this.moveTaskBar.startOffsetY, this._gantt);\n const x1 = gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n const y1 = gantt.eventManager.lastDragPointerXYOnWindow.y;\n const y2 = e.y;\n const dy = y2 - y1;\n\n this.moveTaskBar.deltaX += dx;\n this.moveTaskBar.deltaY += dy;\n // target.setAttribute('x', target.attribute.x + dx);\n moveTaskBar(target, dx, dy, this);\n\n // 处理向左拖拽任务条时,整体向左滚动\n if (target.attribute.x <= gantt.stateManager.scrollLeft && dx < 0) {\n if (gantt.parsedOptions.moveTaskBarToExtendDateRange && gantt.stateManager.scrollLeft === 0) {\n this.moveTaskBar.moveTaskBarXInertia?.endInertia();\n //已经在最左边了 扩展滚动区域\n const timeDiff =\n gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[1].startDate.getTime() -\n gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[0].startDate.getTime();\n const { unit: minTimeUnit, startOfWeek } = gantt.parsedOptions.reverseSortedTimelineScales[0];\n gantt.parsedOptions.minDate = getStartDateByTimeUnit(\n new Date(\n gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[0].startDate.getTime() - timeDiff / 2\n ),\n minTimeUnit,\n startOfWeek\n );\n gantt.parsedOptions._minDateTime = gantt.parsedOptions.minDate?.getTime();\n gantt._generateTimeLineDateMap();\n gantt._updateSize();\n // refreshAll 当数据量大时会有性能问题 TODO优化\n gantt.scenegraph.refreshAll();\n target = this.moveTaskBar.target = gantt.scenegraph.taskBar.getTaskBarNodeByIndex(\n this.moveTaskBar.target.task_index,\n this.moveTaskBar.target.sub_task_index\n );\n gantt.scrollLeft = gantt.parsedOptions.timelineColWidth - 1;\n gantt.eventManager.lastDragPointerXYOnWindow.x = e.x;\n if (target.record?.type === 'milestone') {\n moveTaskBar(target, gantt.scrollLeft - target.attribute.x, 0, this);\n } else {\n target.setAttribute('x', gantt.scrollLeft);\n }\n } else {\n this.moveTaskBar.moveTaskBarXSpeed = -gantt.parsedOptions.timelineColWidth / 100;\n\n this.moveTaskBar.moveTaskBarXInertia.startInertia(this.moveTaskBar.moveTaskBarXSpeed, 0, 1);\n this.moveTaskBar.moveTaskBarXInertia.setScrollHandle((dx: number, dy: number) => {\n this.moveTaskBar.deltaX += dx;\n this.moveTaskBar.deltaY += dy;\n moveTaskBar(target, dx, dy, this);\n\n gantt.stateManager.setScrollLeft(target.attribute.x);\n if (gantt.stateManager.scrollLeft === 0) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n });\n }\n } else if (\n target.attribute.x + target.attribute.width >= gantt.stateManager.scrollLeft + gantt.tableNoFrameWidth &&\n dx > 0\n ) {\n if (\n gantt.parsedOptions.moveTaskBarToExtendDateRange &&\n gantt.stateManager.scrollLeft + gantt.tableNoFrameWidth === gantt.getAllDateColsWidth()\n ) {\n this.moveTaskBar.moveTaskBarXInertia?.endInertia();\n //已经在最左边了 扩展滚动区域\n const timelineDates = gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates;\n const timeDiff = timelineDates[1].startDate.getTime() - timelineDates[0].startDate.getTime();\n const { unit: minTimeUnit, startOfWeek, step } = gantt.parsedOptions.reverseSortedTimelineScales[0];\n gantt.parsedOptions.maxDate = getEndDateByTimeUnit(\n gantt.parsedOptions.minDate,\n new Date(timelineDates[timelineDates.length - 1].endDate.getTime() + timeDiff / 2),\n minTimeUnit,\n step\n );\n gantt.parsedOptions._maxDateTime = gantt.parsedOptions.maxDate?.getTime();\n gantt._generateTimeLineDateMap();\n gantt._updateSize();\n // refreshAll 当数据量大时会有性能问题 TODO优化\n gantt.scenegraph.refreshAll();\n target = this.moveTaskBar.target = gantt.scenegraph.taskBar.getTaskBarNodeByIndex(\n this.moveTaskBar.target.task_index,\n this.moveTaskBar.target.sub_task_index\n );\n gantt.scrollLeft += 1;\n gantt.eventManager.lastDragPointerXYOnWindow.x = e.x;\n if (target.record?.type === 'milestone') {\n const newX = gantt.scrollLeft + gantt.tableNoFrameWidth - target.attribute.width;\n moveTaskBar(target, newX - target.attribute.x, 0, this);\n } else {\n target.setAttribute('x', gantt.scrollLeft + gantt.tableNoFrameWidth - target.attribute.width);\n }\n } else {\n // 处理向右拖拽任务条时,整体向右滚动\n this.moveTaskBar.moveTaskBarXSpeed = gantt.parsedOptions.timelineColWidth / 100;\n\n this.moveTaskBar.moveTaskBarXInertia.startInertia(this.moveTaskBar.moveTaskBarXSpeed, 0, 1);\n this.moveTaskBar.moveTaskBarXInertia.setScrollHandle((dx: number, dy: number) => {\n this.moveTaskBar.deltaX += dx;\n this.moveTaskBar.deltaY += dy;\n moveTaskBar(target, dx, dy, this);\n\n gantt.stateManager.setScrollLeft(target.attribute.x + target.attribute.width - gantt.tableNoFrameWidth);\n if (gantt.stateManager.scrollLeft === gantt.getAllDateColsWidth() - gantt.tableNoFrameWidth) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n }\n });\n }\n } else if (this.moveTaskBar.moveTaskBarXInertia.isInertiaScrolling()) {\n this.moveTaskBar.moveTaskBarXInertia.endInertia();\n } else {\n this.moveTaskBar.moveTaskBarXSpeed = 0;\n }\n\n gantt.scenegraph.updateNextFrame();\n }\n //#region 调整拖拽任务条的大小\n startResizeTaskBar(target: Group, x: number, y: number, startOffsetY: number, onIconName: string) {\n // if (target.name === 'task-bar-hover-shadow') {\n // target = target.parent.parent;\n // }\n this.resizeTaskBar.onIconName = onIconName;\n this.resizeTaskBar.resizing = true;\n this.resizeTaskBar.target = target as GanttTaskBarNode;\n this.resizeTaskBar.targetStartX = target.attribute.x;\n this.resizeTaskBar.targetEndX = target.attribute.x + target.attribute.width;\n this.resizeTaskBar.startX = x;\n this.resizeTaskBar.startY = y;\n this.resizeTaskBar.startOffsetY = startOffsetY;\n }\n isResizingTaskBar() {\n return this.resizeTaskBar.resizing;\n }\n endResizeTaskBar(x: number) {\n const direction = this._gantt.stateManager.resizeTaskBar.onIconName;\n const deltaX = x - this.resizeTaskBar.startX;\n if (Math.abs(deltaX) >= 1) {\n // let diff_days =\n // Math.round(deltaX / this._gantt.parsedOptions.timelineColWidth) * this._gantt.getMinScaleUnitToDays();\n\n const colIndex = getDateIndexByX(\n (direction === 'left'\n ? this.resizeTaskBar.target.attribute.x\n : this.resizeTaskBar.target.attribute.x + this.resizeTaskBar.target.attribute.width) -\n this._gantt.stateManager.scroll.horizontalBarPos,\n this._gantt\n );\n const timelineDate = this._gantt.parsedOptions.reverseSortedTimelineScales[0].timelineDates[colIndex];\n if (!timelineDate) {\n return;\n }\n const targetDate = direction === 'left' ? timelineDate.startDate : timelineDate.endDate;\n // diff_days = direction === 'left' ? -diff_days : diff_days;\n\n const taskBarGroup = this.resizeTaskBar.target;\n const clipGroupBox = taskBarGroup.clipGroupBox;\n const rect = taskBarGroup.barRect;\n const progressRect = taskBarGroup.progressRect;\n const textLabel = taskBarGroup.textLabel;\n const taskIndex = taskBarGroup.task_index;\n const sub_task_index = taskBarGroup.sub_task_index;\n\n const {\n taskDays,\n progress,\n startDate: oldStartDate,\n endDate: oldEndDate\n } = this._gantt.getTaskInfoByTaskListIndex(taskIndex, sub_task_index);\n\n let dateChanged = false;\n if (direction === 'left') {\n this._gantt._updateStartDateToTaskRecord(targetDate, taskIndex, sub_task_index);\n targetDate.getTime() !== new Date(oldStartDate).getTime() && (dateChanged = true);\n } else {\n this._gantt._updateEndDateToTaskRecord(targetDate, taskIndex, sub_task_index);\n targetDate.getTime() !== new Date(oldEndDate).getTime() && (dateChanged = true);\n }\n if (\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n this._gantt.taskListTableInstance.renderWithRecreateCells();\n this._gantt._syncPropsFromTable();\n this._gantt.scenegraph.refreshTaskBarsAndGrid();\n } else {\n if (direction === 'left') {\n const newX = colIndex >= 1 ? this._gantt.getDateColsWidth(0, colIndex - 1) : 0;\n taskBarGroup.setAttribute('x', newX);\n taskBarGroup.setAttribute('width', this.resizeTaskBar.targetEndX - newX);\n } else if (direction === 'right') {\n const newEndX = this._gantt.getDateColsWidth(0, colIndex);\n taskBarGroup.setAttribute('width', newEndX - this.resizeTaskBar.targetStartX);\n }\n clipGroupBox.setAttribute('width', taskBarGroup.attribute.width);\n rect?.setAttribute('width', taskBarGroup.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * taskBarGroup.attribute.width);\n if (textLabel) {\n const { textAlign, textBaseline, padding } = this._gantt.parsedOptions.taskBarLabelStyle;\n const position = getTextPos(\n toBoxArray(padding),\n textAlign,\n textBaseline,\n taskBarGroup.attribute.width,\n taskBarGroup.attribute.height\n );\n textLabel.setAttribute('maxLineWidth', taskBarGroup.attribute.width - TASKBAR_HOVER_ICON_WIDTH * 2);\n textLabel.setAttribute('x', position.x);\n }\n this._gantt.scenegraph.refreshRecordLinkNodes(taskIndex, sub_task_index, taskBarGroup, 0); //更新关联线\n this.showTaskBarHover();\n reCreateCustomNode(this._gantt, taskBarGroup, taskIndex, sub_task_index);\n taskBarGroup.setAttribute('zIndex', 0);\n }\n taskBarGroup.updateTextPosition();\n this.resizeTaskBar.resizing = false;\n this.resizeTaskBar.target = null;\n\n if (dateChanged && this._gantt.hasListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE)) {\n const newRecord = this._gantt.getRecordByIndex(taskIndex, sub_task_index);\n this._gantt.fireListeners(GANTT_EVENT_TYPE.CHANGE_DATE_RANGE, {\n startDate: newRecord[this._gantt.parsedOptions.startDateField],\n endDate: newRecord[this._gantt.parsedOptions.endDateField],\n oldStartDate,\n oldEndDate,\n index: taskIndex,\n record: newRecord\n });\n }\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n dealTaskBarResize(e: FederatedPointerEvent) {\n const x1 = this._gantt.eventManager.lastDragPointerXYOnWindow.x;\n const x2 = e.x;\n const dx = x2 - x1;\n // debugger;\n const taskBarGroup = this._gantt.stateManager.resizeTaskBar.target;\n\n // const taskIndex = getTaskIndexByY(this.resizeTaskBar.startOffsetY, this._gantt);\n\n let diffWidth = this._gantt.stateManager.resizeTaskBar.onIconName === 'left' ? -dx : dx;\n const taskBarSize = Math.max(1, taskBarGroup.attribute.width + diffWidth);\n diffWidth = taskBarSize - taskBarGroup.attribute.width;\n\n resizeTaskBar(\n taskBarGroup,\n this._gantt.stateManager.resizeTaskBar.onIconName === 'left' ? -diffWidth : 0,\n\n taskBarSize,\n this\n );\n\n this._gantt.scenegraph.updateNextFrame();\n }\n //#endregion\n //#region 生成关联线的交互处理\n startCreateDependencyLine(target: Group, x: number, y: number, startOffsetY: number, position: 'left' | 'right') {\n // if (target.name === 'task-bar-hover-shadow') {\n // target = target.parent.parent;\n // }\n this.resizeTaskBar.resizing = false; // 关联线创建时,任务条resizing状态重置\n this.creatingDenpendencyLink.creating = true;\n this.creatingDenpendencyLink.startClickedPoint = target;\n this.creatingDenpendencyLink.startX = x;\n this.creatingDenpendencyLink.startY = y;\n this.creatingDenpendencyLink.startOffsetY = startOffsetY;\n this.creatingDenpendencyLink.firstTaskBarPosition = position;\n this.highlightLinkPointNode(target);\n }\n isCreatingDependencyLine() {\n return this.creatingDenpendencyLink.creating;\n }\n endCreateDependencyLine(offsetY: number) {\n const taskKeyField = this._gantt.parsedOptions.taskKeyField;\n // const fromTaskIndex = getTaskIndexByY(this.creatingDenpendencyLink.startOffsetY, this._gantt);\n const fromTaskIndex = this.selectedTaskBar.target.task_index;\n const from_sub_task_id = this.selectedTaskBar.target.sub_task_index;\n // const toTaskIndex = getTaskIndexByY(offsetY, this._gantt);\n const toTaskIndex = this.creatingDenpendencyLink.secondTaskBarNode.task_index;\n const to_sub_task_id = this.creatingDenpendencyLink.secondTaskBarNode.sub_task_index;\n const fromRecord = this._gantt.getRecordByIndex(fromTaskIndex, from_sub_task_id);\n const linkedFromTaskKey = fromRecord[taskKeyField];\n const toRecord = this._gantt.getRecordByIndex(toTaskIndex, to_sub_task_id);\n const linkedToTaskKey = toRecord[taskKeyField];\n const link = {\n linkedFromTaskKey,\n linkedToTaskKey,\n type:\n this.creatingDenpendencyLink.firstTaskBarPosition === 'left' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'left'\n ? DependencyType.StartToStart\n : this.creatingDenpendencyLink.firstTaskBarPosition === 'right' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'left'\n ? DependencyType.FinishToStart\n : this.creatingDenpendencyLink.firstTaskBarPosition === 'right' &&\n this.creatingDenpendencyLink.secondTaskBarPosition === 'right'\n ? DependencyType.FinishToFinish\n : DependencyType.StartToFinish\n };\n this._gantt.addLink(link);\n // const oldRecord = this._gantt.getRecordByIndex(fromTaskIndex);\n this.hideTaskBarSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n this.creatingDenpendencyLink.creating = false;\n return link;\n }\n dealCreateDependencyLine(e: FederatedPointerEvent) {\n const x1 = this.creatingDenpendencyLink.startX;\n const y1 = this.creatingDenpendencyLink.startY;\n const x2 = e.x;\n const y2 = e.y;\n const dx = x2 - x1;\n const dy = y2 - y1;\n // debugger;\n const startClickedPoint = this.creatingDenpendencyLink.startClickedPoint;\n const x = startClickedPoint.attribute.x + startClickedPoint.attribute.width / 2;\n const y = startClickedPoint.attribute.y + startClickedPoint.attribute.height / 2;\n this._gantt.scenegraph.taskBar.updateCreatingDependencyLine(x, y, x + dx, y + dy);\n this._gantt.scenegraph.updateNextFrame();\n //\n }\n //#endregion\n //#region 调整左侧任务列表表格整体的宽度\n startResizeTableWidth(e: MouseEvent) {\n this.resizeTableWidth.resizing = true;\n this.resizeTableWidth.lastX = e.pageX;\n //this.resizeTableWidth.startWidth = this._gantt.tableNoFrameWidth;\n }\n isResizingTableWidth() {\n return this.resizeTableWidth.resizing;\n }\n endResizeTableWidth() {\n this.resizeTableWidth.resizing = false;\n }\n\n dealResizeTableWidth(e: MouseEvent) {\n if (!this.resizeTableWidth.resizing) {\n return;\n }\n const deltaX = e.pageX - this.resizeTableWidth.lastX;\n if (Math.abs(deltaX) >= 1) {\n const startWidth = this._gantt.taskTableWidth;\n let width = startWidth + deltaX;\n const maxWidth = Math.min(\n this._gantt.taskListTableInstance.getAllColsWidth() + this._gantt.parsedOptions.outerFrameStyle.borderLineWidth,\n this._gantt.options.taskListTable.maxTableWidth ?? 100000\n );\n const minWidth = Math.max(\n this._gantt.parsedOptions.outerFrameStyle.borderLineWidth,\n this._gantt.options.taskListTable.minTableWidth ?? 0\n );\n if (deltaX > 0 && width > maxWidth) {\n width = maxWidth;\n }\n if (deltaX < 0 && width < minWidth) {\n width = minWidth;\n }\n this._gantt.taskTableWidth = width;\n this._gantt.element.style.left = this._gantt.taskTableWidth ? `${this._gantt.taskTableWidth}px` : '0px';\n this._gantt.verticalSplitResizeLine.style.left = this._gantt.taskTableWidth\n ? `${this._gantt.taskTableWidth - 7}px`\n : '0px';\n this._gantt._resize();\n this.resizeTableWidth.lastX = e.pageX;\n }\n }\n //#endregion\n\n showTaskBarHover() {\n const target = this._gantt.stateManager.hoverTaskBar.target;\n if (target) {\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.showHoverBar(x, y, width, height, target);\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n hideTaskBarHover(e: FederatedPointerEvent) {\n this._gantt.stateManager.hoverTaskBar.target = null;\n this._gantt.scenegraph.taskBar.hideHoverBar();\n this._gantt.scenegraph.updateNextFrame();\n }\n\n showTaskBarSelectedBorder(target: GanttTaskBarNode) {\n this._gantt.stateManager.selectedTaskBar.target?.setAttribute('zIndex', 0);\n this._gantt.stateManager.selectedTaskBar.target = target as any as GanttTaskBarNode;\n const linkCreatable = this._gantt.parsedOptions.dependencyLinkCreatable;\n target.setAttribute('zIndex', 10000);\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.createSelectedBorder(x, y, width, height, target, linkCreatable);\n this._gantt.scenegraph.updateNextFrame();\n }\n\n hideTaskBarSelectedBorder() {\n this._gantt.stateManager.selectedTaskBar.target?.setAttribute('zIndex', 0);\n this._gantt.stateManager.selectedTaskBar.target = null;\n this._gantt.scenegraph.taskBar.removeSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n showSecondTaskBarSelectedBorder() {\n const target = this._gantt.stateManager.creatingDenpendencyLink.secondTaskBarNode;\n const x = target.attribute.x;\n const y = target.attribute.y;\n const width = target.attribute.width;\n const height = target.attribute.height;\n this._gantt.scenegraph.taskBar.createSelectedBorder(x, y, width, height, target, true);\n this._gantt.scenegraph.updateNextFrame();\n }\n hideSecondTaskBarSelectedBorder() {\n this._gantt.stateManager.creatingDenpendencyLink.secondTaskBarNode = null;\n this._gantt.scenegraph.taskBar.removeSecondSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n showDependencyLinkSelectedLine() {\n const link = this._gantt.stateManager.selectedDenpendencyLink.link;\n this._gantt.scenegraph.dependencyLink.createSelectedLinkLine(link);\n\n const { taskKeyField, dependencyLinks } = this._gantt.parsedOptions;\n const { linkedToTaskKey, linkedFromTaskKey, type } = link;\n let linkFrom_index;\n let linkFrom_sub_task_index;\n let linkTo_index;\n let linkTo_sub_task_index;\n const linkedToTaskRecord = findRecordByTaskKey(this._gantt.records, taskKeyField, linkedToTaskKey);\n const linkedFromTaskRecord = findRecordByTaskKey(this._gantt.records, taskKeyField, linkedFromTaskKey);\n if (\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Inline ||\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Separate ||\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Arrange ||\n this._gantt.parsedOptions.tasksShowMode === TasksShowMode.Sub_Tasks_Compact\n ) {\n linkFrom_index = linkedFromTaskRecord.index[0];\n linkFrom_sub_task_index = linkedFromTaskRecord.index[1];\n linkTo_index = linkedToTaskRecord.index[0];\n linkTo_sub_task_index = linkedToTaskRecord.index[1];\n } else {\n linkFrom_index = this._gantt.getTaskShowIndexByRecordIndex(linkedFromTaskRecord.index);\n linkTo_index = this._gantt.getTaskShowIndexByRecordIndex(linkedToTaskRecord.index);\n }\n const fromTaskNode = this._gantt.scenegraph.taskBar.getTaskBarNodeByIndex(\n linkFrom_index,\n linkFrom_sub_task_index\n ) as GanttTaskBarNode;\n this._gantt.scenegraph.taskBar.createSelectedBorder(\n fromTaskNode.attribute.x,\n fromTaskNode.attribute.y,\n fromTaskNode.attribute.width,\n fromTaskNode.attribute.height,\n fromTaskNode,\n false\n );\n const toTaskNode = this._gantt.scenegraph.taskBar.getTaskBarNodeByIndex(\n linkTo_index,\n linkTo_sub_task_index\n ) as GanttTaskBarNode;\n this._gantt.scenegraph.taskBar.createSelectedBorder(\n toTaskNode.attribute.x,\n toTaskNode.attribute.y,\n toTaskNode.attribute.width,\n toTaskNode.attribute.height,\n toTaskNode,\n false\n );\n\n this._gantt.scenegraph.updateNextFrame();\n }\n hideDependencyLinkSelectedLine() {\n this._gantt.stateManager.selectedDenpendencyLink.link = null;\n this._gantt.scenegraph.dependencyLink.removeSelectedLinkLine();\n this._gantt.scenegraph.taskBar.removeSelectedBorder();\n this._gantt.scenegraph.updateNextFrame();\n }\n highlightLinkPointNode(linkPointGroup: Group) {\n if (linkPointGroup?.children.length > 0) {\n const circle = linkPointGroup.children[0];\n circle.setAttribute('fill', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.fillColor);\n circle.setAttribute('stroke', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.strokeColor);\n circle.setAttribute('radius', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.radius);\n circle.setAttribute('lineWidth', this._gantt.parsedOptions.dependencyLinkLineCreatingPointStyle.strokeWidth);\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n unhighlightLinkPointNode(linkPointGroup: Group) {\n if (linkPointGroup?.children.length > 0) {\n const circle = linkPointGroup.children[0];\n circle.setAttribute('fill', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.fillColor);\n circle.setAttribute('stroke', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeColor);\n circle.setAttribute('radius', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.radius);\n circle.setAttribute('lineWidth', this._gantt.parsedOptions.dependencyLinkLineCreatePointStyle.strokeWidth);\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n showMarklineIconHover() {\n const target = this._gantt.stateManager.marklineIcon.target;\n if (target) {\n const marklineGroup = this._gantt.scenegraph.timelineHeader.showMarklineIcon(target.parent);\n if (marklineGroup && this._gantt.parsedOptions.markLineCreateOptions?.markLineCreationHoverToolTip?.tipContent) {\n this._gantt.scenegraph.showToolTip(marklineGroup);\n }\n this._gantt.scenegraph.updateNextFrame();\n }\n }\n hideMarklineIconHover() {\n this._gantt.scenegraph.timelineHeader.hideMarklineIconHover(this._gantt.stateManager.marklineIcon.target.parent);\n this._gantt.scenegraph.hideToolTip();\n this._gantt.stateManager.marklineIcon.target = null;\n this._gantt.scenegraph.updateNextFrame();\n }\n\n /**\n * 更新项目任务的时间范围\n * 当子任务移动或调整大小时,需要更新父项目任务的时间范围\n * @param taskPath 任务路径\n */\n updateProjectTaskTimes(taskPath: number[]) {\n if (!taskPath || taskPath.length === 0 || !this._gantt || !this._gantt.records) {\n return;\n }\n\n const startDateField = this._gantt.parsedOptions.startDateField;\n const endDateField = this._gantt.parsedOptions.endDateField;\n\n // 从最底层的子任务开始,向上更新所有父任务\n // 先复制一份路径数组,避免修改原数组\n const pathCopy = [...taskPath];\n\n // 逐步向上处理每个父节点\n while (pathCopy.length > 0) {\n // 获取当前层级的父节点路径\n const parentPath = [...pathCopy];\n // 移除最后一个索引,得到父节点路径\n const childIndex = parentPath.pop();\n\n // 使用父节点路径获取父任务记录\n let parentRecord = this._gantt.records;\n const currentPath = [];\n for (const index of parentPath) {\n currentPath.push(index);\n if (!parentRecord[index] || !parentRecord[index].children) {\n console.warn('Invalid parent path:', currentPath);\n return; // 路径无效,直接返回\n }\n parentRecord = parentRecord[index].children;\n }\n\n // 如果parentPath为空,表示已经到了顶层\n const parent = parentPath.length === 0 ? this._gantt.records[childIndex] : parentRecord[childIndex];\n\n // 只处理project类型的父任务\n if (parent && parent.type === TaskType.PROJECT && parent.children && parent.children.length > 0) {\n let earliestStart: Date | null = null;\n let latestEnd: Date | null = null;\n\n // 遍历所有子任务,找出最早的开始时间和最晚的结束时间\n for (const child of parent.children) {\n if (child[startDateField] && child[endDateField]) {\n const childStartDate = new Date(child[startDateField]);\n const childEndDate = new Date(child[endDateField]);\n\n if (!earliestStart || childStartDate < earliestStart) {\n earliestStart = childStartDate;\n }\n\n if (!latestEnd || childEndDate > latestEnd) {\n latestEnd = childEndDate;\n }\n }\n }\n\n // 只有当有有效的时间范围时才更新父任务\n if (earliestStart && latestEnd) {\n // 获取当前父任务的时间范围\n const currentStartDate = parent[startDateField] ? new Date(parent[startDateField]) : null;\n const currentEndDate = parent[endDateField] ? new Date(parent[endDateField]) : null;\n\n // 检查是否需要更新(避免不必要的更新)\n const needUpdate =\n !currentStartDate ||\n !currentEndDate ||\n earliestStart.getTime() !== currentStartDate.getTime() ||\n latestEnd.getTime() !== currentEndDate.getTime();\n\n if (needUpdate) {\n // 获取日期格式\n const dateFormat =\n this._gantt.parsedOptions.dateFormat ??\n this._gantt.parseTimeFormat(parent[startDateField] || parent.children[0][startDateField]);\n\n // 格式化日期\n const formatDateValue = (date: Date) => {\n return this._gantt.formatDate\n ? this._gantt.formatDate(date, dateFormat)\n : date.toISOString().split('T')[0];\n };\n\n // 更新父任务的时间范围\n parent[startDateField] = formatDateValue(earliestStart);\n parent[endDateField] = formatDateValue(latestEnd);\n }\n }\n }\n\n // 继续向上遍历父节点\n pathCopy.pop();\n }\n\n // 更新UI\n this._gantt.scenegraph?.refreshAll();\n }\n}\n\nfunction reCreateCustomNode(gantt: Gantt, taskBarGroup: Group, taskIndex: number, sub_task_index?: number) {\n const taskBarCustomLayout = gantt.parsedOptions.taskBarCustomLayout;\n if (taskBarCustomLayout) {\n let customLayoutObj;\n if (typeof taskBarCustomLayout === 'function') {\n const { startDate, endDate, taskDays, progress, taskRecord } = gantt.getTaskInfoByTaskListIndex(\n taskIndex,\n sub_task_index\n );\n const arg = {\n width: taskBarGroup.attribute.width,\n height: taskBarGroup.attribute.height,\n index: taskIndex,\n startDate,\n endDate,\n taskDays,\n progress,\n taskRecord,\n ganttInstance: gantt\n };\n customLayoutObj = taskBarCustomLayout(arg);\n } else {\n customLayoutObj = taskBarCustomLayout;\n }\n if (customLayoutObj) {\n const rootContainer = customLayoutObj.rootContainer;\n rootContainer.name = 'task-bar-custom-render';\n const barGroup = taskBarGroup.children.find((node: any) => node.name === 'task-bar-group');\n if (barGroup) {\n const oldCustomIndex = barGroup.children.findIndex((node: any) => {\n return node.name === 'task-bar-custom-render';\n });\n const oldCustomNode = barGroup.children[oldCustomIndex] as Group;\n if (oldCustomNode) {\n barGroup.removeChild(oldCustomNode);\n barGroup.insertInto(rootContainer, oldCustomIndex);\n }\n }\n }\n }\n}\n\nfunction moveTaskBar(target: GanttTaskBarNode, dx: number, dy: number, state: StateManager) {\n // const taskIndex = getTaskIndexByY(state.moveTaskBar.startOffsetY, state._gantt);\n const taskIndex = target.task_index;\n const sub_task_index = target.sub_task_index;\n const record = target.record;\n const isMilestone = record.type === TaskType.MILESTONE;\n const oldX = target.attribute.x;\n const oldY = target.attribute.y;\n\n if (dx) {\n target.setAttribute('x', Math.max(0, target.attribute.x + dx));\n }\n if (\n state._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Tasks_Separate &&\n state._gantt.parsedOptions.tasksShowMode !== TasksShowMode.Project_Sub_Tasks_Inline\n ) {\n if (dy) {\n target.setAttribute('y', target.attribute.y + dy);\n }\n } else {\n dy = 0;\n }\n if (isMilestone) {\n target.setAttribute('anchor', [\n target.attribute.x + target.attribute.width / 2,\n target.attribute.y + target.attribute.height / 2\n ]);\n\n if (target.milestoneTextContainer) {\n const deltaX = target.attribute.x - oldX;\n const deltaY = target.attribute.y - oldY;\n\n const currentX = target.milestoneTextContainer.attribute.x;\n const currentY = target.milestoneTextContainer.attribute.y;\n target.milestoneTextContainer.setAttribute('x', currentX + deltaX);\n target.milestoneTextContainer.setAttribute('y', currentY + deltaY);\n }\n }\n\n target.updateTextPosition();\n\n state._gantt.scenegraph.refreshRecordLinkNodes(taskIndex, sub_task_index, target, dy);\n}\n\nfunction resizeTaskBar(target: GanttTaskBarNode, dx: number, newWidth: number, state: StateManager) {\n const progressField = state._gantt.parsedOptions.progressField;\n const clipGroupBox = target.clipGroupBox;\n const rect = target.barRect;\n const progressRect = target.progressRect;\n const textLabel = target.textLabel;\n // const taskIndex = getTaskIndexByY(state.moveTaskBar.startOffsetY, state._gantt);\n const taskIndex = target.task_index;\n const sub_task_index = target.sub_task_index;\n const record = target.record;\n const progress = record[progressField];\n const isMilestone = record.type === TaskType.MILESTONE;\n target.setAttribute('zIndex', 10000);\n if (dx) {\n target.setAttribute('x', target.attribute.x + dx);\n }\n\n if (isMilestone) {\n target.setAttribute('anchor', [\n target.attribute.x + target.attribute.width / 2,\n target.attribute.y + target.attribute.height / 2\n ]);\n }\n\n if (newWidth) {\n target.setAttribute('width', newWidth);\n }\n clipGroupBox.setAttribute('width', target.attribute.width);\n rect?.setAttribute('width', target.attribute.width);\n progressRect?.setAttribute('width', (progress / 100) * target.attribute.width);\n if (textLabel) {\n const { textAlign, textBaseline, padding } = state._gantt.parsedOptions.taskBarLabelStyle;\n const position = getTextPos(toBoxArray(padding), textAlign, textBaseline, newWidth, target.attribute.height);\n textLabel.setAttribute('maxLineWidth', newWidth - TASKBAR_HOVER_ICON_WIDTH * 2);\n textLabel.setAttribute('x', position.x);\n }\n\n target.updateTextPosition();\n\n state.showTaskBarHover();\n\n reCreateCustomNode(state._gantt, target, taskIndex, sub_task_index);\n state._gantt.scenegraph.refreshRecordLinkNodes(taskIndex, sub_task_index, target, 0);\n}\n"]}
@@ -12,5 +12,6 @@ export interface EVENT_TYPES {
12
12
  CONTEXTMENU_DEPENDENCY_LINK: 'contextmenu_dependency_link';
13
13
  CLICK_MARKLINE_CREATE: 'click_markline_create';
14
14
  CLICK_MARKLINE_CONTENT: 'click_markline_content';
15
+ MOVE_END_TASK_BAR: 'move_end_task_bar';
15
16
  }
16
17
  export declare const GANTT_EVENT_TYPE: EVENT_TYPES;
@@ -15,6 +15,7 @@ Object.defineProperty(exports, "__esModule", {
15
15
  CLICK_DEPENDENCY_LINK_POINT: "click_dependency_link_point",
16
16
  CONTEXTMENU_DEPENDENCY_LINK: "contextmenu_dependency_link",
17
17
  CLICK_MARKLINE_CREATE: "click_markline_create",
18
- CLICK_MARKLINE_CONTENT: "click_markline_content"
18
+ CLICK_MARKLINE_CONTENT: "click_markline_content",
19
+ MOVE_END_TASK_BAR: "move_end_task_bar"
19
20
  };
20
21
  //# sourceMappingURL=EVENT_TYPE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts-types/EVENT_TYPE.ts"],"names":[],"mappings":";;;AAqDa,QAAA,gBAAgB,GAAgB;IAC3C,MAAM,EAAE,QAAQ;IAChB,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,oBAAoB,EAAE,sBAAsB;IAC5C,mBAAmB,EAAE,qBAAqB;IAC1C,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;IAC5C,sBAAsB,EAAE,wBAAwB;IAChD,sBAAsB,EAAE,wBAAwB;IAChD,2BAA2B,EAAE,6BAA6B;IAC1D,2BAA2B,EAAE,6BAA6B;IAC1D,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;CAClC,CAAC","file":"EVENT_TYPE.js","sourcesContent":["export interface EVENT_TYPES {\n /**\n * 滚动表格事件\n */\n SCROLL: 'scroll';\n /**\n * 改变日期范围事件\n */\n CHANGE_DATE_RANGE: 'change_date_range';\n /**\n * 点击任务条事件\n */\n CLICK_TASK_BAR: 'click_task_bar';\n /**\n * 右键点击任务条事件\n */\n CONTEXTMENU_TASK_BAR: 'contextmenu_task_bar';\n /**\n * 鼠标移入任务条事件\n */\n MOUSEENTER_TASK_BAR: 'mouseenter_task_bar';\n /**\n * 鼠标移出任务条事件\n */\n MOUSELEAVE_TASK_BAR: 'mouseleave_task_bar';\n /**\n * 创建任务排期事件\n */\n CREATE_TASK_SCHEDULE: 'create_task_schedule';\n\n /**\n * 创建任务依赖关系\n */\n CREATE_DEPENDENCY_LINK: 'create_dependency_link';\n\n /**\n * 删除了任务依赖关系\n */\n DELETE_DEPENDENCY_LINK: 'delete_dependency_link';\n /**\n * 点击依赖关系连接点\n */\n CLICK_DEPENDENCY_LINK_POINT: 'click_dependency_link_point';\n /** 右键点击依赖关系 */\n CONTEXTMENU_DEPENDENCY_LINK: 'contextmenu_dependency_link';\n /** 点击里程碑图标 */\n CLICK_MARKLINE_CREATE: 'click_markline_create';\n /** 点击里程碑内容 */\n CLICK_MARKLINE_CONTENT: 'click_markline_content';\n}\n/**\n * GanttChart event types\n */\nexport const GANTT_EVENT_TYPE: EVENT_TYPES = {\n SCROLL: 'scroll',\n CHANGE_DATE_RANGE: 'change_date_range',\n CLICK_TASK_BAR: 'click_task_bar',\n CONTEXTMENU_TASK_BAR: 'contextmenu_task_bar',\n MOUSEENTER_TASK_BAR: 'mouseenter_task_bar',\n MOUSELEAVE_TASK_BAR: 'mouseleave_task_bar',\n CREATE_TASK_SCHEDULE: 'create_task_schedule',\n CREATE_DEPENDENCY_LINK: 'create_dependency_link',\n DELETE_DEPENDENCY_LINK: 'delete_dependency_link',\n CLICK_DEPENDENCY_LINK_POINT: 'click_dependency_link_point',\n CONTEXTMENU_DEPENDENCY_LINK: 'contextmenu_dependency_link',\n CLICK_MARKLINE_CREATE: 'click_markline_create',\n CLICK_MARKLINE_CONTENT: 'click_markline_content'\n} as EVENT_TYPES;\n"]}
1
+ {"version":3,"sources":["../src/ts-types/EVENT_TYPE.ts"],"names":[],"mappings":";;;AAwDa,QAAA,gBAAgB,GAAgB;IAC3C,MAAM,EAAE,QAAQ;IAChB,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,oBAAoB,EAAE,sBAAsB;IAC5C,mBAAmB,EAAE,qBAAqB;IAC1C,mBAAmB,EAAE,qBAAqB;IAC1C,oBAAoB,EAAE,sBAAsB;IAC5C,sBAAsB,EAAE,wBAAwB;IAChD,sBAAsB,EAAE,wBAAwB;IAChD,2BAA2B,EAAE,6BAA6B;IAC1D,2BAA2B,EAAE,6BAA6B;IAC1D,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,iBAAiB,EAAE,mBAAmB;CACxB,CAAC","file":"EVENT_TYPE.js","sourcesContent":["export interface EVENT_TYPES {\n /**\n * 滚动表格事件\n */\n SCROLL: 'scroll';\n /**\n * 改变日期范围事件\n */\n CHANGE_DATE_RANGE: 'change_date_range';\n /**\n * 点击任务条事件\n */\n CLICK_TASK_BAR: 'click_task_bar';\n /**\n * 右键点击任务条事件\n */\n CONTEXTMENU_TASK_BAR: 'contextmenu_task_bar';\n /**\n * 鼠标移入任务条事件\n */\n MOUSEENTER_TASK_BAR: 'mouseenter_task_bar';\n /**\n * 鼠标移出任务条事件\n */\n MOUSELEAVE_TASK_BAR: 'mouseleave_task_bar';\n /**\n * 创建任务排期事件\n */\n CREATE_TASK_SCHEDULE: 'create_task_schedule';\n\n /**\n * 创建任务依赖关系\n */\n CREATE_DEPENDENCY_LINK: 'create_dependency_link';\n\n /**\n * 删除了任务依赖关系\n */\n DELETE_DEPENDENCY_LINK: 'delete_dependency_link';\n /**\n * 点击依赖关系连接点\n */\n CLICK_DEPENDENCY_LINK_POINT: 'click_dependency_link_point';\n /** 右键点击依赖关系 */\n CONTEXTMENU_DEPENDENCY_LINK: 'contextmenu_dependency_link';\n /** 点击里程碑图标 */\n CLICK_MARKLINE_CREATE: 'click_markline_create';\n /** 点击里程碑内容 */\n CLICK_MARKLINE_CONTENT: 'click_markline_content';\n\n /** 移动任务条结束事件 */\n MOVE_END_TASK_BAR: 'move_end_task_bar';\n}\n/**\n * GanttChart event types\n */\nexport const GANTT_EVENT_TYPE: EVENT_TYPES = {\n SCROLL: 'scroll',\n CHANGE_DATE_RANGE: 'change_date_range',\n CLICK_TASK_BAR: 'click_task_bar',\n CONTEXTMENU_TASK_BAR: 'contextmenu_task_bar',\n MOUSEENTER_TASK_BAR: 'mouseenter_task_bar',\n MOUSELEAVE_TASK_BAR: 'mouseleave_task_bar',\n CREATE_TASK_SCHEDULE: 'create_task_schedule',\n CREATE_DEPENDENCY_LINK: 'create_dependency_link',\n DELETE_DEPENDENCY_LINK: 'delete_dependency_link',\n CLICK_DEPENDENCY_LINK_POINT: 'click_dependency_link_point',\n CONTEXTMENU_DEPENDENCY_LINK: 'contextmenu_dependency_link',\n CLICK_MARKLINE_CREATE: 'click_markline_create',\n CLICK_MARKLINE_CONTENT: 'click_markline_content',\n MOVE_END_TASK_BAR: 'move_end_task_bar'\n} as EVENT_TYPES;\n"]}