@progress/kendo-angular-gantt 0.3.0-dev.202112141015 → 0.3.0-dev.202201111723

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 (60) hide show
  1. package/dist/cdn/js/kendo-angular-gantt.js +2 -2
  2. package/dist/cdn/main.js +10 -4
  3. package/dist/es/dependencies/utils.js +6 -5
  4. package/dist/es/editing/dependencies-table.component.js +131 -0
  5. package/dist/es/editing/edit-dialog.component.js +37 -6
  6. package/dist/es/editing/edit.service.js +88 -7
  7. package/dist/es/editing/task-fields.component.js +43 -0
  8. package/dist/es/gantt.component.js +49 -26
  9. package/dist/es/gantt.module.js +12 -3
  10. package/dist/es/index.js +3 -0
  11. package/dist/es/localization/gantt-localization.service.js +26 -0
  12. package/dist/es/models/dependency-type.enum.js +16 -0
  13. package/dist/es/models/models.js +1 -0
  14. package/dist/es/package-metadata.js +1 -1
  15. package/dist/es2015/dependencies/utils.js +6 -5
  16. package/dist/es2015/editing/dependencies-table.component.d.ts +39 -0
  17. package/dist/es2015/editing/dependencies-table.component.js +160 -0
  18. package/dist/es2015/editing/edit-dialog.component.d.ts +10 -3
  19. package/dist/es2015/editing/edit-dialog.component.js +55 -33
  20. package/dist/es2015/editing/edit.service.d.ts +21 -3
  21. package/dist/es2015/editing/edit.service.js +77 -10
  22. package/dist/es2015/editing/task-fields.component.d.ts +22 -0
  23. package/dist/es2015/editing/task-fields.component.js +67 -0
  24. package/dist/es2015/gantt.component.d.ts +4 -6
  25. package/dist/es2015/gantt.component.js +42 -23
  26. package/dist/es2015/gantt.module.js +12 -3
  27. package/dist/es2015/index.d.ts +3 -0
  28. package/dist/es2015/index.js +3 -0
  29. package/dist/es2015/index.metadata.json +1 -1
  30. package/dist/es2015/{models/events/remove-event.interface.d.ts → localization/gantt-localization.service.d.ts} +6 -7
  31. package/dist/es2015/localization/gantt-localization.service.js +25 -0
  32. package/dist/es2015/models/dependency-type.enum.d.ts +1 -1
  33. package/dist/es2015/models/dependency-type.enum.js +16 -0
  34. package/dist/es2015/models/events/task-edit-event.interface.d.ts +17 -4
  35. package/dist/es2015/models/models.d.ts +0 -2
  36. package/dist/es2015/models/models.js +1 -0
  37. package/dist/es2015/package-metadata.js +1 -1
  38. package/dist/fesm2015/index.js +429 -76
  39. package/dist/fesm5/index.js +377 -49
  40. package/dist/npm/dependencies/utils.js +6 -5
  41. package/dist/npm/editing/dependencies-table.component.js +133 -0
  42. package/dist/npm/editing/edit-dialog.component.js +36 -5
  43. package/dist/npm/editing/edit.service.js +87 -6
  44. package/dist/npm/editing/task-fields.component.js +45 -0
  45. package/dist/npm/gantt.component.js +49 -26
  46. package/dist/npm/gantt.module.js +11 -2
  47. package/dist/npm/index.js +6 -0
  48. package/dist/npm/localization/gantt-localization.service.js +28 -0
  49. package/dist/npm/models/dependency-type.enum.js +16 -0
  50. package/dist/npm/models/models.js +2 -0
  51. package/dist/npm/package-metadata.js +1 -1
  52. package/dist/systemjs/kendo-angular-gantt.js +1 -1
  53. package/package.json +3 -1
  54. package/dist/es/models/events/edit-event.interface.js +0 -4
  55. package/dist/es/models/events/remove-event.interface.js +0 -4
  56. package/dist/es2015/models/events/edit-event.interface.d.ts +0 -19
  57. package/dist/es2015/models/events/edit-event.interface.js +0 -4
  58. package/dist/es2015/models/events/remove-event.interface.js +0 -4
  59. package/dist/npm/models/events/edit-event.interface.js +0 -6
  60. package/dist/npm/models/events/remove-event.interface.js +0 -6
@@ -6,22 +6,24 @@ import { __extends, __decorate, __metadata, __param, __assign } from 'tslib';
6
6
  import { Input, Injectable, EventEmitter, Directive, Optional, TemplateRef, QueryList, ContentChildren, ContentChild, Component, forwardRef, SkipSelf, Host, Injector, NgZone, isDevMode, ViewChild, HostBinding, Output, Renderer2, ElementRef, ChangeDetectorRef, NgModule } from '@angular/core';
7
7
  import { ColumnBase, ColumnComponent, ColumnGroupComponent, SpanColumnComponent, TreeListComponent, DataBoundTreeComponent, ExpandableTreeComponent, FlatBindingDirective, HierarchyBindingDirective, ExpandableDirective, TreeListModule } from '@progress/kendo-angular-treelist';
8
8
  import { cloneDate, addWeeks, firstDayInWeek, addDays, getDate, lastDayOfMonth, firstDayOfMonth, addMonths, isEqual, MS_PER_HOUR, MS_PER_DAY } from '@progress/kendo-date-math';
9
- import { of, fromEvent, Subject, Subscription } from 'rxjs';
9
+ import { of, fromEvent, Subject, Subscription, forkJoin, EMPTY, isObservable } from 'rxjs';
10
10
  import { validatePackage } from '@progress/kendo-licensing';
11
11
  import { isDocumentAvailable, closestInScope, matchesClasses, anyChanged, hasObservers, EventsModule } from '@progress/kendo-angular-common';
12
12
  import { IntlService } from '@progress/kendo-angular-intl';
13
13
  import { orderBy } from '@progress/kendo-data-query';
14
14
  import { getter } from '@progress/kendo-common';
15
- import { map, distinctUntilChanged, take, filter, switchMap } from 'rxjs/operators';
15
+ import { map, distinctUntilChanged, take, expand, reduce, filter, switchMap } from 'rxjs/operators';
16
16
  import { LocalizationService, ComponentMessages, L10N_PREFIX } from '@progress/kendo-angular-l10n';
17
17
  import { CommonModule } from '@angular/common';
18
- import { SplitterModule } from '@progress/kendo-angular-layout';
18
+ import { SplitterModule, TabStripModule } from '@progress/kendo-angular-layout';
19
19
  import { ButtonsModule } from '@progress/kendo-angular-buttons';
20
20
  import { DialogModule } from '@progress/kendo-angular-dialog';
21
- import { FormGroup, ReactiveFormsModule } from '@angular/forms';
21
+ import { FormGroup, FormControl, Validators, FormArray, ReactiveFormsModule } from '@angular/forms';
22
22
  import { LabelModule } from '@progress/kendo-angular-label';
23
23
  import { InputsModule } from '@progress/kendo-angular-inputs';
24
24
  import { DateInputsModule } from '@progress/kendo-angular-dateinputs';
25
+ import { GridModule } from '@progress/kendo-angular-grid';
26
+ import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
25
27
 
26
28
  /**
27
29
  * @hidden
@@ -30,7 +32,7 @@ var packageMetadata = {
30
32
  name: '@progress/kendo-angular-gantt',
31
33
  productName: 'Kendo UI for Angular',
32
34
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
33
- publishDate: 1639476447,
35
+ publishDate: 1641921322,
34
36
  version: '',
35
37
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
36
38
  };
@@ -1380,31 +1382,109 @@ var DependencyDomService = /** @class */ (function () {
1380
1382
  * @hidden
1381
1383
  */
1382
1384
  var EditService = /** @class */ (function () {
1383
- function EditService() {
1385
+ function EditService(mapper) {
1386
+ var _this = this;
1387
+ this.mapper = mapper;
1384
1388
  this.showEditingDialog = new Subject();
1385
1389
  this.showConfirmationDialog = new Subject();
1386
1390
  this.editEvent = new Subject();
1387
1391
  this.addEvent = new Subject();
1392
+ this.updatedItems = [];
1393
+ this.deletedItems = [];
1394
+ this.itemIndex = function (item, data) {
1395
+ return data.findIndex(function (dataItem) { return _this.mapper.extractFromTask(dataItem, 'id') === _this.mapper.extractFromTask(item, 'id'); });
1396
+ };
1388
1397
  }
1389
- EditService.prototype.createEditDialog = function (dataItem, formGroup) {
1398
+ Object.defineProperty(EditService.prototype, "dependencies", {
1399
+ get: function () {
1400
+ return this.predecessors.concat(this.successors);
1401
+ },
1402
+ set: function (items) {
1403
+ var _this = this;
1404
+ // Can this whole thing be moved to edit-dialog? Dependencies might not be needed here
1405
+ var dataItemId = this.mapper.extractFromTask(this.dataItem, 'id');
1406
+ this.predecessors = items.filter(function (item) { return _this.mapper.extractFromDependency(item, 'toId') === dataItemId; });
1407
+ this.successors = items.filter(function (item) { return _this.mapper.extractFromDependency(item, 'fromId') === dataItemId; });
1408
+ },
1409
+ enumerable: true,
1410
+ configurable: true
1411
+ });
1412
+ EditService.prototype.createEditDialog = function (dataItem, taskFormGroup, dependencies) {
1390
1413
  this.dataItem = dataItem;
1391
- this.formGroup = formGroup;
1414
+ this.taskFormGroup = taskFormGroup;
1415
+ this.dependencies = dependencies;
1392
1416
  this.showEditingDialog.next(true);
1393
1417
  };
1394
1418
  EditService.prototype.closeEditDialog = function () {
1395
1419
  this.showEditingDialog.next(false);
1396
1420
  this.dataItem = undefined;
1397
- this.formGroup = undefined;
1421
+ this.taskFormGroup = undefined;
1422
+ this.dependencies = [];
1423
+ this.updatedItems = [];
1424
+ this.deletedItems = [];
1398
1425
  };
1399
1426
  EditService.prototype.triggerEditEvent = function (editResultType) {
1400
1427
  this.editEvent.next({
1401
- formGroup: this.formGroup,
1428
+ taskFormGroup: this.taskFormGroup,
1402
1429
  dataItem: this.dataItem,
1430
+ dependencies: {
1431
+ createdItems: this.getCreatedDependencies(),
1432
+ updatedItems: this.updatedItems,
1433
+ deletedItems: this.deletedItems
1434
+ },
1403
1435
  editResultType: editResultType
1404
1436
  });
1405
1437
  };
1438
+ EditService.prototype.updateDependencies = function (item) {
1439
+ if (!this.isNew(item)) {
1440
+ // update
1441
+ var index = this.itemIndex(item, this.updatedItems);
1442
+ if (index !== -1) {
1443
+ this.updatedItems.splice(index, 1, item);
1444
+ }
1445
+ else {
1446
+ this.updatedItems.push(item);
1447
+ }
1448
+ }
1449
+ };
1450
+ EditService.prototype.getCreatedDependencies = function () {
1451
+ var _this = this;
1452
+ return this.dependencies.filter(function (item) { return _this.mapper.extractFromDependency(item, 'id') === null; });
1453
+ };
1454
+ EditService.prototype.deleteDependency = function (item) {
1455
+ var updatedIndex = this.itemIndex(item, this.updatedItems);
1456
+ if (updatedIndex !== -1) {
1457
+ this.updatedItems.splice(updatedIndex, 1);
1458
+ }
1459
+ if (!this.isNew(item)) {
1460
+ this.deletedItems.push(item);
1461
+ }
1462
+ };
1463
+ EditService.prototype.loadTasks = function (initialValues, isInitializer) {
1464
+ var _this = this;
1465
+ if (isInitializer === void 0) { isInitializer = true; }
1466
+ return forkJoin(initialValues.map(function (v) { return _this.getElementById(v); })).pipe(map(function (value) {
1467
+ return value.reduce(function (acc, item) { return acc = acc.concat(normalizeGanttData(item)); }, []);
1468
+ }), expand(function (values) {
1469
+ if (values.some(function (el) { return _this.hasChildren(el); })) {
1470
+ return _this.loadTasks(values, false);
1471
+ }
1472
+ return EMPTY;
1473
+ }), reduce(function (acc, values) { return acc.concat(values); }, isInitializer ? initialValues.slice() : []));
1474
+ };
1475
+ EditService.prototype.getElementById = function (item) {
1476
+ var children = this.fetchChildren(item);
1477
+ if (isObservable(children)) {
1478
+ return children;
1479
+ }
1480
+ return of(children);
1481
+ };
1482
+ EditService.prototype.isNew = function (item) {
1483
+ return !isPresent(this.mapper.extractFromDependency(item, 'id'));
1484
+ };
1406
1485
  EditService = __decorate([
1407
- Injectable()
1486
+ Injectable(),
1487
+ __metadata("design:paramtypes", [MappingService])
1408
1488
  ], EditService);
1409
1489
  return EditService;
1410
1490
  }());
@@ -1717,6 +1797,25 @@ var mapPath = function (item) { return ({
1717
1797
  parent: item.parent.data ? mapPath(item.parent) : null
1718
1798
  }); };
1719
1799
 
1800
+ /**
1801
+ * @hidden
1802
+ *
1803
+ * Needed to keep the Gantt's LocalizationService reference and be able to use it component's inside the TabStrip
1804
+ */
1805
+ var GanttLocalizationService = /** @class */ (function () {
1806
+ function GanttLocalizationService(localizationService) {
1807
+ this.localizationService = localizationService;
1808
+ }
1809
+ GanttLocalizationService.prototype.get = function (token) {
1810
+ return this.localizationService.get(token);
1811
+ };
1812
+ GanttLocalizationService = __decorate([
1813
+ Injectable(),
1814
+ __metadata("design:paramtypes", [LocalizationService])
1815
+ ], GanttLocalizationService);
1816
+ return GanttLocalizationService;
1817
+ }());
1818
+
1720
1819
  var TREELIST_GROUP_COLUMNS_CLASS = 'k-gantt-treelist-nested-columns';
1721
1820
  var DEFAULT_VIEW = 'week';
1722
1821
  /**
@@ -1825,14 +1924,6 @@ var GanttComponent = /** @class */ (function () {
1825
1924
  * > When applied, the [`SelectableDirective`]({% slug api_gantt_selectabledirective %}) sets `selectable` to `true` internally.
1826
1925
  */
1827
1926
  this.selectable = false;
1828
- /**
1829
- * Gets or sets the callback function that retrieves the child items for a particular item.
1830
- */
1831
- this.fetchChildren = fetchChildren;
1832
- /**
1833
- * Gets or sets the callback function that indicates if a particular item has child items.
1834
- */
1835
- this.hasChildren = hasChildren;
1836
1927
  /**
1837
1928
  * Defines the dependencies that will be drawn between the rendered tasks.
1838
1929
  *
@@ -2020,6 +2111,8 @@ var GanttComponent = /** @class */ (function () {
2020
2111
  addTaskTool: 'none',
2021
2112
  viewSelectorTool: 'top'
2022
2113
  };
2114
+ this._fetchChildren = fetchChildren;
2115
+ this._hasChildren = hasChildren;
2023
2116
  this.rtl = false;
2024
2117
  this.optionChangesSubscriptions = new Subscription();
2025
2118
  this.editServiceSubscription = new Subscription();
@@ -2035,12 +2128,13 @@ var GanttComponent = /** @class */ (function () {
2035
2128
  this.editServiceSubscription.add(this.editService.showConfirmationDialog.subscribe(function () { return _this.taskDelete.emit(); }));
2036
2129
  this.editServiceSubscription.add(this.editService.editEvent.subscribe(function (args) {
2037
2130
  _this[args.editResultType].emit({
2038
- formGroup: args.formGroup,
2131
+ taskFormGroup: args.taskFormGroup,
2039
2132
  item: getEditItem(args.dataItem, _this.treeList.view.data, _this.mapper),
2133
+ dependencies: args.dependencies,
2040
2134
  sender: _this
2041
2135
  });
2042
2136
  _this.showConfirmationDialog = _this.showEditingDialog = false;
2043
- _this.editService.dataItem = _this.editService.formGroup = null;
2137
+ _this.editService.dataItem = _this.editService.taskFormGroup = null;
2044
2138
  _this.updateView();
2045
2139
  }));
2046
2140
  this.editServiceSubscription.add(this.editService.addEvent.subscribe(function (args) {
@@ -2182,6 +2276,34 @@ var GanttComponent = /** @class */ (function () {
2182
2276
  enumerable: true,
2183
2277
  configurable: true
2184
2278
  });
2279
+ Object.defineProperty(GanttComponent.prototype, "fetchChildren", {
2280
+ get: function () {
2281
+ return this._fetchChildren;
2282
+ },
2283
+ /**
2284
+ * Gets or sets the callback function that retrieves the child items for a particular item.
2285
+ */
2286
+ set: function (fn) {
2287
+ this._fetchChildren = fn;
2288
+ this.editService.fetchChildren = fn;
2289
+ },
2290
+ enumerable: true,
2291
+ configurable: true
2292
+ });
2293
+ Object.defineProperty(GanttComponent.prototype, "hasChildren", {
2294
+ get: function () {
2295
+ return this._hasChildren;
2296
+ },
2297
+ /**
2298
+ * Gets or sets the callback function that indicates if a particular item has child items.
2299
+ */
2300
+ set: function (fn) {
2301
+ this._hasChildren = fn;
2302
+ this.editService.hasChildren = fn;
2303
+ },
2304
+ enumerable: true,
2305
+ configurable: true
2306
+ });
2185
2307
  Object.defineProperty(GanttComponent.prototype, "timelinePaneOptions", {
2186
2308
  get: function () {
2187
2309
  return __assign({}, this._timelinePaneOptions, { size: this.treeListPaneOptions.collapsed ? '100%' : this._timelinePaneOptions.size });
@@ -2333,16 +2455,6 @@ var GanttComponent = /** @class */ (function () {
2333
2455
  enumerable: true,
2334
2456
  configurable: true
2335
2457
  });
2336
- Object.defineProperty(GanttComponent.prototype, "editDialogFormGroup", {
2337
- /**
2338
- * @hidden
2339
- */
2340
- get: function () {
2341
- return this.editService.formGroup;
2342
- },
2343
- enumerable: true,
2344
- configurable: true
2345
- });
2346
2458
  GanttComponent.prototype.ngOnChanges = function (changes) {
2347
2459
  if (anyChanged(['data', 'activeView', 'workWeekStart', 'workWeekEnd', 'workDayStart', 'workDayEnd'], changes)) {
2348
2460
  this.loadTimelineData();
@@ -2432,8 +2544,14 @@ var GanttComponent = /** @class */ (function () {
2432
2544
  * Opens the task editing dialog.
2433
2545
  */
2434
2546
  GanttComponent.prototype.editTask = function (dataItem, formGroup) {
2547
+ var _this = this;
2435
2548
  if (!this.showEditingDialog) {
2436
- this.editService.createEditDialog(dataItem, formGroup);
2549
+ var taskId_1 = this.mapper.extractFromTask(dataItem, 'id');
2550
+ var dependencies = this.dependencies.filter(function (item) {
2551
+ return _this.mapper.extractFromDependency(item, 'toId') === taskId_1
2552
+ || _this.mapper.extractFromDependency(item, 'fromId') === taskId_1;
2553
+ });
2554
+ this.editService.createEditDialog(dataItem, formGroup, dependencies);
2437
2555
  }
2438
2556
  };
2439
2557
  /**
@@ -2797,12 +2915,14 @@ var GanttComponent = /** @class */ (function () {
2797
2915
  ], GanttComponent.prototype, "toolbarSettings", null);
2798
2916
  __decorate([
2799
2917
  Input(),
2800
- __metadata("design:type", Function)
2801
- ], GanttComponent.prototype, "fetchChildren", void 0);
2918
+ __metadata("design:type", Function),
2919
+ __metadata("design:paramtypes", [Function])
2920
+ ], GanttComponent.prototype, "fetchChildren", null);
2802
2921
  __decorate([
2803
2922
  Input(),
2804
- __metadata("design:type", Function)
2805
- ], GanttComponent.prototype, "hasChildren", void 0);
2923
+ __metadata("design:type", Function),
2924
+ __metadata("design:paramtypes", [Function])
2925
+ ], GanttComponent.prototype, "hasChildren", null);
2806
2926
  __decorate([
2807
2927
  Input(),
2808
2928
  __metadata("design:type", Array)
@@ -2976,6 +3096,7 @@ var GanttComponent = /** @class */ (function () {
2976
3096
  selector: 'kendo-gantt',
2977
3097
  exportAs: 'kendoGantt',
2978
3098
  providers: [
3099
+ GanttLocalizationService,
2979
3100
  LocalizationService,
2980
3101
  {
2981
3102
  provide: DataBoundTreeComponent,
@@ -2995,7 +3116,7 @@ var GanttComponent = /** @class */ (function () {
2995
3116
  OptionChangesService,
2996
3117
  EditService
2997
3118
  ],
2998
- template: "\n <ng-container kendoGanttLocalizedMessages\n i18n-taskEditingGeneralTabTitle=\"kendo.gantt.taskEditingGeneralTabTitle|The title of the 'General' tab of the editing dialog TabStrip\"\n taskEditingGeneralTabTitle=\"General\"\n\n i18n-taskEditingPredecessorsTabTitle=\"kendo.gantt.taskEditingPredecessorsTabTitle|The title of the 'Predecessors' dependencies tab of the editing dialog TabStrip\"\n taskEditingPredecessorsTabTitle=\"Predecessors\"\n\n i18n-taskEditingSuccessorsTabTitle=\"kendo.gantt.taskEditingSuccessorsTabTitle|The title of the 'Successors' dependencies tab of the editing dialog TabStrip\"\n taskEditingSuccessorsTabTitle=\"Successors\"\n\n i18n-taskEditingDependenciesAddButtonText=\"kendo.gantt.taskEditingDependenciesAddButtonText|The text of the 'Add' button in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesAddButtonText=\"Add\"\n\n i18n-taskEditingDependenciesRemoveButtonText=\"kendo.gantt.taskEditingDependenciesRemoveButtonText|The text of the 'Remove' button in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesRemoveButtonText=\"Remove\"\n\n i18n-taskEditingDependenciesGridNameColumnTitle=\"kendo.gantt.taskEditingDependenciesGridNameColumnTitle|The title of the 'Task Title' Grid column in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesGridNameColumnTitle=\"Task Title\"\n\n i18n-taskEditingDependenciesGridTypeColumnTitle=\"kendo.gantt.taskEditingDependenciesGridTypeColumnTitle|The title of the 'Type' Grid column in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesGridTypeColumnTitle=\"Type\"\n\n i18n-taskDeleteLabel=\"kendo.gantt.taskDeleteLabel|The label of the task delete icon\"\n taskDeleteLabel=\"Delete\"\n\n i18n-taskEditingDialogTitle=\"kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog\"\n taskEditingDialogTitle=\"Editing Task\"\n\n i18n-taskEditingDialogCloseTitle=\"kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button\"\n taskEditingDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogCloseTitle=\"kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button\"\n confirmationDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogTitle=\"kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog\"\n confirmationDialogTitle=\"Delete Task\"\n\n i18n-confirmationDialogContent=\"kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog\"\n confirmationDialogContent=\"Are you sure you want to delete this task?\"\n\n i18n-deleteButtonText=\"kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button\"\n deleteButtonText=\"Delete\"\n\n i18n-cancelButtonText=\"kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button\"\n cancelButtonText=\"Cancel\"\n\n i18n-saveButtonText=\"kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button\"\n saveButtonText=\"Save\"\n\n i18n-titleFieldInputLabel=\"kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode\"\n titleFieldInputLabel=\"Title\"\n\n i18n-startFieldInputLabel=\"kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode\"\n startFieldInputLabel=\"Start\"\n\n i18n-endFieldInputLabel=\"kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode\"\n endFieldInputLabel=\"End\"\n\n i18n-completionRatioFieldInputLabel=\"kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode\"\n completionRatioFieldInputLabel=\"Progress\"\n\n i18n-dayViewText=\"kendo.gantt.dayViewText|The text of the day view in the ViewSelector component\"\n dayViewText=\"Day\"\n\n i18n-weekViewText=\"kendo.gantt.weekViewText|The text of the week view in the ViewSelector component\"\n weekViewText=\"Week\"\n\n i18n-monthViewText=\"kendo.gantt.monthViewText|The text of the month view in the ViewSelector component\"\n monthViewText=\"Month\"\n\n i18n-yearViewText-disabled=\"kendo.gantt.yearViewText|The text of the year view in the ViewSelector component\"\n yearViewText=\"Year\"\n\n i18n-addTaskText=\"kendo.gantt.addTaskText|The text of the DropDownButton in the AddTask component\"\n addTaskText=\"Add Task\"\n\n i18n-addChildText=\"kendo.gantt.addChildText|The text of the 'Add Child' option in the AddTask component\"\n addChildText=\"Add Child\"\n\n i18n-addAboveText=\"kendo.gantt.addAboveText|The text of the 'Add Above' option in the AddTask component\"\n addAboveText=\"Add Above\"\n\n i18n-addBelowText=\"kendo.gantt.addBelowText|The text of the 'Add Below' option in the AddTask component\"\n addBelowText=\"Add Below\"\n\n i18n-noRecords=\"kendo.gantt.noRecords|The label visible in the TreeList when there are no records\"\n noRecords=\"No records available.\"\n\n i18n-filter=\"kendo.gantt.filter|The label of the filter cell or icon\"\n filter=\"Filter\"\n\n i18n-filterEqOperator=\"kendo.gantt.filterEqOperator|The text of the equal filter operator\"\n filterEqOperator=\"Is equal to\"\n\n i18n-filterNotEqOperator=\"kendo.gantt.filterNotEqOperator|The text of the not equal filter operator\"\n filterNotEqOperator=\"Is not equal to\"\n\n i18n-filterIsNullOperator=\"kendo.gantt.filterIsNullOperator|The text of the is null filter operator\"\n filterIsNullOperator=\"Is null\"\n\n i18n-filterIsNotNullOperator=\"kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator\"\n filterIsNotNullOperator=\"Is not null\"\n\n i18n-filterIsEmptyOperator=\"kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator\"\n filterIsEmptyOperator=\"Is empty\"\n\n i18n-filterIsNotEmptyOperator=\"kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator\"\n filterIsNotEmptyOperator=\"Is not empty\"\n\n i18n-filterStartsWithOperator=\"kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator\"\n filterStartsWithOperator=\"Starts with\"\n\n i18n-filterContainsOperator=\"kendo.gantt.filterContainsOperator|The text of the contains filter operator\"\n filterContainsOperator=\"Contains\"\n\n i18n-filterNotContainsOperator=\"kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator\"\n filterNotContainsOperator=\"Does not contain\"\n\n i18n-filterEndsWithOperator=\"kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator\"\n filterEndsWithOperator=\"Ends with\"\n\n i18n-filterGteOperator=\"kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator\"\n filterGteOperator=\"Is greater than or equal to\"\n\n i18n-filterGtOperator=\"kendo.gantt.filterGtOperator|The text of the greater than filter operator\"\n filterGtOperator=\"Is greater than\"\n\n i18n-filterLteOperator=\"kendo.gantt.filterLteOperator|The text of the less than or equal filter operator\"\n filterLteOperator=\"Is less than or equal to\"\n\n i18n-filterLtOperator=\"kendo.gantt.filterLtOperator|The text of the less than filter operator\"\n filterLtOperator=\"Is less than\"\n\n i18n-filterIsTrue=\"kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option\"\n filterIsTrue=\"Is True\"\n\n i18n-filterIsFalse=\"kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option\"\n filterIsFalse=\"Is False\"\n\n i18n-filterBooleanAll=\"kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option\"\n filterBooleanAll=\"(All)\"\n\n i18n-filterAfterOrEqualOperator=\"kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator\"\n filterAfterOrEqualOperator=\"Is after or equal to\"\n\n i18n-filterAfterOperator=\"kendo.gantt.filterAfterOperator|The text of the after date filter operator\"\n filterAfterOperator=\"Is after\"\n\n i18n-filterBeforeOperator=\"kendo.gantt.filterBeforeOperator|The text of the before date filter operator\"\n filterBeforeOperator=\"Is before\"\n\n i18n-filterBeforeOrEqualOperator=\"kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator\"\n filterBeforeOrEqualOperator=\"Is before or equal to\"\n\n i18n-filterFilterButton=\"kendo.gantt.filterFilterButton|The text of the filter button\"\n filterFilterButton=\"Filter\"\n\n i18n-filterClearButton=\"kendo.gantt.filterClearButton|The text of the clear filter button\"\n filterClearButton=\"Clear\"\n\n i18n-filterAndLogic=\"kendo.gantt.filterAndLogic|The text of the And filter logic\"\n filterAndLogic=\"And\"\n\n i18n-filterOrLogic=\"kendo.gantt.filterOrLogic|The text of the Or filter logic\"\n filterOrLogic=\"Or\"\n\n i18n-loading=\"kendo.gantt.loading|The loading text\"\n loading=\"Loading\"\n\n i18n-columnMenu=\"kendo.gantt.columnMenu|The title of the column menu icon\"\n columnMenu=\"Column Menu\"\n\n i18n-columns=\"kendo.gantt.columns|The text shown in the column menu for the columns item\"\n columns=\"Columns\"\n\n i18n-lock-disabled=\"kendo.gantt.lock|The text shown in the column menu for the lock item\"\n lock-disabled=\"Lock\"\n\n i18n-unlock-disabled=\"kendo.gantt.unlock|The text shown in the column menu for the unlock item\"\n unlock-disabled=\"Unlock\"\n\n i18n-sortable=\"kendo.gantt.sortable|The label of the sort icon\"\n sortable=\"Sortable\"\n\n i18n-sortAscending=\"kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item\"\n sortAscending=\"Sort Ascending\"\n\n i18n-sortDescending=\"kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item\"\n sortDescending=\"Sort Descending\"\n\n i18n-sortedAscending=\"kendo.gantt.sortedAscending|The status announcement when a column is sorted ascending\"\n sortedAscending=\"Sorted Ascending\"\n\n i18n-sortedDescending=\"kendo.gantt.sortedDescending|The status announcement when a column is sorted descending\"\n sortedDescending=\"Sorted Descending\"\n\n i18n-sortedDefault=\"kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted\"\n sortedDefault=\"Not Sorted\"\n\n i18n-columnsApply=\"kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button\"\n columnsApply=\"Apply\"\n\n i18n-columnsReset=\"kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button\"\n columnsReset=\"Reset\"></ng-container>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('top')\"\n [showAddTask]=\"toolbarSettings.addTaskTool === 'top' || toolbarSettings.addTaskTool === 'both'\"\n [showViewSelector]=\"toolbarSettings.viewSelectorTool === 'top' || toolbarSettings.viewSelectorTool === 'both'\"\n class=\"k-gantt-header k-toolbar k-gantt-toolbar\"\n position=\"top\"></kendo-gantt-toolbar>\n <div class=\"k-gantt-content\">\n <kendo-splitter [style.border]=\"0\">\n <kendo-splitter-pane\n class=\"k-gantt-treelist k-gantt-treelist-scrollable\"\n [collapsible]=\"treeListPaneOptions?.collapsible\"\n [collapsed]=\"treeListPaneOptions?.collapsed\"\n (collapsedChange)=\"onTreeListCollapsedChange($event)\"\n [scrollable]=\"false\">\n <kendo-treelist\n [idField]=\"taskIdField\"\n [columns]=\"columns\"\n [data]=\"data\"\n [hasChildren]=\"hasChildren\"\n [fetchChildren]=\"fetchChildren\"\n [isExpanded]=\"isExpanded\"\n [autoSize]=\"columnsAutoSize\"\n [columnMenu]=\"columnMenu\"\n [reorderable]=\"columnsReorderable\"\n [resizable]=\"columnsResizable\"\n [rowClass]=\"rowClass\"\n [isSelected]=\"isSelected\"\n [selectable]=\"selectable\"\n [sortable]=\"sortable\"\n [sort]=\"sort\"\n [filterable]=\"filterMenu\"\n [filter]=\"filter\"\n (filterChange)=\"filterChange.emit($event)\"\n (sortChange)=\"sortChange.emit($event)\"\n (dataStateChange)=\"dataStateChange.emit({\n filter: $event.filter,\n sort: $event.sort\n })\"\n (expandStateChange)=\"expandStateChange.emit($event)\"\n (expand)=\"rowExpand.emit({ dataItem: $event.dataItem })\"\n (collapse)=\"rowCollapse.emit({ dataItem: $event.dataItem })\"\n (columnReorder)=\"columnReorder.emit($event)\"\n (columnResize)=\"columnResize.emit($event)\"\n (columnVisibilityChange)=\"handleColumnVisibilityChange($event)\"\n (columnLockedChange)=\"columnLockedChange.emit($event)\"\n (selectionChange)=\"handleTreeListSelectionChange($event)\"\n (cellClick)=\"handleTreeListCellClick($event)\"\n (cellClose)=\"handleCellClose($event)\"\n [kendoEventsOutsideAngular]=\"{\n dblclick: handleTreeListDoubleClick\n }\"\n [scope]=\"this\"\n >\n <kendo-treelist-messages\n [noRecords]=\"getText('noRecords')\"\n [filter]=\"getText('filter')\"\n [filterEqOperator]=\"getText('filterEqOperator')\"\n [filterNotEqOperator]=\"getText('filterNotEqOperator')\"\n [filterIsNullOperator]=\"getText('filterIsNullOperator')\"\n [filterIsNotNullOperator]=\"getText('filterIsNotNullOperator')\"\n [filterIsEmptyOperator]=\"getText('filterIsEmptyOperator')\"\n [filterIsNotEmptyOperator]=\"getText('filterIsNotEmptyOperator')\"\n [filterStartsWithOperator]=\"getText('filterStartsWithOperator')\"\n [filterContainsOperator]=\"getText('filterContainsOperator')\"\n [filterNotContainsOperator]=\"getText('filterNotContainsOperator')\"\n [filterEndsWithOperator]=\"getText('filterEndsWithOperator')\"\n [filterGteOperator]=\"getText('filterGteOperator')\"\n [filterGtOperator]=\"getText('filterGtOperator')\"\n [filterLteOperator]=\"getText('filterLteOperator')\"\n [filterLtOperator]=\"getText('filterLtOperator')\"\n [filterIsTrue]=\"getText('filterIsTrue')\"\n [filterIsFalse]=\"getText('filterIsFalse')\"\n [filterBooleanAll]=\"getText('filterBooleanAll')\"\n [filterAfterOrEqualOperator]=\"getText('filterAfterOrEqualOperator')\"\n [filterAfterOperator]=\"getText('filterAfterOperator')\"\n [filterBeforeOperator]=\"getText('filterBeforeOperator')\"\n [filterBeforeOrEqualOperator]=\"getText('filterBeforeOrEqualOperator')\"\n [filterFilterButton]=\"getText('filterFilterButton')\"\n [filterClearButton]=\"getText('filterClearButton')\"\n [filterAndLogic]=\"getText('filterAndLogic')\"\n [filterOrLogic]=\"getText('filterOrLogic')\"\n [loading]=\"getText('loading')\"\n [columnMenu]=\"getText('columnMenu')\"\n [columns]=\"getText('columns')\"\n [sortable]=\"getText('sortable')\"\n [sortAscending]=\"getText('sortAscending')\"\n [sortDescending]=\"getText('sortDescending')\"\n [sortedAscending]=\"getText('sortedAscending')\"\n [sortedDescending]=\"getText('sortedDescending')\"\n [sortedDefault]=\"getText('sortedDefault')\"\n [columnsApply]=\"getText('columnsApply')\"\n [columnsReset]=\"getText('columnsReset')\"\n >\n </kendo-treelist-messages>\n </kendo-treelist>\n </kendo-splitter-pane>\n <kendo-splitter-pane\n [collapsible]=\"timelinePaneOptions?.collapsible\"\n [resizable]=\"timelinePaneOptions?.resizable\"\n [collapsed]=\"timelinePaneOptions?.collapsed\"\n [min]=\"timelinePaneOptions?.min\"\n [max]=\"timelinePaneOptions?.max\"\n [size]=\"timelinePaneOptions?.size\"\n (collapsedChange)=\"onTimelineCollapsedChange($event)\"\n (sizeChange)=\"onTimelinePaneSizeChange($event)\"\n [scrollable]=\"false\">\n <kendo-gantt-timeline\n *ngIf=\"views && views.length\"\n [rows]=\"renderedTreeListItems\"\n [slots]=\"timelineSlots\"\n [groupSlots]=\"timelineGroupSlots\"\n [tableWidth]=\"tableWidth\"\n [activeView]=\"activeView\"\n [taskContentTemplate]=\"taskContentTemplate?.templateRef\"\n [taskTemplate]=\"taskTemplate?.templateRef\"\n [summaryTaskTemplate]=\"summaryTaskTemplate?.templateRef\"\n [taskClass]=\"taskClass\"\n [dependencies]=\"dependencies\"\n [hasChildren]=\"hasChildren\"\n [isTaskSelected]=\"isTaskSelected\"\n [kendoEventsOutsideAngular]=\"{\n click: handleTimelineClick,\n contextmenu: handleTimelineRightClick,\n dblclick: handleTimelineDblClick,\n mousedown: handleTimelineMouseDown\n }\"\n [scope]=\"this\"\n ></kendo-gantt-timeline>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('bottom')\"\n [showAddTask]=\"toolbarSettings.addTaskTool === 'bottom' || toolbarSettings.addTaskTool === 'both'\"\n [showViewSelector]=\"toolbarSettings.viewSelectorTool === 'bottom' || toolbarSettings.viewSelectorTool === 'both'\"\n class=\"k-gantt-footer k-toolbar k-gantt-toolbar\"\n position=\"bottom\"></kendo-gantt-toolbar>\n <kendo-gantt-edit-dialog *ngIf=\"showEditingDialog\" [formGroup]=\"editDialogFormGroup\"></kendo-gantt-edit-dialog>\n <kendo-dialog\n *ngIf=\"showConfirmationDialog\"\n [width]=\"575\"\n [height]=\"170\"\n [title]=\"getText('confirmationDialogTitle')\"\n (close)=\"showConfirmationDialog = false;\">\n <span>{{getText('confirmationDialogContent')}}</span>\n <kendo-dialog-actions layout=\"normal\">\n <kendo-treelist-spacer></kendo-treelist-spacer>\n <button kendoButton [primary]=\"true\" (click)=\"handleDeleteConfirmation()\">{{ getText('deleteButtonText') }}</button>\n <button kendoButton (click)=\"showConfirmationDialog = false;\">{{ getText('cancelButtonText') }}</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n "
3119
+ template: "\n <ng-container kendoGanttLocalizedMessages\n i18n-taskEditingGeneralTabTitle=\"kendo.gantt.taskEditingGeneralTabTitle|The title of the 'General' tab of the editing dialog TabStrip\"\n taskEditingGeneralTabTitle=\"General\"\n\n i18n-taskEditingPredecessorsTabTitle=\"kendo.gantt.taskEditingPredecessorsTabTitle|The title of the 'Predecessors' dependencies tab of the editing dialog TabStrip\"\n taskEditingPredecessorsTabTitle=\"Predecessors\"\n\n i18n-taskEditingSuccessorsTabTitle=\"kendo.gantt.taskEditingSuccessorsTabTitle|The title of the 'Successors' dependencies tab of the editing dialog TabStrip\"\n taskEditingSuccessorsTabTitle=\"Successors\"\n\n i18n-taskEditingDependenciesAddButtonText=\"kendo.gantt.taskEditingDependenciesAddButtonText|The text of the 'Add' button in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesAddButtonText=\"Add\"\n\n i18n-taskEditingDependenciesRemoveButtonText=\"kendo.gantt.taskEditingDependenciesRemoveButtonText|The text of the 'Remove' button in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesRemoveButtonText=\"Remove\"\n\n i18n-taskEditingDependenciesGridNameColumnTitle=\"kendo.gantt.taskEditingDependenciesGridNameColumnTitle|The title of the 'Task Title' Grid column in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesGridNameColumnTitle=\"Task Title\"\n\n i18n-taskEditingDependenciesGridTypeColumnTitle=\"kendo.gantt.taskEditingDependenciesGridTypeColumnTitle|The title of the 'Type' Grid column in the dependencies tabs of the editing dialog TabStrip\"\n taskEditingDependenciesGridTypeColumnTitle=\"Type\"\n\n i18n-taskDeleteLabel=\"kendo.gantt.taskDeleteLabel|The label of the task delete icon\"\n taskDeleteLabel=\"Delete\"\n\n i18n-taskEditingDialogTitle=\"kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog\"\n taskEditingDialogTitle=\"Editing Task\"\n\n i18n-taskEditingDialogCloseTitle=\"kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button\"\n taskEditingDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogCloseTitle=\"kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button\"\n confirmationDialogCloseTitle=\"Close\"\n\n i18n-confirmationDialogTitle=\"kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog\"\n confirmationDialogTitle=\"Delete Task\"\n\n i18n-confirmationDialogContent=\"kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog\"\n confirmationDialogContent=\"Are you sure you want to delete this task?\"\n\n i18n-deleteButtonText=\"kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button\"\n deleteButtonText=\"Delete\"\n\n i18n-cancelButtonText=\"kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button\"\n cancelButtonText=\"Cancel\"\n\n i18n-saveButtonText=\"kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button\"\n saveButtonText=\"Save\"\n\n i18n-titleFieldInputLabel=\"kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode\"\n titleFieldInputLabel=\"Title\"\n\n i18n-startFieldInputLabel=\"kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode\"\n startFieldInputLabel=\"Start\"\n\n i18n-endFieldInputLabel=\"kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode\"\n endFieldInputLabel=\"End\"\n\n i18n-completionRatioFieldInputLabel=\"kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode\"\n completionRatioFieldInputLabel=\"Progress\"\n\n i18n-dayViewText=\"kendo.gantt.dayViewText|The text of the day view in the ViewSelector component\"\n dayViewText=\"Day\"\n\n i18n-weekViewText=\"kendo.gantt.weekViewText|The text of the week view in the ViewSelector component\"\n weekViewText=\"Week\"\n\n i18n-monthViewText=\"kendo.gantt.monthViewText|The text of the month view in the ViewSelector component\"\n monthViewText=\"Month\"\n\n i18n-yearViewText-disabled=\"kendo.gantt.yearViewText|The text of the year view in the ViewSelector component\"\n yearViewText=\"Year\"\n\n i18n-addTaskText=\"kendo.gantt.addTaskText|The text of the DropDownButton in the AddTask component\"\n addTaskText=\"Add Task\"\n\n i18n-addChildText=\"kendo.gantt.addChildText|The text of the 'Add Child' option in the AddTask component\"\n addChildText=\"Add Child\"\n\n i18n-addAboveText=\"kendo.gantt.addAboveText|The text of the 'Add Above' option in the AddTask component\"\n addAboveText=\"Add Above\"\n\n i18n-addBelowText=\"kendo.gantt.addBelowText|The text of the 'Add Below' option in the AddTask component\"\n addBelowText=\"Add Below\"\n\n i18n-noRecords=\"kendo.gantt.noRecords|The label visible in the TreeList when there are no records\"\n noRecords=\"No records available.\"\n\n i18n-filter=\"kendo.gantt.filter|The label of the filter cell or icon\"\n filter=\"Filter\"\n\n i18n-filterEqOperator=\"kendo.gantt.filterEqOperator|The text of the equal filter operator\"\n filterEqOperator=\"Is equal to\"\n\n i18n-filterNotEqOperator=\"kendo.gantt.filterNotEqOperator|The text of the not equal filter operator\"\n filterNotEqOperator=\"Is not equal to\"\n\n i18n-filterIsNullOperator=\"kendo.gantt.filterIsNullOperator|The text of the is null filter operator\"\n filterIsNullOperator=\"Is null\"\n\n i18n-filterIsNotNullOperator=\"kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator\"\n filterIsNotNullOperator=\"Is not null\"\n\n i18n-filterIsEmptyOperator=\"kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator\"\n filterIsEmptyOperator=\"Is empty\"\n\n i18n-filterIsNotEmptyOperator=\"kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator\"\n filterIsNotEmptyOperator=\"Is not empty\"\n\n i18n-filterStartsWithOperator=\"kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator\"\n filterStartsWithOperator=\"Starts with\"\n\n i18n-filterContainsOperator=\"kendo.gantt.filterContainsOperator|The text of the contains filter operator\"\n filterContainsOperator=\"Contains\"\n\n i18n-filterNotContainsOperator=\"kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator\"\n filterNotContainsOperator=\"Does not contain\"\n\n i18n-filterEndsWithOperator=\"kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator\"\n filterEndsWithOperator=\"Ends with\"\n\n i18n-filterGteOperator=\"kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator\"\n filterGteOperator=\"Is greater than or equal to\"\n\n i18n-filterGtOperator=\"kendo.gantt.filterGtOperator|The text of the greater than filter operator\"\n filterGtOperator=\"Is greater than\"\n\n i18n-filterLteOperator=\"kendo.gantt.filterLteOperator|The text of the less than or equal filter operator\"\n filterLteOperator=\"Is less than or equal to\"\n\n i18n-filterLtOperator=\"kendo.gantt.filterLtOperator|The text of the less than filter operator\"\n filterLtOperator=\"Is less than\"\n\n i18n-filterIsTrue=\"kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option\"\n filterIsTrue=\"Is True\"\n\n i18n-filterIsFalse=\"kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option\"\n filterIsFalse=\"Is False\"\n\n i18n-filterBooleanAll=\"kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option\"\n filterBooleanAll=\"(All)\"\n\n i18n-filterAfterOrEqualOperator=\"kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator\"\n filterAfterOrEqualOperator=\"Is after or equal to\"\n\n i18n-filterAfterOperator=\"kendo.gantt.filterAfterOperator|The text of the after date filter operator\"\n filterAfterOperator=\"Is after\"\n\n i18n-filterBeforeOperator=\"kendo.gantt.filterBeforeOperator|The text of the before date filter operator\"\n filterBeforeOperator=\"Is before\"\n\n i18n-filterBeforeOrEqualOperator=\"kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator\"\n filterBeforeOrEqualOperator=\"Is before or equal to\"\n\n i18n-filterFilterButton=\"kendo.gantt.filterFilterButton|The text of the filter button\"\n filterFilterButton=\"Filter\"\n\n i18n-filterClearButton=\"kendo.gantt.filterClearButton|The text of the clear filter button\"\n filterClearButton=\"Clear\"\n\n i18n-filterAndLogic=\"kendo.gantt.filterAndLogic|The text of the And filter logic\"\n filterAndLogic=\"And\"\n\n i18n-filterOrLogic=\"kendo.gantt.filterOrLogic|The text of the Or filter logic\"\n filterOrLogic=\"Or\"\n\n i18n-loading=\"kendo.gantt.loading|The loading text\"\n loading=\"Loading\"\n\n i18n-columnMenu=\"kendo.gantt.columnMenu|The title of the column menu icon\"\n columnMenu=\"Column Menu\"\n\n i18n-columns=\"kendo.gantt.columns|The text shown in the column menu for the columns item\"\n columns=\"Columns\"\n\n i18n-lock-disabled=\"kendo.gantt.lock|The text shown in the column menu for the lock item\"\n lock-disabled=\"Lock\"\n\n i18n-unlock-disabled=\"kendo.gantt.unlock|The text shown in the column menu for the unlock item\"\n unlock-disabled=\"Unlock\"\n\n i18n-sortable=\"kendo.gantt.sortable|The label of the sort icon\"\n sortable=\"Sortable\"\n\n i18n-sortAscending=\"kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item\"\n sortAscending=\"Sort Ascending\"\n\n i18n-sortDescending=\"kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item\"\n sortDescending=\"Sort Descending\"\n\n i18n-sortedAscending=\"kendo.gantt.sortedAscending|The status announcement when a column is sorted ascending\"\n sortedAscending=\"Sorted Ascending\"\n\n i18n-sortedDescending=\"kendo.gantt.sortedDescending|The status announcement when a column is sorted descending\"\n sortedDescending=\"Sorted Descending\"\n\n i18n-sortedDefault=\"kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted\"\n sortedDefault=\"Not Sorted\"\n\n i18n-columnsApply=\"kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button\"\n columnsApply=\"Apply\"\n\n i18n-columnsReset=\"kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button\"\n columnsReset=\"Reset\"></ng-container>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('top')\"\n [showAddTask]=\"toolbarSettings.addTaskTool === 'top' || toolbarSettings.addTaskTool === 'both'\"\n [showViewSelector]=\"toolbarSettings.viewSelectorTool === 'top' || toolbarSettings.viewSelectorTool === 'both'\"\n class=\"k-gantt-header k-toolbar k-gantt-toolbar\"\n position=\"top\"></kendo-gantt-toolbar>\n <div class=\"k-gantt-content\">\n <kendo-splitter [style.border]=\"0\">\n <kendo-splitter-pane\n class=\"k-gantt-treelist k-gantt-treelist-scrollable\"\n [collapsible]=\"treeListPaneOptions?.collapsible\"\n [collapsed]=\"treeListPaneOptions?.collapsed\"\n (collapsedChange)=\"onTreeListCollapsedChange($event)\"\n [scrollable]=\"false\">\n <kendo-treelist\n [idField]=\"taskIdField\"\n [columns]=\"columns\"\n [data]=\"data\"\n [hasChildren]=\"hasChildren\"\n [fetchChildren]=\"fetchChildren\"\n [isExpanded]=\"isExpanded\"\n [autoSize]=\"columnsAutoSize\"\n [columnMenu]=\"columnMenu\"\n [reorderable]=\"columnsReorderable\"\n [resizable]=\"columnsResizable\"\n [rowClass]=\"rowClass\"\n [isSelected]=\"isSelected\"\n [selectable]=\"selectable\"\n [sortable]=\"sortable\"\n [sort]=\"sort\"\n [filterable]=\"filterMenu\"\n [filter]=\"filter\"\n (filterChange)=\"filterChange.emit($event)\"\n (sortChange)=\"sortChange.emit($event)\"\n (dataStateChange)=\"dataStateChange.emit({\n filter: $event.filter,\n sort: $event.sort\n })\"\n (expandStateChange)=\"expandStateChange.emit($event)\"\n (expand)=\"rowExpand.emit({ dataItem: $event.dataItem })\"\n (collapse)=\"rowCollapse.emit({ dataItem: $event.dataItem })\"\n (columnReorder)=\"columnReorder.emit($event)\"\n (columnResize)=\"columnResize.emit($event)\"\n (columnVisibilityChange)=\"handleColumnVisibilityChange($event)\"\n (columnLockedChange)=\"columnLockedChange.emit($event)\"\n (selectionChange)=\"handleTreeListSelectionChange($event)\"\n (cellClick)=\"handleTreeListCellClick($event)\"\n (cellClose)=\"handleCellClose($event)\"\n [kendoEventsOutsideAngular]=\"{\n dblclick: handleTreeListDoubleClick\n }\"\n [scope]=\"this\"\n >\n <kendo-treelist-messages\n [noRecords]=\"getText('noRecords')\"\n [filter]=\"getText('filter')\"\n [filterEqOperator]=\"getText('filterEqOperator')\"\n [filterNotEqOperator]=\"getText('filterNotEqOperator')\"\n [filterIsNullOperator]=\"getText('filterIsNullOperator')\"\n [filterIsNotNullOperator]=\"getText('filterIsNotNullOperator')\"\n [filterIsEmptyOperator]=\"getText('filterIsEmptyOperator')\"\n [filterIsNotEmptyOperator]=\"getText('filterIsNotEmptyOperator')\"\n [filterStartsWithOperator]=\"getText('filterStartsWithOperator')\"\n [filterContainsOperator]=\"getText('filterContainsOperator')\"\n [filterNotContainsOperator]=\"getText('filterNotContainsOperator')\"\n [filterEndsWithOperator]=\"getText('filterEndsWithOperator')\"\n [filterGteOperator]=\"getText('filterGteOperator')\"\n [filterGtOperator]=\"getText('filterGtOperator')\"\n [filterLteOperator]=\"getText('filterLteOperator')\"\n [filterLtOperator]=\"getText('filterLtOperator')\"\n [filterIsTrue]=\"getText('filterIsTrue')\"\n [filterIsFalse]=\"getText('filterIsFalse')\"\n [filterBooleanAll]=\"getText('filterBooleanAll')\"\n [filterAfterOrEqualOperator]=\"getText('filterAfterOrEqualOperator')\"\n [filterAfterOperator]=\"getText('filterAfterOperator')\"\n [filterBeforeOperator]=\"getText('filterBeforeOperator')\"\n [filterBeforeOrEqualOperator]=\"getText('filterBeforeOrEqualOperator')\"\n [filterFilterButton]=\"getText('filterFilterButton')\"\n [filterClearButton]=\"getText('filterClearButton')\"\n [filterAndLogic]=\"getText('filterAndLogic')\"\n [filterOrLogic]=\"getText('filterOrLogic')\"\n [loading]=\"getText('loading')\"\n [columnMenu]=\"getText('columnMenu')\"\n [columns]=\"getText('columns')\"\n [sortable]=\"getText('sortable')\"\n [sortAscending]=\"getText('sortAscending')\"\n [sortDescending]=\"getText('sortDescending')\"\n [sortedAscending]=\"getText('sortedAscending')\"\n [sortedDescending]=\"getText('sortedDescending')\"\n [sortedDefault]=\"getText('sortedDefault')\"\n [columnsApply]=\"getText('columnsApply')\"\n [columnsReset]=\"getText('columnsReset')\"\n >\n </kendo-treelist-messages>\n </kendo-treelist>\n </kendo-splitter-pane>\n <kendo-splitter-pane\n [collapsible]=\"timelinePaneOptions?.collapsible\"\n [resizable]=\"timelinePaneOptions?.resizable\"\n [collapsed]=\"timelinePaneOptions?.collapsed\"\n [min]=\"timelinePaneOptions?.min\"\n [max]=\"timelinePaneOptions?.max\"\n [size]=\"timelinePaneOptions?.size\"\n (collapsedChange)=\"onTimelineCollapsedChange($event)\"\n (sizeChange)=\"onTimelinePaneSizeChange($event)\"\n [scrollable]=\"false\">\n <kendo-gantt-timeline\n *ngIf=\"views && views.length\"\n [rows]=\"renderedTreeListItems\"\n [slots]=\"timelineSlots\"\n [groupSlots]=\"timelineGroupSlots\"\n [tableWidth]=\"tableWidth\"\n [activeView]=\"activeView\"\n [taskContentTemplate]=\"taskContentTemplate?.templateRef\"\n [taskTemplate]=\"taskTemplate?.templateRef\"\n [summaryTaskTemplate]=\"summaryTaskTemplate?.templateRef\"\n [taskClass]=\"taskClass\"\n [dependencies]=\"dependencies\"\n [hasChildren]=\"hasChildren\"\n [isTaskSelected]=\"isTaskSelected\"\n [kendoEventsOutsideAngular]=\"{\n click: handleTimelineClick,\n contextmenu: handleTimelineRightClick,\n dblclick: handleTimelineDblClick,\n mousedown: handleTimelineMouseDown\n }\"\n [scope]=\"this\"\n ></kendo-gantt-timeline>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n <kendo-gantt-toolbar\n *ngIf=\"showToolbar('bottom')\"\n [showAddTask]=\"toolbarSettings.addTaskTool === 'bottom' || toolbarSettings.addTaskTool === 'both'\"\n [showViewSelector]=\"toolbarSettings.viewSelectorTool === 'bottom' || toolbarSettings.viewSelectorTool === 'both'\"\n class=\"k-gantt-footer k-toolbar k-gantt-toolbar\"\n position=\"bottom\"></kendo-gantt-toolbar>\n <kendo-gantt-edit-dialog\n *ngIf=\"showEditingDialog\"\n [data]=\"data\">\n </kendo-gantt-edit-dialog>\n <kendo-dialog\n *ngIf=\"showConfirmationDialog\"\n [width]=\"575\"\n [height]=\"170\"\n [title]=\"getText('confirmationDialogTitle')\"\n (close)=\"showConfirmationDialog = false;\">\n <span>{{ getText('confirmationDialogContent') }}</span>\n <kendo-dialog-actions layout=\"normal\">\n <kendo-treelist-spacer></kendo-treelist-spacer>\n <button kendoButton [primary]=\"true\" (click)=\"handleDeleteConfirmation()\">{{ getText('deleteButtonText') }}</button>\n <button kendoButton (click)=\"showConfirmationDialog = false;\">{{ getText('cancelButtonText') }}</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n "
2999
3120
  }),
3000
3121
  __metadata("design:paramtypes", [TimelineViewService,
3001
3122
  ScrollSyncService,
@@ -3795,6 +3916,23 @@ var ViewSelectorComponent = /** @class */ (function () {
3795
3916
  return ViewSelectorComponent;
3796
3917
  }());
3797
3918
 
3919
+ /**
3920
+ * The dependency type when two tasks are connected.
3921
+ *
3922
+ * The supported values are:
3923
+ * * `FF`&mdash;from 'finish' to 'finish'
3924
+ * * `FS`&mdash;from 'finish' to 'start'
3925
+ * * `SS`&mdash;from 'start' to 'start'
3926
+ * * `SF`&mdash;from 'start' to 'finish'
3927
+ */
3928
+ var DependencyType;
3929
+ (function (DependencyType) {
3930
+ DependencyType[DependencyType["FF"] = 0] = "FF";
3931
+ DependencyType[DependencyType["FS"] = 1] = "FS";
3932
+ DependencyType[DependencyType["SF"] = 2] = "SF";
3933
+ DependencyType[DependencyType["SS"] = 3] = "SS"; // task B can't start before task A starts
3934
+ })(DependencyType || (DependencyType = {}));
3935
+
3798
3936
  /**
3799
3937
  * @hidden
3800
3938
  *
@@ -3838,9 +3976,9 @@ var dependencyCoordinates = function (from, to, rowHeight, type, minDistanceBefo
3838
3976
  | |
3839
3977
  [[[]]]- -[[[]]]
3840
3978
  */
3841
- if (type === 0 /* FF */ || type === 3 /* SS */) {
3979
+ if (type === DependencyType.FF || type === DependencyType.SS) {
3842
3980
  // polyline start from first task
3843
- var dir = type === 3 /* SS */ ? 'left' : 'right';
3981
+ var dir = type === DependencyType.SS ? 'left' : 'right';
3844
3982
  top = from.top;
3845
3983
  left = from[dir];
3846
3984
  points.push({ top: top, left: left });
@@ -3866,9 +4004,9 @@ var dependencyCoordinates = function (from, to, rowHeight, type, minDistanceBefo
3866
4004
  |
3867
4005
  -[[[]]]
3868
4006
  */
3869
- var startDir = type === 2 /* SF */ ? 'left' : 'right';
3870
- var endDir = type === 2 /* SF */ ? 'right' : 'left';
3871
- var additionalTurn = type === 2 /* SF */
4007
+ var startDir = type === DependencyType.SF ? 'left' : 'right';
4008
+ var endDir = type === DependencyType.SF ? 'right' : 'left';
4009
+ var additionalTurn = type === DependencyType.SF
3872
4010
  ? from[startDir] - minDistanceBeforeTurn * 2 < to[endDir]
3873
4011
  : from[startDir] + minDistanceBeforeTurn * 2 > to[endDir];
3874
4012
  // polyline start from first task
@@ -4121,14 +4259,44 @@ var TimelineMonthViewComponent = /** @class */ (function (_super) {
4121
4259
  * @hidden
4122
4260
  */
4123
4261
  var EditDialogComponent = /** @class */ (function () {
4124
- function EditDialogComponent(mapper, editService, localizationService) {
4262
+ function EditDialogComponent(mapper, editService, cdr, localizationService) {
4125
4263
  this.mapper = mapper;
4126
4264
  this.editService = editService;
4265
+ this.cdr = cdr;
4127
4266
  this.localizationService = localizationService;
4128
4267
  }
4268
+ EditDialogComponent.prototype.ngOnInit = function () {
4269
+ var _this = this;
4270
+ this.editService.loadTasks(this.data).subscribe(function (value) {
4271
+ _this.loadedTasks = value;
4272
+ });
4273
+ };
4274
+ Object.defineProperty(EditDialogComponent.prototype, "predecessors", {
4275
+ get: function () {
4276
+ return this.editService.predecessors;
4277
+ },
4278
+ set: function (items) {
4279
+ this.editService.predecessors = items;
4280
+ },
4281
+ enumerable: true,
4282
+ configurable: true
4283
+ });
4284
+ Object.defineProperty(EditDialogComponent.prototype, "successors", {
4285
+ get: function () {
4286
+ return this.editService.successors;
4287
+ },
4288
+ set: function (items) {
4289
+ this.editService.successors = items;
4290
+ },
4291
+ enumerable: true,
4292
+ configurable: true
4293
+ });
4129
4294
  EditDialogComponent.prototype.getText = function (token) {
4130
4295
  return this.localizationService.get(token);
4131
4296
  };
4297
+ EditDialogComponent.prototype.getDependencyType = function (typeId) {
4298
+ return DependencyType[typeId];
4299
+ };
4132
4300
  EditDialogComponent.prototype.handleEditingResult = function (editResultType) {
4133
4301
  this.editService.triggerEditEvent(editResultType);
4134
4302
  };
@@ -4137,15 +4305,16 @@ var EditDialogComponent = /** @class */ (function () {
4137
4305
  };
4138
4306
  __decorate([
4139
4307
  Input(),
4140
- __metadata("design:type", FormGroup)
4141
- ], EditDialogComponent.prototype, "formGroup", void 0);
4308
+ __metadata("design:type", Array)
4309
+ ], EditDialogComponent.prototype, "data", void 0);
4142
4310
  EditDialogComponent = __decorate([
4143
4311
  Component({
4144
4312
  selector: 'kendo-gantt-edit-dialog',
4145
- template: "\n <kendo-dialog\n [title]=\"getText('taskEditingDialogTitle')\"\n [width]=\"575\"\n [height]=\"470\"\n (close)=\"handleEditingResult('cancel')\">\n <kendo-dialog-messages\n [closeTitle]=\"getText('taskEditingDialogCloseTitle')\"></kendo-dialog-messages>\n <form class=\"k-form\" [formGroup]=\"formGroup\">\n <kendo-formfield *ngIf=\"formGroup.contains(mapper.taskFields.title)\">\n <kendo-label [for]=\"mapper.taskFields.title\" [text]=\"getText('titleFieldInputLabel')\"></kendo-label>\n <input class=\"k-textbox\" [formControlName]=\"mapper.taskFields.title\" />\n </kendo-formfield>\n <div class=\"k-hstack\">\n <kendo-formfield [style.width.%]=\"49\" *ngIf=\"formGroup.contains(mapper.taskFields.start)\">\n <kendo-label [for]=\"mapper.taskFields.start\" [text]=\"getText('startFieldInputLabel')\"></kendo-label>\n <kendo-datetimepicker [formControlName]=\"mapper.taskFields.start\"></kendo-datetimepicker>\n </kendo-formfield>\n <kendo-treelist-spacer></kendo-treelist-spacer>\n <kendo-formfield [style.width.%]=\"49\" *ngIf=\"formGroup.contains(mapper.taskFields.end)\">\n <kendo-label [for]=\"mapper.taskFields.end\" [text]=\"getText('endFieldInputLabel')\"></kendo-label>\n <kendo-datetimepicker [formControlName]=\"mapper.taskFields.end\"></kendo-datetimepicker>\n </kendo-formfield>\n </div>\n <kendo-formfield [style.width.%]=\"49\" *ngIf=\"formGroup.contains(mapper.taskFields.completionRatio)\">\n <kendo-label [for]=\"mapper.taskFields.completionRatio\" [text]=\"getText('completionRatioFieldInputLabel')\"></kendo-label>\n <kendo-numerictextbox\n [formControlName]=\"mapper.taskFields.completionRatio\"\n [min]=\"0\"\n [max]=\"1\"\n [decimals]=\"2\"\n format=\"p2\"\n [step]=\"0.01\"\n ></kendo-numerictextbox>\n </kendo-formfield>\n </form>\n <kendo-dialog-actions layout=\"normal\">\n <button kendoButton (click)=\"onTaskDelete()\">{{ getText('deleteButtonText') }}</button>\n <kendo-treelist-spacer></kendo-treelist-spacer>\n <button kendoButton [primary]=\"true\" (click)=\"handleEditingResult('save')\">{{ getText('saveButtonText') }}</button>\n <button kendoButton (click)=\"handleEditingResult('cancel')\">{{ getText('cancelButtonText') }}</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n "
4313
+ template: "\n <kendo-dialog\n [title]=\"getText('taskEditingDialogTitle')\"\n [width]=\"575\"\n [height]=\"470\"\n (close)=\"handleEditingResult('cancel')\">\n <kendo-dialog-messages\n [closeTitle]=\"getText('taskEditingDialogCloseTitle')\"></kendo-dialog-messages>\n\n <kendo-tabstrip [keepTabContent]=\"true\">\n <kendo-tabstrip-tab [title]=\"getText('taskEditingGeneralTabTitle')\" [selected]=\"true\">\n <ng-template kendoTabContent>\n <kendo-gantt-task-fields></kendo-gantt-task-fields>\n </ng-template>\n </kendo-tabstrip-tab>\n <kendo-tabstrip-tab [title]=\"getText('taskEditingPredecessorsTabTitle')\">\n <ng-template kendoTabContent>\n <kendo-gantt-dependencies-table\n [tasks]=\"loadedTasks\"\n [(dependencies)]=\"predecessors\"\n dependencyType=\"predecessor\"\n >\n </kendo-gantt-dependencies-table>\n </ng-template>\n </kendo-tabstrip-tab>\n <kendo-tabstrip-tab [title]=\"getText('taskEditingSuccessorsTabTitle')\">\n <ng-template kendoTabContent>\n <kendo-gantt-dependencies-table\n [tasks]=\"loadedTasks\"\n [(dependencies)]=\"successors\"\n dependencyType=\"successor\">\n </kendo-gantt-dependencies-table>\n </ng-template>\n </kendo-tabstrip-tab>\n </kendo-tabstrip>\n\n <kendo-dialog-actions layout=\"normal\">\n <button kendoButton (click)=\"onTaskDelete()\">{{ getText('deleteButtonText') }}</button>\n <kendo-treelist-spacer></kendo-treelist-spacer>\n <button kendoButton [primary]=\"true\" (click)=\"handleEditingResult('save')\">{{ getText('saveButtonText') }}</button>\n <button kendoButton (click)=\"handleEditingResult('cancel')\">{{ getText('cancelButtonText') }}</button>\n </kendo-dialog-actions>\n </kendo-dialog>\n "
4146
4314
  }),
4147
4315
  __metadata("design:paramtypes", [MappingService,
4148
4316
  EditService,
4317
+ ChangeDetectorRef,
4149
4318
  LocalizationService])
4150
4319
  ], EditDialogComponent);
4151
4320
  return EditDialogComponent;
@@ -4583,6 +4752,160 @@ var GanttAddTaskComponent = /** @class */ (function () {
4583
4752
  return GanttAddTaskComponent;
4584
4753
  }());
4585
4754
 
4755
+ /**
4756
+ * @hidden
4757
+ */
4758
+ var DependenciesTableComponent = /** @class */ (function () {
4759
+ function DependenciesTableComponent(mapper, editService, localizationService) {
4760
+ this.mapper = mapper;
4761
+ this.editService = editService;
4762
+ this.localizationService = localizationService;
4763
+ this.dependenciesChange = new EventEmitter();
4764
+ this.selectedKeys = [];
4765
+ this.formGroups = new FormArray([]);
4766
+ this.dependencyTypes = this.getDependencyTypes();
4767
+ }
4768
+ Object.defineProperty(DependenciesTableComponent.prototype, "taskId", {
4769
+ get: function () {
4770
+ return this.editService.dataItem.id;
4771
+ },
4772
+ enumerable: true,
4773
+ configurable: true
4774
+ });
4775
+ Object.defineProperty(DependenciesTableComponent.prototype, "dependencyIdField", {
4776
+ // The target dependency id field
4777
+ // e.g. if Predecessors, we have the `fromId` which is the currently edited task,
4778
+ // while the `toId` is missing (needs to be selected by the user)
4779
+ get: function () {
4780
+ return this.dependencyType === 'predecessor' ? 'fromId' : 'toId';
4781
+ },
4782
+ enumerable: true,
4783
+ configurable: true
4784
+ });
4785
+ DependenciesTableComponent.prototype.ngOnInit = function () {
4786
+ var _this = this;
4787
+ // generate the FormGroups per each Grid row
4788
+ if (this.formGroups.controls.length === 0) {
4789
+ var fields_1 = this.mapper.dependencyFields;
4790
+ this.dependencies.forEach(function (item) {
4791
+ var _a;
4792
+ var formGroup = new FormGroup((_a = {},
4793
+ _a[fields_1.id] = new FormControl(_this.mapper.extractFromDependency(item, 'id')),
4794
+ _a[fields_1.fromId] = new FormControl(_this.mapper.extractFromDependency(item, 'fromId'), Validators.required),
4795
+ _a[fields_1.toId] = new FormControl(_this.mapper.extractFromDependency(item, 'toId'), Validators.required),
4796
+ _a[fields_1.type] = new FormControl(_this.mapper.extractFromDependency(item, 'type'), Validators.required),
4797
+ _a));
4798
+ _this.formGroups.push(formGroup);
4799
+ });
4800
+ }
4801
+ this.formGroups.valueChanges.subscribe(function (val) {
4802
+ _this.formGroups.controls.forEach(function (control) {
4803
+ if (control.dirty) {
4804
+ _this.editService.updateDependencies(control.value);
4805
+ }
4806
+ });
4807
+ _this.dependenciesChange.emit(val);
4808
+ });
4809
+ };
4810
+ DependenciesTableComponent.prototype.getFormControl = function (dataItemIndex, field) {
4811
+ // return the FormControl for the respective column editor
4812
+ return this.formGroups.controls
4813
+ .find(function (_control, index) { return index === dataItemIndex; })
4814
+ .get(this.mapper.dependencyFields[field]);
4815
+ };
4816
+ DependenciesTableComponent.prototype.getText = function (token) {
4817
+ return this.localizationService.get(token);
4818
+ };
4819
+ DependenciesTableComponent.prototype.getDependencyTypes = function () {
4820
+ var types = Object.keys(DependencyType)
4821
+ .filter(function (value) { return typeof DependencyType[value] === 'number'; })
4822
+ .map(function (type) {
4823
+ return {
4824
+ type: type,
4825
+ id: DependencyType[type]
4826
+ };
4827
+ });
4828
+ return types;
4829
+ };
4830
+ DependenciesTableComponent.prototype.addHandler = function () {
4831
+ var _a;
4832
+ var fields = this.mapper.dependencyFields;
4833
+ var formGroup = new FormGroup((_a = {},
4834
+ _a[fields.id] = new FormControl(),
4835
+ _a[fields.fromId] = new FormControl(this.dependencyIdField === 'toId' ? this.taskId : null, Validators.required),
4836
+ _a[fields.toId] = new FormControl(this.dependencyIdField === 'fromId' ? this.taskId : null, Validators.required),
4837
+ _a[fields.type] = new FormControl(null, Validators.required),
4838
+ _a));
4839
+ this.formGroups.push(formGroup);
4840
+ };
4841
+ DependenciesTableComponent.prototype.removeHandler = function () {
4842
+ var selectedIndex = this.selectedKeys[0];
4843
+ var item = this.formGroups.at(selectedIndex).value;
4844
+ this.editService.deleteDependency(item);
4845
+ this.formGroups.removeAt(selectedIndex);
4846
+ };
4847
+ __decorate([
4848
+ Input(),
4849
+ __metadata("design:type", Array)
4850
+ ], DependenciesTableComponent.prototype, "tasks", void 0);
4851
+ __decorate([
4852
+ Input(),
4853
+ __metadata("design:type", Array)
4854
+ ], DependenciesTableComponent.prototype, "dependencies", void 0);
4855
+ __decorate([
4856
+ Input(),
4857
+ __metadata("design:type", String)
4858
+ ], DependenciesTableComponent.prototype, "dependencyType", void 0);
4859
+ __decorate([
4860
+ Output(),
4861
+ __metadata("design:type", EventEmitter)
4862
+ ], DependenciesTableComponent.prototype, "dependenciesChange", void 0);
4863
+ DependenciesTableComponent = __decorate([
4864
+ Component({
4865
+ selector: 'kendo-gantt-dependencies-table',
4866
+ template: "\n <kendo-grid\n [data]=\"dependencies\"\n [selectable]=\"{ mode: 'single' }\"\n [(selectedKeys)]=\"selectedKeys\"\n kendoGridSelectBy\n [height]=\"295\"\n >\n <ng-template kendoGridToolbarTemplate>\n <button kendoButton (click)=\"addHandler()\">\n {{ getText('taskEditingDependenciesAddButtonText') }}\n </button>\n <button kendoButton (click)=\"removeHandler()\" [disabled]=\"selectedKeys.length === 0\">\n {{ getText('taskEditingDependenciesRemoveButtonText') }}\n </button>\n </ng-template>\n <kendo-grid-column [title]=\"getText('taskEditingDependenciesGridNameColumnTitle')\" [field]=\"dependencyIdField\">\n <ng-template kendoGridCellTemplate let-dataItem=\"dataItem\" let-column=\"column\" let-rowIndex=\"rowIndex\">\n <kendo-dropdownlist\n [data]=\"tasks\"\n textField=\"title\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n [formControl]=\"getFormControl(rowIndex, column.field)\"\n >\n </kendo-dropdownlist>\n </ng-template>\n </kendo-grid-column>\n <kendo-grid-column [title]=\"getText('taskEditingDependenciesGridTypeColumnTitle')\" field=\"type\">\n <ng-template kendoGridCellTemplate let-dataItem=\"dataItem\" let-column=\"column\" let-rowIndex=\"rowIndex\">\n <kendo-dropdownlist\n [data]=\"dependencyTypes\"\n textField=\"type\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n [formControl]=\"getFormControl(rowIndex, column.field)\"\n >\n </kendo-dropdownlist>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n "
4867
+ }),
4868
+ __metadata("design:paramtypes", [MappingService,
4869
+ EditService,
4870
+ GanttLocalizationService])
4871
+ ], DependenciesTableComponent);
4872
+ return DependenciesTableComponent;
4873
+ }());
4874
+
4875
+ /**
4876
+ * @hidden
4877
+ */
4878
+ var TaskFieldsComponent = /** @class */ (function () {
4879
+ function TaskFieldsComponent(mapper, editService, localizationService) {
4880
+ this.mapper = mapper;
4881
+ this.editService = editService;
4882
+ this.localizationService = localizationService;
4883
+ }
4884
+ Object.defineProperty(TaskFieldsComponent.prototype, "formGroup", {
4885
+ /**
4886
+ * @hidden
4887
+ */
4888
+ get: function () {
4889
+ return this.editService.taskFormGroup;
4890
+ },
4891
+ enumerable: true,
4892
+ configurable: true
4893
+ });
4894
+ TaskFieldsComponent.prototype.getText = function (token) {
4895
+ return this.localizationService.get(token);
4896
+ };
4897
+ TaskFieldsComponent = __decorate([
4898
+ Component({
4899
+ selector: 'kendo-gantt-task-fields',
4900
+ template: "\n <form class=\"k-form\" [formGroup]=\"formGroup\">\n <kendo-formfield *ngIf=\"formGroup.contains(mapper.taskFields.title)\">\n <kendo-label [for]=\"mapper.taskFields.title\" [text]=\"getText('titleFieldInputLabel')\"></kendo-label>\n <input class=\"k-textbox\" [formControlName]=\"mapper.taskFields.title\" />\n </kendo-formfield>\n <div class=\"k-hstack\">\n <kendo-formfield [style.width.%]=\"49\" *ngIf=\"formGroup.contains(mapper.taskFields.start)\">\n <kendo-label [for]=\"mapper.taskFields.start\" [text]=\"getText('startFieldInputLabel')\"></kendo-label>\n <kendo-datetimepicker [formControlName]=\"mapper.taskFields.start\"></kendo-datetimepicker>\n </kendo-formfield>\n <kendo-treelist-spacer></kendo-treelist-spacer>\n <kendo-formfield [style.width.%]=\"49\" *ngIf=\"formGroup.contains(mapper.taskFields.end)\">\n <kendo-label [for]=\"mapper.taskFields.end\" [text]=\"getText('endFieldInputLabel')\"></kendo-label>\n <kendo-datetimepicker [formControlName]=\"mapper.taskFields.end\"></kendo-datetimepicker>\n </kendo-formfield>\n </div>\n <kendo-formfield [style.width.%]=\"49\" *ngIf=\"formGroup.contains(mapper.taskFields.completionRatio)\">\n <kendo-label [for]=\"mapper.taskFields.completionRatio\" [text]=\"getText('completionRatioFieldInputLabel')\"></kendo-label>\n <kendo-numerictextbox\n [formControlName]=\"mapper.taskFields.completionRatio\"\n [min]=\"0\"\n [max]=\"1\"\n [decimals]=\"2\"\n format=\"p2\"\n [step]=\"0.01\"\n ></kendo-numerictextbox>\n </kendo-formfield>\n </form>\n "
4901
+ }),
4902
+ __metadata("design:paramtypes", [MappingService,
4903
+ EditService,
4904
+ GanttLocalizationService])
4905
+ ], TaskFieldsComponent);
4906
+ return TaskFieldsComponent;
4907
+ }());
4908
+
4586
4909
  var IMPORTED_MODULES = [
4587
4910
  CommonModule,
4588
4911
  ReactiveFormsModule,
@@ -4594,7 +4917,10 @@ var IMPORTED_MODULES = [
4594
4917
  TreeListModule,
4595
4918
  ButtonsModule,
4596
4919
  DialogModule,
4597
- EventsModule
4920
+ EventsModule,
4921
+ TabStripModule,
4922
+ GridModule,
4923
+ DropDownsModule
4598
4924
  ];
4599
4925
  var DECLARATIONS = [
4600
4926
  GanttComponent,
@@ -4631,7 +4957,9 @@ var DECLARATIONS = [
4631
4957
  EditDialogComponent,
4632
4958
  CustomMessagesComponent,
4633
4959
  LocalizedMessagesDirective,
4634
- GanttAddTaskComponent
4960
+ GanttAddTaskComponent,
4961
+ DependenciesTableComponent,
4962
+ TaskFieldsComponent
4635
4963
  ];
4636
4964
  /**
4637
4965
  * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})
@@ -4726,4 +5054,4 @@ var CellCloseEvent = /** @class */ (function (_super) {
4726
5054
  * Generated bundle index. Do not edit.
4727
5055
  */
4728
5056
 
4729
- export { MappingService, OptionChangesService, DependencyDomService, GanttDependencyDirective, GanttAddTaskComponent, EditDialogComponent, EditService, CustomMessagesComponent, LocalizedMessagesDirective, Messages, PreventableEvent, GanttHeaderTableBodyComponent, GanttMilestoneTaskComponent, GanttSummaryTaskComponent, GanttTaskBase, GanttTaskComponent, GanttTasksTableBodyComponent, ScrollSyncService, GanttTimelineComponent, TimelineBaseViewService, TimelineDayViewComponent, TimelineDayViewService, TimelineMonthViewComponent, TimelineMonthViewService, TimelineViewService, TimelineWeekViewComponent, TimelineWeekViewService, ViewBase, ToolbarComponent, ViewSelectorComponent, GanttComponent, GanttModule, GanttHierarchyBindingDirective, GanttFlatBindingDirective, GanttExpandableDirective, GanttTaskTemplateDirective, GanttTaskContentTemplateDirective, GanttSummaryTaskTemplateDirective, ToolbarTemplateDirective, SelectableDirective, CellCloseEvent, GanttColumnBase, GanttColumnComponent, GanttColumnGroupComponent, GanttSpanColumnComponent, CellTemplateDirective, HeaderTemplateDirective, FooterTemplateDirective, ColumnMenuTemplateDirective, FilterCellTemplateDirective, FilterMenuTemplateDirective, EditTemplateDirective };
5057
+ export { MappingService, OptionChangesService, DependencyDomService, GanttDependencyDirective, GanttAddTaskComponent, DependenciesTableComponent, EditDialogComponent, EditService, TaskFieldsComponent, CustomMessagesComponent, GanttLocalizationService, LocalizedMessagesDirective, Messages, PreventableEvent, GanttHeaderTableBodyComponent, GanttMilestoneTaskComponent, GanttSummaryTaskComponent, GanttTaskBase, GanttTaskComponent, GanttTasksTableBodyComponent, ScrollSyncService, GanttTimelineComponent, TimelineBaseViewService, TimelineDayViewComponent, TimelineDayViewService, TimelineMonthViewComponent, TimelineMonthViewService, TimelineViewService, TimelineWeekViewComponent, TimelineWeekViewService, ViewBase, ToolbarComponent, ViewSelectorComponent, GanttComponent, GanttModule, GanttHierarchyBindingDirective, GanttFlatBindingDirective, GanttExpandableDirective, GanttTaskTemplateDirective, GanttTaskContentTemplateDirective, GanttSummaryTaskTemplateDirective, ToolbarTemplateDirective, SelectableDirective, DependencyType, CellCloseEvent, GanttColumnBase, GanttColumnComponent, GanttColumnGroupComponent, GanttSpanColumnComponent, CellTemplateDirective, HeaderTemplateDirective, FooterTemplateDirective, ColumnMenuTemplateDirective, FilterCellTemplateDirective, FilterMenuTemplateDirective, EditTemplateDirective };