UNPKG

@progress/kendo-angular-gantt

Version:
207 lines (206 loc) 10.3 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 * 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" #timelineRow> <td class="k-table-td"> @if (isMileStone(item)) { <kendo-gantt-milestone-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> } @else { @if (item.hasChildren) { <kendo-gantt-summary-task [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> } @if (!item.hasChildren) { <kendo-gantt-task [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> } } </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" #timelineRow> <td class="k-table-td"> @if (isMileStone(item)) { <kendo-gantt-milestone-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> } @else { @if (item.hasChildren) { <kendo-gantt-summary-task [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> } @if (!item.hasChildren) { <kendo-gantt-task [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> } } </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 }] } });