@progress/kendo-angular-gantt
Version:
Kendo UI Angular Gantt
207 lines (206 loc) • 10.3 kB
JavaScript
/**-----------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the project root for more information
*-------------------------------------------------------------------------------------------*/
import { Component, Input, TemplateRef, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';
import { isEqual } from '@progress/kendo-date-math';
import { DependencyDomService } from '../dependencies/dependency-dom.service';
import { MappingService } from '../common/mapping.service';
import { isPresent } from '../utils';
import { GanttTaskComponent } from './gantt-task.component';
import { GanttSummaryTaskComponent } from './gantt-summary-task.component';
import { GanttMilestoneTaskComponent } from './gantt-milestone-task.component';
import * as i0 from "@angular/core";
import * as i1 from "../dependencies/dependency-dom.service";
import * as i2 from "../common/mapping.service";
/**
* @hidden
*/
export class GanttTasksTableBodyComponent {
dependencyDomService;
mapper;
set timelineRow(timelineRow) {
// register the row value only when the first row is rendered
// with server-side data-binding, the rows rendering could be delayed
if (isPresent(timelineRow)) {
this.dependencyDomService.registerTimelineRow(timelineRow.nativeElement);
}
}
selectable;
rows;
activeView;
taskContentTemplate;
taskTemplate;
summaryTaskTemplate;
taskClass;
isExpanded;
isTaskSelected;
renderDependencyDragClues;
taskPointerEnter = new EventEmitter();
taskPointerLeave = new EventEmitter();
constructor(dependencyDomService, mapper) {
this.dependencyDomService = dependencyDomService;
this.mapper = mapper;
}
trackBy = (_, item) => this.mapper.extractFromTask(item, 'id');
isMileStone(item) {
return !item.hasChildren && isEqual(this.mapper.extractFromTask(item.data, 'start'), this.mapper.extractFromTask(item.data, 'end'));
}
mapItemToTask(item) {
const mappedItem = ['id', 'title', 'completionRatio', 'start', 'end']
.reduce((acc, curr) => {
acc[curr] = this.mapper.extractFromTask(item.data, curr);
return acc;
}, {});
return mappedItem;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttTasksTableBodyComponent, deps: [{ token: i1.DependencyDomService }, { token: i2.MappingService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GanttTasksTableBodyComponent, isStandalone: true, selector: "[kendoGanttTasksTableBody]", inputs: { selectable: "selectable", rows: "rows", activeView: "activeView", taskContentTemplate: "taskContentTemplate", taskTemplate: "taskTemplate", summaryTaskTemplate: "summaryTaskTemplate", taskClass: "taskClass", isExpanded: "isExpanded", isTaskSelected: "isTaskSelected", renderDependencyDragClues: "renderDependencyDragClues" }, outputs: { taskPointerEnter: "taskPointerEnter", taskPointerLeave: "taskPointerLeave" }, viewQueries: [{ propertyName: "timelineRow", first: true, predicate: ["timelineRow"], descendants: true }], ngImport: i0, template: `
@for (item of rows; track trackBy($index, item); let index = $index) {
<tr class="k-table-row"
<td class="k-table-td">
@if (isMileStone(item)) {
<kendo-gantt-milestone-task
[]="item.data"
[]="item.level"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
>
</kendo-gantt-milestone-task>
} @else {
@if (item.hasChildren) {
<kendo-gantt-summary-task
[]="item.data"
[]="item.level"
[]="summaryTaskTemplate"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="isExpanded"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
></kendo-gantt-summary-task>
}
@if (!item.hasChildren) {
<kendo-gantt-task
[]="item.data"
[]="item.level"
[]="taskContentTemplate"
[]="taskTemplate"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
></kendo-gantt-task>
}
}
</td>
</tr>
}
`, isInline: true, dependencies: [{ kind: "component", type: GanttMilestoneTaskComponent, selector: "kendo-gantt-milestone-task" }, { kind: "component", type: GanttSummaryTaskComponent, selector: "kendo-gantt-summary-task", inputs: ["template", "isExpanded"] }, { kind: "component", type: GanttTaskComponent, selector: "kendo-gantt-task", inputs: ["taskContentTemplate", "taskTemplate"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GanttTasksTableBodyComponent, decorators: [{
type: Component,
args: [{
// eslint-disable-next-line @angular-eslint/component-selector
selector: '[kendoGanttTasksTableBody]',
template: `
@for (item of rows; track trackBy($index, item); let index = $index) {
<tr class="k-table-row"
<td class="k-table-td">
@if (isMileStone(item)) {
<kendo-gantt-milestone-task
[]="item.data"
[]="item.level"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
>
</kendo-gantt-milestone-task>
} @else {
@if (item.hasChildren) {
<kendo-gantt-summary-task
[]="item.data"
[]="item.level"
[]="summaryTaskTemplate"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="isExpanded"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
></kendo-gantt-summary-task>
}
@if (!item.hasChildren) {
<kendo-gantt-task
[]="item.data"
[]="item.level"
[]="taskContentTemplate"
[]="taskTemplate"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
></kendo-gantt-task>
}
}
</td>
</tr>
}
`,
standalone: true,
imports: [GanttMilestoneTaskComponent, GanttSummaryTaskComponent, GanttTaskComponent]
}]
}], ctorParameters: () => [{ type: i1.DependencyDomService }, { type: i2.MappingService }], propDecorators: { timelineRow: [{
type: ViewChild,
args: ['timelineRow', { static: false }]
}], selectable: [{
type: Input
}], rows: [{
type: Input
}], activeView: [{
type: Input
}], taskContentTemplate: [{
type: Input
}], taskTemplate: [{
type: Input
}], summaryTaskTemplate: [{
type: Input
}], taskClass: [{
type: Input
}], isExpanded: [{
type: Input
}], isTaskSelected: [{
type: Input
}], renderDependencyDragClues: [{
type: Input
}], taskPointerEnter: [{
type: Output
}], taskPointerLeave: [{
type: Output
}] } });