UNPKG

@progress/kendo-angular-gantt

Version:
200 lines (199 loc) 10.8 kB
/**----------------------------------------------------------------------------------------- * 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" #timelineRow *ngFor="let item of rows; let index = index; trackBy: trackBy "> <td class="k-table-td"> <kendo-gantt-milestone-task *ngIf="isMileStone(item); else task" [dataItem]="item.data" [level]="item.level" [activeView]="activeView" [taskClass]="taskClass" [selectable]="selectable" [isSelected]="isTaskSelected" [index]="index" [renderDependencyDragClues]="renderDependencyDragClues" (pointerenter)="taskPointerEnter.emit(mapItemToTask(item))" (pointerleave)="taskPointerLeave.emit()" > </kendo-gantt-milestone-task> <ng-template #task> <kendo-gantt-summary-task *ngIf="item.hasChildren" [dataItem]="item.data" [level]="item.level" [template]="summaryTaskTemplate" [activeView]="activeView" [taskClass]="taskClass" [selectable]="selectable" [isSelected]="isTaskSelected" [isExpanded]="isExpanded" [index]="index" [renderDependencyDragClues]="renderDependencyDragClues" (pointerenter)="taskPointerEnter.emit(mapItemToTask(item))" (pointerleave)="taskPointerLeave.emit()" ></kendo-gantt-summary-task> <kendo-gantt-task *ngIf="!item.hasChildren" [dataItem]="item.data" [level]="item.level" [taskContentTemplate]="taskContentTemplate" [taskTemplate]="taskTemplate" [activeView]="activeView" [taskClass]="taskClass" [selectable]="selectable" [isSelected]="isTaskSelected" [index]="index" [renderDependencyDragClues]="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" #timelineRow *ngFor="let item of rows; let index = index; trackBy: trackBy "> <td class="k-table-td"> <kendo-gantt-milestone-task *ngIf="isMileStone(item); else task" [dataItem]="item.data" [level]="item.level" [activeView]="activeView" [taskClass]="taskClass" [selectable]="selectable" [isSelected]="isTaskSelected" [index]="index" [renderDependencyDragClues]="renderDependencyDragClues" (pointerenter)="taskPointerEnter.emit(mapItemToTask(item))" (pointerleave)="taskPointerLeave.emit()" > </kendo-gantt-milestone-task> <ng-template #task> <kendo-gantt-summary-task *ngIf="item.hasChildren" [dataItem]="item.data" [level]="item.level" [template]="summaryTaskTemplate" [activeView]="activeView" [taskClass]="taskClass" [selectable]="selectable" [isSelected]="isTaskSelected" [isExpanded]="isExpanded" [index]="index" [renderDependencyDragClues]="renderDependencyDragClues" (pointerenter)="taskPointerEnter.emit(mapItemToTask(item))" (pointerleave)="taskPointerLeave.emit()" ></kendo-gantt-summary-task> <kendo-gantt-task *ngIf="!item.hasChildren" [dataItem]="item.data" [level]="item.level" [taskContentTemplate]="taskContentTemplate" [taskTemplate]="taskTemplate" [activeView]="activeView" [taskClass]="taskClass" [selectable]="selectable" [isSelected]="isTaskSelected" [index]="index" [renderDependencyDragClues]="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 }] } });