@progress/kendo-angular-gantt
Version:
Kendo UI Angular Gantt
200 lines (199 loc) • 10.8 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 { NgFor, NgIf } from '@angular/common';
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: "16.2.12", ngImport: i0, type: GanttTasksTableBodyComponent, deps: [{ token: i1.DependencyDomService }, { token: i2.MappingService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", 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: `
<tr class="k-table-row"
<td class="k-table-td">
<kendo-gantt-milestone-task
*ngIf="isMileStone(item); else task"
[]="item.data"
[]="item.level"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
>
</kendo-gantt-milestone-task>
<ng-template
<kendo-gantt-summary-task
*ngIf="item.hasChildren"
[]="item.data"
[]="item.level"
[]="summaryTaskTemplate"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="isExpanded"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
></kendo-gantt-summary-task>
<kendo-gantt-task
*ngIf="!item.hasChildren"
[]="item.data"
[]="item.level"
[]="taskContentTemplate"
[]="taskTemplate"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
></kendo-gantt-task>
</ng-template>
</td>
</tr>
`, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "16.2.12", ngImport: i0, type: GanttTasksTableBodyComponent, decorators: [{
type: Component,
args: [{
// eslint-disable-next-line @angular-eslint/component-selector
selector: '[kendoGanttTasksTableBody]',
template: `
<tr class="k-table-row"
<td class="k-table-td">
<kendo-gantt-milestone-task
*ngIf="isMileStone(item); else task"
[]="item.data"
[]="item.level"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
>
</kendo-gantt-milestone-task>
<ng-template
<kendo-gantt-summary-task
*ngIf="item.hasChildren"
[]="item.data"
[]="item.level"
[]="summaryTaskTemplate"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="isExpanded"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
></kendo-gantt-summary-task>
<kendo-gantt-task
*ngIf="!item.hasChildren"
[]="item.data"
[]="item.level"
[]="taskContentTemplate"
[]="taskTemplate"
[]="activeView"
[]="taskClass"
[]="selectable"
[]="isTaskSelected"
[]="index"
[]="renderDependencyDragClues"
(pointerenter)="taskPointerEnter.emit(mapItemToTask(item))"
(pointerleave)="taskPointerLeave.emit()"
></kendo-gantt-task>
</ng-template>
</td>
</tr>
`,
standalone: true,
imports: [NgFor, NgIf, GanttMilestoneTaskComponent, GanttSummaryTaskComponent, GanttTaskComponent]
}]
}], ctorParameters: function () { return [{ 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
}] } });