@progress/kendo-angular-gantt 21.4.1-develop.1 → 22.0.0-develop.1
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/columns/column-base.component.d.ts +1 -1
- package/fesm2022/progress-kendo-angular-gantt.mjs +201 -201
- package/localization/messages.d.ts +1 -1
- package/package.json +22 -30
- package/rendering/gantt-task-base.d.ts +1 -1
- package/schematics/ngAdd/index.js +7 -7
- package/timeline/view-base.d.ts +1 -1
- package/esm2022/binding-directives/flat-binding.directive.mjs +0 -50
- package/esm2022/binding-directives/hierarchy-binding.directive.mjs +0 -49
- package/esm2022/columns/cell-template.directive.mjs +0 -47
- package/esm2022/columns/column-base.component.mjs +0 -22
- package/esm2022/columns/column-group.component.mjs +0 -80
- package/esm2022/columns/column-menu-template.directive.mjs +0 -40
- package/esm2022/columns/column.component.mjs +0 -122
- package/esm2022/columns/columns.mjs +0 -15
- package/esm2022/columns/edit-template.directive.mjs +0 -46
- package/esm2022/columns/filter-cell-template.directive.mjs +0 -32
- package/esm2022/columns/filter-menu-template.directive.mjs +0 -41
- package/esm2022/columns/footer-template.directive.mjs +0 -44
- package/esm2022/columns/header-template.directive.mjs +0 -43
- package/esm2022/columns/span-column.component.mjs +0 -82
- package/esm2022/common/default-callbacks.mjs +0 -25
- package/esm2022/common/mapping.service.mjs +0 -62
- package/esm2022/common/option-changes.service.mjs +0 -28
- package/esm2022/dependencies/dependency-dom.service.mjs +0 -80
- package/esm2022/dependencies/dom-dependency-args.mjs +0 -5
- package/esm2022/dependencies/gantt-dependency.directive.mjs +0 -91
- package/esm2022/dependencies/utils.mjs +0 -195
- package/esm2022/directives.mjs +0 -63
- package/esm2022/dragging/dependency-drag-create.directive.mjs +0 -337
- package/esm2022/dragging/drag-validation-tooltip.component.mjs +0 -70
- package/esm2022/dragging/task-drag.directive.mjs +0 -94
- package/esm2022/dragging/task-drag.service.mjs +0 -239
- package/esm2022/editing/add-task.component.mjs +0 -127
- package/esm2022/editing/dependencies-table.component.mjs +0 -233
- package/esm2022/editing/edit-dialog.component.mjs +0 -225
- package/esm2022/editing/edit.service.mjs +0 -118
- package/esm2022/editing/task-fields.component.mjs +0 -127
- package/esm2022/editing/utils.mjs +0 -15
- package/esm2022/expanded-state/expand-event.mjs +0 -18
- package/esm2022/expanded-state/expandable.directive.mjs +0 -39
- package/esm2022/gantt.component.mjs +0 -2415
- package/esm2022/gantt.module.mjs +0 -132
- package/esm2022/index.mjs +0 -42
- package/esm2022/localization/custom-messages.component.mjs +0 -52
- package/esm2022/localization/gantt-localization.service.mjs +0 -27
- package/esm2022/localization/localized-messages.directive.mjs +0 -39
- package/esm2022/localization/messages.mjs +0 -453
- package/esm2022/models/cell-content-type.interface.mjs +0 -5
- package/esm2022/models/class-callbacks.mjs +0 -5
- package/esm2022/models/column-menu-settings.interface.mjs +0 -5
- package/esm2022/models/column-reorder-config.mjs +0 -5
- package/esm2022/models/current-time-settings.interface.mjs +0 -5
- package/esm2022/models/date-range.interface.mjs +0 -5
- package/esm2022/models/dependency-type.enum.mjs +0 -32
- package/esm2022/models/events/cell-click-event.interface.mjs +0 -5
- package/esm2022/models/events/cell-close-event.interface.mjs +0 -44
- package/esm2022/models/events/click-event.interface.mjs +0 -5
- package/esm2022/models/events/column-locked-change-event.interface.mjs +0 -5
- package/esm2022/models/events/column-reorder-event.interface.mjs +0 -5
- package/esm2022/models/events/column-resize-event.interface.mjs +0 -5
- package/esm2022/models/events/column-visibility-change-event.interface.mjs +0 -5
- package/esm2022/models/events/data-state-change-event.interface.mjs +0 -5
- package/esm2022/models/events/dependency-add-event.interface.mjs +0 -5
- package/esm2022/models/events/index.mjs +0 -5
- package/esm2022/models/events/selected-view-change-event.interface.mjs +0 -5
- package/esm2022/models/events/task-add-event.interface.mjs +0 -5
- package/esm2022/models/events/task-click-event.interface.mjs +0 -5
- package/esm2022/models/events/task-delete-event.interface.mjs +0 -5
- package/esm2022/models/events/task-drag-event.interface.mjs +0 -5
- package/esm2022/models/events/task-edit-event.interface.mjs +0 -5
- package/esm2022/models/filterable-settings.mjs +0 -5
- package/esm2022/models/gantt-dependency-model-fields.interface.mjs +0 -13
- package/esm2022/models/gantt-dependency.interface.mjs +0 -5
- package/esm2022/models/gantt-task-model-fields.interface.mjs +0 -15
- package/esm2022/models/gantt-task.interface.mjs +0 -5
- package/esm2022/models/models.mjs +0 -8
- package/esm2022/models/slot.interface.mjs +0 -5
- package/esm2022/models/sort-settings.mjs +0 -17
- package/esm2022/models/splitter-pane-options.interface.mjs +0 -20
- package/esm2022/models/timeline-header-date-format.mjs +0 -5
- package/esm2022/models/timeline-options.interface.mjs +0 -5
- package/esm2022/models/timeline-view.mjs +0 -5
- package/esm2022/models/toolbar-settings.mjs +0 -5
- package/esm2022/models/tooltip-options.interface.mjs +0 -5
- package/esm2022/models/view-item.interface.mjs +0 -5
- package/esm2022/navigation/navigation-models.mjs +0 -5
- package/esm2022/navigation/navigation.service.mjs +0 -271
- package/esm2022/navigation/utils.mjs +0 -61
- package/esm2022/package-metadata.mjs +0 -16
- package/esm2022/progress-kendo-angular-gantt.mjs +0 -8
- package/esm2022/rendering/gantt-header-table-body.component.mjs +0 -61
- package/esm2022/rendering/gantt-milestone-task.component.mjs +0 -102
- package/esm2022/rendering/gantt-summary-task.component.mjs +0 -157
- package/esm2022/rendering/gantt-task-base.mjs +0 -230
- package/esm2022/rendering/gantt-task.component.mjs +0 -227
- package/esm2022/rendering/gantt-tasks-table-body.component.mjs +0 -206
- package/esm2022/scrolling/drag-scroll-settings.mjs +0 -20
- package/esm2022/scrolling/scroll-sync.service.mjs +0 -83
- package/esm2022/scrolling/timeline-scroll.directive.mjs +0 -83
- package/esm2022/scrolling/timeline-scroll.service.mjs +0 -37
- package/esm2022/scrolling/utils.mjs +0 -77
- package/esm2022/selection/selectable.directive.mjs +0 -126
- package/esm2022/selection/selection-change-event.mjs +0 -5
- package/esm2022/template-directives/summary-task-template.directive.mjs +0 -43
- package/esm2022/template-directives/task-content-template.directive.mjs +0 -46
- package/esm2022/template-directives/task-drag-tooltip-template.directive.mjs +0 -47
- package/esm2022/template-directives/task-template.directive.mjs +0 -41
- package/esm2022/template-directives/task-tooltip-template.directive.mjs +0 -48
- package/esm2022/timeline/current-time-marker.service.mjs +0 -90
- package/esm2022/timeline/gantt-timeline.component.mjs +0 -624
- package/esm2022/timeline/timeline-base-view.service.mjs +0 -201
- package/esm2022/timeline/timeline-day-view.component.mjs +0 -49
- package/esm2022/timeline/timeline-day-view.service.mjs +0 -68
- package/esm2022/timeline/timeline-month-view.component.mjs +0 -49
- package/esm2022/timeline/timeline-month-view.service.mjs +0 -66
- package/esm2022/timeline/timeline-view.service.mjs +0 -38
- package/esm2022/timeline/timeline-week-view.component.mjs +0 -49
- package/esm2022/timeline/timeline-week-view.service.mjs +0 -62
- package/esm2022/timeline/timeline-year-view.component.mjs +0 -49
- package/esm2022/timeline/timeline-year-view.service.mjs +0 -57
- package/esm2022/timeline/view-base.mjs +0 -73
- package/esm2022/toolbar/toolbar-navigation.service.mjs +0 -29
- package/esm2022/toolbar/toolbar-template.directive.mjs +0 -56
- package/esm2022/toolbar/toolbar.component.mjs +0 -181
- package/esm2022/toolbar/view-selector.component.mjs +0 -112
- package/esm2022/utils.mjs +0 -311
|
@@ -1,2415 +0,0 @@
|
|
|
1
|
-
/**-----------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright © 2026 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, forwardRef, HostBinding, Input, Output, EventEmitter, ViewChild, ContentChildren, ContentChild, QueryList, isDevMode, Renderer2, ElementRef, NgZone, Inject, LOCALE_ID } from '@angular/core';
|
|
6
|
-
import { TreeListComponent, DataBoundTreeComponent, ExpandableTreeComponent, TreeListSpacerComponent, CustomMessagesComponent } from '@progress/kendo-angular-treelist';
|
|
7
|
-
import { Day } from '@progress/kendo-date-math';
|
|
8
|
-
import { Subscription } from 'rxjs';
|
|
9
|
-
import { validatePackage } from '@progress/kendo-licensing';
|
|
10
|
-
import { packageMetadata } from './package-metadata';
|
|
11
|
-
import { anyChanged, EventsOutsideAngularDirective, hasObservers, Keys, shouldShowValidationUI, getLicenseMessage, WatermarkOverlayComponent, normalizeKeys } from '@progress/kendo-angular-common';
|
|
12
|
-
import { getIndexFromViewDigitKeyCode, isArrowUpDownKey, isExpandCollapseKey, isNavigationKey, isViewDigitKey } from './navigation/utils';
|
|
13
|
-
import { GanttTimelineComponent } from './timeline/gantt-timeline.component';
|
|
14
|
-
import { GanttColumnBase } from './columns/columns';
|
|
15
|
-
import { fetchChildren, hasChildren, isSelected, rowClassCallback, taskClassCallback } from './common/default-callbacks';
|
|
16
|
-
import { DependencyType } from './models/models';
|
|
17
|
-
import { L10N_PREFIX, LocalizationService } from '@progress/kendo-angular-l10n';
|
|
18
|
-
import { TimelineViewService } from './timeline/timeline-view.service';
|
|
19
|
-
import { TimelineDayViewService } from './timeline/timeline-day-view.service';
|
|
20
|
-
import { TimelineWeekViewService } from './timeline/timeline-week-view.service';
|
|
21
|
-
import { TimelineMonthViewService } from './timeline/timeline-month-view.service';
|
|
22
|
-
import { ScrollSyncService } from './scrolling/scroll-sync.service';
|
|
23
|
-
import { DependencyDomService } from './dependencies/dependency-dom.service';
|
|
24
|
-
import { MappingService } from './common/mapping.service';
|
|
25
|
-
import { OptionChangesService } from './common/option-changes.service';
|
|
26
|
-
import { EditService } from './editing/edit.service';
|
|
27
|
-
import { TimelineScrollService } from './scrolling/timeline-scroll.service';
|
|
28
|
-
import { GanttLocalizationService } from './localization/gantt-localization.service';
|
|
29
|
-
import { NavigationService } from './navigation/navigation.service';
|
|
30
|
-
import { areParentChild, getClosestTaskIndex, isClearButton, isColumnGroup, isPresent, isTask, isToolbar, normalizeGanttData, scrollbarWidth } from './utils';
|
|
31
|
-
import { DEFAULT_TIMELINE_PANE_SETTINGS, DEFAULT_TREELIST_PANE_SETTINGS } from './models/splitter-pane-options.interface';
|
|
32
|
-
import { GanttTaskTemplateDirective } from './template-directives/task-template.directive';
|
|
33
|
-
import { GanttSummaryTaskTemplateDirective } from './template-directives/summary-task-template.directive';
|
|
34
|
-
import { GanttTaskContentTemplateDirective } from './template-directives/task-content-template.directive';
|
|
35
|
-
import { ToolbarTemplateDirective } from './toolbar/toolbar-template.directive';
|
|
36
|
-
import { ViewBase } from './timeline/view-base';
|
|
37
|
-
import { getEditItem } from './editing/utils';
|
|
38
|
-
import { CellCloseEvent } from './models/events/cell-close-event.interface';
|
|
39
|
-
import { TimeLineYearViewService } from './timeline/timeline-year-view.service';
|
|
40
|
-
import { CurrentTimeMarkerService } from './timeline/current-time-marker.service';
|
|
41
|
-
import { EditDialogComponent } from './editing/edit-dialog.component';
|
|
42
|
-
import { ToolbarComponent } from './toolbar/toolbar.component';
|
|
43
|
-
import { LocalizedMessagesDirective } from './localization/localized-messages.directive';
|
|
44
|
-
import { SplitterComponent, SplitterPaneComponent } from '@progress/kendo-angular-layout';
|
|
45
|
-
import { DialogActionsComponent, DialogComponent } from '@progress/kendo-angular-dialog';
|
|
46
|
-
import { ButtonComponent } from '@progress/kendo-angular-buttons';
|
|
47
|
-
import { GanttTaskTooltipTemplateDirective } from './template-directives/task-tooltip-template.directive';
|
|
48
|
-
import { IntlService } from '@progress/kendo-angular-intl';
|
|
49
|
-
import { GanttTaskDragTooltipTemplateDirective } from './template-directives/task-drag-tooltip-template.directive';
|
|
50
|
-
import * as i0 from "@angular/core";
|
|
51
|
-
import * as i1 from "./timeline/timeline-view.service";
|
|
52
|
-
import * as i2 from "./scrolling/scroll-sync.service";
|
|
53
|
-
import * as i3 from "./common/mapping.service";
|
|
54
|
-
import * as i4 from "./common/option-changes.service";
|
|
55
|
-
import * as i5 from "./dependencies/dependency-dom.service";
|
|
56
|
-
import * as i6 from "./editing/edit.service";
|
|
57
|
-
import * as i7 from "@progress/kendo-angular-l10n";
|
|
58
|
-
import * as i8 from "./navigation/navigation.service";
|
|
59
|
-
import * as i9 from "./timeline/current-time-marker.service";
|
|
60
|
-
import * as i10 from "@progress/kendo-angular-intl";
|
|
61
|
-
const TREELIST_GROUP_COLUMNS_CLASS = 'k-gantt-treelist-nested-columns';
|
|
62
|
-
const DEFAULT_VIEW = 'week';
|
|
63
|
-
const DEFAULT_DRAG_SCROLL_SETTINGS = {
|
|
64
|
-
enabled: true,
|
|
65
|
-
step: 3,
|
|
66
|
-
interval: 1,
|
|
67
|
-
threshold: 10
|
|
68
|
-
};
|
|
69
|
-
/**
|
|
70
|
-
* Represents the [Kendo UI Gantt component for Angular](slug:overview_gantt).
|
|
71
|
-
*
|
|
72
|
-
* Use the Gantt component to display and manage project tasks and dependencies in a timeline view.
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```ts
|
|
76
|
-
* import { Component } from '@angular/core';
|
|
77
|
-
* import { GanttComponent, DependencyType } from '@progress/kendo-angular-gantt';
|
|
78
|
-
*
|
|
79
|
-
* @Component({
|
|
80
|
-
* selector: 'my-app',
|
|
81
|
-
* template: `
|
|
82
|
-
* <kendo-gantt
|
|
83
|
-
* [style.height.px]="500"
|
|
84
|
-
* [kendoGanttHierarchyBinding]="data"
|
|
85
|
-
* childrenField="subtasks"
|
|
86
|
-
* [dependencies]="dependencies">
|
|
87
|
-
* <kendo-gantt-column field="title" title="Task" [width]="200" [expandable]="true"></kendo-gantt-column>
|
|
88
|
-
* <kendo-gantt-column field="start" title="Start" format="dd-MMM-yyyy" [width]="120"></kendo-gantt-column>
|
|
89
|
-
* <kendo-gantt-column field="end" title="End" format="dd-MMM-yyyy" [width]="120"></kendo-gantt-column>
|
|
90
|
-
* <kendo-gantt-timeline-day-view></kendo-gantt-timeline-day-view>
|
|
91
|
-
* <kendo-gantt-timeline-week-view></kendo-gantt-timeline-week-view>
|
|
92
|
-
* <kendo-gantt-timeline-month-view></kendo-gantt-timeline-month-view>
|
|
93
|
-
* </kendo-gantt>
|
|
94
|
-
* `
|
|
95
|
-
* })
|
|
96
|
-
* export class AppComponent {
|
|
97
|
-
* public data: Task[] = [
|
|
98
|
-
* {
|
|
99
|
-
* id: 1,
|
|
100
|
-
* title: 'Planning',
|
|
101
|
-
* start: new Date('2024-01-01'),
|
|
102
|
-
* end: new Date('2024-01-05'),
|
|
103
|
-
* subtasks: []
|
|
104
|
-
* }
|
|
105
|
-
* ];
|
|
106
|
-
* public dependencies = [
|
|
107
|
-
* { id: 1, fromId: 1, toId: 2, type: DependencyType.FS }
|
|
108
|
-
* ];
|
|
109
|
-
* }
|
|
110
|
-
* ```
|
|
111
|
-
*
|
|
112
|
-
* @remarks
|
|
113
|
-
* Supported children components are:
|
|
114
|
-
* {@link GanttColumnComponent},
|
|
115
|
-
* {@link GanttSpanColumnComponent},
|
|
116
|
-
* {@link GanttColumnGroupComponent},
|
|
117
|
-
* {@link TimelineDayViewComponent},
|
|
118
|
-
* {@link TimelineWeekViewComponent},
|
|
119
|
-
* {@link TimelineMonthViewComponent},
|
|
120
|
-
* {@link TimelineYearViewComponent},
|
|
121
|
-
* {@link CustomMessagesComponent}.
|
|
122
|
-
*/
|
|
123
|
-
export class GanttComponent {
|
|
124
|
-
timelineViewService;
|
|
125
|
-
scrollSyncService;
|
|
126
|
-
renderer;
|
|
127
|
-
mapper;
|
|
128
|
-
optionChangesService;
|
|
129
|
-
dependencyDomService;
|
|
130
|
-
editService;
|
|
131
|
-
localizationService;
|
|
132
|
-
hostElement;
|
|
133
|
-
zone;
|
|
134
|
-
navigation;
|
|
135
|
-
currentTimeMarkerService;
|
|
136
|
-
intlService;
|
|
137
|
-
localeId;
|
|
138
|
-
treeList;
|
|
139
|
-
timeline;
|
|
140
|
-
/**
|
|
141
|
-
* @hidden
|
|
142
|
-
*
|
|
143
|
-
* Queries the template for a task content template declaration.
|
|
144
|
-
* In newer Angular versions the ngIf-ed value gets evaluated after the static query is resolved.
|
|
145
|
-
* Therefore the `static` property needs to be set to `false`.
|
|
146
|
-
*/
|
|
147
|
-
taskContentTemplate;
|
|
148
|
-
/**
|
|
149
|
-
* @hidden
|
|
150
|
-
*
|
|
151
|
-
* Queries the template for a task template declaration.
|
|
152
|
-
* In newer Angular versions the ngIf-ed value gets evaluated after the static query is resolved.
|
|
153
|
-
* Therefore the `static` property needs to be set to `false`.
|
|
154
|
-
*/
|
|
155
|
-
taskTemplate;
|
|
156
|
-
/**
|
|
157
|
-
* @hidden
|
|
158
|
-
*
|
|
159
|
-
* Queries the template for a task tooltip template declaration.
|
|
160
|
-
* In newer Angular versions the ngIf-ed value gets evaluated after the static query is resolved.
|
|
161
|
-
* Therefore the `static` property needs to be set to `false`.
|
|
162
|
-
*/
|
|
163
|
-
taskTooltipTemplate;
|
|
164
|
-
/**
|
|
165
|
-
* @hidden
|
|
166
|
-
*
|
|
167
|
-
* Queries the template for a task drag tooltip template declaration.
|
|
168
|
-
* In newer Angular versions the ngIf-ed value gets evaluated after the static query is resolved.
|
|
169
|
-
* Therefore the `static` property needs to be set to `false`.
|
|
170
|
-
*/
|
|
171
|
-
taskDragTooltipTemplate;
|
|
172
|
-
/**
|
|
173
|
-
* @hidden
|
|
174
|
-
*
|
|
175
|
-
* Queries the template for a task summary template declaration.
|
|
176
|
-
* In newer Angular versions the ngIf-ed value gets evaluated after the static query is resolved.
|
|
177
|
-
* Therefore the `static` property needs to be set to `false`.
|
|
178
|
-
*/
|
|
179
|
-
summaryTaskTemplate;
|
|
180
|
-
toolbarTemplateChildren;
|
|
181
|
-
get toolbarTemplate() {
|
|
182
|
-
if (this._customToolbarTemplate) {
|
|
183
|
-
return this._customToolbarTemplate;
|
|
184
|
-
}
|
|
185
|
-
return this.toolbarTemplateChildren ? this.toolbarTemplateChildren.first : undefined;
|
|
186
|
-
}
|
|
187
|
-
set toolbarTemplate(customToolbarTemplate) {
|
|
188
|
-
this._customToolbarTemplate = customToolbarTemplate;
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* @hidden
|
|
192
|
-
*/
|
|
193
|
-
roleDescription = 'Gantt Chart';
|
|
194
|
-
get hostRoleDescriptionAttr() {
|
|
195
|
-
return this.roleDescription;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* @hidden
|
|
199
|
-
*/
|
|
200
|
-
role = 'application';
|
|
201
|
-
get hostRoleAttr() {
|
|
202
|
-
return this.role;
|
|
203
|
-
}
|
|
204
|
-
hostClasses = true;
|
|
205
|
-
get dir() {
|
|
206
|
-
return this.direction;
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* A query list of all declared columns.
|
|
210
|
-
*/
|
|
211
|
-
set columns(columns) {
|
|
212
|
-
this._columns = columns;
|
|
213
|
-
this.updateTreeListGroupClass(columns);
|
|
214
|
-
}
|
|
215
|
-
get columns() {
|
|
216
|
-
return this._columns;
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Sets the fields used to extract task data from the `data` array items.
|
|
220
|
-
* The `id` field is also used as a unique identifier for TreeList data items.
|
|
221
|
-
* If not set, task data items must match the [`GanttTask`](slug:api_gantt_gantttask) interface.
|
|
222
|
-
*/
|
|
223
|
-
set taskModelFields(fields) {
|
|
224
|
-
this.mapper.taskFields = fields;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Sets the fields used to extract dependency data from the `dependencies` array items.
|
|
228
|
-
* If not set, dependency data items must match the [`GanttDependency`](slug:api_gantt_ganttdependency) interface.
|
|
229
|
-
*/
|
|
230
|
-
set dependencyModelFields(fields) {
|
|
231
|
-
this.mapper.dependencyFields = fields;
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* A query list of all declared views.
|
|
235
|
-
*/
|
|
236
|
-
views;
|
|
237
|
-
/**
|
|
238
|
-
* Sets the active timeline view.
|
|
239
|
-
* @default 'week'
|
|
240
|
-
*/
|
|
241
|
-
set activeView(view) {
|
|
242
|
-
this._activeView = view;
|
|
243
|
-
}
|
|
244
|
-
get activeView() {
|
|
245
|
-
/**
|
|
246
|
-
* If the default/provided activeView is not among the provided views,
|
|
247
|
-
* fallback to setting the first provided view as active
|
|
248
|
-
*/
|
|
249
|
-
const view = this.views.find(view => view.type === this._activeView) ?
|
|
250
|
-
this._activeView :
|
|
251
|
-
this.views.first.type;
|
|
252
|
-
this.currentTimeMarkerService.activeView = view;
|
|
253
|
-
return view;
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* @hidden
|
|
257
|
-
*
|
|
258
|
-
*/
|
|
259
|
-
get activeViewCurrentTimeMarker() {
|
|
260
|
-
const activeViewCurrentTimeMarker = this.views.find(view => view.type === this._activeView)?.currentTimeMarker;
|
|
261
|
-
if (activeViewCurrentTimeMarker === false) {
|
|
262
|
-
return false;
|
|
263
|
-
}
|
|
264
|
-
return activeViewCurrentTimeMarker || this.currentTimeMarker;
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Gets or sets the Gantt data.
|
|
268
|
-
* The task data items must match the [`GanttTask`]({% slug api_gantt_gantttask %}) interface or use [`taskModelFields`]({% slug api_gantt_ganttcomponent %}#toc-taskmodelfields).
|
|
269
|
-
*/
|
|
270
|
-
set data(data) {
|
|
271
|
-
this._data = normalizeGanttData(data);
|
|
272
|
-
this.loadTimelineData();
|
|
273
|
-
}
|
|
274
|
-
get data() {
|
|
275
|
-
return this._data;
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Specifies a callback to determine if a task is selected ([see example]({% slug selection_gantt %}#toc-custom-selection)).
|
|
279
|
-
* Set [`selectable`]({% slug api_gantt_ganttcomponent %}#toc-selectable) to `true` to use this callback.
|
|
280
|
-
*/
|
|
281
|
-
isSelected = isSelected;
|
|
282
|
-
/**
|
|
283
|
-
* Specifies a callback to validate new dependencies.
|
|
284
|
-
* Use this callback to control the valid dependencies that users can create ([see example]({% slug editing_drag_create_dependencies_gantt %}#toc-validation)).
|
|
285
|
-
*/
|
|
286
|
-
validateNewDependency = this.defaultValidateNewDependencyCallback.bind(this);
|
|
287
|
-
/**
|
|
288
|
-
* Fires when the Gantt selection changes through user interaction.
|
|
289
|
-
* The event data contains the affected items and the action type.
|
|
290
|
-
*/
|
|
291
|
-
selectionChange = new EventEmitter();
|
|
292
|
-
/**
|
|
293
|
-
* Enables or disables selection in the Gantt ([see example]({% slug selection_gantt %}#toc-custom-selection)).
|
|
294
|
-
* Set to `true` to allow selection.
|
|
295
|
-
* > When set to `true`, the [`isSelected`]({% slug api_gantt_ganttcomponent %}#toc-isselected) callback has to be provided.
|
|
296
|
-
* > When applied, the [`SelectableDirective`]({% slug api_gantt_selectabledirective %}) sets `selectable` to `true` internally.
|
|
297
|
-
* @default false
|
|
298
|
-
*/
|
|
299
|
-
selectable = false;
|
|
300
|
-
/**
|
|
301
|
-
* Configures the toolbar position and content.
|
|
302
|
-
* Set `position`, `addTaskTool`, and `viewSelectorTool` as needed.
|
|
303
|
-
*/
|
|
304
|
-
set toolbarSettings(value) {
|
|
305
|
-
this._toolbarSettings = {
|
|
306
|
-
position: value.position || 'top',
|
|
307
|
-
addTaskTool: value.addTaskTool || 'none',
|
|
308
|
-
viewSelectorTool: value.viewSelectorTool || 'top'
|
|
309
|
-
};
|
|
310
|
-
}
|
|
311
|
-
get toolbarSettings() {
|
|
312
|
-
return this._toolbarSettings;
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Sets the `aria-label` attribute value for the toolbar.
|
|
316
|
-
* Use this to improve accessibility.
|
|
317
|
-
* @default "Toolbar"
|
|
318
|
-
*/
|
|
319
|
-
toolbarAriaLabel = 'Toolbar';
|
|
320
|
-
/**
|
|
321
|
-
* Sets the callback function to retrieve child items for a data item.
|
|
322
|
-
*/
|
|
323
|
-
set fetchChildren(fn) {
|
|
324
|
-
this._fetchChildren = fn;
|
|
325
|
-
this.editService.fetchChildren = fn;
|
|
326
|
-
}
|
|
327
|
-
get fetchChildren() {
|
|
328
|
-
return this._fetchChildren;
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Sets the callback function to indicate if a data item has child items.
|
|
332
|
-
*/
|
|
333
|
-
set hasChildren(fn) {
|
|
334
|
-
this._hasChildren = fn;
|
|
335
|
-
this.editService.hasChildren = fn;
|
|
336
|
-
}
|
|
337
|
-
get hasChildren() {
|
|
338
|
-
return this._hasChildren;
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Sets the dependencies to display between tasks.
|
|
342
|
-
* Dependency data items must match the [`GanttDependency`]({% slug api_gantt_ganttdependency %}) interface or use [`dependencyModelFields`]({% slug api_gantt_ganttcomponent %}#toc-dependencymodelfields).
|
|
343
|
-
*/
|
|
344
|
-
dependencies = [];
|
|
345
|
-
/**
|
|
346
|
-
* Enables sorting for columns with a `field` option.
|
|
347
|
-
*/
|
|
348
|
-
sortable = false;
|
|
349
|
-
/**
|
|
350
|
-
* Sets the descriptors for sorting the data.
|
|
351
|
-
*/
|
|
352
|
-
sort = [];
|
|
353
|
-
/**
|
|
354
|
-
* Enables filtering for columns with a `field` option.
|
|
355
|
-
* @default false
|
|
356
|
-
*/
|
|
357
|
-
filterable = false;
|
|
358
|
-
/**
|
|
359
|
-
* Sets the descriptor for filtering the data.
|
|
360
|
-
*/
|
|
361
|
-
filter;
|
|
362
|
-
/**
|
|
363
|
-
* Sets the start time of the work day in `HH:mm` format.
|
|
364
|
-
* @default "08:00"
|
|
365
|
-
*/
|
|
366
|
-
workDayStart = '08:00';
|
|
367
|
-
/**
|
|
368
|
-
* Sets the end time of the work day in `HH:mm` format.
|
|
369
|
-
* @default "17:00"
|
|
370
|
-
*/
|
|
371
|
-
workDayEnd = '17:00';
|
|
372
|
-
/**
|
|
373
|
-
* Sets the start day of the work week (index based).
|
|
374
|
-
* @default 1
|
|
375
|
-
*/
|
|
376
|
-
workWeekStart = 1;
|
|
377
|
-
/**
|
|
378
|
-
* Sets the end day of the work week (index based).
|
|
379
|
-
* @default 5
|
|
380
|
-
*/
|
|
381
|
-
workWeekEnd = 5;
|
|
382
|
-
/**
|
|
383
|
-
* Enables keyboard navigation for the Gantt.
|
|
384
|
-
* By default, navigation is enabled for the TreeList and Timeline parts of the component ([see example]({% slug keyboard_navigation_gantt %})).
|
|
385
|
-
* @default true
|
|
386
|
-
*/
|
|
387
|
-
navigable = true;
|
|
388
|
-
/**
|
|
389
|
-
* Sets the options for the timeline splitter pane.
|
|
390
|
-
* By default, the pane is collapsible, resizable, not collapsed, and its size is `'50%'`.
|
|
391
|
-
*/
|
|
392
|
-
set timelinePaneOptions(value) {
|
|
393
|
-
if (this._timelinePaneOptions.collapsed && !value.collapsed) {
|
|
394
|
-
this.dependencyDomService.notifyChanges();
|
|
395
|
-
}
|
|
396
|
-
this._timelinePaneOptions = { ...DEFAULT_TIMELINE_PANE_SETTINGS, ...value };
|
|
397
|
-
}
|
|
398
|
-
get timelinePaneOptions() {
|
|
399
|
-
return { ...this._timelinePaneOptions, size: this.treeListPaneOptions.collapsed ? '100%' : this._timelinePaneOptions.size };
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Sets the options for the treelist splitter pane.
|
|
403
|
-
* By default the pane is collapsible and not collapsed.
|
|
404
|
-
*/
|
|
405
|
-
set treeListPaneOptions(value) {
|
|
406
|
-
this._treeListPaneOptions = { ...DEFAULT_TREELIST_PANE_SETTINGS, ...value };
|
|
407
|
-
}
|
|
408
|
-
get treeListPaneOptions() {
|
|
409
|
-
return this._treeListPaneOptions;
|
|
410
|
-
}
|
|
411
|
-
/**
|
|
412
|
-
* Sets a function to apply custom CSS classes to each task.
|
|
413
|
-
* The function receives the task data item.
|
|
414
|
-
*/
|
|
415
|
-
set taskClass(fn) {
|
|
416
|
-
if (isDevMode() && typeof fn !== 'function') {
|
|
417
|
-
throw new Error(`taskClass must be a function, but received ${JSON.stringify(fn)}.`);
|
|
418
|
-
}
|
|
419
|
-
this._taskClass = fn;
|
|
420
|
-
}
|
|
421
|
-
get taskClass() {
|
|
422
|
-
return this._taskClass;
|
|
423
|
-
}
|
|
424
|
-
/**
|
|
425
|
-
* Sets a function to apply custom CSS classes to each data row.
|
|
426
|
-
* The function receives the row data item.
|
|
427
|
-
*/
|
|
428
|
-
set rowClass(fn) {
|
|
429
|
-
if (isDevMode() && typeof fn !== 'function') {
|
|
430
|
-
throw new Error(`rowClass must be a function, but received ${JSON.stringify(fn)}.`);
|
|
431
|
-
}
|
|
432
|
-
this._rowClass = fn;
|
|
433
|
-
}
|
|
434
|
-
get rowClass() {
|
|
435
|
-
return this._rowClass;
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Gets the name of the field that contains the unique identifier for task data items.
|
|
439
|
-
* @default "id"
|
|
440
|
-
*/
|
|
441
|
-
get taskIdField() {
|
|
442
|
-
return this.mapper.taskFields.id;
|
|
443
|
-
}
|
|
444
|
-
/**
|
|
445
|
-
* Sets a callback function to indicate if a data item is expanded.
|
|
446
|
-
* If not set, all items are expanded and no expand icons are shown.
|
|
447
|
-
*/
|
|
448
|
-
isExpanded;
|
|
449
|
-
/**
|
|
450
|
-
* Enables automatic resizing of columns to fit their content.
|
|
451
|
-
* @default false
|
|
452
|
-
*/
|
|
453
|
-
columnsAutoSize = false;
|
|
454
|
-
/**
|
|
455
|
-
* Sets the current time marker settings for the Gantt.
|
|
456
|
-
* Applies to all views unless overridden by the settings of a particular view.
|
|
457
|
-
* @default true
|
|
458
|
-
*/
|
|
459
|
-
currentTimeMarker = true;
|
|
460
|
-
/**
|
|
461
|
-
* Enables the column menu for all columns.
|
|
462
|
-
* @default false
|
|
463
|
-
*/
|
|
464
|
-
columnMenu = false;
|
|
465
|
-
/**
|
|
466
|
-
* Enables reordering of the columns by dragging their header cells.
|
|
467
|
-
* @default false
|
|
468
|
-
*/
|
|
469
|
-
columnsReorderable = false;
|
|
470
|
-
/**
|
|
471
|
-
* Enables resizing of the columns by dragging the header cell edges (resize handles).
|
|
472
|
-
* @default false
|
|
473
|
-
*/
|
|
474
|
-
columnsResizable = false;
|
|
475
|
-
/**
|
|
476
|
-
* Defines the settings for auto-scrolling during dragging when the pointer moves outside the container ([see example](slug:editing_drag_create_dependencies_gantt#auto-scrolling)).
|
|
477
|
-
*/
|
|
478
|
-
set dragScrollSettings(settings) {
|
|
479
|
-
this._dragScrollSettings = { ...DEFAULT_DRAG_SCROLL_SETTINGS, ...settings };
|
|
480
|
-
}
|
|
481
|
-
get dragScrollSettings() {
|
|
482
|
-
return this._dragScrollSettings;
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* Sets the options for the task tooltip, such as `position`, `callout`, and `showAfter`.
|
|
486
|
-
* @default { position: 'top', callout: true, showAfter: 100 }
|
|
487
|
-
*/
|
|
488
|
-
taskTooltipOptions = {
|
|
489
|
-
position: 'top',
|
|
490
|
-
callout: true,
|
|
491
|
-
showAfter: 100
|
|
492
|
-
};
|
|
493
|
-
/**
|
|
494
|
-
* Fires when a row is expanded.
|
|
495
|
-
*/
|
|
496
|
-
rowExpand = new EventEmitter();
|
|
497
|
-
/**
|
|
498
|
-
* Fires when a Gantt task in the timeline pane is double-clicked.
|
|
499
|
-
* The event data contains the clicked task. Use this event to open a task editing dialog if needed.
|
|
500
|
-
*/
|
|
501
|
-
taskDblClick = new EventEmitter();
|
|
502
|
-
/**
|
|
503
|
-
* Fires when a cell is double-clicked.
|
|
504
|
-
*/
|
|
505
|
-
cellDblClick = new EventEmitter();
|
|
506
|
-
/**
|
|
507
|
-
* Fires when an edited cell is closed.
|
|
508
|
-
*/
|
|
509
|
-
cellClose = new EventEmitter();
|
|
510
|
-
/**
|
|
511
|
-
* Fires when the user clicks the `Delete` button in the task editing dialog,
|
|
512
|
-
* the task delete icon, or presses the `Delete` key on a focused task.
|
|
513
|
-
* Use this event to open a confirmation dialog if needed.
|
|
514
|
-
*/
|
|
515
|
-
taskDelete = new EventEmitter();
|
|
516
|
-
/**
|
|
517
|
-
* Fires when a row is collapsed.
|
|
518
|
-
*/
|
|
519
|
-
rowCollapse = new EventEmitter();
|
|
520
|
-
/**
|
|
521
|
-
* Fires when the user confirms deleting a task.
|
|
522
|
-
*/
|
|
523
|
-
remove = new EventEmitter();
|
|
524
|
-
/**
|
|
525
|
-
* Fires when the user cancels editing a task.
|
|
526
|
-
*/
|
|
527
|
-
cancel = new EventEmitter();
|
|
528
|
-
/**
|
|
529
|
-
* Fires when the user saves an edited task.
|
|
530
|
-
*/
|
|
531
|
-
save = new EventEmitter();
|
|
532
|
-
/**
|
|
533
|
-
* Fires when the user adds a task.
|
|
534
|
-
*/
|
|
535
|
-
taskAdd = new EventEmitter();
|
|
536
|
-
/**
|
|
537
|
-
* Fires when the user adds a dependency by dragging [see example]({% slug editing_drag_create_dependencies_gantt %}#toc-basic-concepts).
|
|
538
|
-
*/
|
|
539
|
-
dependencyAdd = new EventEmitter();
|
|
540
|
-
/**
|
|
541
|
-
* Fires when there are changes in the Gantt sorting.
|
|
542
|
-
* Handle this event to sort the data.
|
|
543
|
-
*/
|
|
544
|
-
sortChange = new EventEmitter();
|
|
545
|
-
/**
|
|
546
|
-
* Fires when there are changes in the Gantt filtering.
|
|
547
|
-
* Handle this event to filter the data.
|
|
548
|
-
*/
|
|
549
|
-
filterChange = new EventEmitter();
|
|
550
|
-
/**
|
|
551
|
-
* Fires when the filter or sort state changes.
|
|
552
|
-
*/
|
|
553
|
-
dataStateChange = new EventEmitter();
|
|
554
|
-
/**
|
|
555
|
-
* Fires when the collapsed state of the treelist pane changes.
|
|
556
|
-
*/
|
|
557
|
-
treeListPaneCollapsedChange = new EventEmitter();
|
|
558
|
-
/**
|
|
559
|
-
* Fires when the collapsed state of the timeline pane changes.
|
|
560
|
-
*/
|
|
561
|
-
timelinePaneCollapsedChange = new EventEmitter();
|
|
562
|
-
/**
|
|
563
|
-
* Fires when the user resizes the timeline pane.
|
|
564
|
-
*/
|
|
565
|
-
timelinePaneSizeChange = new EventEmitter();
|
|
566
|
-
/**
|
|
567
|
-
* Fires when the user selects a different view type.
|
|
568
|
-
* The event data contains the type of the new view.
|
|
569
|
-
*/
|
|
570
|
-
activeViewChange = new EventEmitter();
|
|
571
|
-
/**
|
|
572
|
-
* Fires when the user completes resizing a column.
|
|
573
|
-
*/
|
|
574
|
-
columnResize = new EventEmitter();
|
|
575
|
-
/**
|
|
576
|
-
* Fires when the user completes reordering a column.
|
|
577
|
-
*/
|
|
578
|
-
columnReorder = new EventEmitter();
|
|
579
|
-
/**
|
|
580
|
-
* Fires when the user changes column visibility from the column menu or chooser.
|
|
581
|
-
*/
|
|
582
|
-
columnVisibilityChange = new EventEmitter();
|
|
583
|
-
/**
|
|
584
|
-
* @hidden
|
|
585
|
-
*
|
|
586
|
-
* Fires when the user changes the locked state of the columns from the column menu or by reordering the columns.
|
|
587
|
-
*/
|
|
588
|
-
columnLockedChange = new EventEmitter();
|
|
589
|
-
/**
|
|
590
|
-
* Fires when a cell is clicked.
|
|
591
|
-
*/
|
|
592
|
-
cellClick = new EventEmitter();
|
|
593
|
-
/**
|
|
594
|
-
* Fires when a task is clicked.
|
|
595
|
-
*/
|
|
596
|
-
taskClick = new EventEmitter();
|
|
597
|
-
/**
|
|
598
|
-
* @hidden
|
|
599
|
-
*/
|
|
600
|
-
get renderedTreeListItems() {
|
|
601
|
-
if (!isPresent(this.treeList)) {
|
|
602
|
-
return [];
|
|
603
|
-
}
|
|
604
|
-
return this.treeList.view.data.map(item => item.data);
|
|
605
|
-
}
|
|
606
|
-
/**
|
|
607
|
-
* @hidden
|
|
608
|
-
*/
|
|
609
|
-
get viewItems() {
|
|
610
|
-
if (!isPresent(this.treeList)) {
|
|
611
|
-
return [];
|
|
612
|
-
}
|
|
613
|
-
return this.treeList.view.data;
|
|
614
|
-
}
|
|
615
|
-
/**
|
|
616
|
-
* @hidden
|
|
617
|
-
*/
|
|
618
|
-
get filterMenu() {
|
|
619
|
-
return this.filterable ? 'menu' : false;
|
|
620
|
-
}
|
|
621
|
-
/**
|
|
622
|
-
* @hidden
|
|
623
|
-
*
|
|
624
|
-
* Specifies whether the dependency drag clues will be rendered.
|
|
625
|
-
* Set internally by the dependency-drag-create directive.
|
|
626
|
-
*
|
|
627
|
-
* @default false
|
|
628
|
-
*/
|
|
629
|
-
renderDependencyDragClues = false;
|
|
630
|
-
/**
|
|
631
|
-
* @hidden
|
|
632
|
-
*/
|
|
633
|
-
timelineSlots;
|
|
634
|
-
/**
|
|
635
|
-
* @hidden
|
|
636
|
-
*/
|
|
637
|
-
timelineGroupSlots;
|
|
638
|
-
/**
|
|
639
|
-
* @hidden
|
|
640
|
-
*/
|
|
641
|
-
tableWidth;
|
|
642
|
-
/**
|
|
643
|
-
* @hidden
|
|
644
|
-
*/
|
|
645
|
-
get viewService() {
|
|
646
|
-
if (!this.views || !this.views.length) {
|
|
647
|
-
return null;
|
|
648
|
-
}
|
|
649
|
-
// TODO: review if this is a performance concern?
|
|
650
|
-
return this.timelineViewService.service(this.activeView);
|
|
651
|
-
}
|
|
652
|
-
/**
|
|
653
|
-
* @hidden
|
|
654
|
-
*
|
|
655
|
-
* Retrieves the `isSelected` callback if `selectable` is set to `true`
|
|
656
|
-
* Otherwise returns the default callback, which always returns `false`.
|
|
657
|
-
*/
|
|
658
|
-
get isTaskSelected() {
|
|
659
|
-
return this.selectable ? this.isSelected : isSelected;
|
|
660
|
-
}
|
|
661
|
-
/**
|
|
662
|
-
* @hidden
|
|
663
|
-
*
|
|
664
|
-
* Used by the GanttExpandableDirective.
|
|
665
|
-
*/
|
|
666
|
-
get idGetter() {
|
|
667
|
-
if (isPresent(this.treeList)) {
|
|
668
|
-
return this.treeList.idGetter;
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
/**
|
|
672
|
-
* @hidden
|
|
673
|
-
*
|
|
674
|
-
* Used by the views selector.
|
|
675
|
-
*/
|
|
676
|
-
get viewTypes() {
|
|
677
|
-
return this.views.map(view => view.type);
|
|
678
|
-
}
|
|
679
|
-
/**
|
|
680
|
-
* @hidden
|
|
681
|
-
*
|
|
682
|
-
* Used by the GanttExpandableDirective.
|
|
683
|
-
*/
|
|
684
|
-
expandStateChange = new EventEmitter();
|
|
685
|
-
/**
|
|
686
|
-
* @hidden
|
|
687
|
-
*/
|
|
688
|
-
showEditingDialog = false;
|
|
689
|
-
/**
|
|
690
|
-
* @hidden
|
|
691
|
-
*/
|
|
692
|
-
showConfirmationDialog = false;
|
|
693
|
-
/**
|
|
694
|
-
* @hidden
|
|
695
|
-
*/
|
|
696
|
-
get isInEditMode() {
|
|
697
|
-
return this.showEditingDialog || this.showConfirmationDialog || this.treeList.isEditing();
|
|
698
|
-
}
|
|
699
|
-
/**
|
|
700
|
-
* @hidden
|
|
701
|
-
*/
|
|
702
|
-
showLicenseWatermark = false;
|
|
703
|
-
/**
|
|
704
|
-
* @hidden
|
|
705
|
-
*/
|
|
706
|
-
licenseMessage;
|
|
707
|
-
_columns = new QueryList();
|
|
708
|
-
_data = [];
|
|
709
|
-
_dragScrollSettings = { ...DEFAULT_DRAG_SCROLL_SETTINGS };
|
|
710
|
-
_timelinePaneOptions = { ...DEFAULT_TIMELINE_PANE_SETTINGS };
|
|
711
|
-
_treeListPaneOptions = { ...DEFAULT_TREELIST_PANE_SETTINGS };
|
|
712
|
-
_customToolbarTemplate;
|
|
713
|
-
_rowClass = rowClassCallback;
|
|
714
|
-
_taskClass = taskClassCallback;
|
|
715
|
-
_activeView = DEFAULT_VIEW;
|
|
716
|
-
_toolbarSettings = {
|
|
717
|
-
position: 'top',
|
|
718
|
-
addTaskTool: 'none',
|
|
719
|
-
viewSelectorTool: 'top'
|
|
720
|
-
};
|
|
721
|
-
_fetchChildren = fetchChildren;
|
|
722
|
-
_hasChildren = hasChildren;
|
|
723
|
-
lastTreeListCellClick;
|
|
724
|
-
direction;
|
|
725
|
-
rtl = false;
|
|
726
|
-
editItem;
|
|
727
|
-
optionChangesSubscriptions = new Subscription();
|
|
728
|
-
editServiceSubscription = new Subscription();
|
|
729
|
-
localizationSubscription;
|
|
730
|
-
intlSubscription;
|
|
731
|
-
keydownListenerDisposers;
|
|
732
|
-
constructor(timelineViewService, scrollSyncService, renderer, mapper, optionChangesService, dependencyDomService, editService, localizationService, hostElement, zone, navigation, currentTimeMarkerService, intlService, localeId) {
|
|
733
|
-
this.timelineViewService = timelineViewService;
|
|
734
|
-
this.scrollSyncService = scrollSyncService;
|
|
735
|
-
this.renderer = renderer;
|
|
736
|
-
this.mapper = mapper;
|
|
737
|
-
this.optionChangesService = optionChangesService;
|
|
738
|
-
this.dependencyDomService = dependencyDomService;
|
|
739
|
-
this.editService = editService;
|
|
740
|
-
this.localizationService = localizationService;
|
|
741
|
-
this.hostElement = hostElement;
|
|
742
|
-
this.zone = zone;
|
|
743
|
-
this.navigation = navigation;
|
|
744
|
-
this.currentTimeMarkerService = currentTimeMarkerService;
|
|
745
|
-
this.intlService = intlService;
|
|
746
|
-
this.localeId = localeId;
|
|
747
|
-
const isValid = validatePackage(packageMetadata);
|
|
748
|
-
this.licenseMessage = getLicenseMessage(packageMetadata);
|
|
749
|
-
this.showLicenseWatermark = shouldShowValidationUI(isValid);
|
|
750
|
-
intlService.localeId = this.localeId;
|
|
751
|
-
this.intlSubscription = this.intlService.changes.subscribe(() => {
|
|
752
|
-
this.loadTimelineData();
|
|
753
|
-
this.activeViewChange.emit(this.activeView);
|
|
754
|
-
});
|
|
755
|
-
this.optionChangesSubscriptions.add(this.optionChangesService.viewChanges.subscribe(() => {
|
|
756
|
-
this.loadTimelineData();
|
|
757
|
-
}));
|
|
758
|
-
this.optionChangesSubscriptions.add(this.optionChangesService.dateFormatChanges.subscribe(() => {
|
|
759
|
-
this.loadTimelineData();
|
|
760
|
-
}));
|
|
761
|
-
this.optionChangesSubscriptions.add(this.optionChangesService.columnChanges.subscribe(() => {
|
|
762
|
-
this.treeList.columns.notifyOnChanges();
|
|
763
|
-
}));
|
|
764
|
-
this.editService.getSelectedItem = this.getFirstSelectedItem.bind(this);
|
|
765
|
-
this.editServiceSubscription.add(this.editService.showEditingDialog.subscribe(show => this.showEditingDialog = show));
|
|
766
|
-
this.editServiceSubscription.add(this.editService.taskDelete.subscribe(task => {
|
|
767
|
-
if (hasObservers(this.taskDelete)) {
|
|
768
|
-
this.zone.run(() => this.notifyTaskDelete(task));
|
|
769
|
-
}
|
|
770
|
-
}));
|
|
771
|
-
this.editServiceSubscription.add(this.editService.editEvent.subscribe(args => {
|
|
772
|
-
this[args.editResultType].emit({
|
|
773
|
-
taskFormGroup: args.taskFormGroup,
|
|
774
|
-
item: getEditItem(args.dataItem, this.treeList.view.data, this.mapper),
|
|
775
|
-
dependencies: args.dependencies,
|
|
776
|
-
sender: this
|
|
777
|
-
});
|
|
778
|
-
this.showConfirmationDialog = this.showEditingDialog = false;
|
|
779
|
-
this.editService.dataItem = this.editService.taskFormGroup = null;
|
|
780
|
-
this.updateView();
|
|
781
|
-
if (this.navigable) {
|
|
782
|
-
this.focus();
|
|
783
|
-
}
|
|
784
|
-
}));
|
|
785
|
-
this.editServiceSubscription.add(this.editService.addEvent.subscribe(args => {
|
|
786
|
-
const selectedItem = this.getFirstSelectedItem();
|
|
787
|
-
this.taskAdd.emit({
|
|
788
|
-
actionType: args.actionType,
|
|
789
|
-
selectedItem: selectedItem ? getEditItem(selectedItem, this.treeList.view.data, this.mapper) : null
|
|
790
|
-
});
|
|
791
|
-
this.updateView();
|
|
792
|
-
}));
|
|
793
|
-
this.localizationSubscription = this.localizationService.changes.subscribe(({ rtl }) => {
|
|
794
|
-
this.rtl = rtl;
|
|
795
|
-
this.direction = this.rtl ? 'rtl' : 'ltr';
|
|
796
|
-
this.currentTimeMarkerService.rtl = rtl;
|
|
797
|
-
});
|
|
798
|
-
}
|
|
799
|
-
ngOnChanges(changes) {
|
|
800
|
-
if (anyChanged(['data', 'activeView', 'workWeekStart', 'workWeekEnd', 'workDayStart', 'workDayEnd'], changes)) {
|
|
801
|
-
this.loadTimelineData();
|
|
802
|
-
}
|
|
803
|
-
}
|
|
804
|
-
ngAfterViewInit() {
|
|
805
|
-
this.updateTreeListMargin();
|
|
806
|
-
this.zone.runOutsideAngular(() => {
|
|
807
|
-
this.keydownListenerDisposers = this.renderer.listen(this.hostElement.nativeElement, 'keydown', this.handleKeydown.bind(this));
|
|
808
|
-
});
|
|
809
|
-
if (this.navigable) {
|
|
810
|
-
this.navigation.initialize({
|
|
811
|
-
treeList: this.treeList,
|
|
812
|
-
host: this.hostElement.nativeElement,
|
|
813
|
-
treeListElement: this.treeList.wrapper.nativeElement,
|
|
814
|
-
timelineElement: this.timeline.timelineContent.nativeElement,
|
|
815
|
-
columns: this.columns,
|
|
816
|
-
data: this.data
|
|
817
|
-
});
|
|
818
|
-
}
|
|
819
|
-
const leftContainer = this.treeList.wrapper.nativeElement.querySelector('kendo-treelist-list > div');
|
|
820
|
-
this.scrollSyncService.registerElement(leftContainer, 'treelist');
|
|
821
|
-
}
|
|
822
|
-
ngAfterContentInit() {
|
|
823
|
-
if (isDevMode() && this.views.length === 0) {
|
|
824
|
-
throw new Error('No views declared for <kendo-gantt>. Please, declare at least one view.');
|
|
825
|
-
}
|
|
826
|
-
this.loadTimelineData();
|
|
827
|
-
this.updateTreeListGroupClass();
|
|
828
|
-
}
|
|
829
|
-
ngOnDestroy() {
|
|
830
|
-
this.optionChangesSubscriptions.unsubscribe();
|
|
831
|
-
this.editServiceSubscription.unsubscribe();
|
|
832
|
-
if (this.localizationSubscription) {
|
|
833
|
-
this.localizationSubscription.unsubscribe();
|
|
834
|
-
}
|
|
835
|
-
if (this.intlSubscription) {
|
|
836
|
-
this.intlSubscription.unsubscribe();
|
|
837
|
-
}
|
|
838
|
-
if (isPresent(this.keydownListenerDisposers)) {
|
|
839
|
-
this.keydownListenerDisposers();
|
|
840
|
-
this.keydownListenerDisposers = null;
|
|
841
|
-
}
|
|
842
|
-
}
|
|
843
|
-
/**
|
|
844
|
-
* Focuses the last active cell or task in the Gantt.
|
|
845
|
-
* If no item was previously focused, focuses the first TreeList cell ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
|
|
846
|
-
*/
|
|
847
|
-
focus() {
|
|
848
|
-
if (this.navigable) {
|
|
849
|
-
this.navigation.focusLastActiveItem();
|
|
850
|
-
}
|
|
851
|
-
}
|
|
852
|
-
/**
|
|
853
|
-
* Focuses the specified cell in the TreeList ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
|
|
854
|
-
* @param rowIndex The row index.
|
|
855
|
-
* @param colIndex The column index.
|
|
856
|
-
*/
|
|
857
|
-
focusCell(rowIndex, colIndex) {
|
|
858
|
-
if (this.navigable) {
|
|
859
|
-
this.navigation.focusCell(rowIndex, colIndex);
|
|
860
|
-
}
|
|
861
|
-
}
|
|
862
|
-
/**
|
|
863
|
-
* Focuses the specified task in the Timeline ([see example]({% slug keyboard_navigation_gantt %}#toc-controlling-the-focus)).
|
|
864
|
-
* @param taskIndex The index of the task.
|
|
865
|
-
*/
|
|
866
|
-
focusTask(taskIndex) {
|
|
867
|
-
if (this.navigable) {
|
|
868
|
-
this.navigation.focusTask(taskIndex);
|
|
869
|
-
}
|
|
870
|
-
}
|
|
871
|
-
/**
|
|
872
|
-
* Sets the minimum width for the specified column so that its content fits.
|
|
873
|
-
* The Gantt must be resizable.
|
|
874
|
-
* @param column The column to auto-fit.
|
|
875
|
-
*/
|
|
876
|
-
autoFitColumn(column) {
|
|
877
|
-
if (isPresent(this.treeList)) {
|
|
878
|
-
this.treeList.autoFitColumn(column);
|
|
879
|
-
}
|
|
880
|
-
}
|
|
881
|
-
/**
|
|
882
|
-
* Adjusts the width of the specified columns to fit their content.
|
|
883
|
-
* If no columns are specified, fits all columns.
|
|
884
|
-
* The Gantt must be resizable to use this method.
|
|
885
|
-
* @param columns The columns to auto-fit.
|
|
886
|
-
*/
|
|
887
|
-
autoFitColumns(columns = this.columns) {
|
|
888
|
-
if (isPresent(this.treeList)) {
|
|
889
|
-
this.treeList.autoFitColumns(columns);
|
|
890
|
-
}
|
|
891
|
-
}
|
|
892
|
-
/**
|
|
893
|
-
* Clears loaded children for the data item so the Gantt fetches them again.
|
|
894
|
-
* @param dataItem The data item to reload.
|
|
895
|
-
* @param reloadChildren Whether to reload children.
|
|
896
|
-
*/
|
|
897
|
-
reload(dataItem, reloadChildren) {
|
|
898
|
-
if (isPresent(this.treeList)) {
|
|
899
|
-
this.treeList.reload(dataItem, reloadChildren);
|
|
900
|
-
}
|
|
901
|
-
}
|
|
902
|
-
/**
|
|
903
|
-
* Changes the position of the specified column.
|
|
904
|
-
* The source column must be visible.
|
|
905
|
-
* @param source The column to move.
|
|
906
|
-
* @param destIndex The new position index.
|
|
907
|
-
* @param options Additional options.
|
|
908
|
-
*/
|
|
909
|
-
reorderColumn(source, destIndex, options = { before: false }) {
|
|
910
|
-
if (isPresent(this.treeList)) {
|
|
911
|
-
this.treeList.reorderColumn(source, destIndex, options);
|
|
912
|
-
}
|
|
913
|
-
}
|
|
914
|
-
/**
|
|
915
|
-
* Forces the Gantt to re-evaluate data items and re-render the rows and Timeline period, if needed.
|
|
916
|
-
* Also redraws dependencies and executes row-related callbacks.
|
|
917
|
-
*/
|
|
918
|
-
updateView() {
|
|
919
|
-
if (isPresent(this.treeList)) {
|
|
920
|
-
this.treeList.updateView();
|
|
921
|
-
}
|
|
922
|
-
this.loadTimelineData();
|
|
923
|
-
this.dependencyDomService.notifyChanges();
|
|
924
|
-
}
|
|
925
|
-
/**
|
|
926
|
-
* Opens the task editing dialog for the specified data item.
|
|
927
|
-
* @param dataItem The task data item.
|
|
928
|
-
* @param formGroup The form group for editing.
|
|
929
|
-
*/
|
|
930
|
-
editTask(dataItem, formGroup) {
|
|
931
|
-
if (!this.showEditingDialog) {
|
|
932
|
-
const taskId = this.mapper.extractFromTask(dataItem, 'id');
|
|
933
|
-
const dependencies = this.dependencies.filter(item => this.mapper.extractFromDependency(item, 'toId') === taskId
|
|
934
|
-
|| this.mapper.extractFromDependency(item, 'fromId') === taskId);
|
|
935
|
-
this.editService.createEditDialog(dataItem, formGroup, dependencies);
|
|
936
|
-
}
|
|
937
|
-
}
|
|
938
|
-
/**
|
|
939
|
-
* Closes the task editing dialog.
|
|
940
|
-
*/
|
|
941
|
-
closeTaskDialog() {
|
|
942
|
-
if (this.showEditingDialog) {
|
|
943
|
-
this.editService.closeEditDialog();
|
|
944
|
-
}
|
|
945
|
-
}
|
|
946
|
-
/**
|
|
947
|
-
* Opens the delete task confirmation dialog.
|
|
948
|
-
*/
|
|
949
|
-
openConfirmationDialog() {
|
|
950
|
-
this.showConfirmationDialog = true;
|
|
951
|
-
}
|
|
952
|
-
/**
|
|
953
|
-
* @hidden
|
|
954
|
-
*/
|
|
955
|
-
handleConfirmationDialogClose() {
|
|
956
|
-
this.showConfirmationDialog = false;
|
|
957
|
-
if (this.navigable) {
|
|
958
|
-
this.focus();
|
|
959
|
-
}
|
|
960
|
-
}
|
|
961
|
-
/**
|
|
962
|
-
* Opens a cell for editing.
|
|
963
|
-
* @param dataItem The data item.
|
|
964
|
-
* @param column The column index, name, or object.
|
|
965
|
-
* @param formGroup The form group for editing.
|
|
966
|
-
*/
|
|
967
|
-
editCell(dataItem, column, formGroup) {
|
|
968
|
-
this.treeList.editCell(dataItem, column, formGroup);
|
|
969
|
-
}
|
|
970
|
-
/**
|
|
971
|
-
* Closes the currently edited cell.
|
|
972
|
-
*/
|
|
973
|
-
closeCell() {
|
|
974
|
-
this.treeList.closeCell();
|
|
975
|
-
}
|
|
976
|
-
/**
|
|
977
|
-
* @hidden
|
|
978
|
-
*/
|
|
979
|
-
handleCellClose(e) {
|
|
980
|
-
this.cellClose.emit(new CellCloseEvent({ ...e, item: this.editItem, sender: this }));
|
|
981
|
-
this.dependencyDomService.notifyChanges();
|
|
982
|
-
}
|
|
983
|
-
/**
|
|
984
|
-
* @hidden
|
|
985
|
-
*/
|
|
986
|
-
onTreeListCollapsedChange(collapsed) {
|
|
987
|
-
this.treeListPaneCollapsedChange.emit(collapsed);
|
|
988
|
-
if (!collapsed) {
|
|
989
|
-
this.scrollSyncService.syncScrollTop('timeline', 'treelist');
|
|
990
|
-
}
|
|
991
|
-
}
|
|
992
|
-
/**
|
|
993
|
-
* @hidden
|
|
994
|
-
*/
|
|
995
|
-
onTimelineCollapsedChange(collapsed) {
|
|
996
|
-
this.timelinePaneCollapsedChange.emit(collapsed);
|
|
997
|
-
if (!collapsed) {
|
|
998
|
-
this.scrollSyncService.syncScrollTop('treelist', 'timeline');
|
|
999
|
-
this.dependencyDomService.notifyChanges();
|
|
1000
|
-
}
|
|
1001
|
-
}
|
|
1002
|
-
/**
|
|
1003
|
-
* @hidden
|
|
1004
|
-
*/
|
|
1005
|
-
loadTimelineData() {
|
|
1006
|
-
if (!isPresent(this.viewService)) {
|
|
1007
|
-
return;
|
|
1008
|
-
}
|
|
1009
|
-
const activeViewOptions = this.getActiveViewOptions();
|
|
1010
|
-
this.viewService.options = {
|
|
1011
|
-
workWeekStart: this.workWeekStart,
|
|
1012
|
-
workWeekEnd: this.workWeekEnd,
|
|
1013
|
-
workDayStart: this.workDayStart,
|
|
1014
|
-
workDayEnd: this.workDayEnd,
|
|
1015
|
-
...activeViewOptions
|
|
1016
|
-
};
|
|
1017
|
-
this.tableWidth = this.viewService.getTableWidth(this.data);
|
|
1018
|
-
const [groupedSlots, slots] = this.viewService.getSlots(this.data);
|
|
1019
|
-
this.timelineSlots = slots;
|
|
1020
|
-
this.timelineGroupSlots = groupedSlots;
|
|
1021
|
-
}
|
|
1022
|
-
/**
|
|
1023
|
-
* @hidden
|
|
1024
|
-
*/
|
|
1025
|
-
showToolbar(position) {
|
|
1026
|
-
return this.toolbarSettings.position !== 'none' && ([position, 'both'].indexOf(this.toolbarSettings.position) > -1);
|
|
1027
|
-
}
|
|
1028
|
-
/**
|
|
1029
|
-
* @hidden
|
|
1030
|
-
*/
|
|
1031
|
-
handleColumnVisibilityChange(event) {
|
|
1032
|
-
this.columnVisibilityChange.emit(event);
|
|
1033
|
-
this.updateTreeListGroupClass();
|
|
1034
|
-
}
|
|
1035
|
-
/**
|
|
1036
|
-
* @hidden
|
|
1037
|
-
*/
|
|
1038
|
-
onTimelinePaneSizeChange(e) {
|
|
1039
|
-
this._timelinePaneOptions.size = e;
|
|
1040
|
-
this.timelinePaneSizeChange.emit(e);
|
|
1041
|
-
}
|
|
1042
|
-
/**
|
|
1043
|
-
* @hidden
|
|
1044
|
-
*/
|
|
1045
|
-
handleTimelineRightClick(event) {
|
|
1046
|
-
const target = event.target;
|
|
1047
|
-
const gantt = this.hostElement.nativeElement;
|
|
1048
|
-
if (!isTask(target, gantt) || isClearButton(target, gantt)) {
|
|
1049
|
-
return;
|
|
1050
|
-
}
|
|
1051
|
-
if (hasObservers(this.taskClick)) {
|
|
1052
|
-
const taskIndex = getClosestTaskIndex(target, gantt);
|
|
1053
|
-
const task = this.renderedTreeListItems[taskIndex];
|
|
1054
|
-
this.zone.run(() => this.notifyTaskClick(event, task, taskIndex));
|
|
1055
|
-
}
|
|
1056
|
-
}
|
|
1057
|
-
/**
|
|
1058
|
-
* @hidden
|
|
1059
|
-
*/
|
|
1060
|
-
handleTimelineClick(event) {
|
|
1061
|
-
const target = event.target;
|
|
1062
|
-
const gantt = this.hostElement.nativeElement;
|
|
1063
|
-
if (!isTask(target, gantt) || isClearButton(target, gantt)) {
|
|
1064
|
-
return;
|
|
1065
|
-
}
|
|
1066
|
-
const taskIndex = getClosestTaskIndex(target, gantt);
|
|
1067
|
-
const task = this.renderedTreeListItems[taskIndex];
|
|
1068
|
-
const selectionAction = this.getSelectionAction(event, task);
|
|
1069
|
-
if ((hasObservers(this.selectionChange) && !this.isSameSelection(selectionAction, task)) ||
|
|
1070
|
-
hasObservers(this.taskClick)) {
|
|
1071
|
-
this.zone.run(() => {
|
|
1072
|
-
this.notifySelectionChange(task, selectionAction);
|
|
1073
|
-
this.notifyTaskClick(event, task, taskIndex);
|
|
1074
|
-
});
|
|
1075
|
-
}
|
|
1076
|
-
}
|
|
1077
|
-
/**
|
|
1078
|
-
* @hidden
|
|
1079
|
-
*/
|
|
1080
|
-
handleTreeListDoubleClick(event) {
|
|
1081
|
-
if (!isPresent(this.lastTreeListCellClick) || event.target !== this.lastTreeListCellClick.originalEvent.target) {
|
|
1082
|
-
return;
|
|
1083
|
-
}
|
|
1084
|
-
this.editItem = getEditItem(this.lastTreeListCellClick.dataItem, this.treeList.view.data, this.mapper);
|
|
1085
|
-
if (hasObservers(this.cellDblClick)) {
|
|
1086
|
-
this.zone.run(() => {
|
|
1087
|
-
this.cellDblClick.emit({
|
|
1088
|
-
column: this.lastTreeListCellClick.column,
|
|
1089
|
-
columnIndex: this.lastTreeListCellClick.columnIndex,
|
|
1090
|
-
dataItem: this.lastTreeListCellClick.dataItem,
|
|
1091
|
-
isEdited: this.lastTreeListCellClick.isEdited,
|
|
1092
|
-
originalEvent: this.lastTreeListCellClick.originalEvent,
|
|
1093
|
-
rowIndex: this.lastTreeListCellClick.rowIndex,
|
|
1094
|
-
type: 'dblclick',
|
|
1095
|
-
sender: this
|
|
1096
|
-
});
|
|
1097
|
-
});
|
|
1098
|
-
}
|
|
1099
|
-
}
|
|
1100
|
-
/**
|
|
1101
|
-
* @hidden
|
|
1102
|
-
*/
|
|
1103
|
-
handleTreeListSelectionChange(event) {
|
|
1104
|
-
// prevent selection change from right-click
|
|
1105
|
-
if (isPresent(this.lastTreeListCellClick) && this.lastTreeListCellClick.type === 'contextmenu') {
|
|
1106
|
-
return;
|
|
1107
|
-
}
|
|
1108
|
-
const task = event.items.map(item => item.dataItem)[0]; // single selection only currently available
|
|
1109
|
-
const action = event.action;
|
|
1110
|
-
this.notifySelectionChange(task, action);
|
|
1111
|
-
}
|
|
1112
|
-
/**
|
|
1113
|
-
* @hidden
|
|
1114
|
-
*/
|
|
1115
|
-
handleTreeListCellClick(event) {
|
|
1116
|
-
this.lastTreeListCellClick = event;
|
|
1117
|
-
this.cellClick.emit({
|
|
1118
|
-
column: event.column,
|
|
1119
|
-
columnIndex: event.columnIndex,
|
|
1120
|
-
dataItem: event.dataItem,
|
|
1121
|
-
isEdited: event.isEdited,
|
|
1122
|
-
originalEvent: event.originalEvent,
|
|
1123
|
-
rowIndex: event.rowIndex,
|
|
1124
|
-
type: event.type,
|
|
1125
|
-
sender: this
|
|
1126
|
-
});
|
|
1127
|
-
}
|
|
1128
|
-
/**
|
|
1129
|
-
* @hidden
|
|
1130
|
-
*/
|
|
1131
|
-
handleDeleteConfirmation() {
|
|
1132
|
-
this.editService.triggerEditEvent('remove');
|
|
1133
|
-
}
|
|
1134
|
-
/**
|
|
1135
|
-
* @hidden
|
|
1136
|
-
*/
|
|
1137
|
-
handleTimelineMouseDown(event) {
|
|
1138
|
-
const target = event.target;
|
|
1139
|
-
const gantt = this.hostElement.nativeElement;
|
|
1140
|
-
if (!isTask(target, gantt) || isClearButton(target, gantt)) {
|
|
1141
|
-
return;
|
|
1142
|
-
}
|
|
1143
|
-
event.preventDefault();
|
|
1144
|
-
}
|
|
1145
|
-
/**
|
|
1146
|
-
* @hidden
|
|
1147
|
-
*/
|
|
1148
|
-
handleTimelineDblClick(event) {
|
|
1149
|
-
const target = event.target;
|
|
1150
|
-
const gantt = this.hostElement.nativeElement;
|
|
1151
|
-
if (!isTask(target, gantt) || isClearButton(target, gantt)) {
|
|
1152
|
-
return;
|
|
1153
|
-
}
|
|
1154
|
-
if (hasObservers(this.taskDblClick)) {
|
|
1155
|
-
const taskIndex = getClosestTaskIndex(target, gantt);
|
|
1156
|
-
const task = this.renderedTreeListItems[taskIndex];
|
|
1157
|
-
this.zone.run(() => this.taskDblClick.emit({
|
|
1158
|
-
dataItem: task,
|
|
1159
|
-
originalEvent: event,
|
|
1160
|
-
sender: this,
|
|
1161
|
-
index: taskIndex,
|
|
1162
|
-
type: 'dblclick'
|
|
1163
|
-
}));
|
|
1164
|
-
}
|
|
1165
|
-
}
|
|
1166
|
-
/**
|
|
1167
|
-
* @hidden
|
|
1168
|
-
*/
|
|
1169
|
-
getText(token) {
|
|
1170
|
-
return this.localizationService.get(token);
|
|
1171
|
-
}
|
|
1172
|
-
/**
|
|
1173
|
-
* @hidden
|
|
1174
|
-
*/
|
|
1175
|
-
changeActiveView(view) {
|
|
1176
|
-
if (view !== this.activeView) {
|
|
1177
|
-
this.activeView = view;
|
|
1178
|
-
this.loadTimelineData();
|
|
1179
|
-
this.scrollSyncService.resetTimelineScrollLeft();
|
|
1180
|
-
this.activeViewChange.emit(view);
|
|
1181
|
-
this.currentTimeMarkerService.slots = this.timelineSlots;
|
|
1182
|
-
this.currentTimeMarkerService.rows = this.viewItems;
|
|
1183
|
-
this.currentTimeMarkerService.activeView = view;
|
|
1184
|
-
}
|
|
1185
|
-
}
|
|
1186
|
-
/**
|
|
1187
|
-
* @hidden
|
|
1188
|
-
*/
|
|
1189
|
-
notifyTaskClick(event, dataItem, itemIndex) {
|
|
1190
|
-
// simulates the TreeList `cellClick` event triggered by enter press (type: 'click')
|
|
1191
|
-
const type = event instanceof KeyboardEvent ? 'click' : event.type;
|
|
1192
|
-
this.taskClick.emit({
|
|
1193
|
-
originalEvent: event,
|
|
1194
|
-
dataItem: dataItem,
|
|
1195
|
-
index: itemIndex,
|
|
1196
|
-
type: type,
|
|
1197
|
-
sender: this
|
|
1198
|
-
});
|
|
1199
|
-
}
|
|
1200
|
-
/**
|
|
1201
|
-
* @hidden
|
|
1202
|
-
*/
|
|
1203
|
-
notifySelectionChange(dataItem, action) {
|
|
1204
|
-
if (this.isSameSelection(action, dataItem)) {
|
|
1205
|
-
return;
|
|
1206
|
-
}
|
|
1207
|
-
this.selectionChange.emit({
|
|
1208
|
-
action: action,
|
|
1209
|
-
items: [dataItem],
|
|
1210
|
-
sender: this
|
|
1211
|
-
});
|
|
1212
|
-
this.treeList.updateView();
|
|
1213
|
-
}
|
|
1214
|
-
/**
|
|
1215
|
-
* @hidden
|
|
1216
|
-
*/
|
|
1217
|
-
notifyTaskDelete(task) {
|
|
1218
|
-
this.editService.dataItem = task;
|
|
1219
|
-
this.taskDelete.emit({
|
|
1220
|
-
item: getEditItem(task, this.treeList.view.data, this.mapper),
|
|
1221
|
-
sender: this
|
|
1222
|
-
});
|
|
1223
|
-
}
|
|
1224
|
-
/**
|
|
1225
|
-
* @hidden
|
|
1226
|
-
*/
|
|
1227
|
-
isSameSelection(action, dataItem) {
|
|
1228
|
-
return action === 'select' && this.isSelected(dataItem);
|
|
1229
|
-
}
|
|
1230
|
-
/**
|
|
1231
|
-
* @hidden
|
|
1232
|
-
*/
|
|
1233
|
-
getSelectionAction({ ctrlKey, metaKey }, dataItem) {
|
|
1234
|
-
const shouldToggleSelection = ctrlKey || metaKey;
|
|
1235
|
-
return (shouldToggleSelection && this.isSelected(dataItem)) ? 'remove' : 'select';
|
|
1236
|
-
}
|
|
1237
|
-
updateTreeListGroupClass(columns = this.columns) {
|
|
1238
|
-
if (!isPresent(this.treeList)) {
|
|
1239
|
-
return;
|
|
1240
|
-
}
|
|
1241
|
-
const hasColumns = isPresent(columns) && columns.length > 0;
|
|
1242
|
-
const hasVisibleGroupedColumns = hasColumns && columns.some(column => isColumnGroup(column) && column.childrenArray.some(childColumn => childColumn.isVisible));
|
|
1243
|
-
if (hasVisibleGroupedColumns) {
|
|
1244
|
-
this.renderer.addClass(this.treeList.wrapper.nativeElement, TREELIST_GROUP_COLUMNS_CLASS);
|
|
1245
|
-
}
|
|
1246
|
-
else {
|
|
1247
|
-
this.renderer.removeClass(this.treeList.wrapper.nativeElement, TREELIST_GROUP_COLUMNS_CLASS);
|
|
1248
|
-
}
|
|
1249
|
-
}
|
|
1250
|
-
/**
|
|
1251
|
-
* Used to hide the vertical scrollbar
|
|
1252
|
-
*/
|
|
1253
|
-
updateTreeListMargin() {
|
|
1254
|
-
const treeListContentEl = this.treeList.wrapper.nativeElement.querySelector('.k-treelist .k-grid-content');
|
|
1255
|
-
this.renderer.setStyle(treeListContentEl, 'margin-right', `${-Math.abs(scrollbarWidth() - 1)}px`);
|
|
1256
|
-
}
|
|
1257
|
-
get activeTimelineIndex() {
|
|
1258
|
-
return this.navigation.activeTimelineIndex;
|
|
1259
|
-
}
|
|
1260
|
-
getActiveViewOptions() {
|
|
1261
|
-
if (!this.views) {
|
|
1262
|
-
return;
|
|
1263
|
-
}
|
|
1264
|
-
return this.views.find(view => view.type === this.activeView);
|
|
1265
|
-
}
|
|
1266
|
-
getFirstSelectedItem() {
|
|
1267
|
-
const isSelectedCallback = this.isSelected || isSelected;
|
|
1268
|
-
const loadedItems = this.renderedTreeListItems || [];
|
|
1269
|
-
return loadedItems.find(isSelectedCallback);
|
|
1270
|
-
}
|
|
1271
|
-
defaultValidateNewDependencyCallback(dependency) {
|
|
1272
|
-
const fromTaskId = this.mapper.extractFromDependency(dependency, 'fromId');
|
|
1273
|
-
const toTaskId = this.mapper.extractFromDependency(dependency, 'toId');
|
|
1274
|
-
const fromTask = this.treeList.view.data.find(task => this.mapper.extractFromTask(task.data, 'id') === fromTaskId);
|
|
1275
|
-
const toTask = this.treeList.view.data.find(task => this.mapper.extractFromTask(task.data, 'id') === toTaskId);
|
|
1276
|
-
// mark as invalid if the attempted dependency is lacking valid from- and to-tasks
|
|
1277
|
-
// or when the from- and to-tasks are actually the same task
|
|
1278
|
-
if (!isPresent(fromTask) || !isPresent(fromTask.data) ||
|
|
1279
|
-
!isPresent(toTask) || !isPresent(toTask.data) ||
|
|
1280
|
-
fromTask.data === toTask.data) {
|
|
1281
|
-
return false;
|
|
1282
|
-
}
|
|
1283
|
-
const tasksDependentOnOneAnother = this.dependencies.some(current => {
|
|
1284
|
-
const currentFromId = this.mapper.extractFromDependency(current, 'fromId');
|
|
1285
|
-
const currentToId = this.mapper.extractFromDependency(current, 'toId');
|
|
1286
|
-
return (fromTaskId === currentFromId && toTaskId === currentToId) ||
|
|
1287
|
-
(toTaskId === currentFromId && fromTaskId === currentToId);
|
|
1288
|
-
});
|
|
1289
|
-
// mark as invalid if the attempted dependency is trying to connect already dependent tasks
|
|
1290
|
-
// mark as invalid if the two tasks are in parent-child relationship
|
|
1291
|
-
if (tasksDependentOnOneAnother || areParentChild(fromTask, toTask)) {
|
|
1292
|
-
return false;
|
|
1293
|
-
}
|
|
1294
|
-
const fromTaskStart = this.mapper.extractFromTask(fromTask.data, 'start');
|
|
1295
|
-
const fromTaskEnd = this.mapper.extractFromTask(fromTask.data, 'end');
|
|
1296
|
-
const toTaskStart = this.mapper.extractFromTask(toTask.data, 'start');
|
|
1297
|
-
const toTaskEnd = this.mapper.extractFromTask(toTask.data, 'end');
|
|
1298
|
-
// if the two tasks are available to be connected via a dependency,
|
|
1299
|
-
// check if their start and end time allow for the attempted dependency type
|
|
1300
|
-
switch (this.mapper.extractFromDependency(dependency, 'type')) {
|
|
1301
|
-
// finish to finish (FF) — the from-task ends before the to-task can end
|
|
1302
|
-
case DependencyType.FF:
|
|
1303
|
-
return fromTaskEnd <= toTaskEnd;
|
|
1304
|
-
// finish to start (FS) — the from-task ends before the to-task can begin
|
|
1305
|
-
case DependencyType.FS:
|
|
1306
|
-
return fromTaskEnd <= toTaskStart;
|
|
1307
|
-
// start to finish (SF) — the from-task begins before the to-task can end
|
|
1308
|
-
case DependencyType.SF:
|
|
1309
|
-
return fromTaskStart <= toTaskEnd;
|
|
1310
|
-
// start to start (SS) — the from-task begins before the to-task can begin
|
|
1311
|
-
case DependencyType.SS:
|
|
1312
|
-
return fromTaskStart <= toTaskStart;
|
|
1313
|
-
default: return false;
|
|
1314
|
-
}
|
|
1315
|
-
}
|
|
1316
|
-
handleKeydown(event) {
|
|
1317
|
-
const { target, altKey } = event;
|
|
1318
|
-
// on some keyboards arrow keys, PageUp/Down, and Home/End are mapped to Numpad keys
|
|
1319
|
-
const code = normalizeKeys(event);
|
|
1320
|
-
const isTimelineActive = this.timeline.timelineContent.nativeElement.contains(target);
|
|
1321
|
-
if (isTimelineActive) {
|
|
1322
|
-
if (isArrowUpDownKey(code)) {
|
|
1323
|
-
const direction = code === Keys.ArrowUp ? -1 : 1;
|
|
1324
|
-
this.navigation.activeTimelineIndex = this.activeTimelineIndex + direction;
|
|
1325
|
-
this.navigation.updateActiveTreeListCell();
|
|
1326
|
-
}
|
|
1327
|
-
else if (code === Keys.Home) {
|
|
1328
|
-
this.navigation.activeTimelineIndex = 0;
|
|
1329
|
-
this.navigation.updateActiveTreeListCell();
|
|
1330
|
-
}
|
|
1331
|
-
else if (code === Keys.End) {
|
|
1332
|
-
const lastAvailableIndex = this.treeList.view.data.length - 1;
|
|
1333
|
-
this.navigation.activeTimelineIndex = lastAvailableIndex;
|
|
1334
|
-
this.navigation.updateActiveTreeListCell();
|
|
1335
|
-
}
|
|
1336
|
-
if (isNavigationKey(code)) {
|
|
1337
|
-
this.navigation.scrollHorizontallyToTask();
|
|
1338
|
-
this.scrollSyncService.syncScrollTop('timeline', 'treelist');
|
|
1339
|
-
this.navigation.notifyTaskStatusChange();
|
|
1340
|
-
event.preventDefault();
|
|
1341
|
-
}
|
|
1342
|
-
if (code === Keys.Space && hasObservers(this.selectionChange)) {
|
|
1343
|
-
const task = this.renderedTreeListItems[this.activeTimelineIndex];
|
|
1344
|
-
const selectionAction = this.getSelectionAction(event, task);
|
|
1345
|
-
if (isPresent(task) && !this.isSameSelection(selectionAction, task)) {
|
|
1346
|
-
this.zone.run(() => this.notifySelectionChange(task, selectionAction));
|
|
1347
|
-
}
|
|
1348
|
-
event.preventDefault();
|
|
1349
|
-
}
|
|
1350
|
-
if ((code === Keys.Enter) && hasObservers(this.taskClick)) {
|
|
1351
|
-
const task = this.renderedTreeListItems[this.activeTimelineIndex];
|
|
1352
|
-
if (isPresent(task)) {
|
|
1353
|
-
this.zone.run(() => this.notifyTaskClick(event, task, this.activeTimelineIndex));
|
|
1354
|
-
}
|
|
1355
|
-
event.preventDefault();
|
|
1356
|
-
}
|
|
1357
|
-
if (isExpandCollapseKey(code, altKey)) {
|
|
1358
|
-
const task = this.renderedTreeListItems[this.activeTimelineIndex];
|
|
1359
|
-
if (isPresent(task) && this.hasChildren(task)) {
|
|
1360
|
-
const shouldExpand = code === Keys.ArrowRight;
|
|
1361
|
-
const isExpanded = this.isExpanded(task);
|
|
1362
|
-
const sameState = shouldExpand === isExpanded;
|
|
1363
|
-
if (!sameState) {
|
|
1364
|
-
this.zone.run(() => {
|
|
1365
|
-
const expandEvent = { dataItem: task };
|
|
1366
|
-
// order is not arbitrary
|
|
1367
|
-
// the TreeList emits the individual events first, then the combined `expandStateChange` event
|
|
1368
|
-
const individualEmitter = shouldExpand ? this.rowExpand : this.rowCollapse;
|
|
1369
|
-
individualEmitter.emit(expandEvent);
|
|
1370
|
-
this.expandStateChange.emit({
|
|
1371
|
-
...expandEvent,
|
|
1372
|
-
expand: shouldExpand
|
|
1373
|
-
});
|
|
1374
|
-
this.updateView();
|
|
1375
|
-
this.navigation.scrollHorizontallyToTask();
|
|
1376
|
-
});
|
|
1377
|
-
}
|
|
1378
|
-
}
|
|
1379
|
-
event.preventDefault();
|
|
1380
|
-
}
|
|
1381
|
-
}
|
|
1382
|
-
const isTreeListActive = this.treeList.wrapper.nativeElement.contains(target);
|
|
1383
|
-
if (code === Keys.Delete && (isTimelineActive || isTreeListActive) && hasObservers(this.taskDelete)) {
|
|
1384
|
-
const taskIndex = isTreeListActive ?
|
|
1385
|
-
this.treeList.activeCell.dataRowIndex :
|
|
1386
|
-
this.activeTimelineIndex;
|
|
1387
|
-
const task = this.renderedTreeListItems[taskIndex];
|
|
1388
|
-
if (isPresent(task)) {
|
|
1389
|
-
this.zone.run(() => this.notifyTaskDelete(task));
|
|
1390
|
-
}
|
|
1391
|
-
}
|
|
1392
|
-
if (isViewDigitKey(code) && !isToolbar(target, this.hostElement.nativeElement) && !this.isInEditMode) {
|
|
1393
|
-
const targetViewIndex = getIndexFromViewDigitKeyCode(code);
|
|
1394
|
-
const availableViews = this.views.toArray();
|
|
1395
|
-
const targetView = availableViews[targetViewIndex];
|
|
1396
|
-
if (isPresent(targetView) && targetView.type !== this.activeView) {
|
|
1397
|
-
this.zone.run(() => this.changeActiveView(targetView.type));
|
|
1398
|
-
}
|
|
1399
|
-
}
|
|
1400
|
-
}
|
|
1401
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttComponent, deps: [{ token: i1.TimelineViewService }, { token: i2.ScrollSyncService }, { token: i0.Renderer2 }, { token: i3.MappingService }, { token: i4.OptionChangesService }, { token: i5.DependencyDomService }, { token: i6.EditService }, { token: i7.LocalizationService }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i8.NavigationService }, { token: i9.CurrentTimeMarkerService }, { token: i10.IntlService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component });
|
|
1402
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GanttComponent, isStandalone: true, selector: "kendo-gantt", inputs: { roleDescription: ["aria-roledescription", "roleDescription"], role: "role", taskModelFields: "taskModelFields", dependencyModelFields: "dependencyModelFields", activeView: "activeView", data: "data", isSelected: "isSelected", validateNewDependency: "validateNewDependency", selectable: "selectable", toolbarSettings: "toolbarSettings", toolbarAriaLabel: "toolbarAriaLabel", fetchChildren: "fetchChildren", hasChildren: "hasChildren", dependencies: "dependencies", sortable: "sortable", sort: "sort", filterable: "filterable", filter: "filter", workDayStart: "workDayStart", workDayEnd: "workDayEnd", workWeekStart: "workWeekStart", workWeekEnd: "workWeekEnd", navigable: "navigable", timelinePaneOptions: "timelinePaneOptions", treeListPaneOptions: "treeListPaneOptions", taskClass: "taskClass", rowClass: "rowClass", isExpanded: "isExpanded", columnsAutoSize: "columnsAutoSize", currentTimeMarker: "currentTimeMarker", columnMenu: "columnMenu", columnsReorderable: "columnsReorderable", columnsResizable: "columnsResizable", dragScrollSettings: "dragScrollSettings", taskTooltipOptions: "taskTooltipOptions" }, outputs: { selectionChange: "selectionChange", rowExpand: "rowExpand", taskDblClick: "taskDblClick", cellDblClick: "cellDblClick", cellClose: "cellClose", taskDelete: "taskDelete", rowCollapse: "rowCollapse", remove: "remove", cancel: "cancel", save: "save", taskAdd: "taskAdd", dependencyAdd: "dependencyAdd", sortChange: "sortChange", filterChange: "filterChange", dataStateChange: "dataStateChange", treeListPaneCollapsedChange: "treeListPaneCollapsedChange", timelinePaneCollapsedChange: "timelinePaneCollapsedChange", timelinePaneSizeChange: "timelinePaneSizeChange", activeViewChange: "activeViewChange", columnResize: "columnResize", columnReorder: "columnReorder", columnVisibilityChange: "columnVisibilityChange", columnLockedChange: "columnLockedChange", cellClick: "cellClick", taskClick: "taskClick" }, host: { properties: { "attr.aria-roledescription": "this.hostRoleDescriptionAttr", "attr.role": "this.hostRoleAttr", "class.k-gantt": "this.hostClasses", "attr.dir": "this.dir" } }, providers: [
|
|
1403
|
-
GanttLocalizationService,
|
|
1404
|
-
LocalizationService,
|
|
1405
|
-
{
|
|
1406
|
-
provide: L10N_PREFIX,
|
|
1407
|
-
useValue: 'kendo.gantt'
|
|
1408
|
-
},
|
|
1409
|
-
{
|
|
1410
|
-
provide: DataBoundTreeComponent,
|
|
1411
|
-
useExisting: forwardRef(() => GanttComponent)
|
|
1412
|
-
},
|
|
1413
|
-
{
|
|
1414
|
-
provide: ExpandableTreeComponent,
|
|
1415
|
-
useExisting: forwardRef(() => GanttComponent)
|
|
1416
|
-
},
|
|
1417
|
-
TimelineViewService,
|
|
1418
|
-
TimelineDayViewService,
|
|
1419
|
-
TimelineWeekViewService,
|
|
1420
|
-
TimelineMonthViewService,
|
|
1421
|
-
TimeLineYearViewService,
|
|
1422
|
-
ScrollSyncService,
|
|
1423
|
-
DependencyDomService,
|
|
1424
|
-
MappingService,
|
|
1425
|
-
OptionChangesService,
|
|
1426
|
-
EditService,
|
|
1427
|
-
TimelineScrollService,
|
|
1428
|
-
NavigationService,
|
|
1429
|
-
CurrentTimeMarkerService
|
|
1430
|
-
], queries: [{ propertyName: "taskContentTemplate", first: true, predicate: GanttTaskContentTemplateDirective, descendants: true }, { propertyName: "taskTemplate", first: true, predicate: GanttTaskTemplateDirective, descendants: true }, { propertyName: "taskTooltipTemplate", first: true, predicate: GanttTaskTooltipTemplateDirective, descendants: true }, { propertyName: "taskDragTooltipTemplate", first: true, predicate: GanttTaskDragTooltipTemplateDirective, descendants: true }, { propertyName: "summaryTaskTemplate", first: true, predicate: GanttSummaryTaskTemplateDirective, descendants: true }, { propertyName: "toolbarTemplateChildren", predicate: ToolbarTemplateDirective }, { propertyName: "columns", predicate: GanttColumnBase }, { propertyName: "views", predicate: ViewBase }], viewQueries: [{ propertyName: "treeList", first: true, predicate: TreeListComponent, descendants: true, static: true }, { propertyName: "timeline", first: true, predicate: GanttTimelineComponent, descendants: true }], exportAs: ["kendoGantt"], usesOnChanges: true, ngImport: i0, template: `
|
|
1431
|
-
<ng-container kendoGanttLocalizedMessages
|
|
1432
|
-
i18n-taskEditingGeneralTabTitle="kendo.gantt.taskEditingGeneralTabTitle|The title of the 'General' tab of the editing dialog TabStrip"
|
|
1433
|
-
taskEditingGeneralTabTitle="General"
|
|
1434
|
-
|
|
1435
|
-
i18n-taskEditingPredecessorsTabTitle="kendo.gantt.taskEditingPredecessorsTabTitle|The title of the 'Predecessors' dependencies tab of the editing dialog TabStrip"
|
|
1436
|
-
taskEditingPredecessorsTabTitle="Predecessors"
|
|
1437
|
-
|
|
1438
|
-
i18n-taskEditingSuccessorsTabTitle="kendo.gantt.taskEditingSuccessorsTabTitle|The title of the 'Successors' dependencies tab of the editing dialog TabStrip"
|
|
1439
|
-
taskEditingSuccessorsTabTitle="Successors"
|
|
1440
|
-
|
|
1441
|
-
i18n-taskEditingDependenciesAddButtonText="kendo.gantt.taskEditingDependenciesAddButtonText|The text of the 'Add' button in the dependencies tabs of the editing dialog TabStrip"
|
|
1442
|
-
taskEditingDependenciesAddButtonText="Add"
|
|
1443
|
-
|
|
1444
|
-
i18n-taskEditingDependenciesRemoveButtonText="kendo.gantt.taskEditingDependenciesRemoveButtonText|The text of the 'Remove' button in the dependencies tabs of the editing dialog TabStrip"
|
|
1445
|
-
taskEditingDependenciesRemoveButtonText="Remove"
|
|
1446
|
-
|
|
1447
|
-
i18n-taskEditingDependenciesGridNameColumnTitle="kendo.gantt.taskEditingDependenciesGridNameColumnTitle|The title of the 'Task Title' Grid column in the dependencies tabs of the editing dialog TabStrip"
|
|
1448
|
-
taskEditingDependenciesGridNameColumnTitle="Task Title"
|
|
1449
|
-
|
|
1450
|
-
i18n-taskEditingDependenciesGridTypeColumnTitle="kendo.gantt.taskEditingDependenciesGridTypeColumnTitle|The title of the 'Type' Grid column in the dependencies tabs of the editing dialog TabStrip"
|
|
1451
|
-
taskEditingDependenciesGridTypeColumnTitle="Type"
|
|
1452
|
-
|
|
1453
|
-
i18n-taskDeleteLabel="kendo.gantt.taskDeleteLabel|The label of the task delete icon"
|
|
1454
|
-
taskDeleteLabel="Delete"
|
|
1455
|
-
|
|
1456
|
-
i18n-taskEditingDialogTitle="kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog"
|
|
1457
|
-
taskEditingDialogTitle="Editing Task"
|
|
1458
|
-
|
|
1459
|
-
i18n-taskEditingDialogCloseTitle="kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button"
|
|
1460
|
-
taskEditingDialogCloseTitle="Close"
|
|
1461
|
-
|
|
1462
|
-
i18n-confirmationDialogCloseTitle="kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button"
|
|
1463
|
-
confirmationDialogCloseTitle="Close"
|
|
1464
|
-
|
|
1465
|
-
i18n-confirmationDialogTitle="kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog"
|
|
1466
|
-
confirmationDialogTitle="Delete Task"
|
|
1467
|
-
|
|
1468
|
-
i18n-confirmationDialogContent="kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog"
|
|
1469
|
-
confirmationDialogContent="Are you sure you want to delete this task?"
|
|
1470
|
-
|
|
1471
|
-
i18n-deleteButtonText="kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button"
|
|
1472
|
-
deleteButtonText="Delete"
|
|
1473
|
-
|
|
1474
|
-
i18n-cancelButtonText="kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button"
|
|
1475
|
-
cancelButtonText="Cancel"
|
|
1476
|
-
|
|
1477
|
-
i18n-saveButtonText="kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button"
|
|
1478
|
-
saveButtonText="Save"
|
|
1479
|
-
|
|
1480
|
-
i18n-titleFieldInputLabel="kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode"
|
|
1481
|
-
titleFieldInputLabel="Title"
|
|
1482
|
-
|
|
1483
|
-
i18n-startFieldInputLabel="kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode"
|
|
1484
|
-
startFieldInputLabel="Start"
|
|
1485
|
-
|
|
1486
|
-
i18n-endFieldInputLabel="kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode"
|
|
1487
|
-
endFieldInputLabel="End"
|
|
1488
|
-
|
|
1489
|
-
i18n-completionRatioFieldInputLabel="kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode"
|
|
1490
|
-
completionRatioFieldInputLabel="Progress"
|
|
1491
|
-
|
|
1492
|
-
i18n-dayViewText="kendo.gantt.dayViewText|The text of the day view in the ViewSelector component"
|
|
1493
|
-
dayViewText="Day"
|
|
1494
|
-
|
|
1495
|
-
i18n-weekViewText="kendo.gantt.weekViewText|The text of the week view in the ViewSelector component"
|
|
1496
|
-
weekViewText="Week"
|
|
1497
|
-
|
|
1498
|
-
i18n-monthViewText="kendo.gantt.monthViewText|The text of the month view in the ViewSelector component"
|
|
1499
|
-
monthViewText="Month"
|
|
1500
|
-
|
|
1501
|
-
i18n-yearViewText-disabled="kendo.gantt.yearViewText|The text of the year view in the ViewSelector component"
|
|
1502
|
-
yearViewText="Year"
|
|
1503
|
-
|
|
1504
|
-
i18n-addTaskText="kendo.gantt.addTaskText|The text of the DropDownButton in the AddTask component"
|
|
1505
|
-
addTaskText="Add Task"
|
|
1506
|
-
|
|
1507
|
-
i18n-addChildText="kendo.gantt.addChildText|The text of the 'Add Child' option in the AddTask component"
|
|
1508
|
-
addChildText="Add Child"
|
|
1509
|
-
|
|
1510
|
-
i18n-addAboveText="kendo.gantt.addAboveText|The text of the 'Add Above' option in the AddTask component"
|
|
1511
|
-
addAboveText="Add Above"
|
|
1512
|
-
|
|
1513
|
-
i18n-addBelowText="kendo.gantt.addBelowText|The text of the 'Add Below' option in the AddTask component"
|
|
1514
|
-
addBelowText="Add Below"
|
|
1515
|
-
|
|
1516
|
-
i18n-noRecords="kendo.gantt.noRecords|The label visible in the TreeList when there are no records"
|
|
1517
|
-
noRecords="No records available."
|
|
1518
|
-
|
|
1519
|
-
i18n-filter="kendo.gantt.filter|The label of the filter cell or icon"
|
|
1520
|
-
filter="Filter"
|
|
1521
|
-
|
|
1522
|
-
i18n-filterEqOperator="kendo.gantt.filterEqOperator|The text of the equal filter operator"
|
|
1523
|
-
filterEqOperator="Is equal to"
|
|
1524
|
-
|
|
1525
|
-
i18n-filterNotEqOperator="kendo.gantt.filterNotEqOperator|The text of the not equal filter operator"
|
|
1526
|
-
filterNotEqOperator="Is not equal to"
|
|
1527
|
-
|
|
1528
|
-
i18n-filterIsNullOperator="kendo.gantt.filterIsNullOperator|The text of the is null filter operator"
|
|
1529
|
-
filterIsNullOperator="Is null"
|
|
1530
|
-
|
|
1531
|
-
i18n-filterIsNotNullOperator="kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator"
|
|
1532
|
-
filterIsNotNullOperator="Is not null"
|
|
1533
|
-
|
|
1534
|
-
i18n-filterIsEmptyOperator="kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator"
|
|
1535
|
-
filterIsEmptyOperator="Is empty"
|
|
1536
|
-
|
|
1537
|
-
i18n-filterIsNotEmptyOperator="kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator"
|
|
1538
|
-
filterIsNotEmptyOperator="Is not empty"
|
|
1539
|
-
|
|
1540
|
-
i18n-filterStartsWithOperator="kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator"
|
|
1541
|
-
filterStartsWithOperator="Starts with"
|
|
1542
|
-
|
|
1543
|
-
i18n-filterContainsOperator="kendo.gantt.filterContainsOperator|The text of the contains filter operator"
|
|
1544
|
-
filterContainsOperator="Contains"
|
|
1545
|
-
|
|
1546
|
-
i18n-filterNotContainsOperator="kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator"
|
|
1547
|
-
filterNotContainsOperator="Does not contain"
|
|
1548
|
-
|
|
1549
|
-
i18n-filterEndsWithOperator="kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator"
|
|
1550
|
-
filterEndsWithOperator="Ends with"
|
|
1551
|
-
|
|
1552
|
-
i18n-filterGteOperator="kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator"
|
|
1553
|
-
filterGteOperator="Is greater than or equal to"
|
|
1554
|
-
|
|
1555
|
-
i18n-filterGtOperator="kendo.gantt.filterGtOperator|The text of the greater than filter operator"
|
|
1556
|
-
filterGtOperator="Is greater than"
|
|
1557
|
-
|
|
1558
|
-
i18n-filterLteOperator="kendo.gantt.filterLteOperator|The text of the less than or equal filter operator"
|
|
1559
|
-
filterLteOperator="Is less than or equal to"
|
|
1560
|
-
|
|
1561
|
-
i18n-filterLtOperator="kendo.gantt.filterLtOperator|The text of the less than filter operator"
|
|
1562
|
-
filterLtOperator="Is less than"
|
|
1563
|
-
|
|
1564
|
-
i18n-filterIsTrue="kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option"
|
|
1565
|
-
filterIsTrue="Is True"
|
|
1566
|
-
|
|
1567
|
-
i18n-filterIsFalse="kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option"
|
|
1568
|
-
filterIsFalse="Is False"
|
|
1569
|
-
|
|
1570
|
-
i18n-filterBooleanAll="kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option"
|
|
1571
|
-
filterBooleanAll="(All)"
|
|
1572
|
-
|
|
1573
|
-
i18n-filterAfterOrEqualOperator="kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator"
|
|
1574
|
-
filterAfterOrEqualOperator="Is after or equal to"
|
|
1575
|
-
|
|
1576
|
-
i18n-filterAfterOperator="kendo.gantt.filterAfterOperator|The text of the after date filter operator"
|
|
1577
|
-
filterAfterOperator="Is after"
|
|
1578
|
-
|
|
1579
|
-
i18n-filterBeforeOperator="kendo.gantt.filterBeforeOperator|The text of the before date filter operator"
|
|
1580
|
-
filterBeforeOperator="Is before"
|
|
1581
|
-
|
|
1582
|
-
i18n-filterBeforeOrEqualOperator="kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator"
|
|
1583
|
-
filterBeforeOrEqualOperator="Is before or equal to"
|
|
1584
|
-
|
|
1585
|
-
i18n-filterFilterButton="kendo.gantt.filterFilterButton|The text of the filter button"
|
|
1586
|
-
filterFilterButton="Filter"
|
|
1587
|
-
|
|
1588
|
-
i18n-filterClearButton="kendo.gantt.filterClearButton|The text of the clear filter button"
|
|
1589
|
-
filterClearButton="Clear"
|
|
1590
|
-
|
|
1591
|
-
i18n-filterAndLogic="kendo.gantt.filterAndLogic|The text of the And filter logic"
|
|
1592
|
-
filterAndLogic="And"
|
|
1593
|
-
|
|
1594
|
-
i18n-filterOrLogic="kendo.gantt.filterOrLogic|The text of the Or filter logic"
|
|
1595
|
-
filterOrLogic="Or"
|
|
1596
|
-
|
|
1597
|
-
i18n-loading="kendo.gantt.loading|The loading text"
|
|
1598
|
-
loading="Loading"
|
|
1599
|
-
|
|
1600
|
-
i18n-columnMenu="kendo.gantt.columnMenu|The title of the column menu icon"
|
|
1601
|
-
columnMenu="Column Menu"
|
|
1602
|
-
|
|
1603
|
-
i18n-columns="kendo.gantt.columns|The text shown in the column menu for the columns item"
|
|
1604
|
-
columns="Columns"
|
|
1605
|
-
|
|
1606
|
-
i18n-lock-disabled="kendo.gantt.lock|The text shown in the column menu for the lock item"
|
|
1607
|
-
lock-disabled="Lock"
|
|
1608
|
-
|
|
1609
|
-
i18n-unlock-disabled="kendo.gantt.unlock|The text shown in the column menu for the unlock item"
|
|
1610
|
-
unlock-disabled="Unlock"
|
|
1611
|
-
|
|
1612
|
-
i18n-sortable="kendo.gantt.sortable|The label of the sort icon"
|
|
1613
|
-
sortable="Sortable"
|
|
1614
|
-
|
|
1615
|
-
i18n-sortAscending="kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item"
|
|
1616
|
-
sortAscending="Sort Ascending"
|
|
1617
|
-
|
|
1618
|
-
i18n-sortDescending="kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item"
|
|
1619
|
-
sortDescending="Sort Descending"
|
|
1620
|
-
|
|
1621
|
-
i18n-sortedDefault="kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted"
|
|
1622
|
-
sortedDefault="Not Sorted"
|
|
1623
|
-
|
|
1624
|
-
i18n-columnsApply="kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
|
|
1625
|
-
columnsApply="Apply"
|
|
1626
|
-
|
|
1627
|
-
i18n-columnsReset="kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
|
|
1628
|
-
columnsReset="Reset"
|
|
1629
|
-
|
|
1630
|
-
i18n-tooltipStartDateText="kendo.gantt.tooltipStartDateText|The text shown in the task tooltip before the task start date"
|
|
1631
|
-
tooltipStartDateText="Start"
|
|
1632
|
-
|
|
1633
|
-
i18n-tooltipEndDateText="kendo.gantt.tooltipEndDateText|The text shown in the task tooltip before the task end date"
|
|
1634
|
-
tooltipEndDateText="End"></ng-container>
|
|
1635
|
-
@if (showToolbar('top')) {
|
|
1636
|
-
<kendo-gantt-toolbar
|
|
1637
|
-
[attr.aria-label]="toolbarAriaLabel"
|
|
1638
|
-
[showAddTask]="toolbarSettings.addTaskTool === 'top' || toolbarSettings.addTaskTool === 'both'"
|
|
1639
|
-
[showViewSelector]="toolbarSettings.viewSelectorTool === 'top' || toolbarSettings.viewSelectorTool === 'both'"
|
|
1640
|
-
[toolbarTemplate]="toolbarTemplate"
|
|
1641
|
-
[views]="viewTypes"
|
|
1642
|
-
[activeView]="activeView"
|
|
1643
|
-
class="k-gantt-header"
|
|
1644
|
-
position="top"
|
|
1645
|
-
[navigable]="navigable"
|
|
1646
|
-
(activeViewChange)="changeActiveView($event)"></kendo-gantt-toolbar>
|
|
1647
|
-
}
|
|
1648
|
-
<div class="k-gantt-content">
|
|
1649
|
-
<kendo-splitter [style.border]="0">
|
|
1650
|
-
<kendo-splitter-pane
|
|
1651
|
-
class="k-gantt-treelist k-gantt-treelist-scrollable"
|
|
1652
|
-
[collapsible]="treeListPaneOptions?.collapsible"
|
|
1653
|
-
[collapsed]="treeListPaneOptions?.collapsed"
|
|
1654
|
-
(collapsedChange)="onTreeListCollapsedChange($event)"
|
|
1655
|
-
[scrollable]="false">
|
|
1656
|
-
<kendo-treelist
|
|
1657
|
-
[idField]="taskIdField"
|
|
1658
|
-
[columns]="columns"
|
|
1659
|
-
[data]="data"
|
|
1660
|
-
[hasChildren]="hasChildren"
|
|
1661
|
-
[fetchChildren]="fetchChildren"
|
|
1662
|
-
[navigable]="navigable"
|
|
1663
|
-
[isExpanded]="isExpanded"
|
|
1664
|
-
[autoSize]="columnsAutoSize"
|
|
1665
|
-
[columnMenu]="columnMenu"
|
|
1666
|
-
[reorderable]="columnsReorderable"
|
|
1667
|
-
[resizable]="columnsResizable"
|
|
1668
|
-
[rowClass]="rowClass"
|
|
1669
|
-
[isSelected]="isSelected"
|
|
1670
|
-
[selectable]="selectable"
|
|
1671
|
-
[sortable]="sortable"
|
|
1672
|
-
[sort]="sort"
|
|
1673
|
-
[filterable]="filterMenu"
|
|
1674
|
-
[filter]="filter"
|
|
1675
|
-
(filterChange)="filterChange.emit($event)"
|
|
1676
|
-
(sortChange)="sortChange.emit($event)"
|
|
1677
|
-
(dataStateChange)="dataStateChange.emit({
|
|
1678
|
-
filter: $event.filter,
|
|
1679
|
-
sort: $event.sort
|
|
1680
|
-
})"
|
|
1681
|
-
(expandStateChange)="expandStateChange.emit($event)"
|
|
1682
|
-
(expand)="rowExpand.emit({ dataItem: $event.dataItem })"
|
|
1683
|
-
(collapse)="rowCollapse.emit({ dataItem: $event.dataItem })"
|
|
1684
|
-
(columnReorder)="columnReorder.emit($event)"
|
|
1685
|
-
(columnResize)="columnResize.emit($event)"
|
|
1686
|
-
(columnVisibilityChange)="handleColumnVisibilityChange($event)"
|
|
1687
|
-
(columnLockedChange)="columnLockedChange.emit($event)"
|
|
1688
|
-
(selectionChange)="handleTreeListSelectionChange($event)"
|
|
1689
|
-
(cellClick)="handleTreeListCellClick($event)"
|
|
1690
|
-
(cellClose)="handleCellClose($event)"
|
|
1691
|
-
[kendoEventsOutsideAngular]="{
|
|
1692
|
-
dblclick: handleTreeListDoubleClick
|
|
1693
|
-
}"
|
|
1694
|
-
[scope]="this"
|
|
1695
|
-
>
|
|
1696
|
-
<kendo-treelist-messages
|
|
1697
|
-
[noRecords]="getText('noRecords')"
|
|
1698
|
-
[filter]="getText('filter')"
|
|
1699
|
-
[filterEqOperator]="getText('filterEqOperator')"
|
|
1700
|
-
[filterNotEqOperator]="getText('filterNotEqOperator')"
|
|
1701
|
-
[filterIsNullOperator]="getText('filterIsNullOperator')"
|
|
1702
|
-
[filterIsNotNullOperator]="getText('filterIsNotNullOperator')"
|
|
1703
|
-
[filterIsEmptyOperator]="getText('filterIsEmptyOperator')"
|
|
1704
|
-
[filterIsNotEmptyOperator]="getText('filterIsNotEmptyOperator')"
|
|
1705
|
-
[filterStartsWithOperator]="getText('filterStartsWithOperator')"
|
|
1706
|
-
[filterContainsOperator]="getText('filterContainsOperator')"
|
|
1707
|
-
[filterNotContainsOperator]="getText('filterNotContainsOperator')"
|
|
1708
|
-
[filterEndsWithOperator]="getText('filterEndsWithOperator')"
|
|
1709
|
-
[filterGteOperator]="getText('filterGteOperator')"
|
|
1710
|
-
[filterGtOperator]="getText('filterGtOperator')"
|
|
1711
|
-
[filterLteOperator]="getText('filterLteOperator')"
|
|
1712
|
-
[filterLtOperator]="getText('filterLtOperator')"
|
|
1713
|
-
[filterIsTrue]="getText('filterIsTrue')"
|
|
1714
|
-
[filterIsFalse]="getText('filterIsFalse')"
|
|
1715
|
-
[filterBooleanAll]="getText('filterBooleanAll')"
|
|
1716
|
-
[filterAfterOrEqualOperator]="getText('filterAfterOrEqualOperator')"
|
|
1717
|
-
[filterAfterOperator]="getText('filterAfterOperator')"
|
|
1718
|
-
[filterBeforeOperator]="getText('filterBeforeOperator')"
|
|
1719
|
-
[filterBeforeOrEqualOperator]="getText('filterBeforeOrEqualOperator')"
|
|
1720
|
-
[filterFilterButton]="getText('filterFilterButton')"
|
|
1721
|
-
[filterClearButton]="getText('filterClearButton')"
|
|
1722
|
-
[filterAndLogic]="getText('filterAndLogic')"
|
|
1723
|
-
[filterOrLogic]="getText('filterOrLogic')"
|
|
1724
|
-
[loading]="getText('loading')"
|
|
1725
|
-
[columnMenu]="getText('columnMenu')"
|
|
1726
|
-
[columns]="getText('columns')"
|
|
1727
|
-
[sortable]="getText('sortable')"
|
|
1728
|
-
[sortAscending]="getText('sortAscending')"
|
|
1729
|
-
[sortDescending]="getText('sortDescending')"
|
|
1730
|
-
[sortedAscending]="getText('sortedAscending')"
|
|
1731
|
-
[sortedDescending]="getText('sortedDescending')"
|
|
1732
|
-
[sortedDefault]="getText('sortedDefault')"
|
|
1733
|
-
[columnsApply]="getText('columnsApply')"
|
|
1734
|
-
[columnsReset]="getText('columnsReset')"
|
|
1735
|
-
>
|
|
1736
|
-
</kendo-treelist-messages>
|
|
1737
|
-
</kendo-treelist>
|
|
1738
|
-
</kendo-splitter-pane>
|
|
1739
|
-
<kendo-splitter-pane
|
|
1740
|
-
[collapsible]="timelinePaneOptions?.collapsible"
|
|
1741
|
-
[resizable]="timelinePaneOptions?.resizable"
|
|
1742
|
-
[collapsed]="timelinePaneOptions?.collapsed"
|
|
1743
|
-
[min]="timelinePaneOptions?.min"
|
|
1744
|
-
[max]="timelinePaneOptions?.max"
|
|
1745
|
-
[size]="timelinePaneOptions?.size"
|
|
1746
|
-
(collapsedChange)="onTimelineCollapsedChange($event)"
|
|
1747
|
-
(sizeChange)="onTimelinePaneSizeChange($event)"
|
|
1748
|
-
[scrollable]="false"
|
|
1749
|
-
class="k-gantt-timeline-pane">
|
|
1750
|
-
@if (views && views.length) {
|
|
1751
|
-
<kendo-gantt-timeline
|
|
1752
|
-
[renderDependencyDragClues]="renderDependencyDragClues"
|
|
1753
|
-
[dragScrollSettings]="dragScrollSettings"
|
|
1754
|
-
[rows]="viewItems"
|
|
1755
|
-
[slots]="timelineSlots"
|
|
1756
|
-
[currentTimeMarker]="activeViewCurrentTimeMarker"
|
|
1757
|
-
[groupSlots]="timelineGroupSlots"
|
|
1758
|
-
[tableWidth]="tableWidth"
|
|
1759
|
-
[activeView]="activeView"
|
|
1760
|
-
[taskContentTemplate]="taskContentTemplate?.templateRef"
|
|
1761
|
-
[taskTemplate]="taskTemplate?.templateRef"
|
|
1762
|
-
[summaryTaskTemplate]="summaryTaskTemplate?.templateRef"
|
|
1763
|
-
[taskClass]="taskClass"
|
|
1764
|
-
[dependencies]="dependencies"
|
|
1765
|
-
[isExpanded]="isExpanded"
|
|
1766
|
-
[selectable]="selectable"
|
|
1767
|
-
[isTaskSelected]="isTaskSelected"
|
|
1768
|
-
[kendoEventsOutsideAngular]="{
|
|
1769
|
-
click: handleTimelineClick,
|
|
1770
|
-
contextmenu: handleTimelineRightClick,
|
|
1771
|
-
dblclick: handleTimelineDblClick,
|
|
1772
|
-
mousedown: handleTimelineMouseDown
|
|
1773
|
-
}"
|
|
1774
|
-
[customTooltipTemplate]="taskTooltipTemplate"
|
|
1775
|
-
[customDragTooltipTemplate]="taskDragTooltipTemplate"
|
|
1776
|
-
[tooltipOptions]="taskTooltipOptions"
|
|
1777
|
-
[scope]="this"
|
|
1778
|
-
></kendo-gantt-timeline>
|
|
1779
|
-
}
|
|
1780
|
-
</kendo-splitter-pane>
|
|
1781
|
-
</kendo-splitter>
|
|
1782
|
-
</div>
|
|
1783
|
-
@if (showToolbar('bottom')) {
|
|
1784
|
-
<kendo-gantt-toolbar
|
|
1785
|
-
[attr.aria-label]="toolbarAriaLabel"
|
|
1786
|
-
[showAddTask]="toolbarSettings.addTaskTool === 'bottom' || toolbarSettings.addTaskTool === 'both'"
|
|
1787
|
-
[showViewSelector]="toolbarSettings.viewSelectorTool === 'bottom' || toolbarSettings.viewSelectorTool === 'both'"
|
|
1788
|
-
[toolbarTemplate]="toolbarTemplate"
|
|
1789
|
-
[views]="viewTypes"
|
|
1790
|
-
[activeView]="activeView"
|
|
1791
|
-
[navigable]="navigable"
|
|
1792
|
-
class="k-gantt-footer"
|
|
1793
|
-
position="bottom"
|
|
1794
|
-
(activeViewChange)="changeActiveView($event)"></kendo-gantt-toolbar>
|
|
1795
|
-
}
|
|
1796
|
-
@if (showEditingDialog) {
|
|
1797
|
-
<kendo-gantt-edit-dialog
|
|
1798
|
-
[data]="data">
|
|
1799
|
-
</kendo-gantt-edit-dialog>
|
|
1800
|
-
}
|
|
1801
|
-
@if (showConfirmationDialog) {
|
|
1802
|
-
<kendo-dialog
|
|
1803
|
-
[width]="575"
|
|
1804
|
-
[height]="170"
|
|
1805
|
-
[title]="getText('confirmationDialogTitle')"
|
|
1806
|
-
(close)="handleConfirmationDialogClose()">
|
|
1807
|
-
<span>{{ getText('confirmationDialogContent') }}</span>
|
|
1808
|
-
<kendo-dialog-actions layout="start">
|
|
1809
|
-
<kendo-treelist-spacer></kendo-treelist-spacer>
|
|
1810
|
-
<button kendoButton [primary]="true" (click)="handleDeleteConfirmation()">{{ getText('deleteButtonText') }}</button>
|
|
1811
|
-
<button kendoButton (click)="handleConfirmationDialogClose()">{{ getText('cancelButtonText') }}</button>
|
|
1812
|
-
</kendo-dialog-actions>
|
|
1813
|
-
</kendo-dialog>
|
|
1814
|
-
}
|
|
1815
|
-
|
|
1816
|
-
@if (showLicenseWatermark) {
|
|
1817
|
-
<div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
|
|
1818
|
-
}
|
|
1819
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGanttLocalizedMessages]" }, { kind: "component", type: ToolbarComponent, selector: "kendo-gantt-toolbar", inputs: ["showAddTask", "showViewSelector", "views", "activeView", "toolbarTemplate", "navigable", "position"], outputs: ["activeViewChange"] }, { kind: "component", type: SplitterComponent, selector: "kendo-splitter", inputs: ["orientation", "splitbarWidth", "resizeStep", "splitterBarClass"], outputs: ["layoutChange"], exportAs: ["kendoSplitter"] }, { kind: "component", type: SplitterPaneComponent, selector: "kendo-splitter-pane", inputs: ["order", "size", "splitterBarAttributes", "splitterBarClass", "min", "max", "resizable", "collapsible", "scrollable", "collapsed", "orientation", "containsSplitter", "overlayContent"], outputs: ["sizeChange", "collapsedChange"], exportAs: ["kendoSplitterPane"] }, { kind: "component", type: TreeListComponent, selector: "kendo-treelist", inputs: ["aria-label", "data", "pageSize", "height", "rowHeight", "skip", "scrollable", "sort", "trackBy", "filter", "virtualColumns", "filterable", "sortable", "pageable", "navigable", "autoSize", "rowClass", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "idField", "selectable", "isSelected", "rowReorderable", "columns", "fetchChildren", "hasChildren", "isExpanded"], outputs: ["selectionChange", "filterChange", "pageChange", "sortChange", "dataStateChange", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "scrollBottom", "contentScroll", "expand", "collapse", "expandStateChange", "rowReorder"], exportAs: ["kendoTreeList"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: CustomMessagesComponent, selector: "kendo-treelist-messages" }, { kind: "component", type: GanttTimelineComponent, selector: "kendo-gantt-timeline", inputs: ["rows", "slots", "groupSlots", "tableWidth", "activeView", "taskContentTemplate", "taskTemplate", "summaryTaskTemplate", "taskClass", "renderDependencyDragClues", "dragScrollSettings", "currentTimeMarker", "customTooltipTemplate", "customDragTooltipTemplate", "tooltipOptions", "selectable", "isTaskSelected", "isExpanded", "dependencies"], outputs: ["timelineContainerPress", "timelineContainerDrag", "timelineContainerRelease"] }, { kind: "component", type: EditDialogComponent, selector: "kendo-gantt-edit-dialog", inputs: ["data"] }, { kind: "component", type: DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation", "themeColor"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: TreeListSpacerComponent, selector: "kendo-treelist-spacer", inputs: ["width"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }] });
|
|
1820
|
-
}
|
|
1821
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttComponent, decorators: [{
|
|
1822
|
-
type: Component,
|
|
1823
|
-
args: [{
|
|
1824
|
-
selector: 'kendo-gantt',
|
|
1825
|
-
exportAs: 'kendoGantt',
|
|
1826
|
-
providers: [
|
|
1827
|
-
GanttLocalizationService,
|
|
1828
|
-
LocalizationService,
|
|
1829
|
-
{
|
|
1830
|
-
provide: L10N_PREFIX,
|
|
1831
|
-
useValue: 'kendo.gantt'
|
|
1832
|
-
},
|
|
1833
|
-
{
|
|
1834
|
-
provide: DataBoundTreeComponent,
|
|
1835
|
-
useExisting: forwardRef(() => GanttComponent)
|
|
1836
|
-
},
|
|
1837
|
-
{
|
|
1838
|
-
provide: ExpandableTreeComponent,
|
|
1839
|
-
useExisting: forwardRef(() => GanttComponent)
|
|
1840
|
-
},
|
|
1841
|
-
TimelineViewService,
|
|
1842
|
-
TimelineDayViewService,
|
|
1843
|
-
TimelineWeekViewService,
|
|
1844
|
-
TimelineMonthViewService,
|
|
1845
|
-
TimeLineYearViewService,
|
|
1846
|
-
ScrollSyncService,
|
|
1847
|
-
DependencyDomService,
|
|
1848
|
-
MappingService,
|
|
1849
|
-
OptionChangesService,
|
|
1850
|
-
EditService,
|
|
1851
|
-
TimelineScrollService,
|
|
1852
|
-
NavigationService,
|
|
1853
|
-
CurrentTimeMarkerService
|
|
1854
|
-
],
|
|
1855
|
-
template: `
|
|
1856
|
-
<ng-container kendoGanttLocalizedMessages
|
|
1857
|
-
i18n-taskEditingGeneralTabTitle="kendo.gantt.taskEditingGeneralTabTitle|The title of the 'General' tab of the editing dialog TabStrip"
|
|
1858
|
-
taskEditingGeneralTabTitle="General"
|
|
1859
|
-
|
|
1860
|
-
i18n-taskEditingPredecessorsTabTitle="kendo.gantt.taskEditingPredecessorsTabTitle|The title of the 'Predecessors' dependencies tab of the editing dialog TabStrip"
|
|
1861
|
-
taskEditingPredecessorsTabTitle="Predecessors"
|
|
1862
|
-
|
|
1863
|
-
i18n-taskEditingSuccessorsTabTitle="kendo.gantt.taskEditingSuccessorsTabTitle|The title of the 'Successors' dependencies tab of the editing dialog TabStrip"
|
|
1864
|
-
taskEditingSuccessorsTabTitle="Successors"
|
|
1865
|
-
|
|
1866
|
-
i18n-taskEditingDependenciesAddButtonText="kendo.gantt.taskEditingDependenciesAddButtonText|The text of the 'Add' button in the dependencies tabs of the editing dialog TabStrip"
|
|
1867
|
-
taskEditingDependenciesAddButtonText="Add"
|
|
1868
|
-
|
|
1869
|
-
i18n-taskEditingDependenciesRemoveButtonText="kendo.gantt.taskEditingDependenciesRemoveButtonText|The text of the 'Remove' button in the dependencies tabs of the editing dialog TabStrip"
|
|
1870
|
-
taskEditingDependenciesRemoveButtonText="Remove"
|
|
1871
|
-
|
|
1872
|
-
i18n-taskEditingDependenciesGridNameColumnTitle="kendo.gantt.taskEditingDependenciesGridNameColumnTitle|The title of the 'Task Title' Grid column in the dependencies tabs of the editing dialog TabStrip"
|
|
1873
|
-
taskEditingDependenciesGridNameColumnTitle="Task Title"
|
|
1874
|
-
|
|
1875
|
-
i18n-taskEditingDependenciesGridTypeColumnTitle="kendo.gantt.taskEditingDependenciesGridTypeColumnTitle|The title of the 'Type' Grid column in the dependencies tabs of the editing dialog TabStrip"
|
|
1876
|
-
taskEditingDependenciesGridTypeColumnTitle="Type"
|
|
1877
|
-
|
|
1878
|
-
i18n-taskDeleteLabel="kendo.gantt.taskDeleteLabel|The label of the task delete icon"
|
|
1879
|
-
taskDeleteLabel="Delete"
|
|
1880
|
-
|
|
1881
|
-
i18n-taskEditingDialogTitle="kendo.gantt.taskEditingDialogTitle|The title of the task editing dialog"
|
|
1882
|
-
taskEditingDialogTitle="Editing Task"
|
|
1883
|
-
|
|
1884
|
-
i18n-taskEditingDialogCloseTitle="kendo.gantt.taskEditingDialogCloseTitle|The title of the task editing dialog close button"
|
|
1885
|
-
taskEditingDialogCloseTitle="Close"
|
|
1886
|
-
|
|
1887
|
-
i18n-confirmationDialogCloseTitle="kendo.gantt.confirmationDialogCloseTitle|The title of the confirmation dialog close button"
|
|
1888
|
-
confirmationDialogCloseTitle="Close"
|
|
1889
|
-
|
|
1890
|
-
i18n-confirmationDialogTitle="kendo.gantt.confirmationDialogTitle|The title of the delete task confirmation dialog"
|
|
1891
|
-
confirmationDialogTitle="Delete Task"
|
|
1892
|
-
|
|
1893
|
-
i18n-confirmationDialogContent="kendo.gantt.confirmationDialogContent|The content of the delete task confirmation dialog"
|
|
1894
|
-
confirmationDialogContent="Are you sure you want to delete this task?"
|
|
1895
|
-
|
|
1896
|
-
i18n-deleteButtonText="kendo.gantt.deleteButtonText|The text of the task editing dialog 'Delete' button"
|
|
1897
|
-
deleteButtonText="Delete"
|
|
1898
|
-
|
|
1899
|
-
i18n-cancelButtonText="kendo.gantt.cancelButtonText|The text of the task editing dialog 'Cancel' button"
|
|
1900
|
-
cancelButtonText="Cancel"
|
|
1901
|
-
|
|
1902
|
-
i18n-saveButtonText="kendo.gantt.saveButtonText|The text of the task editing dialog 'Save' button"
|
|
1903
|
-
saveButtonText="Save"
|
|
1904
|
-
|
|
1905
|
-
i18n-titleFieldInputLabel="kendo.gantt.titleFieldInputLabel|The label of the 'title' field input in editing mode"
|
|
1906
|
-
titleFieldInputLabel="Title"
|
|
1907
|
-
|
|
1908
|
-
i18n-startFieldInputLabel="kendo.gantt.startFieldInputLabel|The label of the 'start' field input in editing mode"
|
|
1909
|
-
startFieldInputLabel="Start"
|
|
1910
|
-
|
|
1911
|
-
i18n-endFieldInputLabel="kendo.gantt.endFieldInputLabel|The label of the 'end' field input in editing mode"
|
|
1912
|
-
endFieldInputLabel="End"
|
|
1913
|
-
|
|
1914
|
-
i18n-completionRatioFieldInputLabel="kendo.gantt.completionRatioFieldInputLabel|The label of the 'completionRatio' field input in editing mode"
|
|
1915
|
-
completionRatioFieldInputLabel="Progress"
|
|
1916
|
-
|
|
1917
|
-
i18n-dayViewText="kendo.gantt.dayViewText|The text of the day view in the ViewSelector component"
|
|
1918
|
-
dayViewText="Day"
|
|
1919
|
-
|
|
1920
|
-
i18n-weekViewText="kendo.gantt.weekViewText|The text of the week view in the ViewSelector component"
|
|
1921
|
-
weekViewText="Week"
|
|
1922
|
-
|
|
1923
|
-
i18n-monthViewText="kendo.gantt.monthViewText|The text of the month view in the ViewSelector component"
|
|
1924
|
-
monthViewText="Month"
|
|
1925
|
-
|
|
1926
|
-
i18n-yearViewText-disabled="kendo.gantt.yearViewText|The text of the year view in the ViewSelector component"
|
|
1927
|
-
yearViewText="Year"
|
|
1928
|
-
|
|
1929
|
-
i18n-addTaskText="kendo.gantt.addTaskText|The text of the DropDownButton in the AddTask component"
|
|
1930
|
-
addTaskText="Add Task"
|
|
1931
|
-
|
|
1932
|
-
i18n-addChildText="kendo.gantt.addChildText|The text of the 'Add Child' option in the AddTask component"
|
|
1933
|
-
addChildText="Add Child"
|
|
1934
|
-
|
|
1935
|
-
i18n-addAboveText="kendo.gantt.addAboveText|The text of the 'Add Above' option in the AddTask component"
|
|
1936
|
-
addAboveText="Add Above"
|
|
1937
|
-
|
|
1938
|
-
i18n-addBelowText="kendo.gantt.addBelowText|The text of the 'Add Below' option in the AddTask component"
|
|
1939
|
-
addBelowText="Add Below"
|
|
1940
|
-
|
|
1941
|
-
i18n-noRecords="kendo.gantt.noRecords|The label visible in the TreeList when there are no records"
|
|
1942
|
-
noRecords="No records available."
|
|
1943
|
-
|
|
1944
|
-
i18n-filter="kendo.gantt.filter|The label of the filter cell or icon"
|
|
1945
|
-
filter="Filter"
|
|
1946
|
-
|
|
1947
|
-
i18n-filterEqOperator="kendo.gantt.filterEqOperator|The text of the equal filter operator"
|
|
1948
|
-
filterEqOperator="Is equal to"
|
|
1949
|
-
|
|
1950
|
-
i18n-filterNotEqOperator="kendo.gantt.filterNotEqOperator|The text of the not equal filter operator"
|
|
1951
|
-
filterNotEqOperator="Is not equal to"
|
|
1952
|
-
|
|
1953
|
-
i18n-filterIsNullOperator="kendo.gantt.filterIsNullOperator|The text of the is null filter operator"
|
|
1954
|
-
filterIsNullOperator="Is null"
|
|
1955
|
-
|
|
1956
|
-
i18n-filterIsNotNullOperator="kendo.gantt.filterIsNotNullOperator|The text of the is not null filter operator"
|
|
1957
|
-
filterIsNotNullOperator="Is not null"
|
|
1958
|
-
|
|
1959
|
-
i18n-filterIsEmptyOperator="kendo.gantt.filterIsEmptyOperator|The text of the is empty filter operator"
|
|
1960
|
-
filterIsEmptyOperator="Is empty"
|
|
1961
|
-
|
|
1962
|
-
i18n-filterIsNotEmptyOperator="kendo.gantt.filterIsNotEmptyOperator|The text of the is not empty filter operator"
|
|
1963
|
-
filterIsNotEmptyOperator="Is not empty"
|
|
1964
|
-
|
|
1965
|
-
i18n-filterStartsWithOperator="kendo.gantt.filterStartsWithOperator|The text of the starts with filter operator"
|
|
1966
|
-
filterStartsWithOperator="Starts with"
|
|
1967
|
-
|
|
1968
|
-
i18n-filterContainsOperator="kendo.gantt.filterContainsOperator|The text of the contains filter operator"
|
|
1969
|
-
filterContainsOperator="Contains"
|
|
1970
|
-
|
|
1971
|
-
i18n-filterNotContainsOperator="kendo.gantt.filterNotContainsOperator|The text of the does not contain filter operator"
|
|
1972
|
-
filterNotContainsOperator="Does not contain"
|
|
1973
|
-
|
|
1974
|
-
i18n-filterEndsWithOperator="kendo.gantt.filterEndsWithOperator|The text of the ends with filter operator"
|
|
1975
|
-
filterEndsWithOperator="Ends with"
|
|
1976
|
-
|
|
1977
|
-
i18n-filterGteOperator="kendo.gantt.filterGteOperator|The text of the greater than or equal filter operator"
|
|
1978
|
-
filterGteOperator="Is greater than or equal to"
|
|
1979
|
-
|
|
1980
|
-
i18n-filterGtOperator="kendo.gantt.filterGtOperator|The text of the greater than filter operator"
|
|
1981
|
-
filterGtOperator="Is greater than"
|
|
1982
|
-
|
|
1983
|
-
i18n-filterLteOperator="kendo.gantt.filterLteOperator|The text of the less than or equal filter operator"
|
|
1984
|
-
filterLteOperator="Is less than or equal to"
|
|
1985
|
-
|
|
1986
|
-
i18n-filterLtOperator="kendo.gantt.filterLtOperator|The text of the less than filter operator"
|
|
1987
|
-
filterLtOperator="Is less than"
|
|
1988
|
-
|
|
1989
|
-
i18n-filterIsTrue="kendo.gantt.filterIsTrue|The text of the IsTrue boolean filter option"
|
|
1990
|
-
filterIsTrue="Is True"
|
|
1991
|
-
|
|
1992
|
-
i18n-filterIsFalse="kendo.gantt.filterIsFalse|The text of the IsFalse boolean filter option"
|
|
1993
|
-
filterIsFalse="Is False"
|
|
1994
|
-
|
|
1995
|
-
i18n-filterBooleanAll="kendo.gantt.filterBooleanAll|The text of the (All) boolean filter option"
|
|
1996
|
-
filterBooleanAll="(All)"
|
|
1997
|
-
|
|
1998
|
-
i18n-filterAfterOrEqualOperator="kendo.gantt.filterAfterOrEqualOperator|The text of the after or equal date filter operator"
|
|
1999
|
-
filterAfterOrEqualOperator="Is after or equal to"
|
|
2000
|
-
|
|
2001
|
-
i18n-filterAfterOperator="kendo.gantt.filterAfterOperator|The text of the after date filter operator"
|
|
2002
|
-
filterAfterOperator="Is after"
|
|
2003
|
-
|
|
2004
|
-
i18n-filterBeforeOperator="kendo.gantt.filterBeforeOperator|The text of the before date filter operator"
|
|
2005
|
-
filterBeforeOperator="Is before"
|
|
2006
|
-
|
|
2007
|
-
i18n-filterBeforeOrEqualOperator="kendo.gantt.filterBeforeOrEqualOperator|The text of the before or equal date filter operator"
|
|
2008
|
-
filterBeforeOrEqualOperator="Is before or equal to"
|
|
2009
|
-
|
|
2010
|
-
i18n-filterFilterButton="kendo.gantt.filterFilterButton|The text of the filter button"
|
|
2011
|
-
filterFilterButton="Filter"
|
|
2012
|
-
|
|
2013
|
-
i18n-filterClearButton="kendo.gantt.filterClearButton|The text of the clear filter button"
|
|
2014
|
-
filterClearButton="Clear"
|
|
2015
|
-
|
|
2016
|
-
i18n-filterAndLogic="kendo.gantt.filterAndLogic|The text of the And filter logic"
|
|
2017
|
-
filterAndLogic="And"
|
|
2018
|
-
|
|
2019
|
-
i18n-filterOrLogic="kendo.gantt.filterOrLogic|The text of the Or filter logic"
|
|
2020
|
-
filterOrLogic="Or"
|
|
2021
|
-
|
|
2022
|
-
i18n-loading="kendo.gantt.loading|The loading text"
|
|
2023
|
-
loading="Loading"
|
|
2024
|
-
|
|
2025
|
-
i18n-columnMenu="kendo.gantt.columnMenu|The title of the column menu icon"
|
|
2026
|
-
columnMenu="Column Menu"
|
|
2027
|
-
|
|
2028
|
-
i18n-columns="kendo.gantt.columns|The text shown in the column menu for the columns item"
|
|
2029
|
-
columns="Columns"
|
|
2030
|
-
|
|
2031
|
-
i18n-lock-disabled="kendo.gantt.lock|The text shown in the column menu for the lock item"
|
|
2032
|
-
lock-disabled="Lock"
|
|
2033
|
-
|
|
2034
|
-
i18n-unlock-disabled="kendo.gantt.unlock|The text shown in the column menu for the unlock item"
|
|
2035
|
-
unlock-disabled="Unlock"
|
|
2036
|
-
|
|
2037
|
-
i18n-sortable="kendo.gantt.sortable|The label of the sort icon"
|
|
2038
|
-
sortable="Sortable"
|
|
2039
|
-
|
|
2040
|
-
i18n-sortAscending="kendo.gantt.sortAscending|The text shown in the column menu for the sort ascending item"
|
|
2041
|
-
sortAscending="Sort Ascending"
|
|
2042
|
-
|
|
2043
|
-
i18n-sortDescending="kendo.gantt.sortDescending|The text shown in the column menu for the sort descending item"
|
|
2044
|
-
sortDescending="Sort Descending"
|
|
2045
|
-
|
|
2046
|
-
i18n-sortedDefault="kendo.gantt.sortedDefault|The status announcement when a column is no longer sorted"
|
|
2047
|
-
sortedDefault="Not Sorted"
|
|
2048
|
-
|
|
2049
|
-
i18n-columnsApply="kendo.gantt.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
|
|
2050
|
-
columnsApply="Apply"
|
|
2051
|
-
|
|
2052
|
-
i18n-columnsReset="kendo.gantt.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
|
|
2053
|
-
columnsReset="Reset"
|
|
2054
|
-
|
|
2055
|
-
i18n-tooltipStartDateText="kendo.gantt.tooltipStartDateText|The text shown in the task tooltip before the task start date"
|
|
2056
|
-
tooltipStartDateText="Start"
|
|
2057
|
-
|
|
2058
|
-
i18n-tooltipEndDateText="kendo.gantt.tooltipEndDateText|The text shown in the task tooltip before the task end date"
|
|
2059
|
-
tooltipEndDateText="End"></ng-container>
|
|
2060
|
-
@if (showToolbar('top')) {
|
|
2061
|
-
<kendo-gantt-toolbar
|
|
2062
|
-
[attr.aria-label]="toolbarAriaLabel"
|
|
2063
|
-
[showAddTask]="toolbarSettings.addTaskTool === 'top' || toolbarSettings.addTaskTool === 'both'"
|
|
2064
|
-
[showViewSelector]="toolbarSettings.viewSelectorTool === 'top' || toolbarSettings.viewSelectorTool === 'both'"
|
|
2065
|
-
[toolbarTemplate]="toolbarTemplate"
|
|
2066
|
-
[views]="viewTypes"
|
|
2067
|
-
[activeView]="activeView"
|
|
2068
|
-
class="k-gantt-header"
|
|
2069
|
-
position="top"
|
|
2070
|
-
[navigable]="navigable"
|
|
2071
|
-
(activeViewChange)="changeActiveView($event)"></kendo-gantt-toolbar>
|
|
2072
|
-
}
|
|
2073
|
-
<div class="k-gantt-content">
|
|
2074
|
-
<kendo-splitter [style.border]="0">
|
|
2075
|
-
<kendo-splitter-pane
|
|
2076
|
-
class="k-gantt-treelist k-gantt-treelist-scrollable"
|
|
2077
|
-
[collapsible]="treeListPaneOptions?.collapsible"
|
|
2078
|
-
[collapsed]="treeListPaneOptions?.collapsed"
|
|
2079
|
-
(collapsedChange)="onTreeListCollapsedChange($event)"
|
|
2080
|
-
[scrollable]="false">
|
|
2081
|
-
<kendo-treelist
|
|
2082
|
-
[idField]="taskIdField"
|
|
2083
|
-
[columns]="columns"
|
|
2084
|
-
[data]="data"
|
|
2085
|
-
[hasChildren]="hasChildren"
|
|
2086
|
-
[fetchChildren]="fetchChildren"
|
|
2087
|
-
[navigable]="navigable"
|
|
2088
|
-
[isExpanded]="isExpanded"
|
|
2089
|
-
[autoSize]="columnsAutoSize"
|
|
2090
|
-
[columnMenu]="columnMenu"
|
|
2091
|
-
[reorderable]="columnsReorderable"
|
|
2092
|
-
[resizable]="columnsResizable"
|
|
2093
|
-
[rowClass]="rowClass"
|
|
2094
|
-
[isSelected]="isSelected"
|
|
2095
|
-
[selectable]="selectable"
|
|
2096
|
-
[sortable]="sortable"
|
|
2097
|
-
[sort]="sort"
|
|
2098
|
-
[filterable]="filterMenu"
|
|
2099
|
-
[filter]="filter"
|
|
2100
|
-
(filterChange)="filterChange.emit($event)"
|
|
2101
|
-
(sortChange)="sortChange.emit($event)"
|
|
2102
|
-
(dataStateChange)="dataStateChange.emit({
|
|
2103
|
-
filter: $event.filter,
|
|
2104
|
-
sort: $event.sort
|
|
2105
|
-
})"
|
|
2106
|
-
(expandStateChange)="expandStateChange.emit($event)"
|
|
2107
|
-
(expand)="rowExpand.emit({ dataItem: $event.dataItem })"
|
|
2108
|
-
(collapse)="rowCollapse.emit({ dataItem: $event.dataItem })"
|
|
2109
|
-
(columnReorder)="columnReorder.emit($event)"
|
|
2110
|
-
(columnResize)="columnResize.emit($event)"
|
|
2111
|
-
(columnVisibilityChange)="handleColumnVisibilityChange($event)"
|
|
2112
|
-
(columnLockedChange)="columnLockedChange.emit($event)"
|
|
2113
|
-
(selectionChange)="handleTreeListSelectionChange($event)"
|
|
2114
|
-
(cellClick)="handleTreeListCellClick($event)"
|
|
2115
|
-
(cellClose)="handleCellClose($event)"
|
|
2116
|
-
[kendoEventsOutsideAngular]="{
|
|
2117
|
-
dblclick: handleTreeListDoubleClick
|
|
2118
|
-
}"
|
|
2119
|
-
[scope]="this"
|
|
2120
|
-
>
|
|
2121
|
-
<kendo-treelist-messages
|
|
2122
|
-
[noRecords]="getText('noRecords')"
|
|
2123
|
-
[filter]="getText('filter')"
|
|
2124
|
-
[filterEqOperator]="getText('filterEqOperator')"
|
|
2125
|
-
[filterNotEqOperator]="getText('filterNotEqOperator')"
|
|
2126
|
-
[filterIsNullOperator]="getText('filterIsNullOperator')"
|
|
2127
|
-
[filterIsNotNullOperator]="getText('filterIsNotNullOperator')"
|
|
2128
|
-
[filterIsEmptyOperator]="getText('filterIsEmptyOperator')"
|
|
2129
|
-
[filterIsNotEmptyOperator]="getText('filterIsNotEmptyOperator')"
|
|
2130
|
-
[filterStartsWithOperator]="getText('filterStartsWithOperator')"
|
|
2131
|
-
[filterContainsOperator]="getText('filterContainsOperator')"
|
|
2132
|
-
[filterNotContainsOperator]="getText('filterNotContainsOperator')"
|
|
2133
|
-
[filterEndsWithOperator]="getText('filterEndsWithOperator')"
|
|
2134
|
-
[filterGteOperator]="getText('filterGteOperator')"
|
|
2135
|
-
[filterGtOperator]="getText('filterGtOperator')"
|
|
2136
|
-
[filterLteOperator]="getText('filterLteOperator')"
|
|
2137
|
-
[filterLtOperator]="getText('filterLtOperator')"
|
|
2138
|
-
[filterIsTrue]="getText('filterIsTrue')"
|
|
2139
|
-
[filterIsFalse]="getText('filterIsFalse')"
|
|
2140
|
-
[filterBooleanAll]="getText('filterBooleanAll')"
|
|
2141
|
-
[filterAfterOrEqualOperator]="getText('filterAfterOrEqualOperator')"
|
|
2142
|
-
[filterAfterOperator]="getText('filterAfterOperator')"
|
|
2143
|
-
[filterBeforeOperator]="getText('filterBeforeOperator')"
|
|
2144
|
-
[filterBeforeOrEqualOperator]="getText('filterBeforeOrEqualOperator')"
|
|
2145
|
-
[filterFilterButton]="getText('filterFilterButton')"
|
|
2146
|
-
[filterClearButton]="getText('filterClearButton')"
|
|
2147
|
-
[filterAndLogic]="getText('filterAndLogic')"
|
|
2148
|
-
[filterOrLogic]="getText('filterOrLogic')"
|
|
2149
|
-
[loading]="getText('loading')"
|
|
2150
|
-
[columnMenu]="getText('columnMenu')"
|
|
2151
|
-
[columns]="getText('columns')"
|
|
2152
|
-
[sortable]="getText('sortable')"
|
|
2153
|
-
[sortAscending]="getText('sortAscending')"
|
|
2154
|
-
[sortDescending]="getText('sortDescending')"
|
|
2155
|
-
[sortedAscending]="getText('sortedAscending')"
|
|
2156
|
-
[sortedDescending]="getText('sortedDescending')"
|
|
2157
|
-
[sortedDefault]="getText('sortedDefault')"
|
|
2158
|
-
[columnsApply]="getText('columnsApply')"
|
|
2159
|
-
[columnsReset]="getText('columnsReset')"
|
|
2160
|
-
>
|
|
2161
|
-
</kendo-treelist-messages>
|
|
2162
|
-
</kendo-treelist>
|
|
2163
|
-
</kendo-splitter-pane>
|
|
2164
|
-
<kendo-splitter-pane
|
|
2165
|
-
[collapsible]="timelinePaneOptions?.collapsible"
|
|
2166
|
-
[resizable]="timelinePaneOptions?.resizable"
|
|
2167
|
-
[collapsed]="timelinePaneOptions?.collapsed"
|
|
2168
|
-
[min]="timelinePaneOptions?.min"
|
|
2169
|
-
[max]="timelinePaneOptions?.max"
|
|
2170
|
-
[size]="timelinePaneOptions?.size"
|
|
2171
|
-
(collapsedChange)="onTimelineCollapsedChange($event)"
|
|
2172
|
-
(sizeChange)="onTimelinePaneSizeChange($event)"
|
|
2173
|
-
[scrollable]="false"
|
|
2174
|
-
class="k-gantt-timeline-pane">
|
|
2175
|
-
@if (views && views.length) {
|
|
2176
|
-
<kendo-gantt-timeline
|
|
2177
|
-
[renderDependencyDragClues]="renderDependencyDragClues"
|
|
2178
|
-
[dragScrollSettings]="dragScrollSettings"
|
|
2179
|
-
[rows]="viewItems"
|
|
2180
|
-
[slots]="timelineSlots"
|
|
2181
|
-
[currentTimeMarker]="activeViewCurrentTimeMarker"
|
|
2182
|
-
[groupSlots]="timelineGroupSlots"
|
|
2183
|
-
[tableWidth]="tableWidth"
|
|
2184
|
-
[activeView]="activeView"
|
|
2185
|
-
[taskContentTemplate]="taskContentTemplate?.templateRef"
|
|
2186
|
-
[taskTemplate]="taskTemplate?.templateRef"
|
|
2187
|
-
[summaryTaskTemplate]="summaryTaskTemplate?.templateRef"
|
|
2188
|
-
[taskClass]="taskClass"
|
|
2189
|
-
[dependencies]="dependencies"
|
|
2190
|
-
[isExpanded]="isExpanded"
|
|
2191
|
-
[selectable]="selectable"
|
|
2192
|
-
[isTaskSelected]="isTaskSelected"
|
|
2193
|
-
[kendoEventsOutsideAngular]="{
|
|
2194
|
-
click: handleTimelineClick,
|
|
2195
|
-
contextmenu: handleTimelineRightClick,
|
|
2196
|
-
dblclick: handleTimelineDblClick,
|
|
2197
|
-
mousedown: handleTimelineMouseDown
|
|
2198
|
-
}"
|
|
2199
|
-
[customTooltipTemplate]="taskTooltipTemplate"
|
|
2200
|
-
[customDragTooltipTemplate]="taskDragTooltipTemplate"
|
|
2201
|
-
[tooltipOptions]="taskTooltipOptions"
|
|
2202
|
-
[scope]="this"
|
|
2203
|
-
></kendo-gantt-timeline>
|
|
2204
|
-
}
|
|
2205
|
-
</kendo-splitter-pane>
|
|
2206
|
-
</kendo-splitter>
|
|
2207
|
-
</div>
|
|
2208
|
-
@if (showToolbar('bottom')) {
|
|
2209
|
-
<kendo-gantt-toolbar
|
|
2210
|
-
[attr.aria-label]="toolbarAriaLabel"
|
|
2211
|
-
[showAddTask]="toolbarSettings.addTaskTool === 'bottom' || toolbarSettings.addTaskTool === 'both'"
|
|
2212
|
-
[showViewSelector]="toolbarSettings.viewSelectorTool === 'bottom' || toolbarSettings.viewSelectorTool === 'both'"
|
|
2213
|
-
[toolbarTemplate]="toolbarTemplate"
|
|
2214
|
-
[views]="viewTypes"
|
|
2215
|
-
[activeView]="activeView"
|
|
2216
|
-
[navigable]="navigable"
|
|
2217
|
-
class="k-gantt-footer"
|
|
2218
|
-
position="bottom"
|
|
2219
|
-
(activeViewChange)="changeActiveView($event)"></kendo-gantt-toolbar>
|
|
2220
|
-
}
|
|
2221
|
-
@if (showEditingDialog) {
|
|
2222
|
-
<kendo-gantt-edit-dialog
|
|
2223
|
-
[data]="data">
|
|
2224
|
-
</kendo-gantt-edit-dialog>
|
|
2225
|
-
}
|
|
2226
|
-
@if (showConfirmationDialog) {
|
|
2227
|
-
<kendo-dialog
|
|
2228
|
-
[width]="575"
|
|
2229
|
-
[height]="170"
|
|
2230
|
-
[title]="getText('confirmationDialogTitle')"
|
|
2231
|
-
(close)="handleConfirmationDialogClose()">
|
|
2232
|
-
<span>{{ getText('confirmationDialogContent') }}</span>
|
|
2233
|
-
<kendo-dialog-actions layout="start">
|
|
2234
|
-
<kendo-treelist-spacer></kendo-treelist-spacer>
|
|
2235
|
-
<button kendoButton [primary]="true" (click)="handleDeleteConfirmation()">{{ getText('deleteButtonText') }}</button>
|
|
2236
|
-
<button kendoButton (click)="handleConfirmationDialogClose()">{{ getText('cancelButtonText') }}</button>
|
|
2237
|
-
</kendo-dialog-actions>
|
|
2238
|
-
</kendo-dialog>
|
|
2239
|
-
}
|
|
2240
|
-
|
|
2241
|
-
@if (showLicenseWatermark) {
|
|
2242
|
-
<div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
|
|
2243
|
-
}
|
|
2244
|
-
`,
|
|
2245
|
-
standalone: true,
|
|
2246
|
-
imports: [LocalizedMessagesDirective, ToolbarComponent, SplitterComponent, SplitterPaneComponent, TreeListComponent, EventsOutsideAngularDirective, CustomMessagesComponent, GanttTimelineComponent, EditDialogComponent, DialogComponent, DialogActionsComponent, TreeListSpacerComponent, ButtonComponent, WatermarkOverlayComponent]
|
|
2247
|
-
}]
|
|
2248
|
-
}], ctorParameters: () => [{ type: i1.TimelineViewService }, { type: i2.ScrollSyncService }, { type: i0.Renderer2 }, { type: i3.MappingService }, { type: i4.OptionChangesService }, { type: i5.DependencyDomService }, { type: i6.EditService }, { type: i7.LocalizationService }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i8.NavigationService }, { type: i9.CurrentTimeMarkerService }, { type: i10.IntlService }, { type: undefined, decorators: [{
|
|
2249
|
-
type: Inject,
|
|
2250
|
-
args: [LOCALE_ID]
|
|
2251
|
-
}] }], propDecorators: { treeList: [{
|
|
2252
|
-
type: ViewChild,
|
|
2253
|
-
args: [TreeListComponent, { static: true }]
|
|
2254
|
-
}], timeline: [{
|
|
2255
|
-
type: ViewChild,
|
|
2256
|
-
args: [GanttTimelineComponent]
|
|
2257
|
-
}], taskContentTemplate: [{
|
|
2258
|
-
type: ContentChild,
|
|
2259
|
-
args: [GanttTaskContentTemplateDirective]
|
|
2260
|
-
}], taskTemplate: [{
|
|
2261
|
-
type: ContentChild,
|
|
2262
|
-
args: [GanttTaskTemplateDirective]
|
|
2263
|
-
}], taskTooltipTemplate: [{
|
|
2264
|
-
type: ContentChild,
|
|
2265
|
-
args: [GanttTaskTooltipTemplateDirective]
|
|
2266
|
-
}], taskDragTooltipTemplate: [{
|
|
2267
|
-
type: ContentChild,
|
|
2268
|
-
args: [GanttTaskDragTooltipTemplateDirective]
|
|
2269
|
-
}], summaryTaskTemplate: [{
|
|
2270
|
-
type: ContentChild,
|
|
2271
|
-
args: [GanttSummaryTaskTemplateDirective]
|
|
2272
|
-
}], toolbarTemplateChildren: [{
|
|
2273
|
-
type: ContentChildren,
|
|
2274
|
-
args: [ToolbarTemplateDirective]
|
|
2275
|
-
}], roleDescription: [{
|
|
2276
|
-
type: Input,
|
|
2277
|
-
args: ['aria-roledescription']
|
|
2278
|
-
}], hostRoleDescriptionAttr: [{
|
|
2279
|
-
type: HostBinding,
|
|
2280
|
-
args: ['attr.aria-roledescription']
|
|
2281
|
-
}], role: [{
|
|
2282
|
-
type: Input,
|
|
2283
|
-
args: ['role']
|
|
2284
|
-
}], hostRoleAttr: [{
|
|
2285
|
-
type: HostBinding,
|
|
2286
|
-
args: ['attr.role']
|
|
2287
|
-
}], hostClasses: [{
|
|
2288
|
-
type: HostBinding,
|
|
2289
|
-
args: ['class.k-gantt']
|
|
2290
|
-
}], dir: [{
|
|
2291
|
-
type: HostBinding,
|
|
2292
|
-
args: ['attr.dir']
|
|
2293
|
-
}], columns: [{
|
|
2294
|
-
type: ContentChildren,
|
|
2295
|
-
args: [GanttColumnBase]
|
|
2296
|
-
}], taskModelFields: [{
|
|
2297
|
-
type: Input
|
|
2298
|
-
}], dependencyModelFields: [{
|
|
2299
|
-
type: Input
|
|
2300
|
-
}], views: [{
|
|
2301
|
-
type: ContentChildren,
|
|
2302
|
-
args: [ViewBase]
|
|
2303
|
-
}], activeView: [{
|
|
2304
|
-
type: Input
|
|
2305
|
-
}], data: [{
|
|
2306
|
-
type: Input
|
|
2307
|
-
}], isSelected: [{
|
|
2308
|
-
type: Input
|
|
2309
|
-
}], validateNewDependency: [{
|
|
2310
|
-
type: Input
|
|
2311
|
-
}], selectionChange: [{
|
|
2312
|
-
type: Output
|
|
2313
|
-
}], selectable: [{
|
|
2314
|
-
type: Input
|
|
2315
|
-
}], toolbarSettings: [{
|
|
2316
|
-
type: Input
|
|
2317
|
-
}], toolbarAriaLabel: [{
|
|
2318
|
-
type: Input
|
|
2319
|
-
}], fetchChildren: [{
|
|
2320
|
-
type: Input
|
|
2321
|
-
}], hasChildren: [{
|
|
2322
|
-
type: Input
|
|
2323
|
-
}], dependencies: [{
|
|
2324
|
-
type: Input
|
|
2325
|
-
}], sortable: [{
|
|
2326
|
-
type: Input
|
|
2327
|
-
}], sort: [{
|
|
2328
|
-
type: Input
|
|
2329
|
-
}], filterable: [{
|
|
2330
|
-
type: Input
|
|
2331
|
-
}], filter: [{
|
|
2332
|
-
type: Input
|
|
2333
|
-
}], workDayStart: [{
|
|
2334
|
-
type: Input
|
|
2335
|
-
}], workDayEnd: [{
|
|
2336
|
-
type: Input
|
|
2337
|
-
}], workWeekStart: [{
|
|
2338
|
-
type: Input
|
|
2339
|
-
}], workWeekEnd: [{
|
|
2340
|
-
type: Input
|
|
2341
|
-
}], navigable: [{
|
|
2342
|
-
type: Input
|
|
2343
|
-
}], timelinePaneOptions: [{
|
|
2344
|
-
type: Input
|
|
2345
|
-
}], treeListPaneOptions: [{
|
|
2346
|
-
type: Input
|
|
2347
|
-
}], taskClass: [{
|
|
2348
|
-
type: Input
|
|
2349
|
-
}], rowClass: [{
|
|
2350
|
-
type: Input
|
|
2351
|
-
}], isExpanded: [{
|
|
2352
|
-
type: Input
|
|
2353
|
-
}], columnsAutoSize: [{
|
|
2354
|
-
type: Input
|
|
2355
|
-
}], currentTimeMarker: [{
|
|
2356
|
-
type: Input
|
|
2357
|
-
}], columnMenu: [{
|
|
2358
|
-
type: Input
|
|
2359
|
-
}], columnsReorderable: [{
|
|
2360
|
-
type: Input
|
|
2361
|
-
}], columnsResizable: [{
|
|
2362
|
-
type: Input
|
|
2363
|
-
}], dragScrollSettings: [{
|
|
2364
|
-
type: Input
|
|
2365
|
-
}], taskTooltipOptions: [{
|
|
2366
|
-
type: Input
|
|
2367
|
-
}], rowExpand: [{
|
|
2368
|
-
type: Output
|
|
2369
|
-
}], taskDblClick: [{
|
|
2370
|
-
type: Output
|
|
2371
|
-
}], cellDblClick: [{
|
|
2372
|
-
type: Output
|
|
2373
|
-
}], cellClose: [{
|
|
2374
|
-
type: Output
|
|
2375
|
-
}], taskDelete: [{
|
|
2376
|
-
type: Output
|
|
2377
|
-
}], rowCollapse: [{
|
|
2378
|
-
type: Output
|
|
2379
|
-
}], remove: [{
|
|
2380
|
-
type: Output
|
|
2381
|
-
}], cancel: [{
|
|
2382
|
-
type: Output
|
|
2383
|
-
}], save: [{
|
|
2384
|
-
type: Output
|
|
2385
|
-
}], taskAdd: [{
|
|
2386
|
-
type: Output
|
|
2387
|
-
}], dependencyAdd: [{
|
|
2388
|
-
type: Output
|
|
2389
|
-
}], sortChange: [{
|
|
2390
|
-
type: Output
|
|
2391
|
-
}], filterChange: [{
|
|
2392
|
-
type: Output
|
|
2393
|
-
}], dataStateChange: [{
|
|
2394
|
-
type: Output
|
|
2395
|
-
}], treeListPaneCollapsedChange: [{
|
|
2396
|
-
type: Output
|
|
2397
|
-
}], timelinePaneCollapsedChange: [{
|
|
2398
|
-
type: Output
|
|
2399
|
-
}], timelinePaneSizeChange: [{
|
|
2400
|
-
type: Output
|
|
2401
|
-
}], activeViewChange: [{
|
|
2402
|
-
type: Output
|
|
2403
|
-
}], columnResize: [{
|
|
2404
|
-
type: Output
|
|
2405
|
-
}], columnReorder: [{
|
|
2406
|
-
type: Output
|
|
2407
|
-
}], columnVisibilityChange: [{
|
|
2408
|
-
type: Output
|
|
2409
|
-
}], columnLockedChange: [{
|
|
2410
|
-
type: Output
|
|
2411
|
-
}], cellClick: [{
|
|
2412
|
-
type: Output
|
|
2413
|
-
}], taskClick: [{
|
|
2414
|
-
type: Output
|
|
2415
|
-
}] } });
|