@ezraghzf/gantt-task-react 0.4.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.
Files changed (41) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -0
  3. package/dist/components/calendar/calendar.d.ts +16 -0
  4. package/dist/components/calendar/top-part-of-calendar.d.ts +11 -0
  5. package/dist/components/gantt/gantt.d.ts +3 -0
  6. package/dist/components/gantt/task-gantt-content.d.ts +25 -0
  7. package/dist/components/gantt/task-gantt.d.ts +13 -0
  8. package/dist/components/grid/grid-body.d.ts +12 -0
  9. package/dist/components/grid/grid.d.ts +4 -0
  10. package/dist/components/other/arrow.d.ts +12 -0
  11. package/dist/components/other/horizontal-scroll.d.ts +8 -0
  12. package/dist/components/other/tooltip.d.ts +29 -0
  13. package/dist/components/other/vertical-scroll.d.ts +9 -0
  14. package/dist/components/task-item/bar/bar-date-handle.d.ts +11 -0
  15. package/dist/components/task-item/bar/bar-display.d.ts +20 -0
  16. package/dist/components/task-item/bar/bar-progress-handle.d.ts +7 -0
  17. package/dist/components/task-item/bar/bar-small.d.ts +3 -0
  18. package/dist/components/task-item/bar/bar.d.ts +3 -0
  19. package/dist/components/task-item/milestone/milestone.d.ts +3 -0
  20. package/dist/components/task-item/project/project.d.ts +3 -0
  21. package/dist/components/task-item/task-item.d.ts +15 -0
  22. package/dist/components/task-list/task-list-header.d.ts +7 -0
  23. package/dist/components/task-list/task-list-table.d.ts +13 -0
  24. package/dist/components/task-list/task-list.d.ts +37 -0
  25. package/dist/helpers/bar-helper.d.ts +14 -0
  26. package/dist/helpers/date-helper.d.ts +21 -0
  27. package/dist/helpers/other-helper.d.ts +8 -0
  28. package/dist/index.css +312 -0
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.js +2885 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/index.modern.js +2884 -0
  33. package/dist/index.modern.js.map +1 -0
  34. package/dist/setupTests.d.ts +1 -0
  35. package/dist/test/date-helper.test.d.ts +1 -0
  36. package/dist/test/gant.test.d.ts +1 -0
  37. package/dist/types/bar-task.d.ts +24 -0
  38. package/dist/types/date-setup.d.ts +5 -0
  39. package/dist/types/gantt-task-actions.d.ts +8 -0
  40. package/dist/types/public-types.d.ts +147 -0
  41. package/package.json +72 -0
package/dist/index.js ADDED
@@ -0,0 +1,2885 @@
1
+ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
2
+
3
+ var React = require('react');
4
+ var React__default = _interopDefault(React);
5
+
6
+ function _extends() {
7
+ _extends = Object.assign || function (target) {
8
+ for (var i = 1; i < arguments.length; i++) {
9
+ var source = arguments[i];
10
+
11
+ for (var key in source) {
12
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
13
+ target[key] = source[key];
14
+ }
15
+ }
16
+ }
17
+
18
+ return target;
19
+ };
20
+
21
+ return _extends.apply(this, arguments);
22
+ }
23
+
24
+ function _unsupportedIterableToArray(o, minLen) {
25
+ if (!o) return;
26
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
27
+ var n = Object.prototype.toString.call(o).slice(8, -1);
28
+ if (n === "Object" && o.constructor) n = o.constructor.name;
29
+ if (n === "Map" || n === "Set") return Array.from(o);
30
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
31
+ }
32
+
33
+ function _arrayLikeToArray(arr, len) {
34
+ if (len == null || len > arr.length) len = arr.length;
35
+
36
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
37
+
38
+ return arr2;
39
+ }
40
+
41
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
42
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
43
+ if (it) return (it = it.call(o)).next.bind(it);
44
+
45
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
46
+ if (it) o = it;
47
+ var i = 0;
48
+ return function () {
49
+ if (i >= o.length) return {
50
+ done: true
51
+ };
52
+ return {
53
+ done: false,
54
+ value: o[i++]
55
+ };
56
+ };
57
+ }
58
+
59
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
60
+ }
61
+
62
+ (function (ViewMode) {
63
+ ViewMode["Hour"] = "Hour";
64
+ ViewMode["QuarterDay"] = "Quarter Day";
65
+ ViewMode["HalfDay"] = "Half Day";
66
+ ViewMode["Day"] = "Day";
67
+ ViewMode["Week"] = "Week";
68
+ ViewMode["Month"] = "Month";
69
+ ViewMode["WeeklyMonth"] = "WeeklyMonth";
70
+ ViewMode["QuarterYear"] = "QuarterYear";
71
+ ViewMode["Year"] = "Year";
72
+ })(exports.ViewMode || (exports.ViewMode = {}));
73
+
74
+ var intlDTCache = {};
75
+ var getCachedDateTimeFormat = function getCachedDateTimeFormat(locString, opts) {
76
+ if (opts === void 0) {
77
+ opts = {};
78
+ }
79
+
80
+ var key = JSON.stringify([locString, opts]);
81
+ var dtf = intlDTCache[key];
82
+
83
+ if (!dtf) {
84
+ dtf = new Intl.DateTimeFormat(locString, opts);
85
+ intlDTCache[key] = dtf;
86
+ }
87
+
88
+ return dtf;
89
+ };
90
+ var addToDate = function addToDate(date, quantity, scale) {
91
+ var newDate = new Date(date.getFullYear() + (scale === "year" ? quantity : 0), date.getMonth() + (scale === "month" ? quantity : 0), date.getDate() + (scale === "day" ? quantity : 0), date.getHours() + (scale === "hour" ? quantity : 0), date.getMinutes() + (scale === "minute" ? quantity : 0), date.getSeconds() + (scale === "second" ? quantity : 0), date.getMilliseconds() + (scale === "millisecond" ? quantity : 0));
92
+ return newDate;
93
+ };
94
+ var startOfDate = function startOfDate(date, scale) {
95
+ var scores = ["millisecond", "second", "minute", "hour", "day", "month", "year"];
96
+
97
+ var shouldReset = function shouldReset(_scale) {
98
+ var maxScore = scores.indexOf(scale);
99
+ return scores.indexOf(_scale) <= maxScore;
100
+ };
101
+
102
+ var newDate = new Date(date.getFullYear(), shouldReset("year") ? 0 : date.getMonth(), shouldReset("month") ? 1 : date.getDate(), shouldReset("day") ? 0 : date.getHours(), shouldReset("hour") ? 0 : date.getMinutes(), shouldReset("minute") ? 0 : date.getSeconds(), shouldReset("second") ? 0 : date.getMilliseconds());
103
+ return newDate;
104
+ };
105
+ var ganttDateRange = function ganttDateRange(tasks, viewMode, preStepsCount) {
106
+ var newStartDate = tasks[0].start;
107
+ var newEndDate = tasks[0].start;
108
+
109
+ for (var _iterator = _createForOfIteratorHelperLoose(tasks), _step; !(_step = _iterator()).done;) {
110
+ var task = _step.value;
111
+
112
+ if (task.start < newStartDate) {
113
+ newStartDate = task.start;
114
+ }
115
+
116
+ if (task.end > newEndDate) {
117
+ newEndDate = task.end;
118
+ }
119
+ }
120
+
121
+ switch (viewMode) {
122
+ case exports.ViewMode.Year:
123
+ newStartDate = addToDate(newStartDate, -1, "year");
124
+ newStartDate = startOfDate(newStartDate, "year");
125
+ newEndDate = addToDate(newEndDate, 1, "year");
126
+ newEndDate = startOfDate(newEndDate, "year");
127
+ break;
128
+
129
+ case exports.ViewMode.QuarterYear:
130
+ newStartDate = addToDate(newStartDate, -3, "month");
131
+ newStartDate = startOfDate(newStartDate, "month");
132
+ newEndDate = addToDate(newEndDate, 3, "year");
133
+ newEndDate = startOfDate(newEndDate, "year");
134
+ break;
135
+
136
+ case exports.ViewMode.Month:
137
+ newStartDate = addToDate(newStartDate, -1 * preStepsCount, "month");
138
+ newStartDate = startOfDate(newStartDate, "month");
139
+ newEndDate = addToDate(newEndDate, 1, "year");
140
+ newEndDate = startOfDate(newEndDate, "year");
141
+ break;
142
+
143
+ case exports.ViewMode.Week:
144
+ case exports.ViewMode.WeeklyMonth:
145
+ newStartDate = startOfDate(newStartDate, "day");
146
+ newStartDate = addToDate(getMonday(newStartDate), -7 * preStepsCount, "day");
147
+ newEndDate = startOfDate(newEndDate, "day");
148
+ newEndDate = addToDate(newEndDate, 1.5, "month");
149
+ break;
150
+
151
+ case exports.ViewMode.Day:
152
+ newStartDate = startOfDate(newStartDate, "day");
153
+ newStartDate = addToDate(newStartDate, -1 * preStepsCount, "day");
154
+ newEndDate = startOfDate(newEndDate, "day");
155
+ newEndDate = addToDate(newEndDate, 19, "day");
156
+ break;
157
+
158
+ case exports.ViewMode.QuarterDay:
159
+ newStartDate = startOfDate(newStartDate, "day");
160
+ newStartDate = addToDate(newStartDate, -1 * preStepsCount, "day");
161
+ newEndDate = startOfDate(newEndDate, "day");
162
+ newEndDate = addToDate(newEndDate, 66, "hour");
163
+ break;
164
+
165
+ case exports.ViewMode.HalfDay:
166
+ newStartDate = startOfDate(newStartDate, "day");
167
+ newStartDate = addToDate(newStartDate, -1 * preStepsCount, "day");
168
+ newEndDate = startOfDate(newEndDate, "day");
169
+ newEndDate = addToDate(newEndDate, 108, "hour");
170
+ break;
171
+
172
+ case exports.ViewMode.Hour:
173
+ newStartDate = startOfDate(newStartDate, "hour");
174
+ newStartDate = addToDate(newStartDate, -1 * preStepsCount, "hour");
175
+ newEndDate = startOfDate(newEndDate, "day");
176
+ newEndDate = addToDate(newEndDate, 1, "day");
177
+ break;
178
+ }
179
+
180
+ return [newStartDate, newEndDate];
181
+ };
182
+ var seedDates = function seedDates(startDate, endDate, viewMode) {
183
+ var currentDate = new Date(startDate);
184
+ var dates = [currentDate];
185
+
186
+ while (currentDate < endDate) {
187
+ switch (viewMode) {
188
+ case exports.ViewMode.Year:
189
+ currentDate = addToDate(currentDate, 1, "year");
190
+ break;
191
+
192
+ case exports.ViewMode.QuarterYear:
193
+ currentDate = addToDate(currentDate, 3, "month");
194
+ break;
195
+
196
+ case exports.ViewMode.Month:
197
+ currentDate = addToDate(currentDate, 1, "month");
198
+ break;
199
+
200
+ case exports.ViewMode.Week:
201
+ case exports.ViewMode.WeeklyMonth:
202
+ currentDate = addToDate(currentDate, 7, "day");
203
+ break;
204
+
205
+ case exports.ViewMode.Day:
206
+ currentDate = addToDate(currentDate, 1, "day");
207
+ break;
208
+
209
+ case exports.ViewMode.HalfDay:
210
+ currentDate = addToDate(currentDate, 12, "hour");
211
+ break;
212
+
213
+ case exports.ViewMode.QuarterDay:
214
+ currentDate = addToDate(currentDate, 6, "hour");
215
+ break;
216
+
217
+ case exports.ViewMode.Hour:
218
+ currentDate = addToDate(currentDate, 1, "hour");
219
+ break;
220
+ }
221
+
222
+ dates.push(currentDate);
223
+ }
224
+
225
+ return dates;
226
+ };
227
+ var getLocaleMonth = function getLocaleMonth(date, locale) {
228
+ var bottomValue = getCachedDateTimeFormat(locale, {
229
+ month: "long"
230
+ }).format(date);
231
+ bottomValue = bottomValue.replace(bottomValue[0], bottomValue[0].toLocaleUpperCase());
232
+ return bottomValue;
233
+ };
234
+ var getLocalDayOfWeek = function getLocalDayOfWeek(date, locale, format) {
235
+ var bottomValue = getCachedDateTimeFormat(locale, {
236
+ weekday: format
237
+ }).format(date);
238
+ bottomValue = bottomValue.replace(bottomValue[0], bottomValue[0].toLocaleUpperCase());
239
+ return bottomValue;
240
+ };
241
+ var getMonday = function getMonday(date) {
242
+ var day = date.getDay();
243
+ var diff = date.getDate() - day + (day === 0 ? -6 : 1);
244
+ return new Date(date.setDate(diff));
245
+ };
246
+ var getWeekNumberFromDate = function getWeekNumberFromDate(date, startDate) {
247
+ var start = getMonday(new Date(startDate));
248
+ var current = getMonday(new Date(date));
249
+ var diffTime = current.getTime() - start.getTime();
250
+ var diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
251
+ return Math.floor(diffDays / 7) + 1;
252
+ };
253
+ var getWeekNumberISO8601 = function getWeekNumberISO8601(date) {
254
+ var tmpDate = new Date(date.valueOf());
255
+ var dayNumber = (tmpDate.getDay() + 6) % 7;
256
+ tmpDate.setDate(tmpDate.getDate() - dayNumber + 3);
257
+ var firstThursday = tmpDate.valueOf();
258
+ tmpDate.setMonth(0, 1);
259
+
260
+ if (tmpDate.getDay() !== 4) {
261
+ tmpDate.setMonth(0, 1 + (4 - tmpDate.getDay() + 7) % 7);
262
+ }
263
+
264
+ var weekNumber = (1 + Math.ceil((firstThursday - tmpDate.valueOf()) / 604800000)).toString();
265
+
266
+ if (weekNumber.length === 1) {
267
+ return "0" + weekNumber;
268
+ } else {
269
+ return weekNumber;
270
+ }
271
+ };
272
+ var getDaysInMonth = function getDaysInMonth(month, year) {
273
+ return new Date(year, month + 1, 0).getDate();
274
+ };
275
+ var getWeekNumberInMonth = function getWeekNumberInMonth(date) {
276
+ return Math.ceil((date.getDate() + 6 - date.getDay()) / 7);
277
+ };
278
+
279
+ var styles = {"ganttTable":"_3_ygE","ganttTable_Header":"_1nBOt","ganttTable_HeaderSeparator":"_2eZzQ","ganttTable_HeaderItem":"_WuQ0f"};
280
+
281
+ var TaskListHeaderDefault = function TaskListHeaderDefault(_ref) {
282
+ var headerHeight = _ref.headerHeight,
283
+ fontFamily = _ref.fontFamily,
284
+ fontSize = _ref.fontSize,
285
+ rowWidth = _ref.rowWidth;
286
+ return React__default.createElement("div", {
287
+ className: styles.ganttTable,
288
+ style: {
289
+ fontFamily: fontFamily,
290
+ fontSize: fontSize
291
+ }
292
+ }, React__default.createElement("div", {
293
+ className: styles.ganttTable_Header,
294
+ style: {
295
+ height: headerHeight - 2
296
+ }
297
+ }, React__default.createElement("div", {
298
+ className: styles.ganttTable_HeaderItem,
299
+ style: {
300
+ minWidth: rowWidth
301
+ }
302
+ }, "\xA0Name"), React__default.createElement("div", {
303
+ className: styles.ganttTable_HeaderSeparator,
304
+ style: {
305
+ height: headerHeight * 0.8,
306
+ marginTop: headerHeight * 0.1
307
+ }
308
+ }), React__default.createElement("div", {
309
+ className: styles.ganttTable_HeaderItem,
310
+ style: {
311
+ minWidth: rowWidth
312
+ }
313
+ }, "\xA0From"), React__default.createElement("div", {
314
+ className: styles.ganttTable_HeaderSeparator,
315
+ style: {
316
+ height: headerHeight * 0.8,
317
+ marginTop: headerHeight * 0.1
318
+ }
319
+ }), React__default.createElement("div", {
320
+ className: styles.ganttTable_HeaderItem,
321
+ style: {
322
+ minWidth: rowWidth
323
+ }
324
+ }, "\xA0To")));
325
+ };
326
+
327
+ var styles$1 = {"taskListWrapper":"_3ZbQT","taskListTableRow":"_34SS0","taskListCell":"_3lLk3","taskListNameWrapper":"_nI1Xw","taskListExpander":"_2QjE6","taskListEmptyExpander":"_2TfEi"};
328
+
329
+ var localeDateStringCache = {};
330
+
331
+ var toLocaleDateStringFactory = function toLocaleDateStringFactory(locale) {
332
+ return function (date, dateTimeOptions) {
333
+ var key = date.toString();
334
+ var lds = localeDateStringCache[key];
335
+
336
+ if (!lds) {
337
+ lds = date.toLocaleDateString(locale, dateTimeOptions);
338
+ localeDateStringCache[key] = lds;
339
+ }
340
+
341
+ return lds;
342
+ };
343
+ };
344
+
345
+ var dateTimeOptions = {
346
+ weekday: "short",
347
+ year: "numeric",
348
+ month: "long",
349
+ day: "numeric"
350
+ };
351
+ var TaskListTableDefault = function TaskListTableDefault(_ref) {
352
+ var rowHeight = _ref.rowHeight,
353
+ rowWidth = _ref.rowWidth,
354
+ tasks = _ref.tasks,
355
+ fontFamily = _ref.fontFamily,
356
+ fontSize = _ref.fontSize,
357
+ locale = _ref.locale,
358
+ onExpanderClick = _ref.onExpanderClick;
359
+ var toLocaleDateString = React.useMemo(function () {
360
+ return toLocaleDateStringFactory(locale);
361
+ }, [locale]);
362
+ return React__default.createElement("div", {
363
+ className: styles$1.taskListWrapper,
364
+ style: {
365
+ fontFamily: fontFamily,
366
+ fontSize: fontSize
367
+ }
368
+ }, tasks.map(function (t) {
369
+ var expanderSymbol = "";
370
+
371
+ if (t.hideChildren === false) {
372
+ expanderSymbol = "▼";
373
+ } else if (t.hideChildren === true) {
374
+ expanderSymbol = "▶";
375
+ }
376
+
377
+ return React__default.createElement("div", {
378
+ className: styles$1.taskListTableRow,
379
+ style: {
380
+ height: rowHeight
381
+ },
382
+ key: t.id + "row"
383
+ }, React__default.createElement("div", {
384
+ className: styles$1.taskListCell,
385
+ style: {
386
+ minWidth: rowWidth,
387
+ maxWidth: rowWidth
388
+ },
389
+ title: t.name
390
+ }, React__default.createElement("div", {
391
+ className: styles$1.taskListNameWrapper
392
+ }, React__default.createElement("div", {
393
+ className: expanderSymbol ? styles$1.taskListExpander : styles$1.taskListEmptyExpander,
394
+ onClick: function onClick() {
395
+ return onExpanderClick(t);
396
+ }
397
+ }, expanderSymbol), React__default.createElement("div", null, t.name))), React__default.createElement("div", {
398
+ className: styles$1.taskListCell,
399
+ style: {
400
+ minWidth: rowWidth,
401
+ maxWidth: rowWidth
402
+ }
403
+ }, "\xA0", toLocaleDateString(t.start, dateTimeOptions)), React__default.createElement("div", {
404
+ className: styles$1.taskListCell,
405
+ style: {
406
+ minWidth: rowWidth,
407
+ maxWidth: rowWidth
408
+ }
409
+ }, "\xA0", toLocaleDateString(t.end, dateTimeOptions)));
410
+ }));
411
+ };
412
+
413
+ var styles$2 = {"tooltipDefaultContainer":"_3T42e","tooltipDefaultContainerParagraph":"_29NTg","tooltipDetailsContainer":"_25P-K","tooltipDetailsContainerHidden":"_3gVAq"};
414
+
415
+ var Tooltip = function Tooltip(_ref) {
416
+ var task = _ref.task,
417
+ rowHeight = _ref.rowHeight,
418
+ rtl = _ref.rtl,
419
+ svgContainerHeight = _ref.svgContainerHeight,
420
+ svgContainerWidth = _ref.svgContainerWidth,
421
+ scrollX = _ref.scrollX,
422
+ scrollY = _ref.scrollY,
423
+ arrowIndent = _ref.arrowIndent,
424
+ fontSize = _ref.fontSize,
425
+ fontFamily = _ref.fontFamily,
426
+ headerHeight = _ref.headerHeight,
427
+ taskListWidth = _ref.taskListWidth,
428
+ TooltipContent = _ref.TooltipContent;
429
+ var tooltipRef = React.useRef(null);
430
+
431
+ var _useState = React.useState(0),
432
+ relatedY = _useState[0],
433
+ setRelatedY = _useState[1];
434
+
435
+ var _useState2 = React.useState(0),
436
+ relatedX = _useState2[0],
437
+ setRelatedX = _useState2[1];
438
+
439
+ React.useEffect(function () {
440
+ if (tooltipRef.current) {
441
+ var tooltipHeight = tooltipRef.current.offsetHeight * 1.1;
442
+ var tooltipWidth = tooltipRef.current.offsetWidth * 1.1;
443
+ var newRelatedY = task.index * rowHeight - scrollY + headerHeight;
444
+ var newRelatedX;
445
+
446
+ if (rtl) {
447
+ newRelatedX = task.x1 - arrowIndent * 1.5 - tooltipWidth - scrollX;
448
+
449
+ if (newRelatedX < 0) {
450
+ newRelatedX = task.x2 + arrowIndent * 1.5 - scrollX;
451
+ }
452
+
453
+ var tooltipLeftmostPoint = tooltipWidth + newRelatedX;
454
+
455
+ if (tooltipLeftmostPoint > svgContainerWidth) {
456
+ newRelatedX = svgContainerWidth - tooltipWidth;
457
+ newRelatedY += rowHeight;
458
+ }
459
+ } else {
460
+ newRelatedX = task.x2 + arrowIndent * 1.5 + taskListWidth - scrollX;
461
+
462
+ var _tooltipLeftmostPoint = tooltipWidth + newRelatedX;
463
+
464
+ var fullChartWidth = taskListWidth + svgContainerWidth;
465
+
466
+ if (_tooltipLeftmostPoint > fullChartWidth) {
467
+ newRelatedX = task.x1 + taskListWidth - arrowIndent * 1.5 - scrollX - tooltipWidth;
468
+ }
469
+
470
+ if (newRelatedX < taskListWidth) {
471
+ newRelatedX = svgContainerWidth + taskListWidth - tooltipWidth;
472
+ newRelatedY += rowHeight;
473
+ }
474
+ }
475
+
476
+ var tooltipLowerPoint = tooltipHeight + newRelatedY - scrollY;
477
+
478
+ if (tooltipLowerPoint > svgContainerHeight - scrollY) {
479
+ newRelatedY = svgContainerHeight - tooltipHeight;
480
+ }
481
+
482
+ setRelatedY(newRelatedY);
483
+ setRelatedX(newRelatedX);
484
+ }
485
+ }, [tooltipRef, task, arrowIndent, scrollX, scrollY, headerHeight, taskListWidth, rowHeight, svgContainerHeight, svgContainerWidth, rtl]);
486
+ return React__default.createElement("div", {
487
+ ref: tooltipRef,
488
+ className: relatedX ? styles$2.tooltipDetailsContainer : styles$2.tooltipDetailsContainerHidden,
489
+ style: {
490
+ left: relatedX,
491
+ top: relatedY
492
+ }
493
+ }, React__default.createElement(TooltipContent, {
494
+ task: task,
495
+ fontSize: fontSize,
496
+ fontFamily: fontFamily
497
+ }));
498
+ };
499
+ var StandardTooltipContent = function StandardTooltipContent(_ref2) {
500
+ var task = _ref2.task,
501
+ fontSize = _ref2.fontSize,
502
+ fontFamily = _ref2.fontFamily;
503
+ var style = {
504
+ fontSize: fontSize,
505
+ fontFamily: fontFamily
506
+ };
507
+ return React__default.createElement("div", {
508
+ className: styles$2.tooltipDefaultContainer,
509
+ style: style
510
+ }, React__default.createElement("b", {
511
+ style: {
512
+ fontSize: fontSize + 6
513
+ }
514
+ }, task.name + ": " + task.start.getDate() + "-" + (task.start.getMonth() + 1) + "-" + task.start.getFullYear() + " - " + task.end.getDate() + "-" + (task.end.getMonth() + 1) + "-" + task.end.getFullYear()), task.end.getTime() - task.start.getTime() !== 0 && React__default.createElement("p", {
515
+ className: styles$2.tooltipDefaultContainerParagraph
516
+ }, "Duration: " + ~~((task.end.getTime() - task.start.getTime()) / (1000 * 60 * 60 * 24)) + " day(s)"), React__default.createElement("p", {
517
+ className: styles$2.tooltipDefaultContainerParagraph
518
+ }, !!task.progress && "Progress: " + task.progress + " %"));
519
+ };
520
+
521
+ var styles$3 = {"scroll":"_1eT-t"};
522
+
523
+ var VerticalScroll = function VerticalScroll(_ref) {
524
+ var scroll = _ref.scroll,
525
+ ganttHeight = _ref.ganttHeight,
526
+ ganttFullHeight = _ref.ganttFullHeight,
527
+ headerHeight = _ref.headerHeight,
528
+ rtl = _ref.rtl,
529
+ onScroll = _ref.onScroll;
530
+ var scrollRef = React.useRef(null);
531
+ React.useEffect(function () {
532
+ if (scrollRef.current) {
533
+ scrollRef.current.scrollTop = scroll;
534
+ }
535
+ }, [scroll]);
536
+ return React__default.createElement("div", {
537
+ style: {
538
+ height: ganttHeight,
539
+ marginTop: headerHeight,
540
+ marginLeft: rtl ? "" : "-1rem"
541
+ },
542
+ className: styles$3.scroll,
543
+ onScroll: onScroll,
544
+ ref: scrollRef
545
+ }, React__default.createElement("div", {
546
+ style: {
547
+ height: ganttFullHeight,
548
+ width: 1
549
+ }
550
+ }));
551
+ };
552
+
553
+ var TaskList = function TaskList(_ref) {
554
+ var headerHeight = _ref.headerHeight,
555
+ fontFamily = _ref.fontFamily,
556
+ fontSize = _ref.fontSize,
557
+ rowWidth = _ref.rowWidth,
558
+ rowHeight = _ref.rowHeight,
559
+ scrollY = _ref.scrollY,
560
+ tasks = _ref.tasks,
561
+ selectedTask = _ref.selectedTask,
562
+ setSelectedTask = _ref.setSelectedTask,
563
+ onExpanderClick = _ref.onExpanderClick,
564
+ locale = _ref.locale,
565
+ ganttHeight = _ref.ganttHeight,
566
+ taskListRef = _ref.taskListRef,
567
+ horizontalContainerClass = _ref.horizontalContainerClass,
568
+ TaskListHeader = _ref.TaskListHeader,
569
+ TaskListTable = _ref.TaskListTable;
570
+ var horizontalContainerRef = React.useRef(null);
571
+ React.useEffect(function () {
572
+ if (horizontalContainerRef.current) {
573
+ horizontalContainerRef.current.scrollTop = scrollY;
574
+ }
575
+ }, [scrollY]);
576
+ var headerProps = {
577
+ headerHeight: headerHeight,
578
+ fontFamily: fontFamily,
579
+ fontSize: fontSize,
580
+ rowWidth: rowWidth
581
+ };
582
+ var selectedTaskId = selectedTask ? selectedTask.id : "";
583
+ var tableProps = {
584
+ rowHeight: rowHeight,
585
+ rowWidth: rowWidth,
586
+ fontFamily: fontFamily,
587
+ fontSize: fontSize,
588
+ tasks: tasks,
589
+ locale: locale,
590
+ selectedTaskId: selectedTaskId,
591
+ setSelectedTask: setSelectedTask,
592
+ onExpanderClick: onExpanderClick
593
+ };
594
+ return React__default.createElement("div", {
595
+ ref: taskListRef
596
+ }, React__default.createElement(TaskListHeader, Object.assign({}, headerProps)), React__default.createElement("div", {
597
+ ref: horizontalContainerRef,
598
+ className: horizontalContainerClass,
599
+ style: ganttHeight ? {
600
+ height: ganttHeight
601
+ } : {}
602
+ }, React__default.createElement(TaskListTable, Object.assign({}, tableProps))));
603
+ };
604
+
605
+ var styles$4 = {"gridRow":"_2dZTy","gridRowLine":"_3rUKi","gridTick":"_RuwuK"};
606
+
607
+ var GridBody = function GridBody(_ref) {
608
+ var tasks = _ref.tasks,
609
+ dates = _ref.dates,
610
+ rowHeight = _ref.rowHeight,
611
+ svgWidth = _ref.svgWidth,
612
+ columnWidth = _ref.columnWidth,
613
+ todayColor = _ref.todayColor,
614
+ rtl = _ref.rtl;
615
+ var y = 0;
616
+ var gridRows = [];
617
+ var rowLines = [React__default.createElement("line", {
618
+ key: "RowLineFirst",
619
+ x: "0",
620
+ y1: 0,
621
+ x2: svgWidth,
622
+ y2: 0,
623
+ className: styles$4.gridRowLine
624
+ })];
625
+
626
+ for (var _iterator = _createForOfIteratorHelperLoose(tasks), _step; !(_step = _iterator()).done;) {
627
+ var task = _step.value;
628
+ gridRows.push(React__default.createElement("rect", {
629
+ key: "Row" + task.id,
630
+ x: "0",
631
+ y: y,
632
+ width: svgWidth,
633
+ height: rowHeight,
634
+ className: styles$4.gridRow
635
+ }));
636
+ rowLines.push(React__default.createElement("line", {
637
+ key: "RowLine" + task.id,
638
+ x: "0",
639
+ y1: y + rowHeight,
640
+ x2: svgWidth,
641
+ y2: y + rowHeight,
642
+ className: styles$4.gridRowLine
643
+ }));
644
+ y += rowHeight;
645
+ }
646
+
647
+ var now = new Date();
648
+ var tickX = 0;
649
+ var ticks = [];
650
+ var today = React__default.createElement("rect", null);
651
+
652
+ for (var i = 0; i < dates.length; i++) {
653
+ var date = dates[i];
654
+ ticks.push(React__default.createElement("line", {
655
+ key: date.getTime(),
656
+ x1: tickX,
657
+ y1: 0,
658
+ x2: tickX,
659
+ y2: y,
660
+ className: styles$4.gridTick
661
+ }));
662
+
663
+ if (i + 1 !== dates.length && date.getTime() < now.getTime() && dates[i + 1].getTime() >= now.getTime() || i !== 0 && i + 1 === dates.length && date.getTime() < now.getTime() && addToDate(date, date.getTime() - dates[i - 1].getTime(), "millisecond").getTime() >= now.getTime()) {
664
+ today = React__default.createElement("rect", {
665
+ x: tickX,
666
+ y: 0,
667
+ width: columnWidth,
668
+ height: y,
669
+ fill: todayColor
670
+ });
671
+ }
672
+
673
+ if (rtl && i + 1 !== dates.length && date.getTime() >= now.getTime() && dates[i + 1].getTime() < now.getTime()) {
674
+ today = React__default.createElement("rect", {
675
+ x: tickX + columnWidth,
676
+ y: 0,
677
+ width: columnWidth,
678
+ height: y,
679
+ fill: todayColor
680
+ });
681
+ }
682
+
683
+ tickX += columnWidth;
684
+ }
685
+
686
+ return React__default.createElement("g", {
687
+ className: "gridBody"
688
+ }, React__default.createElement("g", {
689
+ className: "rows"
690
+ }, gridRows), React__default.createElement("g", {
691
+ className: "rowLines"
692
+ }, rowLines), React__default.createElement("g", {
693
+ className: "ticks"
694
+ }, ticks), React__default.createElement("g", {
695
+ className: "today"
696
+ }, today));
697
+ };
698
+
699
+ var Grid = function Grid(props) {
700
+ return React__default.createElement("g", {
701
+ className: "grid"
702
+ }, React__default.createElement(GridBody, Object.assign({}, props)));
703
+ };
704
+
705
+ var styles$5 = {"calendarBottomText":"_9w8d5","calendarTopTick":"_1rLuZ","calendarTopText":"_2q1Kt","calendarHeader":"_35nLX"};
706
+
707
+ var TopPartOfCalendar = function TopPartOfCalendar(_ref) {
708
+ var value = _ref.value,
709
+ x1Line = _ref.x1Line,
710
+ y1Line = _ref.y1Line,
711
+ y2Line = _ref.y2Line,
712
+ xText = _ref.xText,
713
+ yText = _ref.yText;
714
+ return React__default.createElement("g", {
715
+ className: "calendarTop"
716
+ }, React__default.createElement("line", {
717
+ x1: x1Line,
718
+ y1: y1Line,
719
+ x2: x1Line,
720
+ y2: y2Line,
721
+ className: styles$5.calendarTopTick,
722
+ key: value + "line"
723
+ }), React__default.createElement("text", {
724
+ key: value + "text",
725
+ y: yText,
726
+ x: xText,
727
+ className: styles$5.calendarTopText
728
+ }, value));
729
+ };
730
+
731
+ var Calendar = function Calendar(_ref) {
732
+ var dateSetup = _ref.dateSetup,
733
+ locale = _ref.locale,
734
+ viewMode = _ref.viewMode,
735
+ rtl = _ref.rtl,
736
+ headerHeight = _ref.headerHeight,
737
+ columnWidth = _ref.columnWidth,
738
+ fontFamily = _ref.fontFamily,
739
+ fontSize = _ref.fontSize,
740
+ startDate = _ref.startDate;
741
+
742
+ var getCalendarValuesForYear = function getCalendarValuesForYear() {
743
+ var topValues = [];
744
+ var bottomValues = [];
745
+ var topDefaultHeight = headerHeight * 0.5;
746
+
747
+ for (var i = 0; i < dateSetup.dates.length; i++) {
748
+ var date = dateSetup.dates[i];
749
+ var bottomValue = date.getFullYear();
750
+ bottomValues.push(React__default.createElement("text", {
751
+ key: date.getTime(),
752
+ y: headerHeight * 0.8,
753
+ x: columnWidth * i + columnWidth * 0.5,
754
+ className: styles$5.calendarBottomText
755
+ }, bottomValue));
756
+
757
+ if (i === 0 || date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()) {
758
+ var topValue = date.getFullYear().toString();
759
+ var xText = void 0;
760
+
761
+ if (rtl) {
762
+ xText = (6 + i + date.getFullYear() + 1) * columnWidth;
763
+ } else {
764
+ xText = (6 + i - date.getFullYear()) * columnWidth;
765
+ }
766
+
767
+ topValues.push(React__default.createElement(TopPartOfCalendar, {
768
+ key: topValue,
769
+ value: topValue,
770
+ x1Line: columnWidth * i,
771
+ y1Line: 0,
772
+ y2Line: headerHeight,
773
+ xText: xText,
774
+ yText: topDefaultHeight * 0.7
775
+ }));
776
+ }
777
+ }
778
+
779
+ return [topValues, bottomValues];
780
+ };
781
+
782
+ var getCalendarValuesForQuarterYear = function getCalendarValuesForQuarterYear() {
783
+ var topValues = [];
784
+ var bottomValues = [];
785
+ var topDefaultHeight = headerHeight * 0.5;
786
+
787
+ for (var i = 0; i < dateSetup.dates.length; i++) {
788
+ var date = dateSetup.dates[i];
789
+ var quarter = "Q" + Math.floor((date.getMonth() + 3) / 3);
790
+ bottomValues.push(React__default.createElement("text", {
791
+ key: date.getTime(),
792
+ y: headerHeight * 0.8,
793
+ x: columnWidth * i + columnWidth * 0.5,
794
+ className: styles$5.calendarBottomText
795
+ }, quarter));
796
+
797
+ if (i === 0 || date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()) {
798
+ var topValue = date.getFullYear().toString();
799
+ var xText = void 0;
800
+
801
+ if (rtl) {
802
+ xText = (6 + i + date.getMonth() + 1) * columnWidth;
803
+ } else {
804
+ xText = (6 + i - date.getMonth()) * columnWidth;
805
+ }
806
+
807
+ topValues.push(React__default.createElement(TopPartOfCalendar, {
808
+ key: topValue,
809
+ value: topValue,
810
+ x1Line: columnWidth * i,
811
+ y1Line: 0,
812
+ y2Line: topDefaultHeight,
813
+ xText: Math.abs(xText),
814
+ yText: topDefaultHeight * 0.7
815
+ }));
816
+ }
817
+ }
818
+
819
+ return [topValues, bottomValues];
820
+ };
821
+
822
+ var getCalendarValuesForMonth = function getCalendarValuesForMonth() {
823
+ var topValues = [];
824
+ var bottomValues = [];
825
+ var topDefaultHeight = headerHeight * 0.5;
826
+
827
+ for (var i = 0; i < dateSetup.dates.length; i++) {
828
+ var date = dateSetup.dates[i];
829
+ var bottomValue = getLocaleMonth(date, locale);
830
+ bottomValues.push(React__default.createElement("text", {
831
+ key: bottomValue + date.getFullYear(),
832
+ y: headerHeight * 0.8,
833
+ x: columnWidth * i + columnWidth * 0.5,
834
+ className: styles$5.calendarBottomText
835
+ }, bottomValue));
836
+
837
+ if (i === 0 || date.getFullYear() !== dateSetup.dates[i - 1].getFullYear()) {
838
+ var topValue = date.getFullYear().toString();
839
+ var xText = void 0;
840
+
841
+ if (rtl) {
842
+ xText = (6 + i + date.getMonth() + 1) * columnWidth;
843
+ } else {
844
+ xText = (6 + i - date.getMonth()) * columnWidth;
845
+ }
846
+
847
+ topValues.push(React__default.createElement(TopPartOfCalendar, {
848
+ key: topValue,
849
+ value: topValue,
850
+ x1Line: columnWidth * i,
851
+ y1Line: 0,
852
+ y2Line: topDefaultHeight,
853
+ xText: xText,
854
+ yText: topDefaultHeight * 0.7
855
+ }));
856
+ }
857
+ }
858
+
859
+ return [topValues, bottomValues];
860
+ };
861
+
862
+ var getCalendarValuesForWeek = function getCalendarValuesForWeek() {
863
+ var topValues = [];
864
+ var bottomValues = [];
865
+ var weeksCount = 1;
866
+ var topDefaultHeight = headerHeight * 0.5;
867
+ var dates = dateSetup.dates;
868
+
869
+ for (var i = dates.length - 1; i >= 0; i--) {
870
+ var date = dates[i];
871
+ var topValue = "";
872
+
873
+ if (i === 0 || date.getMonth() !== dates[i - 1].getMonth()) {
874
+ topValue = getLocaleMonth(date, locale) + ", " + date.getFullYear();
875
+ }
876
+
877
+ var bottomValue = "W" + getWeekNumberISO8601(date);
878
+ bottomValues.push(React__default.createElement("text", {
879
+ key: date.getTime(),
880
+ y: headerHeight * 0.8,
881
+ x: columnWidth * (i + +rtl),
882
+ className: styles$5.calendarBottomText
883
+ }, bottomValue));
884
+
885
+ if (topValue) {
886
+ if (i !== dates.length - 1) {
887
+ topValues.push(React__default.createElement(TopPartOfCalendar, {
888
+ key: topValue,
889
+ value: topValue,
890
+ x1Line: columnWidth * i + weeksCount * columnWidth,
891
+ y1Line: 0,
892
+ y2Line: topDefaultHeight,
893
+ xText: columnWidth * i + columnWidth * weeksCount * 0.5,
894
+ yText: topDefaultHeight * 0.7
895
+ }));
896
+ }
897
+
898
+ weeksCount = 0;
899
+ }
900
+
901
+ weeksCount++;
902
+ }
903
+
904
+ return [topValues, bottomValues];
905
+ };
906
+
907
+ var getCalendarValuesForWeeklyMonth = function getCalendarValuesForWeeklyMonth() {
908
+ var topValues = [];
909
+ var bottomValues = [];
910
+ var weeksCount = 0;
911
+ var topDefaultHeight = headerHeight * 0.5;
912
+ var dates = dateSetup.dates;
913
+
914
+ for (var i = 0; i < dates.length; i++) {
915
+ var date = dates[i];
916
+ var nextDate = dates[i + 1] || addToDate(date, 7, "day");
917
+ var endDayDate = new Date(nextDate);
918
+ endDayDate.setDate(nextDate.getDate() - 1);
919
+ var weekNumber = startDate ? getWeekNumberFromDate(date, startDate) : getWeekNumberInMonth(date);
920
+ bottomValues.push(React__default.createElement("g", {
921
+ key: date.getTime()
922
+ }, React__default.createElement("line", {
923
+ x1: columnWidth * i,
924
+ y1: headerHeight * 0.5,
925
+ x2: columnWidth * i,
926
+ y2: headerHeight,
927
+ className: styles$5.calendarTopTick
928
+ }), React__default.createElement("text", {
929
+ y: headerHeight * 0.7,
930
+ x: columnWidth * i + columnWidth * 0.5,
931
+ className: styles$5.calendarBottomText
932
+ }, "W" + weekNumber), React__default.createElement("text", {
933
+ y: headerHeight * 0.9,
934
+ x: columnWidth * i + columnWidth * 0.5,
935
+ className: styles$5.calendarBottomText
936
+ }, date.getDate() + "-" + endDayDate.getDate())));
937
+
938
+ if (i !== 0 && date.getMonth() !== dates[i - 1].getMonth()) {
939
+ var displayDate = dates[i - 1];
940
+ var topValue = getLocaleMonth(displayDate, locale) + ", " + displayDate.getFullYear();
941
+ topValues.push(React__default.createElement(TopPartOfCalendar, {
942
+ key: topValue,
943
+ value: topValue,
944
+ x1Line: columnWidth * i,
945
+ y1Line: 0,
946
+ y2Line: topDefaultHeight,
947
+ xText: columnWidth * (i - weeksCount * 0.5),
948
+ yText: topDefaultHeight * 0.7
949
+ }));
950
+ weeksCount = 0;
951
+ }
952
+
953
+ weeksCount++;
954
+ }
955
+
956
+ if (dates.length > 0) {
957
+ var _displayDate = dates[dates.length - 1];
958
+
959
+ var _topValue = getLocaleMonth(_displayDate, locale) + ", " + _displayDate.getFullYear();
960
+
961
+ topValues.push(React__default.createElement(TopPartOfCalendar, {
962
+ key: _topValue,
963
+ value: _topValue,
964
+ x1Line: columnWidth * dates.length,
965
+ y1Line: 0,
966
+ y2Line: topDefaultHeight,
967
+ xText: columnWidth * (dates.length - weeksCount * 0.5),
968
+ yText: topDefaultHeight * 0.7
969
+ }));
970
+ }
971
+
972
+ return [topValues, bottomValues];
973
+ };
974
+
975
+ var getCalendarValuesForDay = function getCalendarValuesForDay() {
976
+ var topValues = [];
977
+ var bottomValues = [];
978
+ var topDefaultHeight = headerHeight * 0.5;
979
+ var dates = dateSetup.dates;
980
+
981
+ for (var i = 0; i < dates.length; i++) {
982
+ var date = dates[i];
983
+ var bottomValue = getLocalDayOfWeek(date, locale, "short") + ", " + date.getDate().toString();
984
+ bottomValues.push(React__default.createElement("text", {
985
+ key: date.getTime(),
986
+ y: headerHeight * 0.8,
987
+ x: columnWidth * i + columnWidth * 0.5,
988
+ className: styles$5.calendarBottomText
989
+ }, bottomValue));
990
+
991
+ if (i + 1 !== dates.length && date.getMonth() !== dates[i + 1].getMonth()) {
992
+ var topValue = getLocaleMonth(date, locale);
993
+ topValues.push(React__default.createElement(TopPartOfCalendar, {
994
+ key: topValue + date.getFullYear(),
995
+ value: topValue,
996
+ x1Line: columnWidth * (i + 1),
997
+ y1Line: 0,
998
+ y2Line: topDefaultHeight,
999
+ xText: columnWidth * (i + 1) - getDaysInMonth(date.getMonth(), date.getFullYear()) * columnWidth * 0.5,
1000
+ yText: topDefaultHeight * 0.7
1001
+ }));
1002
+ }
1003
+ }
1004
+
1005
+ return [topValues, bottomValues];
1006
+ };
1007
+
1008
+ var getCalendarValuesForPartOfDay = function getCalendarValuesForPartOfDay() {
1009
+ var topValues = [];
1010
+ var bottomValues = [];
1011
+ var ticks = viewMode === exports.ViewMode.HalfDay ? 2 : 4;
1012
+ var topDefaultHeight = headerHeight * 0.5;
1013
+ var dates = dateSetup.dates;
1014
+
1015
+ for (var i = 0; i < dates.length; i++) {
1016
+ var date = dates[i];
1017
+ var bottomValue = getCachedDateTimeFormat(locale, {
1018
+ hour: "numeric"
1019
+ }).format(date);
1020
+ bottomValues.push(React__default.createElement("text", {
1021
+ key: date.getTime(),
1022
+ y: headerHeight * 0.8,
1023
+ x: columnWidth * (i + +rtl),
1024
+ className: styles$5.calendarBottomText,
1025
+ fontFamily: fontFamily
1026
+ }, bottomValue));
1027
+
1028
+ if (i === 0 || date.getDate() !== dates[i - 1].getDate()) {
1029
+ var topValue = getLocalDayOfWeek(date, locale, "short") + ", " + date.getDate() + " " + getLocaleMonth(date, locale);
1030
+ topValues.push(React__default.createElement(TopPartOfCalendar, {
1031
+ key: topValue + date.getFullYear(),
1032
+ value: topValue,
1033
+ x1Line: columnWidth * i + ticks * columnWidth,
1034
+ y1Line: 0,
1035
+ y2Line: topDefaultHeight,
1036
+ xText: columnWidth * i + ticks * columnWidth * 0.5,
1037
+ yText: topDefaultHeight * 0.7
1038
+ }));
1039
+ }
1040
+ }
1041
+
1042
+ return [topValues, bottomValues];
1043
+ };
1044
+
1045
+ var getCalendarValuesForHour = function getCalendarValuesForHour() {
1046
+ var topValues = [];
1047
+ var bottomValues = [];
1048
+ var topDefaultHeight = headerHeight * 0.5;
1049
+ var dates = dateSetup.dates;
1050
+
1051
+ for (var i = 0; i < dates.length; i++) {
1052
+ var date = dates[i];
1053
+ var bottomValue = getCachedDateTimeFormat(locale, {
1054
+ hour: "numeric"
1055
+ }).format(date);
1056
+ bottomValues.push(React__default.createElement("text", {
1057
+ key: date.getTime(),
1058
+ y: headerHeight * 0.8,
1059
+ x: columnWidth * (i + +rtl),
1060
+ className: styles$5.calendarBottomText,
1061
+ fontFamily: fontFamily
1062
+ }, bottomValue));
1063
+
1064
+ if (i !== 0 && date.getDate() !== dates[i - 1].getDate()) {
1065
+ var displayDate = dates[i - 1];
1066
+ var topValue = getLocalDayOfWeek(displayDate, locale, "long") + ", " + displayDate.getDate() + " " + getLocaleMonth(displayDate, locale);
1067
+ var topPosition = (date.getHours() - 24) / 2;
1068
+ topValues.push(React__default.createElement(TopPartOfCalendar, {
1069
+ key: topValue + displayDate.getFullYear(),
1070
+ value: topValue,
1071
+ x1Line: columnWidth * i,
1072
+ y1Line: 0,
1073
+ y2Line: topDefaultHeight,
1074
+ xText: columnWidth * (i + topPosition),
1075
+ yText: topDefaultHeight * 0.7
1076
+ }));
1077
+ }
1078
+ }
1079
+
1080
+ return [topValues, bottomValues];
1081
+ };
1082
+
1083
+ var topValues = [];
1084
+ var bottomValues = [];
1085
+
1086
+ switch (dateSetup.viewMode) {
1087
+ case exports.ViewMode.Year:
1088
+ var _getCalendarValuesFor = getCalendarValuesForYear();
1089
+
1090
+ topValues = _getCalendarValuesFor[0];
1091
+ bottomValues = _getCalendarValuesFor[1];
1092
+ break;
1093
+
1094
+ case exports.ViewMode.QuarterYear:
1095
+ var _getCalendarValuesFor2 = getCalendarValuesForQuarterYear();
1096
+
1097
+ topValues = _getCalendarValuesFor2[0];
1098
+ bottomValues = _getCalendarValuesFor2[1];
1099
+ break;
1100
+
1101
+ case exports.ViewMode.Month:
1102
+ var _getCalendarValuesFor3 = getCalendarValuesForMonth();
1103
+
1104
+ topValues = _getCalendarValuesFor3[0];
1105
+ bottomValues = _getCalendarValuesFor3[1];
1106
+ break;
1107
+
1108
+ case exports.ViewMode.Week:
1109
+ var _getCalendarValuesFor4 = getCalendarValuesForWeek();
1110
+
1111
+ topValues = _getCalendarValuesFor4[0];
1112
+ bottomValues = _getCalendarValuesFor4[1];
1113
+ break;
1114
+
1115
+ case exports.ViewMode.WeeklyMonth:
1116
+ var _getCalendarValuesFor5 = getCalendarValuesForWeeklyMonth();
1117
+
1118
+ topValues = _getCalendarValuesFor5[0];
1119
+ bottomValues = _getCalendarValuesFor5[1];
1120
+ break;
1121
+
1122
+ case exports.ViewMode.Day:
1123
+ var _getCalendarValuesFor6 = getCalendarValuesForDay();
1124
+
1125
+ topValues = _getCalendarValuesFor6[0];
1126
+ bottomValues = _getCalendarValuesFor6[1];
1127
+ break;
1128
+
1129
+ case exports.ViewMode.QuarterDay:
1130
+ case exports.ViewMode.HalfDay:
1131
+ var _getCalendarValuesFor7 = getCalendarValuesForPartOfDay();
1132
+
1133
+ topValues = _getCalendarValuesFor7[0];
1134
+ bottomValues = _getCalendarValuesFor7[1];
1135
+ break;
1136
+
1137
+ case exports.ViewMode.Hour:
1138
+ var _getCalendarValuesFor8 = getCalendarValuesForHour();
1139
+
1140
+ topValues = _getCalendarValuesFor8[0];
1141
+ bottomValues = _getCalendarValuesFor8[1];
1142
+ }
1143
+
1144
+ return React__default.createElement("g", {
1145
+ className: "calendar",
1146
+ fontSize: fontSize,
1147
+ fontFamily: fontFamily
1148
+ }, React__default.createElement("rect", {
1149
+ x: 0,
1150
+ y: 0,
1151
+ width: columnWidth * dateSetup.dates.length,
1152
+ height: headerHeight,
1153
+ className: styles$5.calendarHeader
1154
+ }), bottomValues, " ", topValues, React__default.createElement("line", {
1155
+ x1: 0,
1156
+ y1: headerHeight * 0.5,
1157
+ x2: columnWidth * dateSetup.dates.length,
1158
+ y2: headerHeight * 0.5,
1159
+ className: styles$5.calendarTopTick
1160
+ }));
1161
+ };
1162
+
1163
+ // A type of promise-like that resolves synchronously and supports only one observer
1164
+
1165
+ const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator"))) : "@@iterator";
1166
+
1167
+ const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator"))) : "@@asyncIterator";
1168
+
1169
+ // Asynchronously call a function and send errors to recovery continuation
1170
+ function _catch(body, recover) {
1171
+ try {
1172
+ var result = body();
1173
+ } catch(e) {
1174
+ return recover(e);
1175
+ }
1176
+ if (result && result.then) {
1177
+ return result.then(void 0, recover);
1178
+ }
1179
+ return result;
1180
+ }
1181
+
1182
+ var Arrow = function Arrow(_ref) {
1183
+ var taskFrom = _ref.taskFrom,
1184
+ taskTo = _ref.taskTo,
1185
+ rowHeight = _ref.rowHeight,
1186
+ taskHeight = _ref.taskHeight,
1187
+ arrowIndent = _ref.arrowIndent,
1188
+ rtl = _ref.rtl;
1189
+ var path;
1190
+ var trianglePoints;
1191
+
1192
+ if (rtl) {
1193
+ var _drownPathAndTriangle = drownPathAndTriangleRTL(taskFrom, taskTo, rowHeight, taskHeight, arrowIndent);
1194
+
1195
+ path = _drownPathAndTriangle[0];
1196
+ trianglePoints = _drownPathAndTriangle[1];
1197
+ } else {
1198
+ var _drownPathAndTriangle2 = drownPathAndTriangle(taskFrom, taskTo, rowHeight, taskHeight, arrowIndent);
1199
+
1200
+ path = _drownPathAndTriangle2[0];
1201
+ trianglePoints = _drownPathAndTriangle2[1];
1202
+ }
1203
+
1204
+ return React__default.createElement("g", {
1205
+ className: "arrow"
1206
+ }, React__default.createElement("path", {
1207
+ strokeWidth: "1.5",
1208
+ d: path,
1209
+ fill: "none"
1210
+ }), React__default.createElement("polygon", {
1211
+ points: trianglePoints
1212
+ }));
1213
+ };
1214
+
1215
+ var drownPathAndTriangle = function drownPathAndTriangle(taskFrom, taskTo, rowHeight, taskHeight, arrowIndent) {
1216
+ var indexCompare = taskFrom.index > taskTo.index ? -1 : 1;
1217
+ var taskToEndPosition = taskTo.y + taskHeight / 2;
1218
+ var taskFromEndPosition = taskFrom.x2 + arrowIndent * 2;
1219
+ var taskFromHorizontalOffsetValue = taskFromEndPosition < taskTo.x1 ? "" : "H " + (taskTo.x1 - arrowIndent);
1220
+ var taskToHorizontalOffsetValue = taskFromEndPosition > taskTo.x1 ? arrowIndent : taskTo.x1 - taskFrom.x2 - arrowIndent;
1221
+ var path = "M " + taskFrom.x2 + " " + (taskFrom.y + taskHeight / 2) + " \n h " + arrowIndent + " \n v " + indexCompare * rowHeight / 2 + " \n " + taskFromHorizontalOffsetValue + "\n V " + taskToEndPosition + " \n h " + taskToHorizontalOffsetValue;
1222
+ var trianglePoints = taskTo.x1 + "," + taskToEndPosition + " \n " + (taskTo.x1 - 5) + "," + (taskToEndPosition - 5) + " \n " + (taskTo.x1 - 5) + "," + (taskToEndPosition + 5);
1223
+ return [path, trianglePoints];
1224
+ };
1225
+
1226
+ var drownPathAndTriangleRTL = function drownPathAndTriangleRTL(taskFrom, taskTo, rowHeight, taskHeight, arrowIndent) {
1227
+ var indexCompare = taskFrom.index > taskTo.index ? -1 : 1;
1228
+ var taskToEndPosition = taskTo.y + taskHeight / 2;
1229
+ var taskFromEndPosition = taskFrom.x1 - arrowIndent * 2;
1230
+ var taskFromHorizontalOffsetValue = taskFromEndPosition > taskTo.x2 ? "" : "H " + (taskTo.x2 + arrowIndent);
1231
+ var taskToHorizontalOffsetValue = taskFromEndPosition < taskTo.x2 ? -arrowIndent : taskTo.x2 - taskFrom.x1 + arrowIndent;
1232
+ var path = "M " + taskFrom.x1 + " " + (taskFrom.y + taskHeight / 2) + " \n h " + -arrowIndent + " \n v " + indexCompare * rowHeight / 2 + " \n " + taskFromHorizontalOffsetValue + "\n V " + taskToEndPosition + " \n h " + taskToHorizontalOffsetValue;
1233
+ var trianglePoints = taskTo.x2 + "," + taskToEndPosition + " \n " + (taskTo.x2 + 5) + "," + (taskToEndPosition + 5) + " \n " + (taskTo.x2 + 5) + "," + (taskToEndPosition - 5);
1234
+ return [path, trianglePoints];
1235
+ };
1236
+
1237
+ var convertToBarTasks = function convertToBarTasks(tasks, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, baselineBackgroundColor) {
1238
+ var barTasks = tasks.map(function (t, i) {
1239
+ return convertToBarTask(t, i, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, baselineBackgroundColor);
1240
+ });
1241
+ barTasks = barTasks.map(function (task) {
1242
+ var dependencies = task.dependencies || [];
1243
+
1244
+ var _loop = function _loop(j) {
1245
+ var dependence = barTasks.findIndex(function (value) {
1246
+ return value.id === dependencies[j];
1247
+ });
1248
+ if (dependence !== -1) barTasks[dependence].barChildren.push(task);
1249
+ };
1250
+
1251
+ for (var j = 0; j < dependencies.length; j++) {
1252
+ _loop(j);
1253
+ }
1254
+
1255
+ return task;
1256
+ });
1257
+ return barTasks;
1258
+ };
1259
+
1260
+ var convertToBarTask = function convertToBarTask(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, baselineBackgroundColor) {
1261
+ var barTask;
1262
+
1263
+ switch (task.type) {
1264
+ case "milestone":
1265
+ barTask = convertToMilestone(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, milestoneBackgroundColor, milestoneBackgroundSelectedColor);
1266
+ break;
1267
+
1268
+ case "project":
1269
+ barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, baselineBackgroundColor);
1270
+ break;
1271
+
1272
+ default:
1273
+ barTask = convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, baselineBackgroundColor);
1274
+ break;
1275
+ }
1276
+
1277
+ return barTask;
1278
+ };
1279
+
1280
+ var convertToBar = function convertToBar(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, baselineBackgroundColor) {
1281
+ var x1;
1282
+ var x2;
1283
+
1284
+ if (rtl) {
1285
+ x2 = taskXCoordinateRTL(task.start, dates, columnWidth);
1286
+ x1 = taskXCoordinateRTL(task.end, dates, columnWidth);
1287
+ } else {
1288
+ x1 = taskXCoordinate(task.start, dates, columnWidth);
1289
+ x2 = taskXCoordinate(task.end, dates, columnWidth);
1290
+ }
1291
+
1292
+ var baselineX1;
1293
+ var baselineX2;
1294
+
1295
+ if (task.baselineStart && task.baselineEnd) {
1296
+ if (rtl) {
1297
+ baselineX2 = taskXCoordinateRTL(task.baselineStart, dates, columnWidth);
1298
+ baselineX1 = taskXCoordinateRTL(task.baselineEnd, dates, columnWidth);
1299
+ } else {
1300
+ baselineX1 = taskXCoordinate(task.baselineStart, dates, columnWidth);
1301
+ baselineX2 = taskXCoordinate(task.baselineEnd, dates, columnWidth);
1302
+ }
1303
+ }
1304
+
1305
+ var typeInternal = task.type;
1306
+
1307
+ if (typeInternal === "task" && x2 - x1 < handleWidth * 2) {
1308
+ typeInternal = "smalltask";
1309
+ x2 = x1 + handleWidth * 2;
1310
+ }
1311
+
1312
+ var _progressWithByParams = progressWithByParams(x1, x2, task.progress, rtl),
1313
+ progressWidth = _progressWithByParams[0],
1314
+ progressX = _progressWithByParams[1];
1315
+
1316
+ var y = taskYCoordinate(index, rowHeight, taskHeight);
1317
+ var hideChildren = task.type === "project" ? task.hideChildren : undefined;
1318
+
1319
+ var styles = _extends({
1320
+ backgroundColor: barBackgroundColor,
1321
+ backgroundSelectedColor: barBackgroundSelectedColor,
1322
+ progressColor: barProgressColor,
1323
+ progressSelectedColor: barProgressSelectedColor,
1324
+ baselineBackgroundColor: baselineBackgroundColor
1325
+ }, task.styles);
1326
+
1327
+ return _extends({}, task, {
1328
+ typeInternal: typeInternal,
1329
+ x1: x1,
1330
+ x2: x2,
1331
+ y: y,
1332
+ index: index,
1333
+ progressX: progressX,
1334
+ progressWidth: progressWidth,
1335
+ barCornerRadius: barCornerRadius,
1336
+ handleWidth: handleWidth,
1337
+ hideChildren: hideChildren,
1338
+ height: taskHeight,
1339
+ barChildren: [],
1340
+ styles: styles,
1341
+ baselineX1: baselineX1,
1342
+ baselineX2: baselineX2
1343
+ });
1344
+ };
1345
+
1346
+ var convertToMilestone = function convertToMilestone(task, index, dates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, milestoneBackgroundColor, milestoneBackgroundSelectedColor) {
1347
+ var x = taskXCoordinate(task.start, dates, columnWidth);
1348
+ var y = taskYCoordinate(index, rowHeight, taskHeight);
1349
+ var x1 = x - taskHeight * 0.5;
1350
+ var x2 = x + taskHeight * 0.5;
1351
+ var rotatedHeight = taskHeight / 1.414;
1352
+
1353
+ var styles = _extends({
1354
+ backgroundColor: milestoneBackgroundColor,
1355
+ backgroundSelectedColor: milestoneBackgroundSelectedColor,
1356
+ progressColor: "",
1357
+ progressSelectedColor: ""
1358
+ }, task.styles);
1359
+
1360
+ return _extends({}, task, {
1361
+ end: task.start,
1362
+ x1: x1,
1363
+ x2: x2,
1364
+ y: y,
1365
+ index: index,
1366
+ progressX: 0,
1367
+ progressWidth: 0,
1368
+ barCornerRadius: barCornerRadius,
1369
+ handleWidth: handleWidth,
1370
+ typeInternal: task.type,
1371
+ progress: 0,
1372
+ height: rotatedHeight,
1373
+ hideChildren: undefined,
1374
+ barChildren: [],
1375
+ styles: styles
1376
+ });
1377
+ };
1378
+
1379
+ var taskXCoordinate = function taskXCoordinate(xDate, dates, columnWidth) {
1380
+ var index = dates.findIndex(function (d) {
1381
+ return d.getTime() >= xDate.getTime();
1382
+ }) - 1;
1383
+ var remainderMillis = xDate.getTime() - dates[index].getTime();
1384
+ var percentOfInterval = remainderMillis / (dates[index + 1].getTime() - dates[index].getTime());
1385
+ var x = index * columnWidth + percentOfInterval * columnWidth;
1386
+ return x;
1387
+ };
1388
+
1389
+ var taskXCoordinateRTL = function taskXCoordinateRTL(xDate, dates, columnWidth) {
1390
+ var x = taskXCoordinate(xDate, dates, columnWidth);
1391
+ x += columnWidth;
1392
+ return x;
1393
+ };
1394
+
1395
+ var taskYCoordinate = function taskYCoordinate(index, rowHeight, taskHeight) {
1396
+ var y = index * rowHeight + (rowHeight - taskHeight) / 2;
1397
+ return y;
1398
+ };
1399
+
1400
+ var progressWithByParams = function progressWithByParams(taskX1, taskX2, progress, rtl) {
1401
+ var progressWidth = (taskX2 - taskX1) * progress * 0.01;
1402
+ var progressX;
1403
+
1404
+ if (rtl) {
1405
+ progressX = taskX2 - progressWidth;
1406
+ } else {
1407
+ progressX = taskX1;
1408
+ }
1409
+
1410
+ return [progressWidth, progressX];
1411
+ };
1412
+
1413
+ var progressByX = function progressByX(x, task) {
1414
+ if (x >= task.x2) return 100;else if (x <= task.x1) return 0;else {
1415
+ var barWidth = task.x2 - task.x1;
1416
+ var progressPercent = Math.round((x - task.x1) * 100 / barWidth);
1417
+ return progressPercent;
1418
+ }
1419
+ };
1420
+
1421
+ var progressByXRTL = function progressByXRTL(x, task) {
1422
+ if (x >= task.x2) return 0;else if (x <= task.x1) return 100;else {
1423
+ var barWidth = task.x2 - task.x1;
1424
+ var progressPercent = Math.round((task.x2 - x) * 100 / barWidth);
1425
+ return progressPercent;
1426
+ }
1427
+ };
1428
+
1429
+ var getProgressPoint = function getProgressPoint(progressX, taskY, taskHeight) {
1430
+ var point = [progressX - 5, taskY + taskHeight, progressX + 5, taskY + taskHeight, progressX, taskY + taskHeight - 8.66];
1431
+ return point.join(",");
1432
+ };
1433
+
1434
+ var startByX = function startByX(x, xStep, task) {
1435
+ if (x >= task.x2 - task.handleWidth * 2) {
1436
+ x = task.x2 - task.handleWidth * 2;
1437
+ }
1438
+
1439
+ var steps = Math.round((x - task.x1) / xStep);
1440
+ var additionalXValue = steps * xStep;
1441
+ var newX = task.x1 + additionalXValue;
1442
+ return newX;
1443
+ };
1444
+
1445
+ var endByX = function endByX(x, xStep, task) {
1446
+ if (x <= task.x1 + task.handleWidth * 2) {
1447
+ x = task.x1 + task.handleWidth * 2;
1448
+ }
1449
+
1450
+ var steps = Math.round((x - task.x2) / xStep);
1451
+ var additionalXValue = steps * xStep;
1452
+ var newX = task.x2 + additionalXValue;
1453
+ return newX;
1454
+ };
1455
+
1456
+ var moveByX = function moveByX(x, xStep, task) {
1457
+ var steps = Math.round((x - task.x1) / xStep);
1458
+ var additionalXValue = steps * xStep;
1459
+ var newX1 = task.x1 + additionalXValue;
1460
+ var newX2 = newX1 + task.x2 - task.x1;
1461
+ return [newX1, newX2];
1462
+ };
1463
+
1464
+ var dateByX = function dateByX(x, taskX, taskDate, xStep, timeStep) {
1465
+ var newDate = new Date((x - taskX) / xStep * timeStep + taskDate.getTime());
1466
+ newDate = new Date(newDate.getTime() + (newDate.getTimezoneOffset() - taskDate.getTimezoneOffset()) * 60000);
1467
+ return newDate;
1468
+ };
1469
+
1470
+ var handleTaskBySVGMouseEvent = function handleTaskBySVGMouseEvent(svgX, action, selectedTask, xStep, timeStep, initEventX1Delta, rtl) {
1471
+ var result;
1472
+
1473
+ switch (selectedTask.type) {
1474
+ case "milestone":
1475
+ result = handleTaskBySVGMouseEventForMilestone(svgX, action, selectedTask, xStep, timeStep, initEventX1Delta);
1476
+ break;
1477
+
1478
+ default:
1479
+ result = handleTaskBySVGMouseEventForBar(svgX, action, selectedTask, xStep, timeStep, initEventX1Delta, rtl);
1480
+ break;
1481
+ }
1482
+
1483
+ return result;
1484
+ };
1485
+
1486
+ var handleTaskBySVGMouseEventForBar = function handleTaskBySVGMouseEventForBar(svgX, action, selectedTask, xStep, timeStep, initEventX1Delta, rtl) {
1487
+ var changedTask = _extends({}, selectedTask);
1488
+
1489
+ var isChanged = false;
1490
+
1491
+ switch (action) {
1492
+ case "progress":
1493
+ if (rtl) {
1494
+ changedTask.progress = progressByXRTL(svgX, selectedTask);
1495
+ } else {
1496
+ changedTask.progress = progressByX(svgX, selectedTask);
1497
+ }
1498
+
1499
+ isChanged = changedTask.progress !== selectedTask.progress;
1500
+
1501
+ if (isChanged) {
1502
+ var _progressWithByParams2 = progressWithByParams(changedTask.x1, changedTask.x2, changedTask.progress, rtl),
1503
+ progressWidth = _progressWithByParams2[0],
1504
+ progressX = _progressWithByParams2[1];
1505
+
1506
+ changedTask.progressWidth = progressWidth;
1507
+ changedTask.progressX = progressX;
1508
+ }
1509
+
1510
+ break;
1511
+
1512
+ case "start":
1513
+ {
1514
+ var newX1 = startByX(svgX, xStep, selectedTask);
1515
+ changedTask.x1 = newX1;
1516
+ isChanged = changedTask.x1 !== selectedTask.x1;
1517
+
1518
+ if (isChanged) {
1519
+ if (rtl) {
1520
+ changedTask.end = dateByX(newX1, selectedTask.x1, selectedTask.end, xStep, timeStep);
1521
+ } else {
1522
+ changedTask.start = dateByX(newX1, selectedTask.x1, selectedTask.start, xStep, timeStep);
1523
+ }
1524
+
1525
+ var _progressWithByParams3 = progressWithByParams(changedTask.x1, changedTask.x2, changedTask.progress, rtl),
1526
+ _progressWidth = _progressWithByParams3[0],
1527
+ _progressX = _progressWithByParams3[1];
1528
+
1529
+ changedTask.progressWidth = _progressWidth;
1530
+ changedTask.progressX = _progressX;
1531
+ }
1532
+
1533
+ break;
1534
+ }
1535
+
1536
+ case "end":
1537
+ {
1538
+ var newX2 = endByX(svgX, xStep, selectedTask);
1539
+ changedTask.x2 = newX2;
1540
+ isChanged = changedTask.x2 !== selectedTask.x2;
1541
+
1542
+ if (isChanged) {
1543
+ if (rtl) {
1544
+ changedTask.start = dateByX(newX2, selectedTask.x2, selectedTask.start, xStep, timeStep);
1545
+ } else {
1546
+ changedTask.end = dateByX(newX2, selectedTask.x2, selectedTask.end, xStep, timeStep);
1547
+ }
1548
+
1549
+ var _progressWithByParams4 = progressWithByParams(changedTask.x1, changedTask.x2, changedTask.progress, rtl),
1550
+ _progressWidth2 = _progressWithByParams4[0],
1551
+ _progressX2 = _progressWithByParams4[1];
1552
+
1553
+ changedTask.progressWidth = _progressWidth2;
1554
+ changedTask.progressX = _progressX2;
1555
+ }
1556
+
1557
+ break;
1558
+ }
1559
+
1560
+ case "move":
1561
+ {
1562
+ var _moveByX = moveByX(svgX - initEventX1Delta, xStep, selectedTask),
1563
+ newMoveX1 = _moveByX[0],
1564
+ newMoveX2 = _moveByX[1];
1565
+
1566
+ isChanged = newMoveX1 !== selectedTask.x1;
1567
+
1568
+ if (isChanged) {
1569
+ changedTask.start = dateByX(newMoveX1, selectedTask.x1, selectedTask.start, xStep, timeStep);
1570
+ changedTask.end = dateByX(newMoveX2, selectedTask.x2, selectedTask.end, xStep, timeStep);
1571
+ changedTask.x1 = newMoveX1;
1572
+ changedTask.x2 = newMoveX2;
1573
+
1574
+ var _progressWithByParams5 = progressWithByParams(changedTask.x1, changedTask.x2, changedTask.progress, rtl),
1575
+ _progressWidth3 = _progressWithByParams5[0],
1576
+ _progressX3 = _progressWithByParams5[1];
1577
+
1578
+ changedTask.progressWidth = _progressWidth3;
1579
+ changedTask.progressX = _progressX3;
1580
+ }
1581
+
1582
+ break;
1583
+ }
1584
+ }
1585
+
1586
+ return {
1587
+ isChanged: isChanged,
1588
+ changedTask: changedTask
1589
+ };
1590
+ };
1591
+
1592
+ var handleTaskBySVGMouseEventForMilestone = function handleTaskBySVGMouseEventForMilestone(svgX, action, selectedTask, xStep, timeStep, initEventX1Delta) {
1593
+ var changedTask = _extends({}, selectedTask);
1594
+
1595
+ var isChanged = false;
1596
+
1597
+ switch (action) {
1598
+ case "move":
1599
+ {
1600
+ var _moveByX2 = moveByX(svgX - initEventX1Delta, xStep, selectedTask),
1601
+ newMoveX1 = _moveByX2[0],
1602
+ newMoveX2 = _moveByX2[1];
1603
+
1604
+ isChanged = newMoveX1 !== selectedTask.x1;
1605
+
1606
+ if (isChanged) {
1607
+ changedTask.start = dateByX(newMoveX1, selectedTask.x1, selectedTask.start, xStep, timeStep);
1608
+ changedTask.end = changedTask.start;
1609
+ changedTask.x1 = newMoveX1;
1610
+ changedTask.x2 = newMoveX2;
1611
+ }
1612
+
1613
+ break;
1614
+ }
1615
+ }
1616
+
1617
+ return {
1618
+ isChanged: isChanged,
1619
+ changedTask: changedTask
1620
+ };
1621
+ };
1622
+
1623
+ function isKeyboardEvent(event) {
1624
+ return event.key !== undefined;
1625
+ }
1626
+ function removeHiddenTasks(tasks) {
1627
+ var groupedTasks = tasks.filter(function (t) {
1628
+ return t.hideChildren && t.type === "project";
1629
+ });
1630
+
1631
+ if (groupedTasks.length > 0) {
1632
+ var _loop = function _loop(i) {
1633
+ var groupedTask = groupedTasks[i];
1634
+ var children = getChildren(tasks, groupedTask);
1635
+ tasks = tasks.filter(function (t) {
1636
+ return children.indexOf(t) === -1;
1637
+ });
1638
+ };
1639
+
1640
+ for (var i = 0; groupedTasks.length > i; i++) {
1641
+ _loop(i);
1642
+ }
1643
+ }
1644
+
1645
+ return tasks;
1646
+ }
1647
+
1648
+ function getChildren(taskList, task) {
1649
+ var tasks = [];
1650
+
1651
+ if (task.type !== "project") {
1652
+ tasks = taskList.filter(function (t) {
1653
+ return t.dependencies && t.dependencies.indexOf(task.id) !== -1;
1654
+ });
1655
+ } else {
1656
+ tasks = taskList.filter(function (t) {
1657
+ return t.project && t.project === task.id;
1658
+ });
1659
+ }
1660
+
1661
+ var taskChildren = [];
1662
+ tasks.forEach(function (t) {
1663
+ taskChildren.push.apply(taskChildren, getChildren(taskList, t));
1664
+ });
1665
+ tasks = tasks.concat(tasks, taskChildren);
1666
+ return tasks;
1667
+ }
1668
+
1669
+ var sortTasks = function sortTasks(taskA, taskB) {
1670
+ var orderA = taskA.displayOrder || Number.MAX_VALUE;
1671
+ var orderB = taskB.displayOrder || Number.MAX_VALUE;
1672
+
1673
+ if (orderA > orderB) {
1674
+ return 1;
1675
+ } else if (orderA < orderB) {
1676
+ return -1;
1677
+ } else {
1678
+ return 0;
1679
+ }
1680
+ };
1681
+
1682
+ var styles$6 = {"barWrapper":"_KxSXS","barHandle":"_3w_5u","barBackground":"_31ERP"};
1683
+
1684
+ var BarDisplay = function BarDisplay(_ref) {
1685
+ var x = _ref.x,
1686
+ y = _ref.y,
1687
+ width = _ref.width,
1688
+ height = _ref.height,
1689
+ isSelected = _ref.isSelected,
1690
+ progressX = _ref.progressX,
1691
+ progressWidth = _ref.progressWidth,
1692
+ barCornerRadius = _ref.barCornerRadius,
1693
+ styles = _ref.styles,
1694
+ onMouseDown = _ref.onMouseDown;
1695
+
1696
+ var getProcessColor = function getProcessColor() {
1697
+ return isSelected ? styles.progressSelectedColor : styles.progressColor;
1698
+ };
1699
+
1700
+ var getBarColor = function getBarColor() {
1701
+ return isSelected ? styles.backgroundSelectedColor : styles.backgroundColor;
1702
+ };
1703
+
1704
+ return React__default.createElement("g", {
1705
+ onMouseDown: onMouseDown
1706
+ }, React__default.createElement("rect", {
1707
+ x: x,
1708
+ width: width,
1709
+ y: y,
1710
+ height: height,
1711
+ ry: barCornerRadius,
1712
+ rx: barCornerRadius,
1713
+ fill: getBarColor(),
1714
+ className: styles$6.barBackground
1715
+ }), React__default.createElement("rect", {
1716
+ x: progressX,
1717
+ width: progressWidth,
1718
+ y: y,
1719
+ height: height,
1720
+ ry: barCornerRadius,
1721
+ rx: barCornerRadius,
1722
+ fill: getProcessColor()
1723
+ }));
1724
+ };
1725
+
1726
+ var BarDateHandle = function BarDateHandle(_ref) {
1727
+ var x = _ref.x,
1728
+ y = _ref.y,
1729
+ width = _ref.width,
1730
+ height = _ref.height,
1731
+ barCornerRadius = _ref.barCornerRadius,
1732
+ onMouseDown = _ref.onMouseDown;
1733
+ return React__default.createElement("rect", {
1734
+ x: x,
1735
+ y: y,
1736
+ width: width,
1737
+ height: height,
1738
+ className: styles$6.barHandle,
1739
+ ry: barCornerRadius,
1740
+ rx: barCornerRadius,
1741
+ onMouseDown: onMouseDown
1742
+ });
1743
+ };
1744
+
1745
+ var BarProgressHandle = function BarProgressHandle(_ref) {
1746
+ var progressPoint = _ref.progressPoint,
1747
+ onMouseDown = _ref.onMouseDown;
1748
+ return React__default.createElement("polygon", {
1749
+ className: styles$6.barHandle,
1750
+ points: progressPoint,
1751
+ onMouseDown: onMouseDown
1752
+ });
1753
+ };
1754
+
1755
+ var Bar = function Bar(_ref) {
1756
+ var task = _ref.task,
1757
+ isProgressChangeable = _ref.isProgressChangeable,
1758
+ isDateChangeable = _ref.isDateChangeable,
1759
+ rtl = _ref.rtl,
1760
+ onEventStart = _ref.onEventStart,
1761
+ isSelected = _ref.isSelected;
1762
+ var hasBaseline = task.baselineX1 !== undefined && task.baselineX2 !== undefined;
1763
+ var mainBarHeight = hasBaseline ? task.height * 0.6 : task.height;
1764
+ var baselineHeight = task.height * 0.3;
1765
+ var baselineY = task.y + mainBarHeight + task.height * 0.1;
1766
+ var progressPoint = getProgressPoint(+!rtl * task.progressWidth + task.progressX, task.y, mainBarHeight);
1767
+ var handleHeight = mainBarHeight - 2;
1768
+ return React__default.createElement("g", {
1769
+ className: styles$6.barWrapper,
1770
+ tabIndex: 0
1771
+ }, hasBaseline && React__default.createElement("rect", {
1772
+ x: task.baselineX1,
1773
+ y: baselineY,
1774
+ width: task.baselineX2 - task.baselineX1,
1775
+ height: baselineHeight,
1776
+ ry: task.barCornerRadius,
1777
+ rx: task.barCornerRadius,
1778
+ fill: task.styles.baselineBackgroundColor,
1779
+ className: styles$6.barBackground
1780
+ }), React__default.createElement(BarDisplay, {
1781
+ x: task.x1,
1782
+ y: task.y,
1783
+ width: task.x2 - task.x1,
1784
+ height: mainBarHeight,
1785
+ progressX: task.progressX,
1786
+ progressWidth: task.progressWidth,
1787
+ barCornerRadius: task.barCornerRadius,
1788
+ styles: task.styles,
1789
+ isSelected: isSelected,
1790
+ onMouseDown: function onMouseDown(e) {
1791
+ isDateChangeable && onEventStart("move", task, e);
1792
+ }
1793
+ }), React__default.createElement("g", {
1794
+ className: "handleGroup"
1795
+ }, isDateChangeable && React__default.createElement("g", null, React__default.createElement(BarDateHandle, {
1796
+ x: task.x1 + 1,
1797
+ y: task.y + 1,
1798
+ width: task.handleWidth,
1799
+ height: handleHeight,
1800
+ barCornerRadius: task.barCornerRadius,
1801
+ onMouseDown: function onMouseDown(e) {
1802
+ onEventStart("start", task, e);
1803
+ }
1804
+ }), React__default.createElement(BarDateHandle, {
1805
+ x: task.x2 - task.handleWidth - 1,
1806
+ y: task.y + 1,
1807
+ width: task.handleWidth,
1808
+ height: handleHeight,
1809
+ barCornerRadius: task.barCornerRadius,
1810
+ onMouseDown: function onMouseDown(e) {
1811
+ onEventStart("end", task, e);
1812
+ }
1813
+ })), isProgressChangeable && React__default.createElement(BarProgressHandle, {
1814
+ progressPoint: progressPoint,
1815
+ onMouseDown: function onMouseDown(e) {
1816
+ onEventStart("progress", task, e);
1817
+ }
1818
+ })));
1819
+ };
1820
+
1821
+ var BarSmall = function BarSmall(_ref) {
1822
+ var task = _ref.task,
1823
+ isProgressChangeable = _ref.isProgressChangeable,
1824
+ isDateChangeable = _ref.isDateChangeable,
1825
+ onEventStart = _ref.onEventStart,
1826
+ isSelected = _ref.isSelected;
1827
+ var progressPoint = getProgressPoint(task.progressWidth + task.x1, task.y, task.height);
1828
+ return React__default.createElement("g", {
1829
+ className: styles$6.barWrapper,
1830
+ tabIndex: 0
1831
+ }, React__default.createElement(BarDisplay, {
1832
+ x: task.x1,
1833
+ y: task.y,
1834
+ width: task.x2 - task.x1,
1835
+ height: task.height,
1836
+ progressX: task.progressX,
1837
+ progressWidth: task.progressWidth,
1838
+ barCornerRadius: task.barCornerRadius,
1839
+ styles: task.styles,
1840
+ isSelected: isSelected,
1841
+ onMouseDown: function onMouseDown(e) {
1842
+ isDateChangeable && onEventStart("move", task, e);
1843
+ }
1844
+ }), React__default.createElement("g", {
1845
+ className: "handleGroup"
1846
+ }, isProgressChangeable && React__default.createElement(BarProgressHandle, {
1847
+ progressPoint: progressPoint,
1848
+ onMouseDown: function onMouseDown(e) {
1849
+ onEventStart("progress", task, e);
1850
+ }
1851
+ })));
1852
+ };
1853
+
1854
+ var styles$7 = {"milestoneWrapper":"_RRr13","milestoneBackground":"_2P2B1"};
1855
+
1856
+ var Milestone = function Milestone(_ref) {
1857
+ var task = _ref.task,
1858
+ isDateChangeable = _ref.isDateChangeable,
1859
+ onEventStart = _ref.onEventStart,
1860
+ isSelected = _ref.isSelected;
1861
+ var transform = "rotate(45 " + (task.x1 + task.height * 0.356) + " \n " + (task.y + task.height * 0.85) + ")";
1862
+
1863
+ var getBarColor = function getBarColor() {
1864
+ return isSelected ? task.styles.backgroundSelectedColor : task.styles.backgroundColor;
1865
+ };
1866
+
1867
+ return React__default.createElement("g", {
1868
+ tabIndex: 0,
1869
+ className: styles$7.milestoneWrapper
1870
+ }, React__default.createElement("rect", {
1871
+ fill: getBarColor(),
1872
+ x: task.x1,
1873
+ width: task.height,
1874
+ y: task.y,
1875
+ height: task.height,
1876
+ rx: task.barCornerRadius,
1877
+ ry: task.barCornerRadius,
1878
+ transform: transform,
1879
+ className: styles$7.milestoneBackground,
1880
+ onMouseDown: function onMouseDown(e) {
1881
+ isDateChangeable && onEventStart("move", task, e);
1882
+ }
1883
+ }));
1884
+ };
1885
+
1886
+ var styles$8 = {"projectWrapper":"_1KJ6x","projectBackground":"_2RbVy","projectTop":"_2pZMF"};
1887
+
1888
+ var Project = function Project(_ref) {
1889
+ var task = _ref.task,
1890
+ isSelected = _ref.isSelected;
1891
+ var barColor = isSelected ? task.styles.backgroundSelectedColor : task.styles.backgroundColor;
1892
+ var processColor = isSelected ? task.styles.progressSelectedColor : task.styles.progressColor;
1893
+ var projectWith = task.x2 - task.x1;
1894
+ var projectLeftTriangle = [task.x1, task.y + task.height / 2 - 1, task.x1, task.y + task.height, task.x1 + 15, task.y + task.height / 2 - 1].join(",");
1895
+ var projectRightTriangle = [task.x2, task.y + task.height / 2 - 1, task.x2, task.y + task.height, task.x2 - 15, task.y + task.height / 2 - 1].join(",");
1896
+ return React__default.createElement("g", {
1897
+ tabIndex: 0,
1898
+ className: styles$8.projectWrapper
1899
+ }, React__default.createElement("rect", {
1900
+ fill: barColor,
1901
+ x: task.x1,
1902
+ width: projectWith,
1903
+ y: task.y,
1904
+ height: task.height,
1905
+ rx: task.barCornerRadius,
1906
+ ry: task.barCornerRadius,
1907
+ className: styles$8.projectBackground
1908
+ }), React__default.createElement("rect", {
1909
+ x: task.progressX,
1910
+ width: task.progressWidth,
1911
+ y: task.y,
1912
+ height: task.height,
1913
+ ry: task.barCornerRadius,
1914
+ rx: task.barCornerRadius,
1915
+ fill: processColor
1916
+ }), React__default.createElement("rect", {
1917
+ fill: barColor,
1918
+ x: task.x1,
1919
+ width: projectWith,
1920
+ y: task.y,
1921
+ height: task.height / 2,
1922
+ rx: task.barCornerRadius,
1923
+ ry: task.barCornerRadius,
1924
+ className: styles$8.projectTop
1925
+ }), React__default.createElement("polygon", {
1926
+ className: styles$8.projectTop,
1927
+ points: projectLeftTriangle,
1928
+ fill: barColor
1929
+ }), React__default.createElement("polygon", {
1930
+ className: styles$8.projectTop,
1931
+ points: projectRightTriangle,
1932
+ fill: barColor
1933
+ }));
1934
+ };
1935
+
1936
+ var style = {"barLabel":"_3zRJQ","barLabelOutside":"_3KcaM"};
1937
+
1938
+ var TaskItem = function TaskItem(props) {
1939
+ var _props = _extends({}, props),
1940
+ task = _props.task,
1941
+ arrowIndent = _props.arrowIndent,
1942
+ isDelete = _props.isDelete,
1943
+ taskHeight = _props.taskHeight,
1944
+ isSelected = _props.isSelected,
1945
+ rtl = _props.rtl,
1946
+ onEventStart = _props.onEventStart;
1947
+
1948
+ var textRef = React.useRef(null);
1949
+
1950
+ var _useState = React.useState(React__default.createElement("div", null)),
1951
+ taskItem = _useState[0],
1952
+ setTaskItem = _useState[1];
1953
+
1954
+ var _useState2 = React.useState(true),
1955
+ isTextInside = _useState2[0],
1956
+ setIsTextInside = _useState2[1];
1957
+
1958
+ React.useEffect(function () {
1959
+ switch (task.typeInternal) {
1960
+ case "milestone":
1961
+ setTaskItem(React__default.createElement(Milestone, Object.assign({}, props)));
1962
+ break;
1963
+
1964
+ case "project":
1965
+ setTaskItem(React__default.createElement(Project, Object.assign({}, props)));
1966
+ break;
1967
+
1968
+ case "smalltask":
1969
+ setTaskItem(React__default.createElement(BarSmall, Object.assign({}, props)));
1970
+ break;
1971
+
1972
+ default:
1973
+ setTaskItem(React__default.createElement(Bar, Object.assign({}, props)));
1974
+ break;
1975
+ }
1976
+ }, [task, isSelected]);
1977
+ React.useEffect(function () {
1978
+ if (textRef.current) {
1979
+ setIsTextInside(textRef.current.getBBox().width < task.x2 - task.x1);
1980
+ }
1981
+ }, [textRef, task]);
1982
+
1983
+ var getX = function getX() {
1984
+ var width = task.x2 - task.x1;
1985
+ var hasChild = task.barChildren.length > 0;
1986
+
1987
+ if (isTextInside) {
1988
+ return task.x1 + width * 0.5;
1989
+ }
1990
+
1991
+ if (rtl && textRef.current) {
1992
+ return task.x1 - textRef.current.getBBox().width - arrowIndent * +hasChild - arrowIndent * 0.2;
1993
+ } else {
1994
+ return task.x1 + width + arrowIndent * +hasChild + arrowIndent * 0.2;
1995
+ }
1996
+ };
1997
+
1998
+ return React__default.createElement("g", {
1999
+ onKeyDown: function onKeyDown(e) {
2000
+ switch (e.key) {
2001
+ case "Delete":
2002
+ {
2003
+ if (isDelete) onEventStart("delete", task, e);
2004
+ break;
2005
+ }
2006
+ }
2007
+
2008
+ e.stopPropagation();
2009
+ },
2010
+ onMouseEnter: function onMouseEnter(e) {
2011
+ onEventStart("mouseenter", task, e);
2012
+ },
2013
+ onMouseLeave: function onMouseLeave(e) {
2014
+ onEventStart("mouseleave", task, e);
2015
+ },
2016
+ onDoubleClick: function onDoubleClick(e) {
2017
+ onEventStart("dblclick", task, e);
2018
+ },
2019
+ onClick: function onClick(e) {
2020
+ onEventStart("click", task, e);
2021
+ },
2022
+ onFocus: function onFocus() {
2023
+ onEventStart("select", task);
2024
+ }
2025
+ }, taskItem, React__default.createElement("text", {
2026
+ x: getX(),
2027
+ y: task.y + taskHeight * 0.5,
2028
+ className: isTextInside ? style.barLabel : style.barLabelOutside,
2029
+ ref: textRef
2030
+ }, task.name));
2031
+ };
2032
+
2033
+ var TaskGanttContent = function TaskGanttContent(_ref) {
2034
+ var _svg$current;
2035
+
2036
+ var tasks = _ref.tasks,
2037
+ dates = _ref.dates,
2038
+ ganttEvent = _ref.ganttEvent,
2039
+ selectedTask = _ref.selectedTask,
2040
+ rowHeight = _ref.rowHeight,
2041
+ columnWidth = _ref.columnWidth,
2042
+ timeStep = _ref.timeStep,
2043
+ svg = _ref.svg,
2044
+ taskHeight = _ref.taskHeight,
2045
+ arrowColor = _ref.arrowColor,
2046
+ arrowIndent = _ref.arrowIndent,
2047
+ fontFamily = _ref.fontFamily,
2048
+ fontSize = _ref.fontSize,
2049
+ rtl = _ref.rtl,
2050
+ setGanttEvent = _ref.setGanttEvent,
2051
+ setFailedTask = _ref.setFailedTask,
2052
+ setSelectedTask = _ref.setSelectedTask,
2053
+ onDateChange = _ref.onDateChange,
2054
+ onProgressChange = _ref.onProgressChange,
2055
+ onDoubleClick = _ref.onDoubleClick,
2056
+ onClick = _ref.onClick,
2057
+ onDelete = _ref.onDelete;
2058
+ var point = svg === null || svg === void 0 ? void 0 : (_svg$current = svg.current) === null || _svg$current === void 0 ? void 0 : _svg$current.createSVGPoint();
2059
+
2060
+ var _useState = React.useState(0),
2061
+ xStep = _useState[0],
2062
+ setXStep = _useState[1];
2063
+
2064
+ var _useState2 = React.useState(0),
2065
+ initEventX1Delta = _useState2[0],
2066
+ setInitEventX1Delta = _useState2[1];
2067
+
2068
+ var _useState3 = React.useState(false),
2069
+ isMoving = _useState3[0],
2070
+ setIsMoving = _useState3[1];
2071
+
2072
+ React.useEffect(function () {
2073
+ var dateDelta = dates[1].getTime() - dates[0].getTime() - dates[1].getTimezoneOffset() * 60 * 1000 + dates[0].getTimezoneOffset() * 60 * 1000;
2074
+ var newXStep = timeStep * columnWidth / dateDelta;
2075
+ setXStep(newXStep);
2076
+ }, [columnWidth, dates, timeStep]);
2077
+ React.useEffect(function () {
2078
+ var handleMouseMove = function handleMouseMove(event) {
2079
+ try {
2080
+ var _svg$current$getScree;
2081
+
2082
+ if (!ganttEvent.changedTask || !point || !(svg !== null && svg !== void 0 && svg.current)) return Promise.resolve();
2083
+ event.preventDefault();
2084
+ point.x = event.clientX;
2085
+ var cursor = point.matrixTransform(svg === null || svg === void 0 ? void 0 : (_svg$current$getScree = svg.current.getScreenCTM()) === null || _svg$current$getScree === void 0 ? void 0 : _svg$current$getScree.inverse());
2086
+
2087
+ var _handleTaskBySVGMouse = handleTaskBySVGMouseEvent(cursor.x, ganttEvent.action, ganttEvent.changedTask, xStep, timeStep, initEventX1Delta, rtl),
2088
+ isChanged = _handleTaskBySVGMouse.isChanged,
2089
+ changedTask = _handleTaskBySVGMouse.changedTask;
2090
+
2091
+ if (isChanged) {
2092
+ setGanttEvent({
2093
+ action: ganttEvent.action,
2094
+ changedTask: changedTask
2095
+ });
2096
+ }
2097
+
2098
+ return Promise.resolve();
2099
+ } catch (e) {
2100
+ return Promise.reject(e);
2101
+ }
2102
+ };
2103
+
2104
+ var handleMouseUp = function handleMouseUp(event) {
2105
+ try {
2106
+ var _svg$current$getScree2;
2107
+
2108
+ var _temp6 = function _temp6() {
2109
+ if (!operationSuccess) {
2110
+ setFailedTask(originalSelectedTask);
2111
+ }
2112
+ };
2113
+
2114
+ var action = ganttEvent.action,
2115
+ originalSelectedTask = ganttEvent.originalSelectedTask,
2116
+ changedTask = ganttEvent.changedTask;
2117
+ if (!changedTask || !point || !(svg !== null && svg !== void 0 && svg.current) || !originalSelectedTask) return Promise.resolve();
2118
+ event.preventDefault();
2119
+ point.x = event.clientX;
2120
+ var cursor = point.matrixTransform(svg === null || svg === void 0 ? void 0 : (_svg$current$getScree2 = svg.current.getScreenCTM()) === null || _svg$current$getScree2 === void 0 ? void 0 : _svg$current$getScree2.inverse());
2121
+
2122
+ var _handleTaskBySVGMouse2 = handleTaskBySVGMouseEvent(cursor.x, action, changedTask, xStep, timeStep, initEventX1Delta, rtl),
2123
+ newChangedTask = _handleTaskBySVGMouse2.changedTask;
2124
+
2125
+ var isNotLikeOriginal = originalSelectedTask.start !== newChangedTask.start || originalSelectedTask.end !== newChangedTask.end || originalSelectedTask.progress !== newChangedTask.progress;
2126
+ svg.current.removeEventListener("mousemove", handleMouseMove);
2127
+ svg.current.removeEventListener("mouseup", handleMouseUp);
2128
+ setGanttEvent({
2129
+ action: ""
2130
+ });
2131
+ setIsMoving(false);
2132
+ var operationSuccess = true;
2133
+
2134
+ var _temp7 = function () {
2135
+ if ((action === "move" || action === "end" || action === "start") && onDateChange && isNotLikeOriginal) {
2136
+ var _temp8 = _catch(function () {
2137
+ return Promise.resolve(onDateChange(newChangedTask, newChangedTask.barChildren)).then(function (result) {
2138
+ if (result !== undefined) {
2139
+ operationSuccess = result;
2140
+ }
2141
+ });
2142
+ }, function () {
2143
+ operationSuccess = false;
2144
+ });
2145
+
2146
+ if (_temp8 && _temp8.then) return _temp8.then(function () {});
2147
+ } else {
2148
+ var _temp9 = function () {
2149
+ if (onProgressChange && isNotLikeOriginal) {
2150
+ var _temp10 = _catch(function () {
2151
+ return Promise.resolve(onProgressChange(newChangedTask, newChangedTask.barChildren)).then(function (result) {
2152
+ if (result !== undefined) {
2153
+ operationSuccess = result;
2154
+ }
2155
+ });
2156
+ }, function () {
2157
+ operationSuccess = false;
2158
+ });
2159
+
2160
+ if (_temp10 && _temp10.then) return _temp10.then(function () {});
2161
+ }
2162
+ }();
2163
+
2164
+ if (_temp9 && _temp9.then) return _temp9.then(function () {});
2165
+ }
2166
+ }();
2167
+
2168
+ return Promise.resolve(_temp7 && _temp7.then ? _temp7.then(_temp6) : _temp6(_temp7));
2169
+ } catch (e) {
2170
+ return Promise.reject(e);
2171
+ }
2172
+ };
2173
+
2174
+ if (!isMoving && (ganttEvent.action === "move" || ganttEvent.action === "end" || ganttEvent.action === "start" || ganttEvent.action === "progress") && svg !== null && svg !== void 0 && svg.current) {
2175
+ svg.current.addEventListener("mousemove", handleMouseMove);
2176
+ svg.current.addEventListener("mouseup", handleMouseUp);
2177
+ setIsMoving(true);
2178
+ }
2179
+ }, [ganttEvent, xStep, initEventX1Delta, onProgressChange, timeStep, onDateChange, svg, isMoving, point, rtl, setFailedTask, setGanttEvent]);
2180
+
2181
+ var handleBarEventStart = function handleBarEventStart(action, task, event) {
2182
+ try {
2183
+ return Promise.resolve(function () {
2184
+ if (!event) {
2185
+ if (action === "select") {
2186
+ setSelectedTask(task.id);
2187
+ }
2188
+ } else return function () {
2189
+ if (isKeyboardEvent(event)) {
2190
+ var _temp14 = function () {
2191
+ if (action === "delete") {
2192
+ var _temp15 = function () {
2193
+ if (onDelete) {
2194
+ var _temp16 = _catch(function () {
2195
+ return Promise.resolve(onDelete(task)).then(function (result) {
2196
+ if (result !== undefined && result) {
2197
+ setGanttEvent({
2198
+ action: action,
2199
+ changedTask: task
2200
+ });
2201
+ }
2202
+ });
2203
+ }, function (error) {
2204
+ console.error("Error on Delete. " + error);
2205
+ });
2206
+
2207
+ if (_temp16 && _temp16.then) return _temp16.then(function () {});
2208
+ }
2209
+ }();
2210
+
2211
+ if (_temp15 && _temp15.then) return _temp15.then(function () {});
2212
+ }
2213
+ }();
2214
+
2215
+ if (_temp14 && _temp14.then) return _temp14.then(function () {});
2216
+ } else if (action === "mouseenter") {
2217
+ if (!ganttEvent.action) {
2218
+ setGanttEvent({
2219
+ action: action,
2220
+ changedTask: task,
2221
+ originalSelectedTask: task
2222
+ });
2223
+ }
2224
+ } else if (action === "mouseleave") {
2225
+ if (ganttEvent.action === "mouseenter") {
2226
+ setGanttEvent({
2227
+ action: ""
2228
+ });
2229
+ }
2230
+ } else if (action === "dblclick") {
2231
+ !!onDoubleClick && onDoubleClick(task);
2232
+ } else if (action === "click") {
2233
+ !!onClick && onClick(task);
2234
+ } else if (action === "move") {
2235
+ var _svg$current$getScree3;
2236
+
2237
+ if (!(svg !== null && svg !== void 0 && svg.current) || !point) return;
2238
+ point.x = event.clientX;
2239
+ var cursor = point.matrixTransform((_svg$current$getScree3 = svg.current.getScreenCTM()) === null || _svg$current$getScree3 === void 0 ? void 0 : _svg$current$getScree3.inverse());
2240
+ setInitEventX1Delta(cursor.x - task.x1);
2241
+ setGanttEvent({
2242
+ action: action,
2243
+ changedTask: task,
2244
+ originalSelectedTask: task
2245
+ });
2246
+ } else {
2247
+ setGanttEvent({
2248
+ action: action,
2249
+ changedTask: task,
2250
+ originalSelectedTask: task
2251
+ });
2252
+ }
2253
+ }();
2254
+ }());
2255
+ } catch (e) {
2256
+ return Promise.reject(e);
2257
+ }
2258
+ };
2259
+
2260
+ return React__default.createElement("g", {
2261
+ className: "content"
2262
+ }, React__default.createElement("g", {
2263
+ className: "arrows",
2264
+ fill: arrowColor,
2265
+ stroke: arrowColor
2266
+ }, tasks.map(function (task) {
2267
+ return task.barChildren.map(function (child) {
2268
+ return React__default.createElement(Arrow, {
2269
+ key: "Arrow from " + task.id + " to " + tasks[child.index].id,
2270
+ taskFrom: task,
2271
+ taskTo: tasks[child.index],
2272
+ rowHeight: rowHeight,
2273
+ taskHeight: taskHeight,
2274
+ arrowIndent: arrowIndent,
2275
+ rtl: rtl
2276
+ });
2277
+ });
2278
+ })), React__default.createElement("g", {
2279
+ className: "bar",
2280
+ fontFamily: fontFamily,
2281
+ fontSize: fontSize
2282
+ }, tasks.map(function (task) {
2283
+ return React__default.createElement(TaskItem, {
2284
+ task: task,
2285
+ arrowIndent: arrowIndent,
2286
+ taskHeight: taskHeight,
2287
+ isProgressChangeable: !!onProgressChange && !task.isDisabled,
2288
+ isDateChangeable: !!onDateChange && !task.isDisabled,
2289
+ isDelete: !task.isDisabled,
2290
+ onEventStart: handleBarEventStart,
2291
+ key: task.id,
2292
+ isSelected: !!selectedTask && task.id === selectedTask.id,
2293
+ rtl: rtl
2294
+ });
2295
+ })));
2296
+ };
2297
+
2298
+ var styles$9 = {"ganttVerticalContainer":"_CZjuD","horizontalContainer":"_2B2zv","wrapper":"_3eULf"};
2299
+
2300
+ var TaskGantt = function TaskGantt(_ref) {
2301
+ var gridProps = _ref.gridProps,
2302
+ calendarProps = _ref.calendarProps,
2303
+ barProps = _ref.barProps,
2304
+ ganttHeight = _ref.ganttHeight,
2305
+ scrollY = _ref.scrollY,
2306
+ scrollX = _ref.scrollX;
2307
+ var ganttSVGRef = React.useRef(null);
2308
+ var horizontalContainerRef = React.useRef(null);
2309
+ var verticalGanttContainerRef = React.useRef(null);
2310
+
2311
+ var newBarProps = _extends({}, barProps, {
2312
+ svg: ganttSVGRef
2313
+ });
2314
+
2315
+ React.useEffect(function () {
2316
+ if (horizontalContainerRef.current) {
2317
+ horizontalContainerRef.current.scrollTop = scrollY;
2318
+ }
2319
+ }, [scrollY]);
2320
+ React.useEffect(function () {
2321
+ if (verticalGanttContainerRef.current) {
2322
+ verticalGanttContainerRef.current.scrollLeft = scrollX;
2323
+ }
2324
+ }, [scrollX]);
2325
+ return React__default.createElement("div", {
2326
+ className: styles$9.ganttVerticalContainer,
2327
+ ref: verticalGanttContainerRef,
2328
+ dir: "ltr"
2329
+ }, React__default.createElement("svg", {
2330
+ xmlns: "http://www.w3.org/2000/svg",
2331
+ width: gridProps.svgWidth,
2332
+ height: calendarProps.headerHeight,
2333
+ fontFamily: barProps.fontFamily
2334
+ }, React__default.createElement(Calendar, Object.assign({}, calendarProps))), React__default.createElement("div", {
2335
+ ref: horizontalContainerRef,
2336
+ className: styles$9.horizontalContainer,
2337
+ style: ganttHeight ? {
2338
+ height: ganttHeight,
2339
+ width: gridProps.svgWidth
2340
+ } : {
2341
+ width: gridProps.svgWidth
2342
+ }
2343
+ }, React__default.createElement("svg", {
2344
+ xmlns: "http://www.w3.org/2000/svg",
2345
+ width: gridProps.svgWidth,
2346
+ height: barProps.rowHeight * barProps.tasks.length,
2347
+ fontFamily: barProps.fontFamily,
2348
+ ref: ganttSVGRef
2349
+ }, React__default.createElement(Grid, Object.assign({}, gridProps)), React__default.createElement(TaskGanttContent, Object.assign({}, newBarProps)))));
2350
+ };
2351
+
2352
+ var styles$a = {"scrollWrapper":"_2k9Ys","scroll":"_19jgW"};
2353
+
2354
+ var HorizontalScroll = function HorizontalScroll(_ref) {
2355
+ var scroll = _ref.scroll,
2356
+ svgWidth = _ref.svgWidth,
2357
+ taskListWidth = _ref.taskListWidth,
2358
+ rtl = _ref.rtl,
2359
+ onScroll = _ref.onScroll;
2360
+ var scrollRef = React.useRef(null);
2361
+ React.useEffect(function () {
2362
+ if (scrollRef.current) {
2363
+ scrollRef.current.scrollLeft = scroll;
2364
+ }
2365
+ }, [scroll]);
2366
+ return React__default.createElement("div", {
2367
+ dir: "ltr",
2368
+ style: {
2369
+ margin: rtl ? "0px " + taskListWidth + "px 0px 0px" : "0px 0px 0px " + taskListWidth + "px"
2370
+ },
2371
+ className: styles$a.scrollWrapper,
2372
+ onScroll: onScroll,
2373
+ ref: scrollRef
2374
+ }, React__default.createElement("div", {
2375
+ style: {
2376
+ width: svgWidth
2377
+ },
2378
+ className: styles$a.scroll
2379
+ }));
2380
+ };
2381
+
2382
+ var Gantt = function Gantt(_ref) {
2383
+ var tasks = _ref.tasks,
2384
+ _ref$headerHeight = _ref.headerHeight,
2385
+ headerHeight = _ref$headerHeight === void 0 ? 80 : _ref$headerHeight,
2386
+ _ref$columnWidth = _ref.columnWidth,
2387
+ columnWidth = _ref$columnWidth === void 0 ? 60 : _ref$columnWidth,
2388
+ _ref$listCellWidth = _ref.listCellWidth,
2389
+ listCellWidth = _ref$listCellWidth === void 0 ? "155px" : _ref$listCellWidth,
2390
+ _ref$rowHeight = _ref.rowHeight,
2391
+ rowHeight = _ref$rowHeight === void 0 ? 50 : _ref$rowHeight,
2392
+ _ref$ganttHeight = _ref.ganttHeight,
2393
+ ganttHeight = _ref$ganttHeight === void 0 ? 0 : _ref$ganttHeight,
2394
+ _ref$viewMode = _ref.viewMode,
2395
+ viewMode = _ref$viewMode === void 0 ? exports.ViewMode.Day : _ref$viewMode,
2396
+ _ref$preStepsCount = _ref.preStepsCount,
2397
+ preStepsCount = _ref$preStepsCount === void 0 ? 1 : _ref$preStepsCount,
2398
+ _ref$locale = _ref.locale,
2399
+ locale = _ref$locale === void 0 ? "en-GB" : _ref$locale,
2400
+ _ref$barFill = _ref.barFill,
2401
+ barFill = _ref$barFill === void 0 ? 60 : _ref$barFill,
2402
+ _ref$barCornerRadius = _ref.barCornerRadius,
2403
+ barCornerRadius = _ref$barCornerRadius === void 0 ? 3 : _ref$barCornerRadius,
2404
+ _ref$barProgressColor = _ref.barProgressColor,
2405
+ barProgressColor = _ref$barProgressColor === void 0 ? "#a3a3ff" : _ref$barProgressColor,
2406
+ _ref$barProgressSelec = _ref.barProgressSelectedColor,
2407
+ barProgressSelectedColor = _ref$barProgressSelec === void 0 ? "#8282f5" : _ref$barProgressSelec,
2408
+ _ref$barBackgroundCol = _ref.barBackgroundColor,
2409
+ barBackgroundColor = _ref$barBackgroundCol === void 0 ? "#b8c2cc" : _ref$barBackgroundCol,
2410
+ _ref$barBackgroundSel = _ref.barBackgroundSelectedColor,
2411
+ barBackgroundSelectedColor = _ref$barBackgroundSel === void 0 ? "#aeb8c2" : _ref$barBackgroundSel,
2412
+ _ref$baselineBackgrou = _ref.baselineBackgroundColor,
2413
+ baselineBackgroundColor = _ref$baselineBackgrou === void 0 ? "#9CA3AF" : _ref$baselineBackgrou,
2414
+ _ref$projectProgressC = _ref.projectProgressColor,
2415
+ projectProgressColor = _ref$projectProgressC === void 0 ? "#7db59a" : _ref$projectProgressC,
2416
+ _ref$projectProgressS = _ref.projectProgressSelectedColor,
2417
+ projectProgressSelectedColor = _ref$projectProgressS === void 0 ? "#59a985" : _ref$projectProgressS,
2418
+ _ref$projectBackgroun = _ref.projectBackgroundColor,
2419
+ projectBackgroundColor = _ref$projectBackgroun === void 0 ? "#fac465" : _ref$projectBackgroun,
2420
+ _ref$projectBackgroun2 = _ref.projectBackgroundSelectedColor,
2421
+ projectBackgroundSelectedColor = _ref$projectBackgroun2 === void 0 ? "#f7bb53" : _ref$projectBackgroun2,
2422
+ _ref$milestoneBackgro = _ref.milestoneBackgroundColor,
2423
+ milestoneBackgroundColor = _ref$milestoneBackgro === void 0 ? "#f1c453" : _ref$milestoneBackgro,
2424
+ _ref$milestoneBackgro2 = _ref.milestoneBackgroundSelectedColor,
2425
+ milestoneBackgroundSelectedColor = _ref$milestoneBackgro2 === void 0 ? "#f29e4c" : _ref$milestoneBackgro2,
2426
+ _ref$rtl = _ref.rtl,
2427
+ rtl = _ref$rtl === void 0 ? false : _ref$rtl,
2428
+ _ref$handleWidth = _ref.handleWidth,
2429
+ handleWidth = _ref$handleWidth === void 0 ? 8 : _ref$handleWidth,
2430
+ _ref$timeStep = _ref.timeStep,
2431
+ timeStep = _ref$timeStep === void 0 ? 300000 : _ref$timeStep,
2432
+ _ref$arrowColor = _ref.arrowColor,
2433
+ arrowColor = _ref$arrowColor === void 0 ? "grey" : _ref$arrowColor,
2434
+ _ref$fontFamily = _ref.fontFamily,
2435
+ fontFamily = _ref$fontFamily === void 0 ? "Arial, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue" : _ref$fontFamily,
2436
+ _ref$fontSize = _ref.fontSize,
2437
+ fontSize = _ref$fontSize === void 0 ? "14px" : _ref$fontSize,
2438
+ _ref$arrowIndent = _ref.arrowIndent,
2439
+ arrowIndent = _ref$arrowIndent === void 0 ? 20 : _ref$arrowIndent,
2440
+ _ref$todayColor = _ref.todayColor,
2441
+ todayColor = _ref$todayColor === void 0 ? "rgba(252, 248, 227, 0.5)" : _ref$todayColor,
2442
+ viewDate = _ref.viewDate,
2443
+ _ref$TooltipContent = _ref.TooltipContent,
2444
+ TooltipContent = _ref$TooltipContent === void 0 ? StandardTooltipContent : _ref$TooltipContent,
2445
+ _ref$TaskListHeader = _ref.TaskListHeader,
2446
+ TaskListHeader = _ref$TaskListHeader === void 0 ? TaskListHeaderDefault : _ref$TaskListHeader,
2447
+ _ref$TaskListTable = _ref.TaskListTable,
2448
+ TaskListTable = _ref$TaskListTable === void 0 ? TaskListTableDefault : _ref$TaskListTable,
2449
+ onDateChange = _ref.onDateChange,
2450
+ onProgressChange = _ref.onProgressChange,
2451
+ onDoubleClick = _ref.onDoubleClick,
2452
+ onClick = _ref.onClick,
2453
+ onDelete = _ref.onDelete,
2454
+ onSelect = _ref.onSelect,
2455
+ onExpanderClick = _ref.onExpanderClick;
2456
+ var wrapperRef = React.useRef(null);
2457
+ var taskListRef = React.useRef(null);
2458
+
2459
+ var _useState = React.useState(function () {
2460
+ var _ganttDateRange = ganttDateRange(tasks, viewMode, preStepsCount),
2461
+ startDate = _ganttDateRange[0],
2462
+ endDate = _ganttDateRange[1];
2463
+
2464
+ return {
2465
+ viewMode: viewMode,
2466
+ dates: seedDates(startDate, endDate, viewMode)
2467
+ };
2468
+ }),
2469
+ dateSetup = _useState[0],
2470
+ setDateSetup = _useState[1];
2471
+
2472
+ var _useState2 = React.useState(undefined),
2473
+ currentViewDate = _useState2[0],
2474
+ setCurrentViewDate = _useState2[1];
2475
+
2476
+ var _useState3 = React.useState(0),
2477
+ taskListWidth = _useState3[0],
2478
+ setTaskListWidth = _useState3[1];
2479
+
2480
+ var _useState4 = React.useState(0),
2481
+ svgContainerWidth = _useState4[0],
2482
+ setSvgContainerWidth = _useState4[1];
2483
+
2484
+ var _useState5 = React.useState(ganttHeight),
2485
+ svgContainerHeight = _useState5[0],
2486
+ setSvgContainerHeight = _useState5[1];
2487
+
2488
+ var _useState6 = React.useState([]),
2489
+ barTasks = _useState6[0],
2490
+ setBarTasks = _useState6[1];
2491
+
2492
+ var _useState7 = React.useState({
2493
+ action: ""
2494
+ }),
2495
+ ganttEvent = _useState7[0],
2496
+ setGanttEvent = _useState7[1];
2497
+
2498
+ var taskHeight = React.useMemo(function () {
2499
+ return rowHeight * barFill / 100;
2500
+ }, [rowHeight, barFill]);
2501
+
2502
+ var _useState8 = React.useState(),
2503
+ selectedTask = _useState8[0],
2504
+ setSelectedTask = _useState8[1];
2505
+
2506
+ var _useState9 = React.useState(null),
2507
+ failedTask = _useState9[0],
2508
+ setFailedTask = _useState9[1];
2509
+
2510
+ var svgWidth = dateSetup.dates.length * columnWidth;
2511
+ var ganttFullHeight = barTasks.length * rowHeight;
2512
+
2513
+ var _useState10 = React.useState(0),
2514
+ scrollY = _useState10[0],
2515
+ setScrollY = _useState10[1];
2516
+
2517
+ var _useState11 = React.useState(-1),
2518
+ scrollX = _useState11[0],
2519
+ setScrollX = _useState11[1];
2520
+
2521
+ var _useState12 = React.useState(false),
2522
+ ignoreScrollEvent = _useState12[0],
2523
+ setIgnoreScrollEvent = _useState12[1];
2524
+
2525
+ React.useEffect(function () {
2526
+ var filteredTasks;
2527
+
2528
+ if (onExpanderClick) {
2529
+ filteredTasks = removeHiddenTasks(tasks);
2530
+ } else {
2531
+ filteredTasks = tasks;
2532
+ }
2533
+
2534
+ filteredTasks = filteredTasks.sort(sortTasks);
2535
+
2536
+ var _ganttDateRange2 = ganttDateRange(filteredTasks, viewMode, preStepsCount),
2537
+ startDate = _ganttDateRange2[0],
2538
+ endDate = _ganttDateRange2[1];
2539
+
2540
+ var newDates = seedDates(startDate, endDate, viewMode);
2541
+
2542
+ if (rtl) {
2543
+ newDates = newDates.reverse();
2544
+
2545
+ if (scrollX === -1) {
2546
+ setScrollX(newDates.length * columnWidth);
2547
+ }
2548
+ }
2549
+
2550
+ setDateSetup({
2551
+ dates: newDates,
2552
+ viewMode: viewMode
2553
+ });
2554
+ setBarTasks(convertToBarTasks(filteredTasks, newDates, columnWidth, rowHeight, taskHeight, barCornerRadius, handleWidth, rtl, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, baselineBackgroundColor));
2555
+ }, [tasks, viewMode, preStepsCount, rowHeight, barCornerRadius, columnWidth, taskHeight, handleWidth, barProgressColor, barProgressSelectedColor, barBackgroundColor, barBackgroundSelectedColor, projectProgressColor, projectProgressSelectedColor, projectBackgroundColor, projectBackgroundSelectedColor, milestoneBackgroundColor, milestoneBackgroundSelectedColor, rtl, scrollX, onExpanderClick, baselineBackgroundColor]);
2556
+ React.useEffect(function () {
2557
+ if (viewMode === dateSetup.viewMode && (viewDate && !currentViewDate || viewDate && (currentViewDate === null || currentViewDate === void 0 ? void 0 : currentViewDate.valueOf()) !== viewDate.valueOf())) {
2558
+ var dates = dateSetup.dates;
2559
+ var index = dates.findIndex(function (d, i) {
2560
+ return viewDate.valueOf() >= d.valueOf() && i + 1 !== dates.length && viewDate.valueOf() < dates[i + 1].valueOf();
2561
+ });
2562
+
2563
+ if (index === -1) {
2564
+ return;
2565
+ }
2566
+
2567
+ setCurrentViewDate(viewDate);
2568
+ setScrollX(columnWidth * index);
2569
+ }
2570
+ }, [viewDate, columnWidth, dateSetup.dates, dateSetup.viewMode, viewMode, currentViewDate, setCurrentViewDate]);
2571
+ React.useEffect(function () {
2572
+ var changedTask = ganttEvent.changedTask,
2573
+ action = ganttEvent.action;
2574
+
2575
+ if (changedTask) {
2576
+ if (action === "delete") {
2577
+ setGanttEvent({
2578
+ action: ""
2579
+ });
2580
+ setBarTasks(barTasks.filter(function (t) {
2581
+ return t.id !== changedTask.id;
2582
+ }));
2583
+ } else if (action === "move" || action === "end" || action === "start" || action === "progress") {
2584
+ var prevStateTask = barTasks.find(function (t) {
2585
+ return t.id === changedTask.id;
2586
+ });
2587
+
2588
+ if (prevStateTask && (prevStateTask.start.getTime() !== changedTask.start.getTime() || prevStateTask.end.getTime() !== changedTask.end.getTime() || prevStateTask.progress !== changedTask.progress)) {
2589
+ var newTaskList = barTasks.map(function (t) {
2590
+ return t.id === changedTask.id ? changedTask : t;
2591
+ });
2592
+ setBarTasks(newTaskList);
2593
+ }
2594
+ }
2595
+ }
2596
+ }, [ganttEvent, barTasks]);
2597
+ React.useEffect(function () {
2598
+ if (failedTask) {
2599
+ setBarTasks(barTasks.map(function (t) {
2600
+ return t.id !== failedTask.id ? t : failedTask;
2601
+ }));
2602
+ setFailedTask(null);
2603
+ }
2604
+ }, [failedTask, barTasks]);
2605
+ React.useEffect(function () {
2606
+ if (!listCellWidth) {
2607
+ setTaskListWidth(0);
2608
+ }
2609
+
2610
+ if (taskListRef.current) {
2611
+ setTaskListWidth(taskListRef.current.offsetWidth);
2612
+ }
2613
+ }, [taskListRef, listCellWidth]);
2614
+ React.useEffect(function () {
2615
+ if (wrapperRef.current) {
2616
+ setSvgContainerWidth(wrapperRef.current.offsetWidth - taskListWidth);
2617
+ }
2618
+ }, [wrapperRef, taskListWidth]);
2619
+ React.useEffect(function () {
2620
+ if (ganttHeight) {
2621
+ setSvgContainerHeight(ganttHeight + headerHeight);
2622
+ } else {
2623
+ setSvgContainerHeight(tasks.length * rowHeight + headerHeight);
2624
+ }
2625
+ }, [ganttHeight, tasks, headerHeight, rowHeight]);
2626
+ React.useEffect(function () {
2627
+ var _wrapperRef$current;
2628
+
2629
+ var handleWheel = function handleWheel(event) {
2630
+ if (event.shiftKey || event.deltaX) {
2631
+ var scrollMove = event.deltaX ? event.deltaX : event.deltaY;
2632
+ var newScrollX = scrollX + scrollMove;
2633
+
2634
+ if (newScrollX < 0) {
2635
+ newScrollX = 0;
2636
+ } else if (newScrollX > svgWidth) {
2637
+ newScrollX = svgWidth;
2638
+ }
2639
+
2640
+ setScrollX(newScrollX);
2641
+ event.preventDefault();
2642
+ } else if (ganttHeight) {
2643
+ var newScrollY = scrollY + event.deltaY;
2644
+
2645
+ if (newScrollY < 0) {
2646
+ newScrollY = 0;
2647
+ } else if (newScrollY > ganttFullHeight - ganttHeight) {
2648
+ newScrollY = ganttFullHeight - ganttHeight;
2649
+ }
2650
+
2651
+ if (newScrollY !== scrollY) {
2652
+ setScrollY(newScrollY);
2653
+ event.preventDefault();
2654
+ }
2655
+ }
2656
+
2657
+ setIgnoreScrollEvent(true);
2658
+ };
2659
+
2660
+ (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.addEventListener("wheel", handleWheel, {
2661
+ passive: false
2662
+ });
2663
+ return function () {
2664
+ var _wrapperRef$current2;
2665
+
2666
+ (_wrapperRef$current2 = wrapperRef.current) === null || _wrapperRef$current2 === void 0 ? void 0 : _wrapperRef$current2.removeEventListener("wheel", handleWheel);
2667
+ };
2668
+ }, [wrapperRef, scrollY, scrollX, ganttHeight, svgWidth, rtl, ganttFullHeight]);
2669
+
2670
+ var handleScrollY = function handleScrollY(event) {
2671
+ if (scrollY !== event.currentTarget.scrollTop && !ignoreScrollEvent) {
2672
+ setScrollY(event.currentTarget.scrollTop);
2673
+ setIgnoreScrollEvent(true);
2674
+ } else {
2675
+ setIgnoreScrollEvent(false);
2676
+ }
2677
+ };
2678
+
2679
+ var handleScrollX = function handleScrollX(event) {
2680
+ if (scrollX !== event.currentTarget.scrollLeft && !ignoreScrollEvent) {
2681
+ setScrollX(event.currentTarget.scrollLeft);
2682
+ setIgnoreScrollEvent(true);
2683
+ } else {
2684
+ setIgnoreScrollEvent(false);
2685
+ }
2686
+ };
2687
+
2688
+ var handleKeyDown = function handleKeyDown(event) {
2689
+ event.preventDefault();
2690
+ var newScrollY = scrollY;
2691
+ var newScrollX = scrollX;
2692
+ var isX = true;
2693
+
2694
+ switch (event.key) {
2695
+ case "Down":
2696
+ case "ArrowDown":
2697
+ newScrollY += rowHeight;
2698
+ isX = false;
2699
+ break;
2700
+
2701
+ case "Up":
2702
+ case "ArrowUp":
2703
+ newScrollY -= rowHeight;
2704
+ isX = false;
2705
+ break;
2706
+
2707
+ case "Left":
2708
+ case "ArrowLeft":
2709
+ newScrollX -= columnWidth;
2710
+ break;
2711
+
2712
+ case "Right":
2713
+ case "ArrowRight":
2714
+ newScrollX += columnWidth;
2715
+ break;
2716
+ }
2717
+
2718
+ if (isX) {
2719
+ if (newScrollX < 0) {
2720
+ newScrollX = 0;
2721
+ } else if (newScrollX > svgWidth) {
2722
+ newScrollX = svgWidth;
2723
+ }
2724
+
2725
+ setScrollX(newScrollX);
2726
+ } else {
2727
+ if (newScrollY < 0) {
2728
+ newScrollY = 0;
2729
+ } else if (newScrollY > ganttFullHeight - ganttHeight) {
2730
+ newScrollY = ganttFullHeight - ganttHeight;
2731
+ }
2732
+
2733
+ setScrollY(newScrollY);
2734
+ }
2735
+
2736
+ setIgnoreScrollEvent(true);
2737
+ };
2738
+
2739
+ var handleSelectedTask = function handleSelectedTask(taskId) {
2740
+ var newSelectedTask = barTasks.find(function (t) {
2741
+ return t.id === taskId;
2742
+ });
2743
+ var oldSelectedTask = barTasks.find(function (t) {
2744
+ return !!selectedTask && t.id === selectedTask.id;
2745
+ });
2746
+
2747
+ if (onSelect) {
2748
+ if (oldSelectedTask) {
2749
+ onSelect(oldSelectedTask, false);
2750
+ }
2751
+
2752
+ if (newSelectedTask) {
2753
+ onSelect(newSelectedTask, true);
2754
+ }
2755
+ }
2756
+
2757
+ setSelectedTask(newSelectedTask);
2758
+ };
2759
+
2760
+ var handleExpanderClick = function handleExpanderClick(task) {
2761
+ if (onExpanderClick && task.hideChildren !== undefined) {
2762
+ onExpanderClick(_extends({}, task, {
2763
+ hideChildren: !task.hideChildren
2764
+ }));
2765
+ }
2766
+ };
2767
+
2768
+ var minStartDate = React.useMemo(function () {
2769
+ if (tasks.length === 0) return new Date();
2770
+ var min = tasks[0].start;
2771
+
2772
+ for (var _iterator = _createForOfIteratorHelperLoose(tasks), _step; !(_step = _iterator()).done;) {
2773
+ var t = _step.value;
2774
+ if (t.start < min) min = t.start;
2775
+ }
2776
+
2777
+ return min;
2778
+ }, [tasks]);
2779
+ var gridProps = {
2780
+ columnWidth: columnWidth,
2781
+ svgWidth: svgWidth,
2782
+ tasks: tasks,
2783
+ rowHeight: rowHeight,
2784
+ dates: dateSetup.dates,
2785
+ todayColor: todayColor,
2786
+ rtl: rtl
2787
+ };
2788
+ var calendarProps = {
2789
+ dateSetup: dateSetup,
2790
+ locale: locale,
2791
+ viewMode: viewMode,
2792
+ headerHeight: headerHeight,
2793
+ columnWidth: columnWidth,
2794
+ fontFamily: fontFamily,
2795
+ fontSize: fontSize,
2796
+ rtl: rtl,
2797
+ startDate: minStartDate
2798
+ };
2799
+ var barProps = {
2800
+ tasks: barTasks,
2801
+ dates: dateSetup.dates,
2802
+ ganttEvent: ganttEvent,
2803
+ selectedTask: selectedTask,
2804
+ rowHeight: rowHeight,
2805
+ taskHeight: taskHeight,
2806
+ columnWidth: columnWidth,
2807
+ arrowColor: arrowColor,
2808
+ timeStep: timeStep,
2809
+ fontFamily: fontFamily,
2810
+ fontSize: fontSize,
2811
+ arrowIndent: arrowIndent,
2812
+ svgWidth: svgWidth,
2813
+ rtl: rtl,
2814
+ setGanttEvent: setGanttEvent,
2815
+ setFailedTask: setFailedTask,
2816
+ setSelectedTask: handleSelectedTask,
2817
+ onDateChange: onDateChange,
2818
+ onProgressChange: onProgressChange,
2819
+ onDoubleClick: onDoubleClick,
2820
+ onClick: onClick,
2821
+ onDelete: onDelete
2822
+ };
2823
+ var tableProps = {
2824
+ rowHeight: rowHeight,
2825
+ rowWidth: listCellWidth,
2826
+ fontFamily: fontFamily,
2827
+ fontSize: fontSize,
2828
+ tasks: barTasks,
2829
+ locale: locale,
2830
+ headerHeight: headerHeight,
2831
+ scrollY: scrollY,
2832
+ ganttHeight: ganttHeight,
2833
+ horizontalContainerClass: styles$9.horizontalContainer,
2834
+ selectedTask: selectedTask,
2835
+ taskListRef: taskListRef,
2836
+ setSelectedTask: handleSelectedTask,
2837
+ onExpanderClick: handleExpanderClick,
2838
+ TaskListHeader: TaskListHeader,
2839
+ TaskListTable: TaskListTable
2840
+ };
2841
+ return React__default.createElement("div", null, React__default.createElement("div", {
2842
+ className: styles$9.wrapper,
2843
+ onKeyDown: handleKeyDown,
2844
+ tabIndex: 0,
2845
+ ref: wrapperRef
2846
+ }, listCellWidth && React__default.createElement(TaskList, Object.assign({}, tableProps)), React__default.createElement(TaskGantt, {
2847
+ gridProps: gridProps,
2848
+ calendarProps: calendarProps,
2849
+ barProps: barProps,
2850
+ ganttHeight: ganttHeight,
2851
+ scrollY: scrollY,
2852
+ scrollX: scrollX
2853
+ }), ganttEvent.changedTask && React__default.createElement(Tooltip, {
2854
+ arrowIndent: arrowIndent,
2855
+ rowHeight: rowHeight,
2856
+ svgContainerHeight: svgContainerHeight,
2857
+ svgContainerWidth: svgContainerWidth,
2858
+ fontFamily: fontFamily,
2859
+ fontSize: fontSize,
2860
+ scrollX: scrollX,
2861
+ scrollY: scrollY,
2862
+ task: ganttEvent.changedTask,
2863
+ headerHeight: headerHeight,
2864
+ taskListWidth: taskListWidth,
2865
+ TooltipContent: TooltipContent,
2866
+ rtl: rtl,
2867
+ svgWidth: svgWidth
2868
+ }), React__default.createElement(VerticalScroll, {
2869
+ ganttFullHeight: ganttFullHeight,
2870
+ ganttHeight: ganttHeight,
2871
+ headerHeight: headerHeight,
2872
+ scroll: scrollY,
2873
+ onScroll: handleScrollY,
2874
+ rtl: rtl
2875
+ })), React__default.createElement(HorizontalScroll, {
2876
+ svgWidth: svgWidth,
2877
+ taskListWidth: taskListWidth,
2878
+ scroll: scrollX,
2879
+ rtl: rtl,
2880
+ onScroll: handleScrollX
2881
+ }));
2882
+ };
2883
+
2884
+ exports.Gantt = Gantt;
2885
+ //# sourceMappingURL=index.js.map