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