@visactor/vtable-gantt 1.20.3 → 1.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/Gantt.d.ts +15 -0
- package/cjs/Gantt.js +47 -7
- package/cjs/Gantt.js.map +1 -1
- package/cjs/event/scroll.js +7 -2
- package/cjs/event/scroll.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/state/gantt-table-sync.js +3 -3
- package/cjs/state/gantt-table-sync.js.map +1 -1
- package/cjs/state/state-manager.d.ts +2 -0
- package/cjs/state/state-manager.js +5 -2
- package/cjs/state/state-manager.js.map +1 -1
- package/cjs/ts-types/EVENT_TYPE.d.ts +1 -0
- package/cjs/ts-types/EVENT_TYPE.js +2 -1
- package/cjs/ts-types/EVENT_TYPE.js.map +1 -1
- package/cjs/ts-types/events.d.ts +3 -0
- package/cjs/ts-types/events.js.map +1 -1
- package/cjs/ts-types/gantt-engine.d.ts +2 -0
- package/cjs/ts-types/gantt-engine.js.map +1 -1
- package/cjs/ts-types/index.d.ts +1 -0
- package/cjs/ts-types/index.js +2 -1
- package/cjs/ts-types/index.js.map +1 -1
- package/cjs/ts-types/zoom-scale.d.ts +32 -0
- package/cjs/ts-types/zoom-scale.js +6 -0
- package/cjs/ts-types/zoom-scale.js.map +1 -0
- package/cjs/zoom-scale/DataZoomIntegration.d.ts +50 -0
- package/cjs/zoom-scale/DataZoomIntegration.js +261 -0
- package/cjs/zoom-scale/DataZoomIntegration.js.map +1 -0
- package/cjs/zoom-scale/ZoomScaleManager.d.ts +55 -0
- package/cjs/zoom-scale/ZoomScaleManager.js +327 -0
- package/cjs/zoom-scale/ZoomScaleManager.js.map +1 -0
- package/cjs/zoom-scale/index.d.ts +4 -0
- package/cjs/zoom-scale/index.js +24 -0
- package/cjs/zoom-scale/index.js.map +1 -0
- package/dist/vtable-gantt.js +2066 -207
- package/dist/vtable-gantt.min.js +2 -2
- package/es/Gantt.d.ts +15 -0
- package/es/Gantt.js +48 -7
- package/es/Gantt.js.map +1 -1
- package/es/event/scroll.js +7 -2
- package/es/event/scroll.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/state/gantt-table-sync.js +2 -4
- package/es/state/gantt-table-sync.js.map +1 -1
- package/es/state/state-manager.d.ts +2 -0
- package/es/state/state-manager.js +5 -2
- package/es/state/state-manager.js.map +1 -1
- package/es/ts-types/EVENT_TYPE.d.ts +1 -0
- package/es/ts-types/EVENT_TYPE.js +2 -1
- package/es/ts-types/EVENT_TYPE.js.map +1 -1
- package/es/ts-types/events.d.ts +3 -0
- package/es/ts-types/events.js.map +1 -1
- package/es/ts-types/gantt-engine.d.ts +2 -0
- package/es/ts-types/gantt-engine.js.map +1 -1
- package/es/ts-types/index.d.ts +1 -0
- package/es/ts-types/index.js +2 -0
- package/es/ts-types/index.js.map +1 -1
- package/es/ts-types/zoom-scale.d.ts +32 -0
- package/es/ts-types/zoom-scale.js +2 -0
- package/es/ts-types/zoom-scale.js.map +1 -0
- package/es/zoom-scale/DataZoomIntegration.d.ts +50 -0
- package/es/zoom-scale/DataZoomIntegration.js +253 -0
- package/es/zoom-scale/DataZoomIntegration.js.map +1 -0
- package/es/zoom-scale/ZoomScaleManager.d.ts +55 -0
- package/es/zoom-scale/ZoomScaleManager.js +321 -0
- package/es/zoom-scale/ZoomScaleManager.js.map +1 -0
- package/es/zoom-scale/index.d.ts +4 -0
- package/es/zoom-scale/index.js +4 -0
- package/es/zoom-scale/index.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { DataZoomIntegration } from "./DataZoomIntegration";
|
|
2
|
+
|
|
3
|
+
import { GANTT_EVENT_TYPE } from "../ts-types/EVENT_TYPE";
|
|
4
|
+
|
|
5
|
+
export class ZoomScaleManager {
|
|
6
|
+
constructor(gantt, config) {
|
|
7
|
+
this.currentLevelIndex = 0, this.levelBoundaries = [], this.globalMinMillisecondsPerPixel = 0,
|
|
8
|
+
this.globalMaxMillisecondsPerPixel = 0, this.dataZoomIntegration = null, this.gantt = gantt;
|
|
9
|
+
const finalConfig = Object.assign({
|
|
10
|
+
enabled: !0,
|
|
11
|
+
levels: []
|
|
12
|
+
}, config);
|
|
13
|
+
if (this.config = finalConfig, this.initializeZoomLimits(), this.sortLevelsByCoarseness(),
|
|
14
|
+
this.calculateGlobalMillisecondsPerPixelRange(), this.calculateLevelBoundaries(),
|
|
15
|
+
this.updateZoomLimits(), this.config.levels.length > 0) {
|
|
16
|
+
const initialMillisecondsPerPixel = this.calculateInitialMillisecondsPerPixel();
|
|
17
|
+
this.initializeWithMillisecondsPerPixel(initialMillisecondsPerPixel);
|
|
18
|
+
}
|
|
19
|
+
this.initializeDataZoomIfNeeded();
|
|
20
|
+
}
|
|
21
|
+
initializeZoomLimits() {
|
|
22
|
+
var _a, _b, _c, _d, _e;
|
|
23
|
+
const existingZoom = this.gantt.parsedOptions.zoom, zoomScaleConfig = this.config;
|
|
24
|
+
this.gantt.parsedOptions.zoom = {
|
|
25
|
+
minMillisecondsPerPixel: null !== (_b = null !== (_a = null == existingZoom ? void 0 : existingZoom.minMillisecondsPerPixel) && void 0 !== _a ? _a : zoomScaleConfig.minMillisecondsPerPixel) && void 0 !== _b ? _b : 1e3,
|
|
26
|
+
maxMillisecondsPerPixel: null !== (_d = null !== (_c = null == existingZoom ? void 0 : existingZoom.maxMillisecondsPerPixel) && void 0 !== _c ? _c : zoomScaleConfig.maxMillisecondsPerPixel) && void 0 !== _d ? _d : 6e6,
|
|
27
|
+
step: null !== (_e = zoomScaleConfig.step) && void 0 !== _e ? _e : .015
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
initializeDataZoomIfNeeded() {
|
|
31
|
+
var _a, _b, _c;
|
|
32
|
+
const dataZoomConfig = this.config.dataZoomAxis;
|
|
33
|
+
if (!(null == dataZoomConfig ? void 0 : dataZoomConfig.enabled)) return;
|
|
34
|
+
const finalConfig = {
|
|
35
|
+
containerId: dataZoomConfig.containerId,
|
|
36
|
+
width: dataZoomConfig.width,
|
|
37
|
+
height: null !== (_a = dataZoomConfig.height) && void 0 !== _a ? _a : 30,
|
|
38
|
+
x: dataZoomConfig.x,
|
|
39
|
+
y: null !== (_b = dataZoomConfig.y) && void 0 !== _b ? _b : 0,
|
|
40
|
+
delayTime: null !== (_c = dataZoomConfig.delayTime) && void 0 !== _c ? _c : 10
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
this.dataZoomIntegration = new DataZoomIntegration(this.gantt, finalConfig);
|
|
44
|
+
} catch (error) {}
|
|
45
|
+
}
|
|
46
|
+
handleTableWidthChange() {
|
|
47
|
+
this.dataZoomIntegration && this.dataZoomIntegration.updateResponsive();
|
|
48
|
+
}
|
|
49
|
+
sortLevelsByCoarseness() {
|
|
50
|
+
this.config.levels.length <= 1 || this.config.levels.sort(((levelA, levelB) => {
|
|
51
|
+
const minUnitA = this.findMinTimeUnit(levelA), minUnitB = this.findMinTimeUnit(levelB), unitMsA = this.getUnitMilliseconds(minUnitA.unit, minUnitA.step);
|
|
52
|
+
return this.getUnitMilliseconds(minUnitB.unit, minUnitB.step) - unitMsA;
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
55
|
+
calculateGlobalMillisecondsPerPixelRange() {
|
|
56
|
+
const levels = this.config.levels;
|
|
57
|
+
if (0 === levels.length) return;
|
|
58
|
+
let maxMinUnit = null, maxMinUnitMs = 0, minMinUnit = null, minMinUnitMs = 1 / 0;
|
|
59
|
+
for (const level of levels) {
|
|
60
|
+
const minUnit = this.findMinTimeUnit(level), unitMs = this.getUnitMilliseconds(minUnit.unit, minUnit.step);
|
|
61
|
+
unitMs > maxMinUnitMs && (maxMinUnitMs = unitMs, maxMinUnit = minUnit), unitMs < minMinUnitMs && (minMinUnitMs = unitMs,
|
|
62
|
+
minMinUnit = minUnit);
|
|
63
|
+
}
|
|
64
|
+
if (maxMinUnit && minMinUnit && (this.globalMinMillisecondsPerPixel = minMinUnitMs / 120,
|
|
65
|
+
this.globalMaxMillisecondsPerPixel = maxMinUnitMs / 150, this.globalMinMillisecondsPerPixel > this.globalMaxMillisecondsPerPixel)) {
|
|
66
|
+
const temp = this.globalMinMillisecondsPerPixel;
|
|
67
|
+
this.globalMinMillisecondsPerPixel = this.globalMaxMillisecondsPerPixel, this.globalMaxMillisecondsPerPixel = temp;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
calculateLevelBoundaries() {
|
|
71
|
+
const levelCount = this.config.levels.length;
|
|
72
|
+
if (0 === levelCount) return;
|
|
73
|
+
this.levelBoundaries = [];
|
|
74
|
+
const idealBoundaries = [];
|
|
75
|
+
idealBoundaries[levelCount] = this.globalMinMillisecondsPerPixel;
|
|
76
|
+
for (let i = levelCount - 1; i >= 1; i--) {
|
|
77
|
+
const currentLevel = this.config.levels[i], currentMinUnit = this.findMinTimeUnit(currentLevel), idealBoundary = this.getUnitMilliseconds(currentMinUnit.unit, currentMinUnit.step) / this.getMinColWidthForUnit(currentMinUnit.unit, currentMinUnit.step);
|
|
78
|
+
idealBoundaries[i] = idealBoundary;
|
|
79
|
+
}
|
|
80
|
+
idealBoundaries[0] = this.globalMaxMillisecondsPerPixel, this.levelBoundaries = [ ...idealBoundaries ];
|
|
81
|
+
for (let i = 1; i < levelCount; i++) {
|
|
82
|
+
if (this.levelBoundaries[i] >= this.levelBoundaries[i - 1]) {
|
|
83
|
+
const prevBoundary = this.levelBoundaries[i - 1], nextBoundary = this.levelBoundaries[i + 1] || this.globalMinMillisecondsPerPixel;
|
|
84
|
+
this.levelBoundaries[i] = (prevBoundary + nextBoundary) / 2;
|
|
85
|
+
}
|
|
86
|
+
this.levelBoundaries[i] = Math.max(this.globalMinMillisecondsPerPixel, Math.min(this.globalMaxMillisecondsPerPixel, this.levelBoundaries[i]));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
updateZoomLimits() {
|
|
90
|
+
this.gantt.parsedOptions.zoom || (this.gantt.parsedOptions.zoom = {}), this.gantt.parsedOptions.zoom.minMillisecondsPerPixel = this.globalMinMillisecondsPerPixel,
|
|
91
|
+
this.gantt.parsedOptions.zoom.maxMillisecondsPerPixel = this.globalMaxMillisecondsPerPixel;
|
|
92
|
+
}
|
|
93
|
+
getGlobalMinMillisecondsPerPixel() {
|
|
94
|
+
return this.globalMinMillisecondsPerPixel;
|
|
95
|
+
}
|
|
96
|
+
getGlobalMaxMillisecondsPerPixel() {
|
|
97
|
+
return this.globalMaxMillisecondsPerPixel;
|
|
98
|
+
}
|
|
99
|
+
calculateInitialMillisecondsPerPixel() {
|
|
100
|
+
return this.globalMinMillisecondsPerPixel + .4 * (this.globalMaxMillisecondsPerPixel - this.globalMinMillisecondsPerPixel);
|
|
101
|
+
}
|
|
102
|
+
initializeWithMillisecondsPerPixel(millisecondsPerPixel) {
|
|
103
|
+
if (0 === this.config.levels.length) return;
|
|
104
|
+
const optimalLevel = this.findOptimalLevel(millisecondsPerPixel);
|
|
105
|
+
this.setInitialLevel(optimalLevel);
|
|
106
|
+
}
|
|
107
|
+
setInitialLevel(levelIndex) {
|
|
108
|
+
if (levelIndex < 0 || levelIndex >= this.config.levels.length) return;
|
|
109
|
+
const levelScales = this.config.levels[levelIndex];
|
|
110
|
+
levelScales && 0 !== levelScales.length && (this.gantt.options.timelineHeader.scales = [ ...levelScales ],
|
|
111
|
+
this.currentLevelIndex = levelIndex);
|
|
112
|
+
}
|
|
113
|
+
findOptimalLevel(millisecondsPerPixel) {
|
|
114
|
+
const clampedMillisecondsPerPixel = Math.max(this.globalMinMillisecondsPerPixel, Math.min(this.globalMaxMillisecondsPerPixel, millisecondsPerPixel));
|
|
115
|
+
for (let i = 0; i < this.levelBoundaries.length - 1; i++) if (clampedMillisecondsPerPixel <= this.levelBoundaries[i] && clampedMillisecondsPerPixel > this.levelBoundaries[i + 1]) return i;
|
|
116
|
+
return this.config.levels.length - 1;
|
|
117
|
+
}
|
|
118
|
+
switchToLevel(levelIndex) {
|
|
119
|
+
if (levelIndex < 0 || levelIndex >= this.config.levels.length) return !1;
|
|
120
|
+
if (this.currentLevelIndex === levelIndex) return !0;
|
|
121
|
+
const levelScales = this.config.levels[levelIndex];
|
|
122
|
+
if (!levelScales || 0 === levelScales.length) return !1;
|
|
123
|
+
try {
|
|
124
|
+
return this.gantt.updateScales([ ...levelScales ]), this.currentLevelIndex = levelIndex,
|
|
125
|
+
this.gantt.recalculateTimeScale(), !0;
|
|
126
|
+
} catch (error) {
|
|
127
|
+
return !1;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
findMinTimeUnit(scales) {
|
|
131
|
+
let minUnit = scales[0], minUnitMs = this.getUnitMilliseconds(minUnit.unit, minUnit.step);
|
|
132
|
+
for (const scale of scales) {
|
|
133
|
+
const unitMs = this.getUnitMilliseconds(scale.unit, scale.step);
|
|
134
|
+
unitMs < minUnitMs && (minUnitMs = unitMs, minUnit = scale);
|
|
135
|
+
}
|
|
136
|
+
return minUnit;
|
|
137
|
+
}
|
|
138
|
+
getUnitMilliseconds(unit, step) {
|
|
139
|
+
const unitMs = {
|
|
140
|
+
second: 1e3,
|
|
141
|
+
minute: 6e4,
|
|
142
|
+
hour: 36e5,
|
|
143
|
+
day: 864e5,
|
|
144
|
+
week: 6048e5,
|
|
145
|
+
month: 2592e6,
|
|
146
|
+
quarter: 7776e6,
|
|
147
|
+
year: 31536e6
|
|
148
|
+
};
|
|
149
|
+
return (unitMs[unit] || unitMs.day) * step;
|
|
150
|
+
}
|
|
151
|
+
getMinColWidthForUnit(unit, step) {
|
|
152
|
+
switch (unit) {
|
|
153
|
+
case "hour":
|
|
154
|
+
return step > 1 ? 120 : 60;
|
|
155
|
+
|
|
156
|
+
case "minute":
|
|
157
|
+
return 80;
|
|
158
|
+
|
|
159
|
+
case "second":
|
|
160
|
+
return 100;
|
|
161
|
+
|
|
162
|
+
default:
|
|
163
|
+
return 60;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
getCurrentLevel() {
|
|
167
|
+
return this.currentLevelIndex;
|
|
168
|
+
}
|
|
169
|
+
getInitialMillisecondsPerPixel() {
|
|
170
|
+
return this.calculateInitialMillisecondsPerPixel();
|
|
171
|
+
}
|
|
172
|
+
getCurrentZoomState() {
|
|
173
|
+
if (0 === this.config.levels.length) return null;
|
|
174
|
+
const currentLevel = this.config.levels[this.currentLevelIndex], minUnit = this.findMinTimeUnit(currentLevel), currentMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel(), currentColWidth = this.getUnitMilliseconds(minUnit.unit, minUnit.step) / currentMillisecondsPerPixel;
|
|
175
|
+
return {
|
|
176
|
+
minUnit: minUnit.unit,
|
|
177
|
+
step: minUnit.step,
|
|
178
|
+
levelNum: this.currentLevelIndex,
|
|
179
|
+
currentColWidth: Math.round(10 * currentColWidth) / 10
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
setZoomPosition(params) {
|
|
183
|
+
if (0 === this.config.levels.length) return !1;
|
|
184
|
+
const {minUnit: minUnit, step: step, levelNum: levelNum, colWidth: colWidth} = params;
|
|
185
|
+
let targetMillisecondsPerPixel, targetLevelIndex = null;
|
|
186
|
+
if (void 0 !== minUnit && void 0 !== step) {
|
|
187
|
+
if (targetLevelIndex = this.findLevelByMinUnit(minUnit, step), null === targetLevelIndex) return !1;
|
|
188
|
+
} else {
|
|
189
|
+
if (void 0 === levelNum) return !1;
|
|
190
|
+
if (levelNum < 0 || levelNum >= this.config.levels.length) return !1;
|
|
191
|
+
targetLevelIndex = levelNum;
|
|
192
|
+
}
|
|
193
|
+
if (void 0 !== colWidth) {
|
|
194
|
+
const targetLevel = this.config.levels[targetLevelIndex], targetMinUnit = this.findMinTimeUnit(targetLevel);
|
|
195
|
+
targetMillisecondsPerPixel = this.getUnitMilliseconds(targetMinUnit.unit, targetMinUnit.step) / colWidth;
|
|
196
|
+
const upperBoundary = this.levelBoundaries[targetLevelIndex], lowerBoundary = this.levelBoundaries[targetLevelIndex + 1];
|
|
197
|
+
(targetMillisecondsPerPixel < lowerBoundary || targetMillisecondsPerPixel > upperBoundary) && (targetMillisecondsPerPixel = (upperBoundary + lowerBoundary) / 2);
|
|
198
|
+
} else {
|
|
199
|
+
targetMillisecondsPerPixel = (this.levelBoundaries[targetLevelIndex] + this.levelBoundaries[targetLevelIndex + 1]) / 2;
|
|
200
|
+
}
|
|
201
|
+
return targetLevelIndex !== this.currentLevelIndex && this.switchToLevel(targetLevelIndex),
|
|
202
|
+
this.gantt.setMillisecondsPerPixel(targetMillisecondsPerPixel), !0;
|
|
203
|
+
}
|
|
204
|
+
findLevelByMinUnit(unit, step) {
|
|
205
|
+
for (let i = 0; i < this.config.levels.length; i++) {
|
|
206
|
+
const level = this.config.levels[i], minUnit = this.findMinTimeUnit(level);
|
|
207
|
+
if (minUnit.unit === unit && minUnit.step === step) return i;
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
zoomIn(factor = 1.1, center = !0, centerX) {
|
|
212
|
+
this.gantt.zoomByFactor(factor, center, centerX);
|
|
213
|
+
}
|
|
214
|
+
zoomOut(factor = .9, center = !0, centerX) {
|
|
215
|
+
this.gantt.zoomByFactor(factor, center, centerX);
|
|
216
|
+
}
|
|
217
|
+
zoomByPercentage(percentage, center = !0, centerX) {
|
|
218
|
+
const currentMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel(), targetMillisecondsPerPixel = currentMillisecondsPerPixel - (this.globalMaxMillisecondsPerPixel - this.globalMinMillisecondsPerPixel) * percentage / 100;
|
|
219
|
+
let centerTimePosition;
|
|
220
|
+
center && this.gantt.scenegraph && (void 0 === centerX && (centerX = this.gantt.scenegraph.width / 2),
|
|
221
|
+
centerTimePosition = (this.gantt.stateManager.scroll.horizontalBarPos + centerX) * currentMillisecondsPerPixel);
|
|
222
|
+
const targetLevel = this.findOptimalLevel(targetMillisecondsPerPixel);
|
|
223
|
+
if (targetLevel !== this.getCurrentLevel() && this.switchToLevel(targetLevel), this.gantt.setMillisecondsPerPixel(targetMillisecondsPerPixel),
|
|
224
|
+
void 0 !== centerTimePosition && void 0 !== centerX) {
|
|
225
|
+
const newScrollLeft = centerTimePosition / this.gantt.getCurrentMillisecondsPerPixel() - centerX;
|
|
226
|
+
this.gantt.stateManager.setScrollLeft(newScrollLeft);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
getDataZoomIntegration() {
|
|
230
|
+
return this.dataZoomIntegration;
|
|
231
|
+
}
|
|
232
|
+
createDataZoomIntegration(config) {
|
|
233
|
+
return this.dataZoomIntegration && this.dataZoomIntegration.destroy(), this.dataZoomIntegration = new DataZoomIntegration(this.gantt, config),
|
|
234
|
+
this.dataZoomIntegration;
|
|
235
|
+
}
|
|
236
|
+
destroyDataZoomIntegration() {
|
|
237
|
+
this.dataZoomIntegration && (this.dataZoomIntegration.destroy(), this.dataZoomIntegration = null);
|
|
238
|
+
}
|
|
239
|
+
updateDataZoomResponsive() {
|
|
240
|
+
this.dataZoomIntegration && this.dataZoomIntegration.updateResponsive();
|
|
241
|
+
}
|
|
242
|
+
recalculateTimeScale() {
|
|
243
|
+
const primaryScale = this.gantt.parsedOptions.reverseSortedTimelineScales[0];
|
|
244
|
+
if (!primaryScale) return;
|
|
245
|
+
let msPerStep;
|
|
246
|
+
switch (primaryScale.unit) {
|
|
247
|
+
case "second":
|
|
248
|
+
msPerStep = 1e3 * primaryScale.step;
|
|
249
|
+
break;
|
|
250
|
+
|
|
251
|
+
case "minute":
|
|
252
|
+
msPerStep = 6e4 * primaryScale.step;
|
|
253
|
+
break;
|
|
254
|
+
|
|
255
|
+
case "hour":
|
|
256
|
+
msPerStep = 36e5 * primaryScale.step;
|
|
257
|
+
break;
|
|
258
|
+
|
|
259
|
+
case "day":
|
|
260
|
+
default:
|
|
261
|
+
msPerStep = 864e5 * primaryScale.step;
|
|
262
|
+
break;
|
|
263
|
+
|
|
264
|
+
case "week":
|
|
265
|
+
msPerStep = 6048e5 * primaryScale.step;
|
|
266
|
+
break;
|
|
267
|
+
|
|
268
|
+
case "month":
|
|
269
|
+
msPerStep = 2592e6 * primaryScale.step;
|
|
270
|
+
break;
|
|
271
|
+
|
|
272
|
+
case "quarter":
|
|
273
|
+
msPerStep = 7776e6 * primaryScale.step;
|
|
274
|
+
break;
|
|
275
|
+
|
|
276
|
+
case "year":
|
|
277
|
+
msPerStep = 31536e6 * primaryScale.step;
|
|
278
|
+
}
|
|
279
|
+
const newTimelineColWidth = msPerStep / this.gantt.getCurrentMillisecondsPerPixel();
|
|
280
|
+
this.gantt.parsedOptions.timelineColWidth = newTimelineColWidth, this.gantt._generateTimeLineDateMap(),
|
|
281
|
+
this.gantt.scenegraph && (this.gantt._updateSize(), this.gantt.scenegraph.refreshAll());
|
|
282
|
+
}
|
|
283
|
+
zoomByFactor(factor, keepCenter = !0, centerX) {
|
|
284
|
+
var _a, _b, _c, _d;
|
|
285
|
+
const minMillisecondsPerPixel = null !== (_b = null === (_a = this.gantt.parsedOptions.zoom) || void 0 === _a ? void 0 : _a.minMillisecondsPerPixel) && void 0 !== _b ? _b : 2e5, maxMillisecondsPerPixel = null !== (_d = null === (_c = this.gantt.parsedOptions.zoom) || void 0 === _c ? void 0 : _c.maxMillisecondsPerPixel) && void 0 !== _d ? _d : 3e6, oldMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel(), oldWidth = this.gantt.parsedOptions.timelineColWidth;
|
|
286
|
+
let centerTimePosition;
|
|
287
|
+
if (keepCenter) {
|
|
288
|
+
void 0 === centerX && (centerX = this.gantt.scenegraph.width / 2);
|
|
289
|
+
const scrollOffsetMs = (this.gantt.stateManager.scroll.horizontalBarPos + centerX) * oldMillisecondsPerPixel;
|
|
290
|
+
centerTimePosition = this.gantt.parsedOptions._minDateTime + scrollOffsetMs;
|
|
291
|
+
}
|
|
292
|
+
const currentMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel();
|
|
293
|
+
let adjustedFactor = factor;
|
|
294
|
+
const zoomRatio = Math.log(currentMillisecondsPerPixel / 144e4) / Math.log(2);
|
|
295
|
+
if (currentMillisecondsPerPixel < 144e4) {
|
|
296
|
+
const enhancement = Math.pow(1.2, -zoomRatio);
|
|
297
|
+
adjustedFactor = Math.pow(factor, enhancement);
|
|
298
|
+
} else {
|
|
299
|
+
const dampening = Math.pow(.9, zoomRatio);
|
|
300
|
+
adjustedFactor = Math.pow(factor, dampening);
|
|
301
|
+
}
|
|
302
|
+
const newMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel() / adjustedFactor, clampedMillisecondsPerPixel = Math.max(minMillisecondsPerPixel, Math.min(maxMillisecondsPerPixel, newMillisecondsPerPixel));
|
|
303
|
+
this.gantt.setMillisecondsPerPixel(clampedMillisecondsPerPixel);
|
|
304
|
+
const targetLevel = this.findOptimalLevel(clampedMillisecondsPerPixel);
|
|
305
|
+
if (targetLevel !== this.getCurrentLevel() ? this.switchToLevel(targetLevel) : this.recalculateTimeScale(),
|
|
306
|
+
keepCenter && void 0 !== centerTimePosition && void 0 !== centerX) {
|
|
307
|
+
const actualMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel(), newScrollLeft = (centerTimePosition - this.gantt.parsedOptions._minDateTime) / actualMillisecondsPerPixel - centerX;
|
|
308
|
+
this.gantt.stateManager.setScrollLeft(newScrollLeft);
|
|
309
|
+
}
|
|
310
|
+
if (this.gantt.hasListeners(GANTT_EVENT_TYPE.ZOOM)) {
|
|
311
|
+
const actualMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel();
|
|
312
|
+
this.gantt.fireListeners(GANTT_EVENT_TYPE.ZOOM, {
|
|
313
|
+
oldWidth: oldWidth,
|
|
314
|
+
newWidth: this.gantt.parsedOptions.timelineColWidth,
|
|
315
|
+
scale: oldMillisecondsPerPixel / actualMillisecondsPerPixel,
|
|
316
|
+
oldMillisecondsPerPixel: oldMillisecondsPerPixel,
|
|
317
|
+
newMillisecondsPerPixel: actualMillisecondsPerPixel
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/zoom-scale/ZoomScaleManager.ts"],"names":[],"mappings":"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","file":"ZoomScaleManager.js","sourcesContent":["import type { Gantt } from '../Gantt';\nimport type { IZoomScale } from '../ts-types/zoom-scale';\nimport type { ITimelineScale } from '../ts-types/gantt-engine';\nimport { DataZoomIntegration, type DataZoomConfig } from './DataZoomIntegration';\nimport { GANTT_EVENT_TYPE } from '../ts-types/EVENT_TYPE';\n\n/**\n * ZoomScale 管理器\n * 负责根据 millisecondsPerPixel 智能选择和切换时间轴级别\n */\nexport class ZoomScaleManager {\n private readonly gantt: Gantt;\n readonly config: IZoomScale;\n private currentLevelIndex: number = 0;\n private levelBoundaries: number[] = [];\n private globalMinMillisecondsPerPixel: number = 0;\n private globalMaxMillisecondsPerPixel: number = 0;\n private dataZoomIntegration: DataZoomIntegration | null = null;\n\n constructor(gantt: Gantt, config: IZoomScale) {\n this.gantt = gantt;\n\n const finalConfig: IZoomScale = {\n enabled: true,\n levels: [],\n ...config\n };\n\n this.config = finalConfig;\n\n // 初始化缩放限制的默认值\n this.initializeZoomLimits();\n\n this.sortLevelsByCoarseness();\n this.calculateGlobalMillisecondsPerPixelRange();\n this.calculateLevelBoundaries();\n this.updateZoomLimits();\n\n if (this.config.levels.length > 0) {\n const initialMillisecondsPerPixel = this.calculateInitialMillisecondsPerPixel();\n this.initializeWithMillisecondsPerPixel(initialMillisecondsPerPixel);\n }\n\n // 如果配置了 DataZoom,自动创建集成\n this.initializeDataZoomIfNeeded();\n }\n\n /**\n * 初始化缩放限制的默认值\n */\n private initializeZoomLimits(): void {\n const existingZoom = this.gantt.parsedOptions.zoom;\n const zoomScaleConfig = this.config;\n this.gantt.parsedOptions.zoom = {\n minMillisecondsPerPixel: existingZoom?.minMillisecondsPerPixel ?? zoomScaleConfig.minMillisecondsPerPixel ?? 1000,\n maxMillisecondsPerPixel:\n existingZoom?.maxMillisecondsPerPixel ?? zoomScaleConfig.maxMillisecondsPerPixel ?? 6000000,\n step: zoomScaleConfig.step ?? 0.015\n };\n }\n\n /**\n * 初始化 DataZoom 集成(如果需要)\n */\n private initializeDataZoomIfNeeded(): void {\n const dataZoomConfig = this.config.dataZoomAxis;\n if (!dataZoomConfig?.enabled) {\n return;\n }\n\n // 设置默认值(width 和 x 会在 DataZoomIntegration 中自动处理)\n const finalConfig: DataZoomConfig = {\n containerId: dataZoomConfig.containerId, // 可选,让 DataZoomIntegration 自动处理\n width: dataZoomConfig.width, // 如果未设置,会自动使用容器宽度\n height: dataZoomConfig.height ?? 30,\n x: dataZoomConfig.x, // 如果未设置,会自动与容器左侧对齐\n y: dataZoomConfig.y ?? 0, // 默认贴着容器底部\n delayTime: dataZoomConfig.delayTime ?? 10\n };\n\n try {\n this.dataZoomIntegration = new DataZoomIntegration(this.gantt, finalConfig);\n } catch (error) {\n console.error('ZoomScaleManager: 创建 DataZoom 集成失败', error);\n }\n }\n\n /**\n * 处理表头宽度变化\n * 当左侧表头宽度被拖拽改变时调用此方法\n */\n handleTableWidthChange(): void {\n if (this.dataZoomIntegration) {\n this.dataZoomIntegration.updateResponsive();\n }\n }\n\n /**\n * 对级别进行排序:从粗糙到精细\n */\n private sortLevelsByCoarseness(): void {\n if (this.config.levels.length <= 1) {\n return;\n }\n\n this.config.levels.sort((levelA, levelB) => {\n const minUnitA = this.findMinTimeUnit(levelA);\n const minUnitB = this.findMinTimeUnit(levelB);\n\n const unitMsA = this.getUnitMilliseconds(minUnitA.unit, minUnitA.step);\n const unitMsB = this.getUnitMilliseconds(minUnitB.unit, minUnitB.step);\n\n return unitMsB - unitMsA;\n });\n }\n\n /**\n * 计算全局 millisecondsPerPixel 范围\n */\n private calculateGlobalMillisecondsPerPixelRange(): void {\n const levels = this.config.levels;\n if (levels.length === 0) {\n return;\n }\n\n const maxZoomInColumnWidth = 120;\n const maxZoomOutColumnWidth = 150;\n\n let maxMinUnit: ITimelineScale | null = null;\n let maxMinUnitMs = 0;\n let minMinUnit: ITimelineScale | null = null;\n let minMinUnitMs = Infinity;\n\n for (const level of levels) {\n const minUnit = this.findMinTimeUnit(level);\n const unitMs = this.getUnitMilliseconds(minUnit.unit, minUnit.step);\n\n if (unitMs > maxMinUnitMs) {\n maxMinUnitMs = unitMs;\n maxMinUnit = minUnit;\n }\n\n if (unitMs < minMinUnitMs) {\n minMinUnitMs = unitMs;\n minMinUnit = minUnit;\n }\n }\n\n if (!maxMinUnit || !minMinUnit) {\n console.error('ZoomScale: 无法找到有效的时间单位');\n return;\n }\n\n this.globalMinMillisecondsPerPixel = minMinUnitMs / maxZoomInColumnWidth;\n this.globalMaxMillisecondsPerPixel = maxMinUnitMs / maxZoomOutColumnWidth;\n\n // 确保 minMillisecondsPerPixel < maxMillisecondsPerPixel\n if (this.globalMinMillisecondsPerPixel > this.globalMaxMillisecondsPerPixel) {\n const temp = this.globalMinMillisecondsPerPixel;\n this.globalMinMillisecondsPerPixel = this.globalMaxMillisecondsPerPixel;\n this.globalMaxMillisecondsPerPixel = temp;\n }\n }\n\n /**\n * 计算级别边界\n */\n private calculateLevelBoundaries(): void {\n const levelCount = this.config.levels.length;\n if (levelCount === 0) {\n return;\n }\n\n this.levelBoundaries = [];\n const idealBoundaries: number[] = [];\n\n idealBoundaries[levelCount] = this.globalMinMillisecondsPerPixel;\n\n // 从精细级别开始计算理想边界\n for (let i = levelCount - 1; i >= 1; i--) {\n const currentLevel = this.config.levels[i];\n const currentMinUnit = this.findMinTimeUnit(currentLevel);\n const currentUnitMs = this.getUnitMilliseconds(currentMinUnit.unit, currentMinUnit.step);\n const minColWidth = this.getMinColWidthForUnit(currentMinUnit.unit, currentMinUnit.step);\n const idealBoundary = currentUnitMs / minColWidth;\n idealBoundaries[i] = idealBoundary;\n }\n\n idealBoundaries[0] = this.globalMaxMillisecondsPerPixel;\n this.levelBoundaries = [...idealBoundaries];\n\n // 调整边界确保递减顺序\n for (let i = 1; i < levelCount; i++) {\n if (this.levelBoundaries[i] >= this.levelBoundaries[i - 1]) {\n const prevBoundary = this.levelBoundaries[i - 1];\n const nextBoundary = this.levelBoundaries[i + 1] || this.globalMinMillisecondsPerPixel;\n this.levelBoundaries[i] = (prevBoundary + nextBoundary) / 2;\n }\n\n this.levelBoundaries[i] = Math.max(\n this.globalMinMillisecondsPerPixel,\n Math.min(this.globalMaxMillisecondsPerPixel, this.levelBoundaries[i])\n );\n }\n }\n\n updateZoomLimits(): void {\n if (!this.gantt.parsedOptions.zoom) {\n this.gantt.parsedOptions.zoom = {};\n }\n this.gantt.parsedOptions.zoom.minMillisecondsPerPixel = this.globalMinMillisecondsPerPixel;\n this.gantt.parsedOptions.zoom.maxMillisecondsPerPixel = this.globalMaxMillisecondsPerPixel;\n }\n\n /**\n * 获取全局最小 millisecondsPerPixel\n */\n getGlobalMinMillisecondsPerPixel(): number {\n return this.globalMinMillisecondsPerPixel;\n }\n\n /**\n * 获取全局最大 millisecondsPerPixel\n */\n getGlobalMaxMillisecondsPerPixel(): number {\n return this.globalMaxMillisecondsPerPixel;\n }\n\n /**\n * 计算初始的 millisecondsPerPixel 值\n * 选择全局范围内 40% 的位置作为初始缩放级别\n */\n private calculateInitialMillisecondsPerPixel(): number {\n return (\n this.globalMinMillisecondsPerPixel +\n (this.globalMaxMillisecondsPerPixel - this.globalMinMillisecondsPerPixel) * 0.4\n );\n }\n\n private initializeWithMillisecondsPerPixel(millisecondsPerPixel: number): void {\n if (this.config.levels.length === 0) {\n return;\n }\n const optimalLevel = this.findOptimalLevel(millisecondsPerPixel);\n this.setInitialLevel(optimalLevel);\n }\n\n private setInitialLevel(levelIndex: number): void {\n if (levelIndex < 0 || levelIndex >= this.config.levels.length) {\n console.error(`ZoomScale: 无效的初始级别索引 ${levelIndex}`);\n return;\n }\n\n const levelScales = this.config.levels[levelIndex];\n if (!levelScales || levelScales.length === 0) {\n console.error(`ZoomScale: 初始级别 ${levelIndex} 没有配置 scales`);\n return;\n }\n\n this.gantt.options.timelineHeader.scales = [...levelScales];\n this.currentLevelIndex = levelIndex;\n }\n\n /**\n * 根据 millisecondsPerPixel 找到最合适的级别\n */\n findOptimalLevel(millisecondsPerPixel: number): number {\n const clampedMillisecondsPerPixel = Math.max(\n this.globalMinMillisecondsPerPixel,\n Math.min(this.globalMaxMillisecondsPerPixel, millisecondsPerPixel)\n );\n\n for (let i = 0; i < this.levelBoundaries.length - 1; i++) {\n if (\n clampedMillisecondsPerPixel <= this.levelBoundaries[i] &&\n clampedMillisecondsPerPixel > this.levelBoundaries[i + 1]\n ) {\n return i;\n }\n }\n\n return this.config.levels.length - 1;\n }\n\n /**\n * 切换到指定级别\n */\n switchToLevel(levelIndex: number): boolean {\n if (levelIndex < 0 || levelIndex >= this.config.levels.length) {\n console.error(`ZoomScale: 无效的级别索引 ${levelIndex}`);\n return false;\n }\n\n if (this.currentLevelIndex === levelIndex) {\n return true;\n }\n\n const levelScales = this.config.levels[levelIndex];\n if (!levelScales || levelScales.length === 0) {\n console.error(`ZoomScale: 级别 ${levelIndex} 没有配置 scales`);\n return false;\n }\n\n try {\n this.gantt.updateScales([...levelScales]);\n this.currentLevelIndex = levelIndex;\n this.gantt.recalculateTimeScale();\n return true;\n } catch (error) {\n console.error('ZoomScale: 切换级别时发生错误', error);\n return false;\n }\n }\n\n findMinTimeUnit(scales: ITimelineScale[]): ITimelineScale {\n let minUnit = scales[0];\n let minUnitMs = this.getUnitMilliseconds(minUnit.unit, minUnit.step);\n\n for (const scale of scales) {\n const unitMs = this.getUnitMilliseconds(scale.unit, scale.step);\n if (unitMs < minUnitMs) {\n minUnitMs = unitMs;\n minUnit = scale;\n }\n }\n\n return minUnit;\n }\n\n private getUnitMilliseconds(unit: string, step: number): number {\n const unitMs: Record<string, number> = {\n second: 1000,\n minute: 60 * 1000,\n hour: 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000,\n week: 7 * 24 * 60 * 60 * 1000,\n month: 30 * 24 * 60 * 60 * 1000,\n quarter: 90 * 24 * 60 * 60 * 1000,\n year: 365 * 24 * 60 * 60 * 1000\n };\n\n return (unitMs[unit] || unitMs.day) * step;\n }\n\n private getMinColWidthForUnit(unit: string, step: number): number {\n switch (unit) {\n case 'hour':\n return step > 1 ? 120 : 60;\n case 'minute':\n return 80;\n case 'second':\n return 100;\n case 'day':\n case 'week':\n case 'month':\n case 'quarter':\n case 'year':\n default:\n return 60;\n }\n }\n\n getCurrentLevel(): number {\n return this.currentLevelIndex;\n }\n\n getInitialMillisecondsPerPixel(): number {\n return this.calculateInitialMillisecondsPerPixel();\n }\n\n /**\n * 获取当前缩放位置的层级状态\n */\n getCurrentZoomState() {\n if (this.config.levels.length === 0) {\n return null;\n }\n\n const currentLevel = this.config.levels[this.currentLevelIndex];\n const minUnit = this.findMinTimeUnit(currentLevel);\n const currentMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel();\n const unitMs = this.getUnitMilliseconds(minUnit.unit, minUnit.step);\n const currentColWidth = unitMs / currentMillisecondsPerPixel;\n\n return {\n minUnit: minUnit.unit,\n step: minUnit.step,\n levelNum: this.currentLevelIndex,\n currentColWidth: Math.round(currentColWidth * 10) / 10\n };\n }\n\n /**\n * 设置当前缩放位置\n */\n setZoomPosition(params: { minUnit?: string; step?: number; levelNum?: number; colWidth?: number }): boolean {\n if (this.config.levels.length === 0) {\n return false;\n }\n\n const { minUnit, step, levelNum, colWidth } = params;\n\n // 确定目标级别\n let targetLevelIndex: number | null = null;\n\n // 模式1:通过 minUnit + step 确定级别\n if (minUnit !== undefined && step !== undefined) {\n targetLevelIndex = this.findLevelByMinUnit(minUnit, step);\n if (targetLevelIndex === null) {\n console.warn(`ZoomScale: 找不到 ${minUnit}*${step} 对应的级别`);\n return false;\n }\n }\n // 模式2:通过 levelNum 确定级别\n else if (levelNum !== undefined) {\n if (levelNum < 0 || levelNum >= this.config.levels.length) {\n console.warn(`ZoomScale: 无效的级别索引 ${levelNum}`);\n return false;\n }\n targetLevelIndex = levelNum;\n } else {\n console.warn('ZoomScale: 必须提供 (minUnit+step) 或 levelNum');\n return false;\n }\n\n let targetMillisecondsPerPixel: number;\n\n if (colWidth !== undefined) {\n const targetLevel = this.config.levels[targetLevelIndex];\n const targetMinUnit = this.findMinTimeUnit(targetLevel);\n const unitMs = this.getUnitMilliseconds(targetMinUnit.unit, targetMinUnit.step);\n targetMillisecondsPerPixel = unitMs / colWidth;\n\n const upperBoundary = this.levelBoundaries[targetLevelIndex];\n const lowerBoundary = this.levelBoundaries[targetLevelIndex + 1];\n\n if (targetMillisecondsPerPixel < lowerBoundary || targetMillisecondsPerPixel > upperBoundary) {\n targetMillisecondsPerPixel = (upperBoundary + lowerBoundary) / 2;\n }\n } else {\n const upperBoundary = this.levelBoundaries[targetLevelIndex];\n const lowerBoundary = this.levelBoundaries[targetLevelIndex + 1];\n targetMillisecondsPerPixel = (upperBoundary + lowerBoundary) / 2;\n }\n\n if (targetLevelIndex !== this.currentLevelIndex) {\n this.switchToLevel(targetLevelIndex);\n }\n\n this.gantt.setMillisecondsPerPixel(targetMillisecondsPerPixel);\n\n return true;\n }\n\n /**\n * 根据 minUnit 和 step 查找对应的级别索引\n */\n private findLevelByMinUnit(unit: string, step: number): number | null {\n for (let i = 0; i < this.config.levels.length; i++) {\n const level = this.config.levels[i];\n const minUnit = this.findMinTimeUnit(level);\n if (minUnit.unit === unit && minUnit.step === step) {\n return i;\n }\n }\n return null;\n }\n\n /**\n * 放大时间轴\n * @param factor 缩放因子,大于1表示放大\n * @param center 是否保持视图中心不变\n * @param centerX 缩放中心点X坐标\n */\n zoomIn(factor: number = 1.1, center: boolean = true, centerX?: number): void {\n this.gantt.zoomByFactor(factor, center, centerX);\n }\n\n /**\n * 缩小时间轴\n * @param factor 缩放因子,小于1表示缩小\n * @param center 是否保持视图中心不变\n * @param centerX 缩放中心点X坐标\n */\n zoomOut(factor: number = 0.9, center: boolean = true, centerX?: number): void {\n this.gantt.zoomByFactor(factor, center, centerX);\n }\n\n /**\n * 基于全局范围的百分比缩放\n * @param percentage 缩放百分比 (0-100),正数表示放大,负数表示缩小\n * @param center 是否保持视图中心不变\n * @param centerX 缩放中心点X坐标\n */\n zoomByPercentage(percentage: number, center: boolean = true, centerX?: number): void {\n const currentMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel();\n const totalRange = this.globalMaxMillisecondsPerPixel - this.globalMinMillisecondsPerPixel;\n const deltaMillisecondsPerPixel = (totalRange * percentage) / 100;\n\n const targetMillisecondsPerPixel = currentMillisecondsPerPixel - deltaMillisecondsPerPixel;\n\n let centerTimePosition: number | undefined;\n if (center && this.gantt.scenegraph) {\n if (centerX === undefined) {\n centerX = this.gantt.scenegraph.width / 2;\n }\n centerTimePosition = (this.gantt.stateManager.scroll.horizontalBarPos + centerX) * currentMillisecondsPerPixel;\n }\n\n const targetLevel = this.findOptimalLevel(targetMillisecondsPerPixel);\n const currentLevel = this.getCurrentLevel();\n\n if (targetLevel !== currentLevel) {\n this.switchToLevel(targetLevel);\n }\n\n this.gantt.setMillisecondsPerPixel(targetMillisecondsPerPixel);\n\n if (centerTimePosition !== undefined && centerX !== undefined) {\n const newScrollLeft = centerTimePosition / this.gantt.getCurrentMillisecondsPerPixel() - centerX;\n this.gantt.stateManager.setScrollLeft(newScrollLeft);\n }\n }\n\n /**\n * 获取 DataZoom 集成实例\n * @returns DataZoom 集成实例,如果未启用则返回 null\n */\n getDataZoomIntegration(): DataZoomIntegration | null {\n return this.dataZoomIntegration;\n }\n\n /**\n * 创建 DataZoom 集成\n * @param config DataZoom 配置\n * @returns DataZoom 集成实例\n */\n createDataZoomIntegration(config: DataZoomConfig): DataZoomIntegration {\n // 如果已经有通过配置创建的实例,先销毁它\n if (this.dataZoomIntegration) {\n console.warn('ZoomScaleManager: 已存在 DataZoom 集成实例,将被替换');\n this.dataZoomIntegration.destroy();\n }\n\n this.dataZoomIntegration = new DataZoomIntegration(this.gantt, config);\n return this.dataZoomIntegration;\n }\n\n /**\n * 销毁 DataZoom 集成\n */\n destroyDataZoomIntegration(): void {\n if (this.dataZoomIntegration) {\n this.dataZoomIntegration.destroy();\n this.dataZoomIntegration = null;\n }\n }\n\n /**\n * 响应式更新 DataZoom\n * 当 Gantt 容器大小发生变化时调用\n */\n updateDataZoomResponsive(): void {\n if (this.dataZoomIntegration) {\n this.dataZoomIntegration.updateResponsive();\n }\n }\n\n /**\n * 重新计算时间相关的尺寸参数\n * 用于根据当前 millisecondsPerPixel 重新计算 timelineColWidth\n * (从 Gantt.ts 移动到这里)\n */\n recalculateTimeScale(): void {\n // 获取当前的主时间刻度\n const primaryScale = this.gantt.parsedOptions.reverseSortedTimelineScales[0];\n if (!primaryScale) {\n return;\n }\n\n // 根据当前 scale 的 unit 和 step 计算每个单元格应该占用的毫秒数\n let msPerStep: number;\n switch (primaryScale.unit as string) {\n case 'second':\n msPerStep = 1000 * primaryScale.step;\n break;\n case 'minute':\n msPerStep = 60 * 1000 * primaryScale.step;\n break;\n case 'hour':\n msPerStep = 60 * 60 * 1000 * primaryScale.step;\n break;\n case 'day':\n msPerStep = 24 * 60 * 60 * 1000 * primaryScale.step;\n break;\n case 'week':\n msPerStep = 7 * 24 * 60 * 60 * 1000 * primaryScale.step;\n break;\n case 'month':\n msPerStep = 30 * 24 * 60 * 60 * 1000 * primaryScale.step;\n break;\n case 'quarter':\n msPerStep = 90 * 24 * 60 * 60 * 1000 * primaryScale.step;\n break;\n case 'year':\n msPerStep = 365 * 24 * 60 * 60 * 1000 * primaryScale.step;\n break;\n default:\n msPerStep = 24 * 60 * 60 * 1000 * primaryScale.step;\n }\n const newTimelineColWidth = msPerStep / this.gantt.getCurrentMillisecondsPerPixel();\n\n this.gantt.parsedOptions.timelineColWidth = newTimelineColWidth;\n\n // 重新生成时间线日期映射\n this.gantt._generateTimeLineDateMap();\n\n // 更新尺寸和重新渲染\n if (this.gantt.scenegraph) {\n this.gantt._updateSize();\n this.gantt.scenegraph.refreshAll();\n }\n }\n\n /**\n * 缩放方法,用于滚轮和双指缩放\n * (从 Gantt.ts 移动到这里)\n * @param factor 缩放因子,大于1表示放大\n * @param keepCenter 是否保持视图中心不变\n * @param centerX 缩放中心点X坐标\n */\n zoomByFactor(factor: number, keepCenter: boolean = true, centerX?: number): void {\n const minMillisecondsPerPixel = this.gantt.parsedOptions.zoom?.minMillisecondsPerPixel ?? 200000;\n const maxMillisecondsPerPixel = this.gantt.parsedOptions.zoom?.maxMillisecondsPerPixel ?? 3000000;\n\n const oldMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel();\n const oldWidth = this.gantt.parsedOptions.timelineColWidth;\n\n // 在级别切换前先计算中心时间位置\n let centerTimePosition: number | undefined;\n if (keepCenter) {\n if (centerX === undefined) {\n centerX = this.gantt.scenegraph.width / 2;\n }\n // 计算中心点对应的绝对时间位置\n const scrollOffsetMs = (this.gantt.stateManager.scroll.horizontalBarPos + centerX) * oldMillisecondsPerPixel;\n centerTimePosition = this.gantt.parsedOptions._minDateTime + scrollOffsetMs;\n }\n\n const currentMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel();\n let adjustedFactor = factor;\n\n const baseMillisecondsPerPixel = 1440000;\n const zoomRatio = Math.log(currentMillisecondsPerPixel / baseMillisecondsPerPixel) / Math.log(2);\n\n if (currentMillisecondsPerPixel < baseMillisecondsPerPixel) {\n const enhancement = Math.pow(1.2, -zoomRatio);\n adjustedFactor = Math.pow(factor, enhancement);\n } else {\n const dampening = Math.pow(0.9, zoomRatio);\n adjustedFactor = Math.pow(factor, dampening);\n }\n\n const newMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel() / adjustedFactor;\n const clampedMillisecondsPerPixel = Math.max(\n minMillisecondsPerPixel,\n Math.min(maxMillisecondsPerPixel, newMillisecondsPerPixel)\n );\n this.gantt.setMillisecondsPerPixel(clampedMillisecondsPerPixel);\n\n const targetLevel = this.findOptimalLevel(clampedMillisecondsPerPixel);\n const currentLevel = this.getCurrentLevel();\n\n if (targetLevel !== currentLevel) {\n this.switchToLevel(targetLevel);\n } else {\n this.recalculateTimeScale();\n }\n\n // 在级别切换和重新计算后再调整视图中心\n if (keepCenter && centerTimePosition !== undefined && centerX !== undefined) {\n const actualMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel();\n // 计算中心时间相对于新minDate的偏移量\n const newMinDateTime = this.gantt.parsedOptions._minDateTime;\n const timeOffsetFromNewMin = centerTimePosition - newMinDateTime;\n const newScrollLeft = timeOffsetFromNewMin / actualMillisecondsPerPixel - centerX;\n this.gantt.stateManager.setScrollLeft(newScrollLeft);\n }\n\n // 触发缩放事件\n if (this.gantt.hasListeners(GANTT_EVENT_TYPE.ZOOM)) {\n const actualMillisecondsPerPixel = this.gantt.getCurrentMillisecondsPerPixel();\n this.gantt.fireListeners(GANTT_EVENT_TYPE.ZOOM, {\n oldWidth,\n newWidth: this.gantt.parsedOptions.timelineColWidth,\n scale: oldMillisecondsPerPixel / actualMillisecondsPerPixel,\n oldMillisecondsPerPixel,\n newMillisecondsPerPixel: actualMillisecondsPerPixel\n });\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ZoomScaleManager } from './ZoomScaleManager';
|
|
2
|
+
export { DataZoomIntegration } from './DataZoomIntegration';
|
|
3
|
+
export type { DataZoomConfig, DataZoomLimits } from './DataZoomIntegration';
|
|
4
|
+
export type { IZoomScale, IDataZoomAxisConfig, ILevelThreshold } from '../ts-types/zoom-scale';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/zoom-scale/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC","file":"index.js","sourcesContent":["export { ZoomScaleManager } from './ZoomScaleManager';\nexport { DataZoomIntegration } from './DataZoomIntegration';\nexport type { DataZoomConfig, DataZoomLimits } from './DataZoomIntegration';\nexport type { IZoomScale, IDataZoomAxisConfig, ILevelThreshold } from '../ts-types/zoom-scale';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vtable-gantt",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.0",
|
|
4
4
|
"description": "canvas table width high performance",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"vtable-gantt",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"@visactor/vscale": "~0.18.1",
|
|
42
42
|
"@visactor/vdataset": "~0.18.1",
|
|
43
43
|
"cssfontparser": "^1.2.1",
|
|
44
|
-
"@visactor/vtable": "1.
|
|
45
|
-
"@visactor/vtable-editors": "1.
|
|
44
|
+
"@visactor/vtable": "1.21.0",
|
|
45
|
+
"@visactor/vtable-editors": "1.21.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"cross-env": "^7.0.3",
|
|
@@ -93,9 +93,9 @@
|
|
|
93
93
|
"d3-hierarchy": "^3.1.1",
|
|
94
94
|
"@resvg/resvg-js": "^2.5.0",
|
|
95
95
|
"pikaday": "1.8.2",
|
|
96
|
-
"@internal/
|
|
96
|
+
"@internal/eslint-config": "0.0.1",
|
|
97
97
|
"@internal/ts-config": "0.0.1",
|
|
98
|
-
"@internal/
|
|
98
|
+
"@internal/bundler": "0.0.1"
|
|
99
99
|
},
|
|
100
100
|
"unpkg": "latest",
|
|
101
101
|
"unpkgFiles": [
|