@progress/kendo-angular-gantt 0.1.5 → 0.2.0-dev.202111231320

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 (116) hide show
  1. package/dist/cdn/js/kendo-angular-gantt.js +2 -76
  2. package/dist/cdn/main.js +23 -1
  3. package/dist/es/columns/column.component.js +5 -0
  4. package/dist/es/columns/columns.js +1 -0
  5. package/dist/es/columns/edit-template.directive.js +34 -0
  6. package/dist/es/columns/span-column.component.js +6 -0
  7. package/dist/es/editing/edit-dialog.component.js +44 -0
  8. package/dist/es/editing/edit.service.js +39 -0
  9. package/dist/es/editing/util.js +17 -0
  10. package/dist/es/gantt.component.js +309 -8
  11. package/dist/es/gantt.module.js +60 -5
  12. package/dist/es/index.js +6 -0
  13. package/dist/es/localization/custom-messages.component.js +44 -0
  14. package/dist/es/localization/localized-messages.directive.js +35 -0
  15. package/dist/es/localization/messages.js +246 -0
  16. package/dist/es/localization/treelist-messages.directive.js +31 -0
  17. package/dist/es/models/events/cell-click-event.interface.js +4 -0
  18. package/dist/es/models/events/cell-close-event.interface.js +19 -0
  19. package/dist/es/models/events/preventable-event.js +32 -0
  20. package/dist/es/models/events/task-click-event.interface.js +4 -0
  21. package/dist/es/models/events/task-edit-event.interface.js +4 -0
  22. package/dist/es/models/gantt-task-model-fields.interface.js +2 -1
  23. package/dist/es/package-metadata.js +1 -1
  24. package/dist/es/rendering/gantt-milestone-task.component.js +1 -1
  25. package/dist/es/rendering/gantt-summary-task.component.js +1 -1
  26. package/dist/es/rendering/gantt-task-base.js +4 -0
  27. package/dist/es/rendering/gantt-task.component.js +12 -4
  28. package/dist/es/rendering/gantt-tasks-table-body.component.js +5 -1
  29. package/dist/es/toolbar/view-selector.component.js +7 -4
  30. package/dist/es/utils.js +44 -1
  31. package/dist/es2015/columns/column.component.d.ts +2 -0
  32. package/dist/es2015/columns/column.component.js +5 -0
  33. package/dist/es2015/columns/columns.d.ts +1 -0
  34. package/dist/es2015/columns/columns.js +1 -0
  35. package/dist/es2015/columns/edit-template.directive.d.ts +23 -0
  36. package/dist/es2015/columns/edit-template.directive.js +33 -0
  37. package/dist/es2015/columns/span-column.component.d.ts +2 -0
  38. package/dist/es2015/columns/span-column.component.js +6 -0
  39. package/dist/es2015/editing/edit-dialog.component.d.ts +21 -0
  40. package/dist/es2015/editing/edit-dialog.component.js +86 -0
  41. package/dist/es2015/editing/edit.service.d.ts +20 -0
  42. package/dist/es2015/editing/edit.service.js +41 -0
  43. package/dist/es2015/editing/util.d.ts +10 -0
  44. package/dist/es2015/editing/util.js +17 -0
  45. package/dist/es2015/gantt.component.d.ts +180 -4
  46. package/dist/es2015/gantt.component.js +492 -8
  47. package/dist/es2015/gantt.module.d.ts +29 -1
  48. package/dist/es2015/gantt.module.js +60 -5
  49. package/dist/es2015/index.d.ts +6 -0
  50. package/dist/es2015/index.js +6 -0
  51. package/dist/es2015/index.metadata.json +1 -1
  52. package/dist/es2015/localization/custom-messages.component.d.ts +15 -0
  53. package/dist/es2015/localization/custom-messages.component.js +36 -0
  54. package/dist/es2015/localization/localized-messages.directive.d.ts +13 -0
  55. package/dist/es2015/localization/localized-messages.directive.js +31 -0
  56. package/dist/es2015/localization/messages.d.ts +246 -0
  57. package/dist/es2015/localization/messages.js +240 -0
  58. package/dist/es2015/localization/treelist-messages.directive.d.ts +14 -0
  59. package/dist/es2015/localization/treelist-messages.directive.js +29 -0
  60. package/dist/es2015/models/events/cell-click-event.interface.d.ts +20 -0
  61. package/dist/es2015/models/events/cell-click-event.interface.js +4 -0
  62. package/dist/es2015/models/events/cell-close-event.interface.d.ts +48 -0
  63. package/dist/es2015/models/events/cell-close-event.interface.js +14 -0
  64. package/dist/es2015/models/events/preventable-event.d.ts +24 -0
  65. package/dist/es2015/models/events/preventable-event.js +30 -0
  66. package/dist/es2015/models/events/task-click-event.interface.d.ts +22 -0
  67. package/dist/es2015/models/events/task-click-event.interface.js +4 -0
  68. package/dist/es2015/models/events/task-edit-event.interface.d.ts +46 -0
  69. package/dist/es2015/models/events/task-edit-event.interface.js +4 -0
  70. package/dist/es2015/models/gantt-task-model-fields.interface.d.ts +1 -0
  71. package/dist/es2015/models/gantt-task-model-fields.interface.js +2 -1
  72. package/dist/es2015/package-metadata.js +1 -1
  73. package/dist/es2015/rendering/gantt-milestone-task.component.js +1 -0
  74. package/dist/es2015/rendering/gantt-summary-task.component.js +1 -0
  75. package/dist/es2015/rendering/gantt-task-base.d.ts +1 -0
  76. package/dist/es2015/rendering/gantt-task-base.js +4 -0
  77. package/dist/es2015/rendering/gantt-task.component.d.ts +4 -1
  78. package/dist/es2015/rendering/gantt-task.component.js +17 -2
  79. package/dist/es2015/rendering/gantt-tasks-table-body.component.d.ts +1 -0
  80. package/dist/es2015/rendering/gantt-tasks-table-body.component.js +8 -1
  81. package/dist/es2015/toolbar/view-selector.component.d.ts +3 -0
  82. package/dist/es2015/toolbar/view-selector.component.js +7 -7
  83. package/dist/es2015/utils.d.ts +34 -0
  84. package/dist/es2015/utils.js +44 -1
  85. package/dist/fesm2015/index.js +1080 -23
  86. package/dist/fesm5/index.js +865 -24
  87. package/dist/npm/columns/column.component.js +5 -0
  88. package/dist/npm/columns/columns.js +2 -0
  89. package/dist/npm/columns/edit-template.directive.js +36 -0
  90. package/dist/npm/columns/span-column.component.js +6 -0
  91. package/dist/npm/editing/edit-dialog.component.js +46 -0
  92. package/dist/npm/editing/edit.service.js +41 -0
  93. package/dist/npm/editing/util.js +19 -0
  94. package/dist/npm/gantt.component.js +306 -5
  95. package/dist/npm/gantt.module.js +59 -4
  96. package/dist/npm/index.js +12 -0
  97. package/dist/npm/localization/custom-messages.component.js +46 -0
  98. package/dist/npm/localization/localized-messages.directive.js +37 -0
  99. package/dist/npm/localization/messages.js +248 -0
  100. package/dist/npm/localization/treelist-messages.directive.js +33 -0
  101. package/dist/npm/models/events/cell-click-event.interface.js +6 -0
  102. package/dist/npm/models/events/cell-close-event.interface.js +21 -0
  103. package/dist/npm/models/events/preventable-event.js +34 -0
  104. package/dist/npm/models/events/task-click-event.interface.js +6 -0
  105. package/dist/npm/models/events/task-edit-event.interface.js +6 -0
  106. package/dist/npm/models/gantt-task-model-fields.interface.js +2 -1
  107. package/dist/npm/package-metadata.js +1 -1
  108. package/dist/npm/rendering/gantt-milestone-task.component.js +1 -1
  109. package/dist/npm/rendering/gantt-summary-task.component.js +1 -1
  110. package/dist/npm/rendering/gantt-task-base.js +4 -0
  111. package/dist/npm/rendering/gantt-task.component.js +12 -4
  112. package/dist/npm/rendering/gantt-tasks-table-body.component.js +5 -1
  113. package/dist/npm/toolbar/view-selector.component.js +7 -4
  114. package/dist/npm/utils.js +43 -0
  115. package/dist/systemjs/kendo-angular-gantt.js +1 -1
  116. package/package.json +5 -2
@@ -4,13 +4,13 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as tslib_1 from "tslib";
6
6
  var GanttComponent_1;
7
- import { Component, forwardRef, HostBinding, Input, Output, EventEmitter, ViewChild, ContentChildren, ContentChild, QueryList, isDevMode, Renderer2 } from '@angular/core';
7
+ import { Component, forwardRef, HostBinding, Input, Output, EventEmitter, ViewChild, ContentChildren, ContentChild, QueryList, isDevMode, Renderer2, ElementRef, NgZone } from '@angular/core';
8
8
  import { DataBoundTreeComponent, ExpandableTreeComponent } from '@progress/kendo-angular-treelist';
9
9
  import { TreeListComponent } from '@progress/kendo-angular-treelist';
10
10
  import { Subscription } from 'rxjs';
11
11
  import { validatePackage } from '@progress/kendo-licensing';
12
12
  import { packageMetadata } from './package-metadata';
13
- import { anyChanged } from '@progress/kendo-angular-common';
13
+ import { anyChanged, hasObservers } from '@progress/kendo-angular-common';
14
14
  import { GanttColumnBase } from './columns/columns';
15
15
  import { fetchChildren, hasChildren, rowClassCallback, taskClassCallback } from './common/default-callbacks';
16
16
  import { TimelineViewService } from './timeline/timeline-view.service';
@@ -21,7 +21,9 @@ import { ScrollSyncService } from './scrolling/scroll-sync.service';
21
21
  import { DependencyDomService } from './dependencies/dependency-dom.service';
22
22
  import { MappingService } from './common/mapping.service';
23
23
  import { OptionChangesService } from './common/option-changes.service';
24
- import { isColumnGroup, isPresent, normalizeGanttData, scrollbarWidth } from './utils';
24
+ import { EditService } from './editing/edit.service';
25
+ import { LocalizationService } from '@progress/kendo-angular-l10n';
26
+ import { getClosestTaskIndex, isClearButton, isColumnGroup, isPresent, isTask, normalizeGanttData, scrollbarWidth } from './utils';
25
27
  import { DEFAULT_TIMELINE_PANE_SETTINGS, DEFAULT_TREELIST_PANE_SETTINGS } from './models/splitter-pane-options.interface';
26
28
  import { GanttTaskTemplateDirective } from './template-directives/task-template.directive';
27
29
  import { GanttSummaryTaskTemplateDirective } from './template-directives/summary-task-template.directive';
@@ -29,19 +31,92 @@ import { GanttTaskContentTemplateDirective } from './template-directives/task-co
29
31
  import { ToolbarTemplateDirective } from './toolbar/toolbar-template.directive';
30
32
  import { ViewBase } from './timeline/view-base';
31
33
  import { Day } from '@progress/kendo-date-math';
34
+ import { getEditItem } from './editing/util';
32
35
  const TREELIST_GROUP_COLUMNS_CLASS = 'k-gantt-treelist-nested-columns';
33
36
  const DEFAULT_VIEW = 'week';
34
37
  /**
35
- * The GiGantt
38
+ * Represents the Kendo UI Gantt component for Angular.
39
+ *
40
+ * @example
41
+ * ```ts-preview
42
+ * _@Component({
43
+ * selector: 'my-app',
44
+ * template: `
45
+ * <kendo-gantt
46
+ * [style.height.px]="500"
47
+ * [kendoGanttHierarchyBinding]="data"
48
+ * childrenField="subtasks"
49
+ * [dependencies]="dependencies">
50
+ * <kendo-gantt-column
51
+ * field="title"
52
+ * title="Task"
53
+ * [width]="200"
54
+ * [expandable]="true"></kendo-gantt-column>
55
+ * <kendo-gantt-column
56
+ * field="start"
57
+ * title="Start"
58
+ * format="dd-MMM-yyyy"
59
+ * [width]="120"></kendo-gantt-column>
60
+ * <kendo-gantt-column
61
+ * field="end"
62
+ * title="End"
63
+ * format="dd-MMM-yyyy"
64
+ * [width]="120"></kendo-gantt-column>
65
+ * <kendo-gantt-timeline-day-view></kendo-gantt-timeline-day-view>
66
+ * <kendo-gantt-timeline-week-view></kendo-gantt-timeline-week-view>
67
+ * <kendo-gantt-timeline-month-view></kendo-gantt-timeline-month-view>
68
+ * </kendo-gantt>
69
+ * `
70
+ * })
71
+ * class AppComponent {
72
+ * public data: Task[] = [{
73
+ * id: 7, title: 'Validation and R&D', start: new Date('2014-06-02T00:00:00.000Z'),
74
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0.45708333333333334,
75
+ * subtasks: [
76
+ * { id: 18, title: 'Project Kickoff', start: new Date('2014-06-02T00:00:00.000Z'),
77
+ * end: new Date('2014-06-02T00:00:00.000Z'), completionRatio: 0.23 },
78
+ * { id: 11, title: 'Research', start: new Date('2014-06-02T00:00:00.000Z'),
79
+ * end: new Date('2014-06-07T00:00:00.000Z'), completionRatio: 0.5766666666666667,
80
+ * subtasks: [
81
+ * { id: 19, title: 'Validation', start: new Date('2014-06-02T00:00:00.000Z'),
82
+ * end: new Date('2014-06-04T00:00:00.000Z'), completionRatio: 0.25 },
83
+ * { id: 39, title: 'Specification', start: new Date('2014-06-04T00:00:00.000Z'),
84
+ * end: new Date('2014-06-07T00:00:00.000Z'), completionRatio: 0.66 }]
85
+ * }, { id: 13, title: 'Implementation', start: new Date('2014-06-08T00:00:00.000Z'),
86
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0.77,
87
+ * subtasks: [
88
+ * { id: 24, title: 'Prototype', start: new Date('2014-06-08T00:00:00.000Z'),
89
+ * end: new Date('2014-06-14T00:00:00.000Z'), completionRatio: 0.77 },
90
+ * { id: 29, title: 'UI and Interaction', start: new Date('2014-06-14T00:00:00.000Z'),
91
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0.6 }]
92
+ * }, { id: 17, title: 'Release', start: new Date('2014-06-19T00:00:00.000Z'),
93
+ * end: new Date('2014-06-19T00:00:00.000Z'), completionRatio: 0 }]
94
+ * }];
95
+ *
96
+ * public dependencies: GanttDependency[] = [
97
+ * { id: 528, fromId: 18, toId: 19, type: DependencyType.FS },
98
+ * { id: 529, fromId: 19, toId: 39, type: DependencyType.FS },
99
+ * { id: 535, fromId: 24, toId: 29, type: DependencyType.FS },
100
+ * { id: 551, fromId: 13, toId: 29, type: DependencyType.FF },
101
+ * { id: 777, fromId: 7, toId: 11, type: DependencyType.SF },
102
+ * { id: 556, fromId: 39, toId: 24, type: DependencyType.FS },
103
+ * { id: 546, fromId: 29, toId: 17, type: DependencyType.FS },
104
+ * ];
105
+ * }
106
+ * ```
36
107
  */
37
108
  let GanttComponent = GanttComponent_1 = class GanttComponent {
38
- constructor(timelineViewService, scrollSyncService, renderer, mapper, optionChangesService, dependencyDomService) {
109
+ constructor(timelineViewService, scrollSyncService, renderer, mapper, optionChangesService, dependencyDomService, editService, localizationService, hostElement, zone) {
39
110
  this.timelineViewService = timelineViewService;
40
111
  this.scrollSyncService = scrollSyncService;
41
112
  this.renderer = renderer;
42
113
  this.mapper = mapper;
43
114
  this.optionChangesService = optionChangesService;
44
115
  this.dependencyDomService = dependencyDomService;
116
+ this.editService = editService;
117
+ this.localizationService = localizationService;
118
+ this.hostElement = hostElement;
119
+ this.zone = zone;
45
120
  this.hostClasses = true;
46
121
  /**
47
122
  * The position of the toolbar.
@@ -129,10 +204,40 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
129
204
  * Fires when an item is expanded.
130
205
  */
131
206
  this.rowExpand = new EventEmitter();
207
+ /**
208
+ * Fires when a Gantt task in the timeline pane is double-clicked. The data item, associated with the clicked task,
209
+ * is available in the event data. Use the event handler to open a task editing dialog as necessary.
210
+ */
211
+ this.taskDblClick = new EventEmitter();
212
+ /**
213
+ * Fires when the user double clicks a cell.
214
+ */
215
+ this.cellDblClick = new EventEmitter();
216
+ /**
217
+ * Fires when the user leaves an edited cell.
218
+ */
219
+ this.cellClose = new EventEmitter();
220
+ /**
221
+ * Fires when the end user clicks the `Delete` button in the task editing dialog or the task delete icon.
222
+ * Use the event handler to open a confirmation dialog when necessary.
223
+ */
224
+ this.taskDelete = new EventEmitter();
132
225
  /**
133
226
  * Fires when an item is collapsed.
134
227
  */
135
228
  this.rowCollapse = new EventEmitter();
229
+ /**
230
+ * Fires when the user confirms deleting a task.
231
+ */
232
+ this.remove = new EventEmitter();
233
+ /**
234
+ * Fires when the user cancels editing a task.
235
+ */
236
+ this.cancel = new EventEmitter();
237
+ /**
238
+ * Fires when the user saves an edited task.
239
+ */
240
+ this.save = new EventEmitter();
136
241
  /**
137
242
  * Fires when the sorting of the Gantt is changed.
138
243
  * You have to handle the event yourself and sort the data.
@@ -187,6 +292,14 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
187
292
  * Used by the GanttExpandableDirective.
188
293
  */
189
294
  this.expandStateChange = new EventEmitter();
295
+ /**
296
+ * @hidden
297
+ */
298
+ this.showEditingDialog = false;
299
+ /**
300
+ * @hidden
301
+ */
302
+ this.showConfirmationDialog = false;
190
303
  this._columns = new QueryList();
191
304
  this._data = [];
192
305
  this._timelinePaneOptions = Object.assign({}, DEFAULT_TIMELINE_PANE_SETTINGS);
@@ -194,14 +307,36 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
194
307
  this._rowClass = rowClassCallback;
195
308
  this._taskClass = taskClassCallback;
196
309
  this._activeView = DEFAULT_VIEW;
310
+ this.rtl = false;
197
311
  this.optionChangesSubscriptions = new Subscription();
312
+ this.editServiceSubscription = new Subscription();
198
313
  validatePackage(packageMetadata);
314
+ this.handleTimelineDblClick = this.handleTimelineDblClick.bind(this);
315
+ this.handleTimelineMouseDown = this.handleTimelineMouseDown.bind(this);
316
+ this.handleDoubleClick = this.handleDoubleClick.bind(this);
199
317
  this.optionChangesSubscriptions.add(this.optionChangesService.viewChanges.subscribe(() => {
200
318
  this.loadTimelineData();
201
319
  }));
202
320
  this.optionChangesSubscriptions.add(this.optionChangesService.columnChanges.subscribe(() => {
203
321
  this.treeList.columns.notifyOnChanges();
204
322
  }));
323
+ this.editServiceSubscription.add(this.editService.showEditingDialog.subscribe(show => this.showEditingDialog = show));
324
+ this.editServiceSubscription.add(this.editService.showConfirmationDialog.subscribe(() => this.taskDelete.emit()));
325
+ this.editServiceSubscription.add(this.editService.editEvent.subscribe(args => {
326
+ this[args.editResultType].emit({
327
+ formGroup: args.formGroup,
328
+ item: getEditItem(args.dataItem, this.treeList.view.data, this.mapper),
329
+ sender: this
330
+ });
331
+ this.showConfirmationDialog = this.showEditingDialog = false;
332
+ this.editService.dataItem = this.editService.formGroup = null;
333
+ this.updateView();
334
+ this.dependencyDomService.notifyChanges();
335
+ }));
336
+ this.localizationSubscription = this.localizationService.changes.subscribe(({ rtl }) => {
337
+ this.rtl = rtl;
338
+ this.direction = this.rtl ? 'rtl' : 'ltr';
339
+ });
205
340
  }
206
341
  get toolbarTemplate() {
207
342
  if (this._customToolbarTemplate) {
@@ -212,6 +347,9 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
212
347
  set toolbarTemplate(customToolbarTemplate) {
213
348
  this._customToolbarTemplate = customToolbarTemplate;
214
349
  }
350
+ get dir() {
351
+ return this.direction;
352
+ }
215
353
  /**
216
354
  * A query list of all declared columns.
217
355
  */
@@ -366,6 +504,12 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
366
504
  get viewTypes() {
367
505
  return this.views.map(view => view.type);
368
506
  }
507
+ /**
508
+ * @hidden
509
+ */
510
+ get editDialogFormGroup() {
511
+ return this.editService.formGroup;
512
+ }
369
513
  ngOnChanges(changes) {
370
514
  if (anyChanged(['data', 'activeView', 'workWeekStart', 'workWeekEnd', 'workDayStart', 'workDayEnd'], changes)) {
371
515
  this.loadTimelineData();
@@ -385,6 +529,10 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
385
529
  }
386
530
  ngOnDestroy() {
387
531
  this.optionChangesSubscriptions.unsubscribe();
532
+ this.editServiceSubscription.unsubscribe();
533
+ if (this.localizationSubscription) {
534
+ this.localizationSubscription.unsubscribe();
535
+ }
388
536
  }
389
537
  /**
390
538
  * Applies the minimum possible width for the specified column,
@@ -432,6 +580,47 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
432
580
  this.treeList.reorderColumn(source, destIndex, options);
433
581
  }
434
582
  }
583
+ /**
584
+ * Opens the task editing dialog.
585
+ */
586
+ editTask(dataItem, formGroup) {
587
+ if (!this.showEditingDialog) {
588
+ this.editService.createEditDialog(dataItem, formGroup);
589
+ }
590
+ }
591
+ /**
592
+ * Closes the task editing dialog.
593
+ */
594
+ closeTaskDialog() {
595
+ if (this.showEditingDialog) {
596
+ this.editService.closeEditDialog();
597
+ }
598
+ }
599
+ /**
600
+ * Opens the delete task confirmation dialog.
601
+ */
602
+ openConfirmationDialog() {
603
+ this.showConfirmationDialog = true;
604
+ }
605
+ /**
606
+ * Opens a cell for editing.
607
+ */
608
+ editCell(dataItem, column, formGroup) {
609
+ this.treeList.editCell(dataItem, column, formGroup);
610
+ }
611
+ /**
612
+ * Closes an edited cell.
613
+ */
614
+ closeCell() {
615
+ this.treeList.closeCell();
616
+ }
617
+ /**
618
+ * @hidden
619
+ */
620
+ handleCellClose(e) {
621
+ this.cellClose.emit(Object.assign(e, { item: this.editItem, sender: this }));
622
+ this.dependencyDomService.notifyChanges();
623
+ }
435
624
  /**
436
625
  * @hidden
437
626
  */
@@ -495,6 +684,67 @@ let GanttComponent = GanttComponent_1 = class GanttComponent {
495
684
  this._timelinePaneOptions.size = e;
496
685
  this.timelinePaneSizeChange.emit(e);
497
686
  }
687
+ /**
688
+ * @hidden
689
+ */
690
+ handleCellClick(event) {
691
+ this._cellClickEvent = event;
692
+ }
693
+ /**
694
+ * @hidden
695
+ */
696
+ handleDoubleClick(event) {
697
+ const cell = this._cellClickEvent.originalEvent.target;
698
+ if (event.target !== cell) {
699
+ return;
700
+ }
701
+ this.editItem = getEditItem(this._cellClickEvent.dataItem, this.treeList.view.data, this.mapper);
702
+ if (hasObservers(this.cellDblClick)) {
703
+ this.zone.run(() => {
704
+ this.cellDblClick.emit(Object.assign({}, this._cellClickEvent, { sender: this }));
705
+ });
706
+ }
707
+ }
708
+ /**
709
+ * @hidden
710
+ */
711
+ handleDeleteConfirmation() {
712
+ this.editService.triggerEditEvent('remove');
713
+ }
714
+ /**
715
+ * @hidden
716
+ */
717
+ handleTimelineMouseDown(event) {
718
+ const target = event.target;
719
+ const gantt = this.hostElement.nativeElement;
720
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
721
+ return;
722
+ }
723
+ event.preventDefault();
724
+ }
725
+ /**
726
+ * @hidden
727
+ */
728
+ handleTimelineDblClick(event) {
729
+ const target = event.target;
730
+ const gantt = this.hostElement.nativeElement;
731
+ if (!isTask(target, gantt) || isClearButton(target, gantt)) {
732
+ return;
733
+ }
734
+ const taskIndex = getClosestTaskIndex(target, gantt);
735
+ const task = this.renderedTreeListItems[taskIndex];
736
+ this.zone.run(() => this.taskDblClick.emit({
737
+ dataItem: task,
738
+ originalEvent: event,
739
+ sender: this
740
+ }));
741
+ }
742
+ /**
743
+ * @hidden
744
+ */
745
+ getText(token) {
746
+ return this.localizationService.get(token);
747
+ }
498
748
  updateTreeListGroupClass(columns = this.columns) {
499
749
  if (!isPresent(this.treeList)) {
500
750
  return;
@@ -546,6 +796,11 @@ tslib_1.__decorate([
546
796
  HostBinding('class.k-gantt'),
547
797
  tslib_1.__metadata("design:type", Boolean)
548
798
  ], GanttComponent.prototype, "hostClasses", void 0);
799
+ tslib_1.__decorate([
800
+ HostBinding('attr.dir'),
801
+ tslib_1.__metadata("design:type", String),
802
+ tslib_1.__metadata("design:paramtypes", [])
803
+ ], GanttComponent.prototype, "dir", null);
549
804
  tslib_1.__decorate([
550
805
  ContentChildren(GanttColumnBase),
551
806
  tslib_1.__metadata("design:type", QueryList),
@@ -667,10 +922,38 @@ tslib_1.__decorate([
667
922
  Output(),
668
923
  tslib_1.__metadata("design:type", EventEmitter)
669
924
  ], GanttComponent.prototype, "rowExpand", void 0);
925
+ tslib_1.__decorate([
926
+ Output(),
927
+ tslib_1.__metadata("design:type", EventEmitter)
928
+ ], GanttComponent.prototype, "taskDblClick", void 0);
929
+ tslib_1.__decorate([
930
+ Output(),
931
+ tslib_1.__metadata("design:type", EventEmitter)
932
+ ], GanttComponent.prototype, "cellDblClick", void 0);
933
+ tslib_1.__decorate([
934
+ Output(),
935
+ tslib_1.__metadata("design:type", EventEmitter)
936
+ ], GanttComponent.prototype, "cellClose", void 0);
937
+ tslib_1.__decorate([
938
+ Output(),
939
+ tslib_1.__metadata("design:type", EventEmitter)
940
+ ], GanttComponent.prototype, "taskDelete", void 0);
670
941
  tslib_1.__decorate([
671
942
  Output(),
672
943
  tslib_1.__metadata("design:type", EventEmitter)
673
944
  ], GanttComponent.prototype, "rowCollapse", void 0);
945
+ tslib_1.__decorate([
946
+ Output(),
947
+ tslib_1.__metadata("design:type", EventEmitter)
948
+ ], GanttComponent.prototype, "remove", void 0);
949
+ tslib_1.__decorate([
950
+ Output(),
951
+ tslib_1.__metadata("design:type", EventEmitter)
952
+ ], GanttComponent.prototype, "cancel", void 0);
953
+ tslib_1.__decorate([
954
+ Output(),
955
+ tslib_1.__metadata("design:type", EventEmitter)
956
+ ], GanttComponent.prototype, "save", void 0);
674
957
  tslib_1.__decorate([
675
958
  Output(),
676
959
  tslib_1.__metadata("design:type", EventEmitter)
@@ -718,7 +1001,9 @@ tslib_1.__decorate([
718
1001
  GanttComponent = GanttComponent_1 = tslib_1.__decorate([
719
1002
  Component({
720
1003
  selector: 'kendo-gantt',
1004
+ exportAs: 'kendoGantt',
721
1005
  providers: [
1006
+ LocalizationService,
722
1007
  {
723
1008
  provide: DataBoundTreeComponent,
724
1009
  useExisting: forwardRef(() => GanttComponent_1)
@@ -734,9 +1019,181 @@ GanttComponent = GanttComponent_1 = tslib_1.__decorate([
734
1019
  ScrollSyncService,
735
1020
  DependencyDomService,
736
1021
  MappingService,
737
- OptionChangesService
1022
+ OptionChangesService,
1023
+ EditService
738
1024
  ],
739
1025
  template: `
1026
+ <ng-container kendoGanttLocalizedMessages
1027
+ i18n-taskDeleteLabel="kendo.gantt.taskDeleteLabel|The label of the task delete icon"
1028
+ taskDeleteLabel="Delete"
1029
+
1030
+ i18n-taskEditingDialogTitle="kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog"
1031
+ taskEditingDialogTitle="Editing Task"
1032
+
1033
+ i18n-taskEditingDialogCloseTitle="kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button"
1034
+ taskEditingDialogCloseTitle="Close"
1035
+
1036
+ i18n-confirmationDialogCloseTitle="kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button"
1037
+ confirmationDialogCloseTitle="Close"
1038
+
1039
+ i18n-confirmationDialogTitle="kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog"
1040
+ confirmationDialogTitle="Delete Task"
1041
+
1042
+ i18n-confirmationDialogContent="kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog"
1043
+ confirmationDialogContent="Are you sure you want to delete this task?"
1044
+
1045
+ i18n-deleteButtonText="kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button"
1046
+ deleteButtonText="Delete"
1047
+
1048
+ i18n-cancelButtonText="kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button"
1049
+ cancelButtonText="Cancel"
1050
+
1051
+ i18n-saveButtonText="kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button"
1052
+ saveButtonText="Save"
1053
+
1054
+ i18n-titleFieldInputLabel="kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode"
1055
+ titleFieldInputLabel="Title"
1056
+
1057
+ i18n-startFieldInputLabel="kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode"
1058
+ startFieldInputLabel="Start"
1059
+
1060
+ i18n-endFieldInputLabel="kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode"
1061
+ endFieldInputLabel="End"
1062
+
1063
+ i18n-completionRatioFieldInputLabel="kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode"
1064
+ completionRatioFieldInputLabel="Progress"
1065
+
1066
+ i18n-dayViewText="kendo.gantt.dayViewText|The text of the day view in the ViewSelector component"
1067
+ dayViewText="Day"
1068
+
1069
+ i18n-weekViewText="kendo.gantt.weekViewText|The text of the week view in the ViewSelector component"
1070
+ weekViewText="Week"
1071
+
1072
+ i18n-monthViewText="kendo.gantt.monthViewText|The text of the month view in the ViewSelector component"
1073
+ monthViewText="Month"
1074
+
1075
+ i18n-yearViewText-disabled="kendo.gantt.yearViewText|The text of the year view in the ViewSelector component"
1076
+ yearViewText="Year"
1077
+
1078
+ i18n-noRecords="kendo.gantt.noRecords|The label visible in the TreeList when there are no records"
1079
+ noRecords="No records available."
1080
+
1081
+ i18n-filter="kendo.gantt.filter|The label of the filter cell or icon"
1082
+ filter="Filter"
1083
+
1084
+ i18n-filterEqOperator="kendo.gantt.filterEqOperator|The text of the equal filter operator"
1085
+ filterEqOperator="Is equal to"
1086
+
1087
+ i18n-filterNotEqOperator="kendo.gantt.filterNotEqOperator|The text of the not equal filter operator"
1088
+ filterNotEqOperator="Is not equal to"
1089
+
1090
+ i18n-filterIsNullOperator="kendo.gantt.filterIsNullOperator|The text of the is null filter operator"
1091
+ filterIsNullOperator="Is null"
1092
+
1093
+ i18n-filterIsNotNullOperator="kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator"
1094
+ filterIsNotNullOperator="Is not null"
1095
+
1096
+ i18n-filterIsEmptyOperator="kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator"
1097
+ filterIsEmptyOperator="Is empty"
1098
+
1099
+ i18n-filterIsNotEmptyOperator="kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator"
1100
+ filterIsNotEmptyOperator="Is not empty"
1101
+
1102
+ i18n-filterStartsWithOperator="kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator"
1103
+ filterStartsWithOperator="Starts with"
1104
+
1105
+ i18n-filterContainsOperator="kendo.gantt.filterContainsOperator|The text of the contains filter operator"
1106
+ filterContainsOperator="Contains"
1107
+
1108
+ i18n-filterNotContainsOperator="kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator"
1109
+ filterNotContainsOperator="Does not contain"
1110
+
1111
+ i18n-filterEndsWithOperator="kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator"
1112
+ filterEndsWithOperator="Ends with"
1113
+
1114
+ i18n-filterGteOperator="kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator"
1115
+ filterGteOperator="Is greater than or equal to"
1116
+
1117
+ i18n-filterGtOperator="kendo.gantt.filterGtOperator|The text of the greater than filter operator"
1118
+ filterGtOperator="Is greater than"
1119
+
1120
+ i18n-filterLteOperator="kendo.gantt.filterLteOperator|The text of the less than or equal filter operator"
1121
+ filterLteOperator="Is less than or equal to"
1122
+
1123
+ i18n-filterLtOperator="kendo.gantt.filterLtOperator|The text of the less than filter operator"
1124
+ filterLtOperator="Is less than"
1125
+
1126
+ i18n-filterIsTrue="kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option"
1127
+ filterIsTrue="Is True"
1128
+
1129
+ i18n-filterIsFalse="kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option"
1130
+ filterIsFalse="Is False"
1131
+
1132
+ i18n-filterBooleanAll="kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option"
1133
+ filterBooleanAll="(All)"
1134
+
1135
+ i18n-filterAfterOrEqualOperator="kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator"
1136
+ filterAfterOrEqualOperator="Is after or equal to"
1137
+
1138
+ i18n-filterAfterOperator="kendo.gantt.filterAfterOperator|The text of the after date filter operator"
1139
+ filterAfterOperator="Is after"
1140
+
1141
+ i18n-filterBeforeOperator="kendo.gantt.filterBeforeOperator|The text of the before date filter operator"
1142
+ filterBeforeOperator="Is before"
1143
+
1144
+ i18n-filterBeforeOrEqualOperator="kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator"
1145
+ filterBeforeOrEqualOperator="Is before or equal to"
1146
+
1147
+ i18n-filterFilterButton="kendo.gantt.filterFilterButton|The text of the filter button"
1148
+ filterFilterButton="Filter"
1149
+
1150
+ i18n-filterClearButton="kendo.gantt.filterClearButton|The text of the clear filter button"
1151
+ filterClearButton="Clear"
1152
+
1153
+ i18n-filterAndLogic="kendo.gantt.filterAndLogic|The text of the And filter logic"
1154
+ filterAndLogic="And"
1155
+
1156
+ i18n-filterOrLogic="kendo.gantt.filterOrLogic|The text of the Or filter logic"
1157
+ filterOrLogic="Or"
1158
+
1159
+ i18n-loading="kendo.gantt.loading|The loading text"
1160
+ loading="Loading"
1161
+
1162
+ i18n-columnMenu="kendo.gantt.columnMenu|The title of the column menu icon"
1163
+ columnMenu="Column Menu"
1164
+
1165
+ i18n-columns="kendo.gantt.columns|The text shown in the column menu for the columns item"
1166
+ columns="Columns"
1167
+
1168
+ i18n-lock-disabled="kendo.gantt.lock|The text shown in the column menu for the lock item"
1169
+ lock-disabled="Lock"
1170
+
1171
+ i18n-unlock-disabled="kendo.gantt.unlock|The text shown in the column menu for the unlock item"
1172
+ unlock-disabled="Unlock"
1173
+
1174
+ i18n-sortable="kendo.gantt.sortable|The label of the sort icon"
1175
+ sortable="Sortable"
1176
+
1177
+ i18n-sortAscending="kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item"
1178
+ sortAscending="Sort Ascending"
1179
+
1180
+ i18n-sortDescending="kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item"
1181
+ sortDescending="Sort Descending"
1182
+
1183
+ i18n-sortedAscending="kendo.gantt.sortedAscending|The status announcement when a column is sorted ascending"
1184
+ sortedAscending="Sorted Ascending"
1185
+
1186
+ i18n-sortedDescending="kendo.gantt.sortedDescending|The status announcement when a column is sorted descending"
1187
+ sortedDescending="Sorted Descending"
1188
+
1189
+ i18n-sortedDefault="kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted"
1190
+ sortedDefault="Not Sorted"
1191
+
1192
+ i18n-columnsApply="kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
1193
+ columnsApply="Apply"
1194
+
1195
+ i18n-columnsReset="kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
1196
+ columnsReset="Reset"></ng-container>
740
1197
  <kendo-gantt-toolbar
741
1198
  *ngIf="showToolbar('top')"
742
1199
  class="k-gantt-header k-toolbar k-gantt-toolbar"
@@ -778,7 +1235,12 @@ GanttComponent = GanttComponent_1 = tslib_1.__decorate([
778
1235
  (columnResize)="columnResize.emit($event)"
779
1236
  (columnVisibilityChange)="handleColumnVisibilityChange($event)"
780
1237
  (columnLockedChange)="columnLockedChange.emit($event)"
781
- >
1238
+ (cellClick)="handleCellClick($event)"
1239
+ (cellClose)="handleCellClose($event)"
1240
+ [kendoEventsOutsideAngular]="{
1241
+ dblclick: handleDoubleClick
1242
+ }">
1243
+ <kendo-treelist-messages [kendoGanttTreeListMessages]="localizationService"></kendo-treelist-messages>
782
1244
  </kendo-treelist>
783
1245
  </kendo-splitter-pane>
784
1246
  <kendo-splitter-pane
@@ -804,6 +1266,10 @@ GanttComponent = GanttComponent_1 = tslib_1.__decorate([
804
1266
  [taskClass]="taskClass"
805
1267
  [dependencies]="dependencies"
806
1268
  [hasChildren]="hasChildren"
1269
+ [kendoEventsOutsideAngular]="{
1270
+ dblclick: handleTimelineDblClick,
1271
+ mousedown: handleTimelineMouseDown
1272
+ }"
807
1273
  ></kendo-gantt-timeline>
808
1274
  </kendo-splitter-pane>
809
1275
  </kendo-splitter>
@@ -812,6 +1278,20 @@ GanttComponent = GanttComponent_1 = tslib_1.__decorate([
812
1278
  *ngIf="showToolbar('bottom')"
813
1279
  class="k-gantt-footer k-toolbar k-gantt-toolbar"
814
1280
  position="bottom"></kendo-gantt-toolbar>
1281
+ <kendo-gantt-edit-dialog *ngIf="showEditingDialog" [formGroup]="editDialogFormGroup"></kendo-gantt-edit-dialog>
1282
+ <kendo-dialog
1283
+ *ngIf="showConfirmationDialog"
1284
+ [width]="575"
1285
+ [height]="170"
1286
+ [title]="getText('confirmationDialogTitle')"
1287
+ (close)="showConfirmationDialog = false;">
1288
+ <span>{{getText('confirmationDialogContent')}}</span>
1289
+ <kendo-dialog-actions layout="normal">
1290
+ <kendo-treelist-spacer></kendo-treelist-spacer>
1291
+ <button kendoButton [primary]="true" (click)="handleDeleteConfirmation()">{{ getText('deleteButtonText') }}</button>
1292
+ <button kendoButton (click)="showConfirmationDialog = false;">{{ getText('cancelButtonText') }}</button>
1293
+ </kendo-dialog-actions>
1294
+ </kendo-dialog>
815
1295
  `
816
1296
  }),
817
1297
  tslib_1.__metadata("design:paramtypes", [TimelineViewService,
@@ -819,6 +1299,10 @@ GanttComponent = GanttComponent_1 = tslib_1.__decorate([
819
1299
  Renderer2,
820
1300
  MappingService,
821
1301
  OptionChangesService,
822
- DependencyDomService])
1302
+ DependencyDomService,
1303
+ EditService,
1304
+ LocalizationService,
1305
+ ElementRef,
1306
+ NgZone])
823
1307
  ], GanttComponent);
824
1308
  export { GanttComponent };