@progress/kendo-angular-gantt 2.0.0-next.202204010911 → 2.0.0-next.202204121022
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.
- package/binding-directives/flat-binding.directive.d.ts +24 -0
- package/binding-directives/hierarchy-binding.directive.d.ts +22 -0
- package/bundles/kendo-angular-gantt.umd.js +1 -1
- package/columns/cell-template.directive.d.ts +28 -0
- package/columns/column-base.d.ts +85 -0
- package/columns/column-group.component.d.ts +103 -0
- package/columns/column-menu-template.directive.d.ts +22 -0
- package/columns/column.component.d.ts +130 -0
- package/columns/columns.d.ts +15 -0
- package/columns/edit-template.directive.d.ts +26 -0
- package/columns/filter-cell-template.directive.d.ts +21 -0
- package/columns/filter-menu-template.directive.d.ts +20 -0
- package/columns/footer-template.directive.d.ts +24 -0
- package/columns/header-template.directive.d.ts +22 -0
- package/columns/span-column.component.d.ts +112 -0
- package/common/default-callbacks.d.ts +25 -0
- package/common/mapping.service.d.ts +38 -0
- package/common/option-changes.service.d.ts +17 -0
- package/common/touch-enabled.d.ts +9 -0
- package/dependencies/dependency-dom.service.d.ts +46 -0
- package/dependencies/dom-dependency-args.d.ts +24 -0
- package/dependencies/gantt-dependency.directive.d.ts +29 -0
- package/dependencies/utils.d.ts +53 -0
- package/dragging/dependency-drag-create.directive.d.ts +75 -0
- package/dragging/drag-validation-tooltip.component.d.ts +32 -0
- package/editing/add-task.component.d.ts +48 -0
- package/editing/dependencies-table.component.d.ts +42 -0
- package/editing/edit-dialog.component.d.ts +33 -0
- package/editing/edit.service.d.ts +44 -0
- package/editing/task-fields.component.d.ts +25 -0
- package/editing/utils.d.ts +10 -0
- package/esm2015/binding-directives/flat-binding.directive.js +34 -0
- package/esm2015/binding-directives/hierarchy-binding.directive.js +32 -0
- package/esm2015/columns/cell-template.directive.js +37 -0
- package/esm2015/columns/column-base.js +52 -0
- package/esm2015/columns/column-group.component.js +94 -0
- package/esm2015/columns/column-menu-template.directive.js +31 -0
- package/esm2015/columns/column.component.js +133 -0
- package/esm2015/columns/columns.js +15 -0
- package/esm2015/columns/edit-template.directive.js +35 -0
- package/esm2015/columns/filter-cell-template.directive.js +30 -0
- package/esm2015/columns/filter-menu-template.directive.js +29 -0
- package/esm2015/columns/footer-template.directive.js +33 -0
- package/esm2015/columns/header-template.directive.js +31 -0
- package/esm2015/columns/span-column.component.js +86 -0
- package/esm2015/common/default-callbacks.js +25 -0
- package/esm2015/common/mapping.service.js +64 -0
- package/esm2015/common/option-changes.service.js +26 -0
- package/esm2015/common/touch-enabled.js +9 -0
- package/esm2015/dependencies/dependency-dom.service.js +70 -0
- package/esm2015/dependencies/dom-dependency-args.js +5 -0
- package/esm2015/dependencies/gantt-dependency.directive.js +82 -0
- package/esm2015/dependencies/utils.js +195 -0
- package/esm2015/dragging/dependency-drag-create.directive.js +318 -0
- package/esm2015/dragging/drag-validation-tooltip.component.js +90 -0
- package/esm2015/editing/add-task.component.js +109 -0
- package/esm2015/editing/dependencies-table.component.js +196 -0
- package/esm2015/editing/edit-dialog.component.js +170 -0
- package/esm2015/editing/edit.service.js +111 -0
- package/esm2015/editing/task-fields.component.js +101 -0
- package/esm2015/editing/utils.js +15 -0
- package/esm2015/expanded-state/expand-event.js +9 -0
- package/esm2015/expanded-state/expandable.directive.js +23 -0
- package/esm2015/gantt.component.js +2226 -0
- package/esm2015/gantt.module.js +264 -0
- package/esm2015/kendo-angular-gantt.js +8 -0
- package/esm2015/localization/custom-messages.component.js +41 -0
- package/esm2015/localization/gantt-localization.service.js +25 -0
- package/esm2015/localization/localized-messages.directive.js +36 -0
- package/esm2015/localization/messages.js +157 -0
- package/esm2015/main.js +37 -0
- package/esm2015/models/cell-content-type.interface.js +5 -0
- package/esm2015/models/class-callbacks.js +5 -0
- package/esm2015/models/column-menu-settings.interface.js +5 -0
- package/esm2015/models/column-reorder-config.js +5 -0
- package/esm2015/models/date-range.interface.js +5 -0
- package/esm2015/models/dependency-type.enum.js +20 -0
- package/esm2015/models/events/cell-click-event.interface.js +5 -0
- package/esm2015/models/events/cell-close-event.interface.js +14 -0
- package/esm2015/models/events/click-event.interface.js +5 -0
- package/esm2015/models/events/column-locked-change-event.interface.js +5 -0
- package/esm2015/models/events/column-reorder-event.interface.js +5 -0
- package/esm2015/models/events/column-resize-event.interface.js +5 -0
- package/esm2015/models/events/column-visibility-change-event.interface.js +5 -0
- package/esm2015/models/events/data-state-change-event.interface.js +5 -0
- package/esm2015/models/events/dependency-add-event.interface.js +5 -0
- package/esm2015/models/events/selected-view-change-event.interface.js +5 -0
- package/esm2015/models/events/task-add-event.interface.js +5 -0
- package/esm2015/models/events/task-click-event.interface.js +5 -0
- package/esm2015/models/events/task-delete-event.interface.js +5 -0
- package/esm2015/models/events/task-edit-event.interface.js +5 -0
- package/esm2015/models/events/task-move-end-event.interface.js +5 -0
- package/esm2015/models/events/task-move-event.interface.js +5 -0
- package/esm2015/models/events/task-move-start-event.interface.js +5 -0
- package/esm2015/models/events/task-resize-end-event.interface.js +5 -0
- package/esm2015/models/events/task-resize-event.interface.js +5 -0
- package/esm2015/models/events/task-resize-start-event.interface.js +5 -0
- package/esm2015/models/filterable-settings.js +5 -0
- package/esm2015/models/gantt-dependency-model-fields.interface.js +13 -0
- package/esm2015/models/gantt-dependency.interface.js +5 -0
- package/esm2015/models/gantt-task-model-fields.interface.js +15 -0
- package/esm2015/models/gantt-task.interface.js +5 -0
- package/esm2015/models/models.js +7 -0
- package/esm2015/models/slot.interface.js +5 -0
- package/esm2015/models/sort-settings.js +17 -0
- package/esm2015/models/splitter-pane-options.interface.js +20 -0
- package/esm2015/models/timeline-options.interface.js +5 -0
- package/esm2015/models/timeline-view.js +5 -0
- package/esm2015/models/toolbar-settings.js +5 -0
- package/esm2015/models/view-item.interface.js +5 -0
- package/esm2015/navigation/navigation-models.js +5 -0
- package/esm2015/navigation/navigation.service.js +265 -0
- package/esm2015/navigation/utils.js +69 -0
- package/esm2015/package-metadata.js +15 -0
- package/esm2015/rendering/gantt-header-table-body.component.js +42 -0
- package/esm2015/rendering/gantt-milestone-task.component.js +107 -0
- package/esm2015/rendering/gantt-summary-task.component.js +158 -0
- package/esm2015/rendering/gantt-task-base.js +148 -0
- package/esm2015/rendering/gantt-task.component.js +204 -0
- package/esm2015/rendering/gantt-tasks-table-body.component.js +160 -0
- package/esm2015/scrolling/drag-scroll-settings.js +20 -0
- package/esm2015/scrolling/scroll-sync.service.js +80 -0
- package/esm2015/scrolling/timeline-scroll.directive.js +75 -0
- package/esm2015/scrolling/timeline-scroll.service.js +39 -0
- package/esm2015/scrolling/utils.js +77 -0
- package/esm2015/selection/selectable.directive.js +112 -0
- package/esm2015/selection/selection-change-event.js +5 -0
- package/esm2015/template-directives/summary-task-template.directive.js +50 -0
- package/esm2015/template-directives/task-content-template.directive.js +45 -0
- package/esm2015/template-directives/task-template.directive.js +48 -0
- package/esm2015/timeline/gantt-timeline.component.js +334 -0
- package/esm2015/timeline/timeline-base-view.service.js +160 -0
- package/esm2015/timeline/timeline-day-view.component.js +38 -0
- package/esm2015/timeline/timeline-day-view.service.js +66 -0
- package/esm2015/timeline/timeline-month-view.component.js +38 -0
- package/esm2015/timeline/timeline-month-view.service.js +64 -0
- package/esm2015/timeline/timeline-view.service.js +35 -0
- package/esm2015/timeline/timeline-week-view.component.js +38 -0
- package/esm2015/timeline/timeline-week-view.service.js +60 -0
- package/esm2015/timeline/view-base.js +45 -0
- package/esm2015/toolbar/toolbar-template.directive.js +127 -0
- package/esm2015/toolbar/toolbar.component.js +94 -0
- package/esm2015/toolbar/view-selector.component.js +96 -0
- package/esm2015/utils.js +293 -0
- package/expanded-state/expand-event.d.ts +13 -0
- package/expanded-state/expandable.directive.d.ts +20 -0
- package/fesm2015/kendo-angular-gantt.js +7706 -0
- package/gantt.component.d.ts +750 -0
- package/gantt.module.d.ts +94 -0
- package/kendo-angular-gantt.d.ts +9 -0
- package/localization/custom-messages.component.d.ts +18 -0
- package/localization/gantt-localization.service.d.ts +18 -0
- package/localization/localized-messages.directive.d.ts +16 -0
- package/localization/messages.d.ts +293 -0
- package/main.d.ts +39 -0
- package/models/cell-content-type.interface.d.ts +10 -0
- package/models/class-callbacks.d.ts +43 -0
- package/models/column-menu-settings.interface.d.ts +26 -0
- package/models/column-reorder-config.d.ts +10 -0
- package/models/date-range.interface.d.ts +19 -0
- package/models/dependency-type.enum.d.ts +19 -0
- package/models/events/cell-click-event.interface.d.ts +43 -0
- package/models/events/cell-close-event.interface.d.ts +48 -0
- package/models/events/click-event.interface.d.ts +23 -0
- package/models/events/column-locked-change-event.interface.d.ts +16 -0
- package/models/events/column-reorder-event.interface.d.ts +10 -0
- package/models/events/column-resize-event.interface.d.ts +10 -0
- package/models/events/column-visibility-change-event.interface.d.ts +14 -0
- package/models/events/data-state-change-event.interface.d.ts +10 -0
- package/models/events/dependency-add-event.interface.d.ts +26 -0
- package/models/events/selected-view-change-event.interface.d.ts +19 -0
- package/models/events/task-add-event.interface.d.ts +31 -0
- package/models/events/task-click-event.interface.d.ts +30 -0
- package/models/events/task-delete-event.interface.d.ts +21 -0
- package/models/events/task-edit-event.interface.d.ts +76 -0
- package/models/events/task-move-end-event.interface.d.ts +12 -0
- package/models/events/task-move-event.interface.d.ts +23 -0
- package/models/events/task-move-start-event.interface.d.ts +15 -0
- package/models/events/task-resize-end-event.interface.d.ts +12 -0
- package/models/events/task-resize-event.interface.d.ts +23 -0
- package/models/events/task-resize-start-event.interface.d.ts +15 -0
- package/models/filterable-settings.d.ts +10 -0
- package/models/gantt-dependency-model-fields.interface.d.ts +35 -0
- package/models/gantt-dependency.interface.d.ts +26 -0
- package/models/gantt-task-model-fields.interface.d.ts +42 -0
- package/models/gantt-task.interface.d.ts +31 -0
- package/models/models.d.ts +42 -0
- package/models/slot.interface.d.ts +31 -0
- package/models/sort-settings.d.ts +42 -0
- package/models/splitter-pane-options.interface.d.ts +54 -0
- package/models/timeline-options.interface.d.ts +41 -0
- package/models/timeline-view.d.ts +8 -0
- package/models/toolbar-settings.d.ts +29 -0
- package/models/view-item.interface.d.ts +35 -0
- package/navigation/navigation-models.d.ts +38 -0
- package/navigation/navigation.service.d.ts +130 -0
- package/navigation/utils.d.ts +26 -0
- package/package-metadata.d.ts +9 -0
- package/package.json +10 -14
- package/rendering/gantt-header-table-body.component.d.ts +14 -0
- package/rendering/gantt-milestone-task.component.d.ts +22 -0
- package/rendering/gantt-summary-task.component.d.ts +25 -0
- package/rendering/gantt-task-base.d.ts +59 -0
- package/rendering/gantt-task.component.d.ts +26 -0
- package/rendering/gantt-tasks-table-body.component.d.ts +33 -0
- package/scrolling/drag-scroll-settings.d.ts +47 -0
- package/scrolling/scroll-sync.service.d.ts +33 -0
- package/scrolling/timeline-scroll.directive.d.ts +27 -0
- package/scrolling/timeline-scroll.service.d.ts +23 -0
- package/scrolling/utils.d.ts +29 -0
- package/selection/selectable.directive.d.ts +45 -0
- package/selection/selection-change-event.d.ts +25 -0
- package/template-directives/summary-task-template.directive.d.ts +41 -0
- package/template-directives/task-content-template.directive.d.ts +36 -0
- package/template-directives/task-template.directive.d.ts +39 -0
- package/timeline/gantt-timeline.component.d.ts +67 -0
- package/timeline/timeline-base-view.service.d.ts +77 -0
- package/timeline/timeline-day-view.component.d.ts +18 -0
- package/timeline/timeline-day-view.service.d.ts +38 -0
- package/timeline/timeline-month-view.component.d.ts +18 -0
- package/timeline/timeline-month-view.service.d.ts +38 -0
- package/timeline/timeline-view.service.d.ts +19 -0
- package/timeline/timeline-week-view.component.d.ts +18 -0
- package/timeline/timeline-week-view.service.d.ts +38 -0
- package/timeline/view-base.d.ts +34 -0
- package/toolbar/toolbar-template.directive.d.ts +112 -0
- package/toolbar/toolbar.component.d.ts +29 -0
- package/toolbar/view-selector.component.d.ts +43 -0
- 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
|
+
}] } });
|