@progress/kendo-angular-gantt 2.0.0-next.202204011501 → 2.0.0-next.202204121507

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 (229) hide show
  1. package/binding-directives/flat-binding.directive.d.ts +24 -0
  2. package/binding-directives/hierarchy-binding.directive.d.ts +22 -0
  3. package/bundles/kendo-angular-gantt.umd.js +1 -1
  4. package/columns/cell-template.directive.d.ts +28 -0
  5. package/columns/column-base.d.ts +85 -0
  6. package/columns/column-group.component.d.ts +103 -0
  7. package/columns/column-menu-template.directive.d.ts +22 -0
  8. package/columns/column.component.d.ts +130 -0
  9. package/columns/columns.d.ts +15 -0
  10. package/columns/edit-template.directive.d.ts +26 -0
  11. package/columns/filter-cell-template.directive.d.ts +21 -0
  12. package/columns/filter-menu-template.directive.d.ts +20 -0
  13. package/columns/footer-template.directive.d.ts +24 -0
  14. package/columns/header-template.directive.d.ts +22 -0
  15. package/columns/span-column.component.d.ts +112 -0
  16. package/common/default-callbacks.d.ts +25 -0
  17. package/common/mapping.service.d.ts +38 -0
  18. package/common/option-changes.service.d.ts +17 -0
  19. package/common/touch-enabled.d.ts +9 -0
  20. package/dependencies/dependency-dom.service.d.ts +46 -0
  21. package/dependencies/dom-dependency-args.d.ts +24 -0
  22. package/dependencies/gantt-dependency.directive.d.ts +29 -0
  23. package/dependencies/utils.d.ts +53 -0
  24. package/dragging/dependency-drag-create.directive.d.ts +75 -0
  25. package/dragging/drag-validation-tooltip.component.d.ts +32 -0
  26. package/editing/add-task.component.d.ts +47 -0
  27. package/editing/dependencies-table.component.d.ts +42 -0
  28. package/editing/edit-dialog.component.d.ts +33 -0
  29. package/editing/edit.service.d.ts +44 -0
  30. package/editing/task-fields.component.d.ts +25 -0
  31. package/editing/utils.d.ts +10 -0
  32. package/esm2015/binding-directives/flat-binding.directive.js +34 -0
  33. package/esm2015/binding-directives/hierarchy-binding.directive.js +32 -0
  34. package/esm2015/columns/cell-template.directive.js +37 -0
  35. package/esm2015/columns/column-base.js +52 -0
  36. package/esm2015/columns/column-group.component.js +94 -0
  37. package/esm2015/columns/column-menu-template.directive.js +31 -0
  38. package/esm2015/columns/column.component.js +133 -0
  39. package/esm2015/columns/columns.js +15 -0
  40. package/esm2015/columns/edit-template.directive.js +35 -0
  41. package/esm2015/columns/filter-cell-template.directive.js +30 -0
  42. package/esm2015/columns/filter-menu-template.directive.js +29 -0
  43. package/esm2015/columns/footer-template.directive.js +33 -0
  44. package/esm2015/columns/header-template.directive.js +31 -0
  45. package/esm2015/columns/span-column.component.js +86 -0
  46. package/esm2015/common/default-callbacks.js +25 -0
  47. package/esm2015/common/mapping.service.js +64 -0
  48. package/esm2015/common/option-changes.service.js +26 -0
  49. package/esm2015/common/touch-enabled.js +9 -0
  50. package/esm2015/dependencies/dependency-dom.service.js +70 -0
  51. package/esm2015/dependencies/dom-dependency-args.js +5 -0
  52. package/esm2015/dependencies/gantt-dependency.directive.js +82 -0
  53. package/esm2015/dependencies/utils.js +195 -0
  54. package/esm2015/dragging/dependency-drag-create.directive.js +318 -0
  55. package/esm2015/dragging/drag-validation-tooltip.component.js +90 -0
  56. package/esm2015/editing/add-task.component.js +109 -0
  57. package/esm2015/editing/dependencies-table.component.js +196 -0
  58. package/esm2015/editing/edit-dialog.component.js +170 -0
  59. package/esm2015/editing/edit.service.js +111 -0
  60. package/esm2015/editing/task-fields.component.js +101 -0
  61. package/esm2015/editing/utils.js +15 -0
  62. package/esm2015/expanded-state/expand-event.js +9 -0
  63. package/esm2015/expanded-state/expandable.directive.js +23 -0
  64. package/esm2015/gantt.component.js +2227 -0
  65. package/esm2015/gantt.module.js +264 -0
  66. package/esm2015/kendo-angular-gantt.js +8 -0
  67. package/esm2015/localization/custom-messages.component.js +41 -0
  68. package/esm2015/localization/gantt-localization.service.js +25 -0
  69. package/esm2015/localization/localized-messages.directive.js +36 -0
  70. package/esm2015/localization/messages.js +157 -0
  71. package/esm2015/main.js +37 -0
  72. package/esm2015/models/cell-content-type.interface.js +5 -0
  73. package/esm2015/models/class-callbacks.js +5 -0
  74. package/esm2015/models/column-menu-settings.interface.js +5 -0
  75. package/esm2015/models/column-reorder-config.js +5 -0
  76. package/esm2015/models/date-range.interface.js +5 -0
  77. package/esm2015/models/dependency-type.enum.js +20 -0
  78. package/esm2015/models/events/cell-click-event.interface.js +5 -0
  79. package/esm2015/models/events/cell-close-event.interface.js +14 -0
  80. package/esm2015/models/events/click-event.interface.js +5 -0
  81. package/esm2015/models/events/column-locked-change-event.interface.js +5 -0
  82. package/esm2015/models/events/column-reorder-event.interface.js +5 -0
  83. package/esm2015/models/events/column-resize-event.interface.js +5 -0
  84. package/esm2015/models/events/column-visibility-change-event.interface.js +5 -0
  85. package/esm2015/models/events/data-state-change-event.interface.js +5 -0
  86. package/esm2015/models/events/dependency-add-event.interface.js +5 -0
  87. package/esm2015/models/events/selected-view-change-event.interface.js +5 -0
  88. package/esm2015/models/events/task-add-event.interface.js +5 -0
  89. package/esm2015/models/events/task-click-event.interface.js +5 -0
  90. package/esm2015/models/events/task-delete-event.interface.js +5 -0
  91. package/esm2015/models/events/task-edit-event.interface.js +5 -0
  92. package/esm2015/models/events/task-move-end-event.interface.js +5 -0
  93. package/esm2015/models/events/task-move-event.interface.js +5 -0
  94. package/esm2015/models/events/task-move-start-event.interface.js +5 -0
  95. package/esm2015/models/events/task-resize-end-event.interface.js +5 -0
  96. package/esm2015/models/events/task-resize-event.interface.js +5 -0
  97. package/esm2015/models/events/task-resize-start-event.interface.js +5 -0
  98. package/esm2015/models/filterable-settings.js +5 -0
  99. package/esm2015/models/gantt-dependency-model-fields.interface.js +13 -0
  100. package/esm2015/models/gantt-dependency.interface.js +5 -0
  101. package/esm2015/models/gantt-task-model-fields.interface.js +15 -0
  102. package/esm2015/models/gantt-task.interface.js +5 -0
  103. package/esm2015/models/models.js +7 -0
  104. package/esm2015/models/slot.interface.js +5 -0
  105. package/esm2015/models/sort-settings.js +17 -0
  106. package/esm2015/models/splitter-pane-options.interface.js +20 -0
  107. package/esm2015/models/timeline-options.interface.js +5 -0
  108. package/esm2015/models/timeline-view.js +5 -0
  109. package/esm2015/models/toolbar-settings.js +5 -0
  110. package/esm2015/models/view-item.interface.js +5 -0
  111. package/esm2015/navigation/navigation-models.js +5 -0
  112. package/esm2015/navigation/navigation.service.js +265 -0
  113. package/esm2015/navigation/utils.js +69 -0
  114. package/esm2015/package-metadata.js +15 -0
  115. package/esm2015/rendering/gantt-header-table-body.component.js +42 -0
  116. package/esm2015/rendering/gantt-milestone-task.component.js +107 -0
  117. package/esm2015/rendering/gantt-summary-task.component.js +158 -0
  118. package/esm2015/rendering/gantt-task-base.js +148 -0
  119. package/esm2015/rendering/gantt-task.component.js +204 -0
  120. package/esm2015/rendering/gantt-tasks-table-body.component.js +160 -0
  121. package/esm2015/scrolling/drag-scroll-settings.js +20 -0
  122. package/esm2015/scrolling/scroll-sync.service.js +80 -0
  123. package/esm2015/scrolling/timeline-scroll.directive.js +75 -0
  124. package/esm2015/scrolling/timeline-scroll.service.js +39 -0
  125. package/esm2015/scrolling/utils.js +77 -0
  126. package/esm2015/selection/selectable.directive.js +112 -0
  127. package/esm2015/selection/selection-change-event.js +5 -0
  128. package/esm2015/template-directives/summary-task-template.directive.js +50 -0
  129. package/esm2015/template-directives/task-content-template.directive.js +45 -0
  130. package/esm2015/template-directives/task-template.directive.js +48 -0
  131. package/esm2015/timeline/gantt-timeline.component.js +334 -0
  132. package/esm2015/timeline/timeline-base-view.service.js +160 -0
  133. package/esm2015/timeline/timeline-day-view.component.js +38 -0
  134. package/esm2015/timeline/timeline-day-view.service.js +66 -0
  135. package/esm2015/timeline/timeline-month-view.component.js +38 -0
  136. package/esm2015/timeline/timeline-month-view.service.js +64 -0
  137. package/esm2015/timeline/timeline-view.service.js +35 -0
  138. package/esm2015/timeline/timeline-week-view.component.js +38 -0
  139. package/esm2015/timeline/timeline-week-view.service.js +60 -0
  140. package/esm2015/timeline/view-base.js +45 -0
  141. package/esm2015/toolbar/toolbar-template.directive.js +127 -0
  142. package/esm2015/toolbar/toolbar.component.js +94 -0
  143. package/esm2015/toolbar/view-selector.component.js +96 -0
  144. package/esm2015/utils.js +293 -0
  145. package/expanded-state/expand-event.d.ts +13 -0
  146. package/expanded-state/expandable.directive.d.ts +20 -0
  147. package/fesm2015/kendo-angular-gantt.js +7706 -0
  148. package/gantt.component.d.ts +750 -0
  149. package/gantt.module.d.ts +94 -0
  150. package/kendo-angular-gantt.d.ts +9 -0
  151. package/localization/custom-messages.component.d.ts +18 -0
  152. package/localization/gantt-localization.service.d.ts +18 -0
  153. package/localization/localized-messages.directive.d.ts +16 -0
  154. package/localization/messages.d.ts +293 -0
  155. package/main.d.ts +39 -0
  156. package/models/cell-content-type.interface.d.ts +10 -0
  157. package/models/class-callbacks.d.ts +43 -0
  158. package/models/column-menu-settings.interface.d.ts +26 -0
  159. package/models/column-reorder-config.d.ts +10 -0
  160. package/models/date-range.interface.d.ts +19 -0
  161. package/models/dependency-type.enum.d.ts +19 -0
  162. package/models/events/cell-click-event.interface.d.ts +43 -0
  163. package/models/events/cell-close-event.interface.d.ts +48 -0
  164. package/models/events/click-event.interface.d.ts +23 -0
  165. package/models/events/column-locked-change-event.interface.d.ts +16 -0
  166. package/models/events/column-reorder-event.interface.d.ts +10 -0
  167. package/models/events/column-resize-event.interface.d.ts +10 -0
  168. package/models/events/column-visibility-change-event.interface.d.ts +14 -0
  169. package/models/events/data-state-change-event.interface.d.ts +10 -0
  170. package/models/events/dependency-add-event.interface.d.ts +26 -0
  171. package/models/events/selected-view-change-event.interface.d.ts +19 -0
  172. package/models/events/task-add-event.interface.d.ts +31 -0
  173. package/models/events/task-click-event.interface.d.ts +30 -0
  174. package/models/events/task-delete-event.interface.d.ts +21 -0
  175. package/models/events/task-edit-event.interface.d.ts +76 -0
  176. package/models/events/task-move-end-event.interface.d.ts +12 -0
  177. package/models/events/task-move-event.interface.d.ts +23 -0
  178. package/models/events/task-move-start-event.interface.d.ts +15 -0
  179. package/models/events/task-resize-end-event.interface.d.ts +12 -0
  180. package/models/events/task-resize-event.interface.d.ts +23 -0
  181. package/models/events/task-resize-start-event.interface.d.ts +15 -0
  182. package/models/filterable-settings.d.ts +10 -0
  183. package/models/gantt-dependency-model-fields.interface.d.ts +35 -0
  184. package/models/gantt-dependency.interface.d.ts +26 -0
  185. package/models/gantt-task-model-fields.interface.d.ts +42 -0
  186. package/models/gantt-task.interface.d.ts +31 -0
  187. package/models/models.d.ts +42 -0
  188. package/models/slot.interface.d.ts +31 -0
  189. package/models/sort-settings.d.ts +42 -0
  190. package/models/splitter-pane-options.interface.d.ts +54 -0
  191. package/models/timeline-options.interface.d.ts +41 -0
  192. package/models/timeline-view.d.ts +8 -0
  193. package/models/toolbar-settings.d.ts +29 -0
  194. package/models/view-item.interface.d.ts +35 -0
  195. package/navigation/navigation-models.d.ts +38 -0
  196. package/navigation/navigation.service.d.ts +130 -0
  197. package/navigation/utils.d.ts +26 -0
  198. package/package-metadata.d.ts +9 -0
  199. package/package.json +9 -13
  200. package/rendering/gantt-header-table-body.component.d.ts +14 -0
  201. package/rendering/gantt-milestone-task.component.d.ts +22 -0
  202. package/rendering/gantt-summary-task.component.d.ts +25 -0
  203. package/rendering/gantt-task-base.d.ts +59 -0
  204. package/rendering/gantt-task.component.d.ts +26 -0
  205. package/rendering/gantt-tasks-table-body.component.d.ts +33 -0
  206. package/scrolling/drag-scroll-settings.d.ts +47 -0
  207. package/scrolling/scroll-sync.service.d.ts +33 -0
  208. package/scrolling/timeline-scroll.directive.d.ts +27 -0
  209. package/scrolling/timeline-scroll.service.d.ts +23 -0
  210. package/scrolling/utils.d.ts +29 -0
  211. package/selection/selectable.directive.d.ts +45 -0
  212. package/selection/selection-change-event.d.ts +25 -0
  213. package/template-directives/summary-task-template.directive.d.ts +41 -0
  214. package/template-directives/task-content-template.directive.d.ts +36 -0
  215. package/template-directives/task-template.directive.d.ts +39 -0
  216. package/timeline/gantt-timeline.component.d.ts +67 -0
  217. package/timeline/timeline-base-view.service.d.ts +77 -0
  218. package/timeline/timeline-day-view.component.d.ts +18 -0
  219. package/timeline/timeline-day-view.service.d.ts +38 -0
  220. package/timeline/timeline-month-view.component.d.ts +18 -0
  221. package/timeline/timeline-month-view.service.d.ts +38 -0
  222. package/timeline/timeline-view.service.d.ts +19 -0
  223. package/timeline/timeline-week-view.component.d.ts +18 -0
  224. package/timeline/timeline-week-view.service.d.ts +38 -0
  225. package/timeline/view-base.d.ts +34 -0
  226. package/toolbar/toolbar-template.directive.d.ts +112 -0
  227. package/toolbar/toolbar.component.d.ts +29 -0
  228. package/toolbar/view-selector.component.d.ts +43 -0
  229. package/utils.d.ts +166 -0
@@ -0,0 +1,196 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
6
+ import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
7
+ import { DependencyType } from '../models/dependency-type.enum';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "../common/mapping.service";
10
+ import * as i2 from "./edit.service";
11
+ import * as i3 from "../localization/gantt-localization.service";
12
+ import * as i4 from "@progress/kendo-angular-grid";
13
+ import * as i5 from "@progress/kendo-angular-dropdowns";
14
+ import * as i6 from "@progress/kendo-angular-buttons";
15
+ import * as i7 from "@angular/forms";
16
+ /**
17
+ * @hidden
18
+ */
19
+ export class DependenciesTableComponent {
20
+ constructor(mapper, editService, localizationService) {
21
+ this.mapper = mapper;
22
+ this.editService = editService;
23
+ this.localizationService = localizationService;
24
+ this.dependenciesChange = new EventEmitter();
25
+ this.selectedKeys = [];
26
+ this.formGroups = new FormArray([]);
27
+ this.dependencyTypes = this.getDependencyTypes();
28
+ }
29
+ get taskId() {
30
+ return this.editService.dataItem.id;
31
+ }
32
+ // The target dependency id field
33
+ // e.g. if Predecessors, we have the `fromId` which is the currently edited task,
34
+ // while the `toId` is missing (needs to be selected by the user)
35
+ get dependencyIdField() {
36
+ return this.dependencyType === 'predecessor' ? 'fromId' : 'toId';
37
+ }
38
+ ngOnInit() {
39
+ // generate the FormGroups per each Grid row
40
+ if (this.formGroups.controls.length === 0) {
41
+ const fields = this.mapper.dependencyFields;
42
+ this.dependencies.forEach(item => {
43
+ const formGroup = new FormGroup({
44
+ [fields.id]: new FormControl(this.mapper.extractFromDependency(item, 'id')),
45
+ [fields.fromId]: new FormControl(this.mapper.extractFromDependency(item, 'fromId'), Validators.required),
46
+ [fields.toId]: new FormControl(this.mapper.extractFromDependency(item, 'toId'), Validators.required),
47
+ [fields.type]: new FormControl(this.mapper.extractFromDependency(item, 'type'), Validators.required)
48
+ });
49
+ this.formGroups.push(formGroup);
50
+ });
51
+ }
52
+ this.formGroups.valueChanges.subscribe(val => {
53
+ this.formGroups.controls.forEach(control => {
54
+ if (control.dirty) {
55
+ this.editService.updateDependencies(control.value);
56
+ }
57
+ });
58
+ this.dependenciesChange.emit(val);
59
+ });
60
+ }
61
+ getFormControl(dataItemIndex, field) {
62
+ // return the FormControl for the respective column editor
63
+ return this.formGroups.controls
64
+ .find((_control, index) => index === dataItemIndex)
65
+ .get(this.mapper.dependencyFields[field]);
66
+ }
67
+ getText(token) {
68
+ return this.localizationService.get(token);
69
+ }
70
+ getDependencyTypes() {
71
+ const types = Object.keys(DependencyType)
72
+ .filter(value => typeof DependencyType[value] === 'number')
73
+ .map(type => {
74
+ return {
75
+ type,
76
+ id: DependencyType[type]
77
+ };
78
+ });
79
+ return types;
80
+ }
81
+ addHandler() {
82
+ const fields = this.mapper.dependencyFields;
83
+ const formGroup = new FormGroup({
84
+ [fields.id]: new FormControl(),
85
+ [fields.fromId]: new FormControl(this.dependencyIdField === 'toId' ? this.taskId : null, Validators.required),
86
+ [fields.toId]: new FormControl(this.dependencyIdField === 'fromId' ? this.taskId : null, Validators.required),
87
+ [fields.type]: new FormControl(null, Validators.required)
88
+ });
89
+ this.formGroups.push(formGroup);
90
+ }
91
+ removeHandler() {
92
+ const [selectedIndex] = this.selectedKeys;
93
+ const item = this.formGroups.at(selectedIndex).value;
94
+ this.editService.deleteDependency(item);
95
+ this.formGroups.removeAt(selectedIndex);
96
+ }
97
+ }
98
+ DependenciesTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DependenciesTableComponent, deps: [{ token: i1.MappingService }, { token: i2.EditService }, { token: i3.GanttLocalizationService }], target: i0.ɵɵFactoryTarget.Component });
99
+ DependenciesTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: DependenciesTableComponent, selector: "kendo-gantt-dependencies-table", inputs: { tasks: "tasks", dependencies: "dependencies", dependencyType: "dependencyType" }, outputs: { dependenciesChange: "dependenciesChange" }, ngImport: i0, template: `
100
+ <kendo-grid
101
+ [data]="dependencies"
102
+ [selectable]="{ mode: 'single' }"
103
+ [(selectedKeys)]="selectedKeys"
104
+ kendoGridSelectBy
105
+ [height]="275"
106
+ >
107
+ <ng-template kendoGridToolbarTemplate>
108
+ <button kendoButton (click)="addHandler()">
109
+ {{ getText('taskEditingDependenciesAddButtonText') }}
110
+ </button>
111
+ <button kendoButton (click)="removeHandler()" [disabled]="selectedKeys.length === 0">
112
+ {{ getText('taskEditingDependenciesRemoveButtonText') }}
113
+ </button>
114
+ </ng-template>
115
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridNameColumnTitle')" [field]="dependencyIdField">
116
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
117
+ <kendo-dropdownlist
118
+ [data]="tasks"
119
+ textField="title"
120
+ valueField="id"
121
+ [valuePrimitive]="true"
122
+ [formControl]="getFormControl(rowIndex, column.field)"
123
+ >
124
+ </kendo-dropdownlist>
125
+ </ng-template>
126
+ </kendo-grid-column>
127
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridTypeColumnTitle')" field="type">
128
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
129
+ <kendo-dropdownlist
130
+ [data]="dependencyTypes"
131
+ textField="type"
132
+ valueField="id"
133
+ [valuePrimitive]="true"
134
+ [formControl]="getFormControl(rowIndex, column.field)"
135
+ >
136
+ </kendo-dropdownlist>
137
+ </ng-template>
138
+ </kendo-grid-column>
139
+ </kendo-grid>
140
+ `, isInline: true, components: [{ type: i4.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { type: i4.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { type: i5.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i4.SelectionDirective, selector: "[kendoGridSelectBy]" }, { type: i4.ToolbarTemplateDirective, selector: "[kendoGridToolbarTemplate]", inputs: ["position"] }, { type: i6.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: i4.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DependenciesTableComponent, decorators: [{
142
+ type: Component,
143
+ args: [{
144
+ selector: 'kendo-gantt-dependencies-table',
145
+ template: `
146
+ <kendo-grid
147
+ [data]="dependencies"
148
+ [selectable]="{ mode: 'single' }"
149
+ [(selectedKeys)]="selectedKeys"
150
+ kendoGridSelectBy
151
+ [height]="275"
152
+ >
153
+ <ng-template kendoGridToolbarTemplate>
154
+ <button kendoButton (click)="addHandler()">
155
+ {{ getText('taskEditingDependenciesAddButtonText') }}
156
+ </button>
157
+ <button kendoButton (click)="removeHandler()" [disabled]="selectedKeys.length === 0">
158
+ {{ getText('taskEditingDependenciesRemoveButtonText') }}
159
+ </button>
160
+ </ng-template>
161
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridNameColumnTitle')" [field]="dependencyIdField">
162
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
163
+ <kendo-dropdownlist
164
+ [data]="tasks"
165
+ textField="title"
166
+ valueField="id"
167
+ [valuePrimitive]="true"
168
+ [formControl]="getFormControl(rowIndex, column.field)"
169
+ >
170
+ </kendo-dropdownlist>
171
+ </ng-template>
172
+ </kendo-grid-column>
173
+ <kendo-grid-column [title]="getText('taskEditingDependenciesGridTypeColumnTitle')" field="type">
174
+ <ng-template kendoGridCellTemplate let-dataItem="dataItem" let-column="column" let-rowIndex="rowIndex">
175
+ <kendo-dropdownlist
176
+ [data]="dependencyTypes"
177
+ textField="type"
178
+ valueField="id"
179
+ [valuePrimitive]="true"
180
+ [formControl]="getFormControl(rowIndex, column.field)"
181
+ >
182
+ </kendo-dropdownlist>
183
+ </ng-template>
184
+ </kendo-grid-column>
185
+ </kendo-grid>
186
+ `
187
+ }]
188
+ }], ctorParameters: function () { return [{ type: i1.MappingService }, { type: i2.EditService }, { type: i3.GanttLocalizationService }]; }, propDecorators: { tasks: [{
189
+ type: Input
190
+ }], dependencies: [{
191
+ type: Input
192
+ }], dependencyType: [{
193
+ type: Input
194
+ }], dependenciesChange: [{
195
+ type: Output
196
+ }] } });
@@ -0,0 +1,170 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { Component, Input } from '@angular/core';
6
+ import { DependencyType } from '../models/dependency-type.enum';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../common/mapping.service";
9
+ import * as i2 from "./edit.service";
10
+ import * as i3 from "@progress/kendo-angular-l10n";
11
+ import * as i4 from "@progress/kendo-angular-dialog";
12
+ import * as i5 from "@progress/kendo-angular-layout";
13
+ import * as i6 from "./task-fields.component";
14
+ import * as i7 from "./dependencies-table.component";
15
+ import * as i8 from "@progress/kendo-angular-treelist";
16
+ import * as i9 from "@progress/kendo-angular-buttons";
17
+ import * as i10 from "@progress/kendo-angular-common";
18
+ /**
19
+ * @hidden
20
+ */
21
+ export class EditDialogComponent {
22
+ constructor(mapper, editService, cdr, localizationService) {
23
+ this.mapper = mapper;
24
+ this.editService = editService;
25
+ this.cdr = cdr;
26
+ this.localizationService = localizationService;
27
+ }
28
+ ngOnInit() {
29
+ this.editService.loadTasks(this.data).subscribe(value => {
30
+ this.loadedTasks = value;
31
+ });
32
+ }
33
+ get predecessors() {
34
+ return this.editService.predecessors;
35
+ }
36
+ set predecessors(items) {
37
+ this.editService.predecessors = items;
38
+ }
39
+ get successors() {
40
+ return this.editService.successors;
41
+ }
42
+ set successors(items) {
43
+ this.editService.successors = items;
44
+ }
45
+ getText(token) {
46
+ return this.localizationService.get(token);
47
+ }
48
+ getDependencyType(typeId) {
49
+ return DependencyType[typeId];
50
+ }
51
+ handleEditingResult(editResultType) {
52
+ this.editService.triggerEditEvent(editResultType);
53
+ }
54
+ handleTaskDelete() {
55
+ this.editService.taskDelete.next(this.editService.dataItem);
56
+ }
57
+ }
58
+ EditDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditDialogComponent, deps: [{ token: i1.MappingService }, { token: i2.EditService }, { token: i0.ChangeDetectorRef }, { token: i3.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
59
+ EditDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: EditDialogComponent, selector: "kendo-gantt-edit-dialog", inputs: { data: "data" }, ngImport: i0, template: `
60
+ <kendo-dialog
61
+ [title]="getText('taskEditingDialogTitle')"
62
+ [width]="575"
63
+ [height]="470"
64
+ (close)="handleEditingResult('cancel')">
65
+ <kendo-dialog-messages
66
+ [closeTitle]="getText('taskEditingDialogCloseTitle')"></kendo-dialog-messages>
67
+
68
+ <kendo-tabstrip [keepTabContent]="true" style="height: 345px;">
69
+ <kendo-tabstrip-tab [title]="getText('taskEditingGeneralTabTitle')" [selected]="true">
70
+ <ng-template kendoTabContent>
71
+ <kendo-gantt-task-fields></kendo-gantt-task-fields>
72
+ </ng-template>
73
+ </kendo-tabstrip-tab>
74
+ <kendo-tabstrip-tab [title]="getText('taskEditingPredecessorsTabTitle')">
75
+ <ng-template kendoTabContent>
76
+ <kendo-gantt-dependencies-table
77
+ [tasks]="loadedTasks"
78
+ [(dependencies)]="predecessors"
79
+ dependencyType="predecessor"
80
+ >
81
+ </kendo-gantt-dependencies-table>
82
+ </ng-template>
83
+ </kendo-tabstrip-tab>
84
+ <kendo-tabstrip-tab [title]="getText('taskEditingSuccessorsTabTitle')">
85
+ <ng-template kendoTabContent>
86
+ <kendo-gantt-dependencies-table
87
+ [tasks]="loadedTasks"
88
+ [(dependencies)]="successors"
89
+ dependencyType="successor">
90
+ </kendo-gantt-dependencies-table>
91
+ </ng-template>
92
+ </kendo-tabstrip-tab>
93
+ </kendo-tabstrip>
94
+
95
+ <kendo-dialog-actions layout="normal">
96
+ <button
97
+ kendoButton
98
+ [kendoEventsOutsideAngular]="{
99
+ click: handleTaskDelete
100
+ }"
101
+ [scope]="this"
102
+ >
103
+ {{ getText('deleteButtonText') }}
104
+ </button>
105
+ <kendo-treelist-spacer></kendo-treelist-spacer>
106
+ <button kendoButton [primary]="true" (click)="handleEditingResult('save')">{{ getText('saveButtonText') }}</button>
107
+ <button kendoButton (click)="handleEditingResult('cancel')">{{ getText('cancelButtonText') }}</button>
108
+ </kendo-dialog-actions>
109
+ </kendo-dialog>
110
+ `, isInline: true, components: [{ type: i4.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { type: i5.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "closeIcon"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { type: i5.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon"], exportAs: ["kendoTabStripTab"] }, { type: i6.TaskFieldsComponent, selector: "kendo-gantt-task-fields" }, { type: i7.DependenciesTableComponent, selector: "kendo-gantt-dependencies-table", inputs: ["tasks", "dependencies", "dependencyType"], outputs: ["dependenciesChange"] }, { type: i4.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { type: i8.TreeListSpacerComponent, selector: "kendo-treelist-spacer, kendo-treelist-pager-spacer", inputs: ["width"] }], directives: [{ type: i4.CustomMessagesComponent, selector: "kendo-dialog-messages, kendo-window-messages" }, { type: i5.TabContentDirective, selector: "[kendoTabContent]" }, { type: i9.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditDialogComponent, decorators: [{
112
+ type: Component,
113
+ args: [{
114
+ selector: 'kendo-gantt-edit-dialog',
115
+ template: `
116
+ <kendo-dialog
117
+ [title]="getText('taskEditingDialogTitle')"
118
+ [width]="575"
119
+ [height]="470"
120
+ (close)="handleEditingResult('cancel')">
121
+ <kendo-dialog-messages
122
+ [closeTitle]="getText('taskEditingDialogCloseTitle')"></kendo-dialog-messages>
123
+
124
+ <kendo-tabstrip [keepTabContent]="true" style="height: 345px;">
125
+ <kendo-tabstrip-tab [title]="getText('taskEditingGeneralTabTitle')" [selected]="true">
126
+ <ng-template kendoTabContent>
127
+ <kendo-gantt-task-fields></kendo-gantt-task-fields>
128
+ </ng-template>
129
+ </kendo-tabstrip-tab>
130
+ <kendo-tabstrip-tab [title]="getText('taskEditingPredecessorsTabTitle')">
131
+ <ng-template kendoTabContent>
132
+ <kendo-gantt-dependencies-table
133
+ [tasks]="loadedTasks"
134
+ [(dependencies)]="predecessors"
135
+ dependencyType="predecessor"
136
+ >
137
+ </kendo-gantt-dependencies-table>
138
+ </ng-template>
139
+ </kendo-tabstrip-tab>
140
+ <kendo-tabstrip-tab [title]="getText('taskEditingSuccessorsTabTitle')">
141
+ <ng-template kendoTabContent>
142
+ <kendo-gantt-dependencies-table
143
+ [tasks]="loadedTasks"
144
+ [(dependencies)]="successors"
145
+ dependencyType="successor">
146
+ </kendo-gantt-dependencies-table>
147
+ </ng-template>
148
+ </kendo-tabstrip-tab>
149
+ </kendo-tabstrip>
150
+
151
+ <kendo-dialog-actions layout="normal">
152
+ <button
153
+ kendoButton
154
+ [kendoEventsOutsideAngular]="{
155
+ click: handleTaskDelete
156
+ }"
157
+ [scope]="this"
158
+ >
159
+ {{ getText('deleteButtonText') }}
160
+ </button>
161
+ <kendo-treelist-spacer></kendo-treelist-spacer>
162
+ <button kendoButton [primary]="true" (click)="handleEditingResult('save')">{{ getText('saveButtonText') }}</button>
163
+ <button kendoButton (click)="handleEditingResult('cancel')">{{ getText('cancelButtonText') }}</button>
164
+ </kendo-dialog-actions>
165
+ </kendo-dialog>
166
+ `
167
+ }]
168
+ }], ctorParameters: function () { return [{ type: i1.MappingService }, { type: i2.EditService }, { type: i0.ChangeDetectorRef }, { type: i3.LocalizationService }]; }, propDecorators: { data: [{
169
+ type: Input
170
+ }] } });
@@ -0,0 +1,111 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { Injectable } from '@angular/core';
6
+ import { EMPTY, forkJoin, isObservable, of, Subject } from 'rxjs';
7
+ import { map, expand, reduce } from 'rxjs/operators';
8
+ import { isPresent, normalizeGanttData } from '../utils';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../common/mapping.service";
11
+ /**
12
+ * @hidden
13
+ */
14
+ export class EditService {
15
+ constructor(mapper) {
16
+ this.mapper = mapper;
17
+ this.showEditingDialog = new Subject();
18
+ this.taskDelete = new Subject();
19
+ this.editEvent = new Subject();
20
+ this.addEvent = new Subject();
21
+ this.predecessors = [];
22
+ this.successors = [];
23
+ this.updatedItems = [];
24
+ this.deletedItems = [];
25
+ this.itemIndex = (item, data) => {
26
+ return data.findIndex(dataItem => this.mapper.extractFromTask(dataItem, 'id') === this.mapper.extractFromTask(item, 'id'));
27
+ };
28
+ }
29
+ set dependencies(items) {
30
+ // Can this whole thing be moved to edit-dialog? Dependencies might not be needed here
31
+ const dataItemId = this.mapper.extractFromTask(this.dataItem, 'id');
32
+ this.predecessors = items.filter(item => this.mapper.extractFromDependency(item, 'toId') === dataItemId);
33
+ this.successors = items.filter(item => this.mapper.extractFromDependency(item, 'fromId') === dataItemId);
34
+ }
35
+ get dependencies() {
36
+ return [...this.predecessors, ...this.successors];
37
+ }
38
+ createEditDialog(dataItem, taskFormGroup, dependencies) {
39
+ this.dataItem = dataItem;
40
+ this.taskFormGroup = taskFormGroup;
41
+ this.dependencies = dependencies;
42
+ this.showEditingDialog.next(true);
43
+ }
44
+ closeEditDialog() {
45
+ this.showEditingDialog.next(false);
46
+ this.dataItem = undefined;
47
+ this.taskFormGroup = undefined;
48
+ this.dependencies = [];
49
+ this.updatedItems = [];
50
+ this.deletedItems = [];
51
+ }
52
+ triggerEditEvent(editResultType) {
53
+ this.editEvent.next({
54
+ taskFormGroup: this.taskFormGroup,
55
+ dataItem: this.dataItem,
56
+ dependencies: {
57
+ createdItems: this.getCreatedDependencies(),
58
+ updatedItems: this.updatedItems,
59
+ deletedItems: this.deletedItems
60
+ },
61
+ editResultType
62
+ });
63
+ }
64
+ updateDependencies(item) {
65
+ if (!this.isNew(item)) {
66
+ // update
67
+ const index = this.itemIndex(item, this.updatedItems);
68
+ if (index !== -1) {
69
+ this.updatedItems.splice(index, 1, item);
70
+ }
71
+ else {
72
+ this.updatedItems.push(item);
73
+ }
74
+ }
75
+ }
76
+ getCreatedDependencies() {
77
+ return this.dependencies.filter(item => this.mapper.extractFromDependency(item, 'id') === null);
78
+ }
79
+ deleteDependency(item) {
80
+ const updatedIndex = this.itemIndex(item, this.updatedItems);
81
+ if (updatedIndex !== -1) {
82
+ this.updatedItems.splice(updatedIndex, 1);
83
+ }
84
+ if (!this.isNew(item)) {
85
+ this.deletedItems.push(item);
86
+ }
87
+ }
88
+ loadTasks(initialValues, isInitializer = true) {
89
+ return forkJoin(initialValues.map(v => this.getElementById(v))).pipe(map((value) => value.reduce((acc, item) => acc = acc.concat(normalizeGanttData(item)), [])), expand(values => {
90
+ if (values.some(el => this.hasChildren(el))) {
91
+ return this.loadTasks(values, false);
92
+ }
93
+ return EMPTY;
94
+ }), reduce((acc, values) => acc.concat(values), isInitializer ? [...initialValues] : []));
95
+ }
96
+ getElementById(item) {
97
+ const children = this.fetchChildren(item);
98
+ if (isObservable(children)) {
99
+ return children;
100
+ }
101
+ return of(children);
102
+ }
103
+ isNew(item) {
104
+ return !isPresent(this.mapper.extractFromDependency(item, 'id'));
105
+ }
106
+ }
107
+ EditService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditService, deps: [{ token: i1.MappingService }], target: i0.ɵɵFactoryTarget.Injectable });
108
+ EditService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditService });
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EditService, decorators: [{
110
+ type: Injectable
111
+ }], ctorParameters: function () { return [{ type: i1.MappingService }]; } });
@@ -0,0 +1,101 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { Component } from '@angular/core';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../common/mapping.service";
8
+ import * as i2 from "./edit.service";
9
+ import * as i3 from "../localization/gantt-localization.service";
10
+ import * as i4 from "@progress/kendo-angular-inputs";
11
+ import * as i5 from "@progress/kendo-angular-label";
12
+ import * as i6 from "@progress/kendo-angular-dateinputs";
13
+ import * as i7 from "@progress/kendo-angular-treelist";
14
+ import * as i8 from "@angular/forms";
15
+ import * as i9 from "@angular/common";
16
+ /**
17
+ * @hidden
18
+ */
19
+ export class TaskFieldsComponent {
20
+ constructor(mapper, editService, localizationService) {
21
+ this.mapper = mapper;
22
+ this.editService = editService;
23
+ this.localizationService = localizationService;
24
+ }
25
+ /**
26
+ * @hidden
27
+ */
28
+ get formGroup() {
29
+ return this.editService.taskFormGroup;
30
+ }
31
+ getText(token) {
32
+ return this.localizationService.get(token);
33
+ }
34
+ }
35
+ TaskFieldsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TaskFieldsComponent, deps: [{ token: i1.MappingService }, { token: i2.EditService }, { token: i3.GanttLocalizationService }], target: i0.ɵɵFactoryTarget.Component });
36
+ TaskFieldsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: TaskFieldsComponent, selector: "kendo-gantt-task-fields", ngImport: i0, template: `
37
+ <form class="k-form" [formGroup]="formGroup">
38
+ <kendo-formfield *ngIf="formGroup.contains(mapper.taskFields.title)">
39
+ <kendo-label [for]="mapper.taskFields.title" [text]="getText('titleFieldInputLabel')"></kendo-label>
40
+ <input kendoTextBox [formControlName]="mapper.taskFields.title" />
41
+ </kendo-formfield>
42
+ <div class="k-hstack">
43
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.contains(mapper.taskFields.start)">
44
+ <kendo-label [for]="mapper.taskFields.start" [text]="getText('startFieldInputLabel')"></kendo-label>
45
+ <kendo-datetimepicker [formControlName]="mapper.taskFields.start"></kendo-datetimepicker>
46
+ </kendo-formfield>
47
+ <kendo-treelist-spacer></kendo-treelist-spacer>
48
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.contains(mapper.taskFields.end)">
49
+ <kendo-label [for]="mapper.taskFields.end" [text]="getText('endFieldInputLabel')"></kendo-label>
50
+ <kendo-datetimepicker [formControlName]="mapper.taskFields.end"></kendo-datetimepicker>
51
+ </kendo-formfield>
52
+ </div>
53
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.contains(mapper.taskFields.completionRatio)">
54
+ <kendo-label [for]="mapper.taskFields.completionRatio" [text]="getText('completionRatioFieldInputLabel')"></kendo-label>
55
+ <kendo-numerictextbox
56
+ [formControlName]="mapper.taskFields.completionRatio"
57
+ [min]="0"
58
+ [max]="1"
59
+ [decimals]="2"
60
+ format="p2"
61
+ [step]="0.01"
62
+ ></kendo-numerictextbox>
63
+ </kendo-formfield>
64
+ </form>
65
+ `, isInline: true, components: [{ type: i4.FormFieldComponent, selector: "kendo-formfield", inputs: ["showHints", "orientation", "showErrors"] }, { type: i5.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional"], exportAs: ["kendoLabel"] }, { type: i6.DateTimePickerComponent, selector: "kendo-datetimepicker", inputs: ["value", "format", "twoDigitYearMax", "tabindex", "disabledDates", "popupSettings", "focusableId", "title", "disabled", "readonly", "readOnlyInput", "cancelButton", "formatPlaceholder", "placeholder", "steps", "focusedDate", "calendarType", "animateCalendarNavigation", "weekNumber", "min", "max", "rangeValidation", "disabledDatesValidation", "incompleteDateValidation", "defaultTab", "size", "rounded", "fillMode"], outputs: ["valueChange", "open", "close", "focus", "blur"], exportAs: ["kendo-datetimepicker"] }, { type: i7.TreeListSpacerComponent, selector: "kendo-treelist-spacer, kendo-treelist-pager-spacer", inputs: ["width"] }, { type: i4.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode"], outputs: ["valueChange", "focus", "blur"], exportAs: ["kendoNumericTextBox"] }], directives: [{ type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }] });
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: TaskFieldsComponent, decorators: [{
67
+ type: Component,
68
+ args: [{
69
+ selector: 'kendo-gantt-task-fields',
70
+ template: `
71
+ <form class="k-form" [formGroup]="formGroup">
72
+ <kendo-formfield *ngIf="formGroup.contains(mapper.taskFields.title)">
73
+ <kendo-label [for]="mapper.taskFields.title" [text]="getText('titleFieldInputLabel')"></kendo-label>
74
+ <input kendoTextBox [formControlName]="mapper.taskFields.title" />
75
+ </kendo-formfield>
76
+ <div class="k-hstack">
77
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.contains(mapper.taskFields.start)">
78
+ <kendo-label [for]="mapper.taskFields.start" [text]="getText('startFieldInputLabel')"></kendo-label>
79
+ <kendo-datetimepicker [formControlName]="mapper.taskFields.start"></kendo-datetimepicker>
80
+ </kendo-formfield>
81
+ <kendo-treelist-spacer></kendo-treelist-spacer>
82
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.contains(mapper.taskFields.end)">
83
+ <kendo-label [for]="mapper.taskFields.end" [text]="getText('endFieldInputLabel')"></kendo-label>
84
+ <kendo-datetimepicker [formControlName]="mapper.taskFields.end"></kendo-datetimepicker>
85
+ </kendo-formfield>
86
+ </div>
87
+ <kendo-formfield [style.width.%]="49" *ngIf="formGroup.contains(mapper.taskFields.completionRatio)">
88
+ <kendo-label [for]="mapper.taskFields.completionRatio" [text]="getText('completionRatioFieldInputLabel')"></kendo-label>
89
+ <kendo-numerictextbox
90
+ [formControlName]="mapper.taskFields.completionRatio"
91
+ [min]="0"
92
+ [max]="1"
93
+ [decimals]="2"
94
+ format="p2"
95
+ [step]="0.01"
96
+ ></kendo-numerictextbox>
97
+ </kendo-formfield>
98
+ </form>
99
+ `
100
+ }]
101
+ }], ctorParameters: function () { return [{ type: i1.MappingService }, { type: i2.EditService }, { type: i3.GanttLocalizationService }]; } });
@@ -0,0 +1,15 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ /**
6
+ * @hidden
7
+ */
8
+ export const getEditItem = (dataItem, data, mapper) => {
9
+ const treeListDataItem = data.find(item => mapper.extractFromTask(item.data, 'id') === mapper.extractFromTask(dataItem, 'id'));
10
+ return mapPath(treeListDataItem);
11
+ };
12
+ const mapPath = (item) => ({
13
+ dataItem: item.data,
14
+ parent: item.parent.data ? mapPath(item.parent) : null
15
+ });
@@ -0,0 +1,9 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ /**
6
+ * Arguments for the Gantt `expand` and `collapse` events.
7
+ */
8
+ export class ExpandEvent {
9
+ }
@@ -0,0 +1,23 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { Directive, Input } from '@angular/core';
6
+ import { ExpandableDirective } from '@progress/kendo-angular-treelist';
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * A directive which controls the expanded state of the items.
10
+ */
11
+ export class GanttExpandableDirective extends ExpandableDirective {
12
+ }
13
+ GanttExpandableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: GanttExpandableDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
14
+ GanttExpandableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: GanttExpandableDirective, selector: "[kendoGanttExpandable]", inputs: { expandBy: "expandBy" }, exportAs: ["kendoGanttExpandable"], usesInheritance: true, ngImport: i0 });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: GanttExpandableDirective, decorators: [{
16
+ type: Directive,
17
+ args: [{
18
+ exportAs: 'kendoGanttExpandable',
19
+ selector: '[kendoGanttExpandable]'
20
+ }]
21
+ }], propDecorators: { expandBy: [{
22
+ type: Input
23
+ }] } });