import { Component, Input, Output, EventEmitter, HostListener, DoCheck, ChangeDetectionStrategy, KeyValueDiffer, ChangeDetectorRef, KeyValueDiffers } from '@angular/core'; import { MouseEvent } from '../../events'; @Component({ selector: 'datatable-row-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, template: `
`, host: { class: 'datatable-row-wrapper' } }) export class DataTableRowWrapperComponent implements DoCheck { @Input() innerWidth: number; @Input() rowDetail: any; @Input() groupHeader: any; @Input() offsetX: number; @Input() detailRowHeight: any; @Input() row: any; @Input() groupedRows: any; @Output() rowContextmenu = new EventEmitter<{event: MouseEvent, row: any}>(false); @Input() set rowIndex(val: number) { this._rowIndex = val; this.rowContext.rowIndex = val; this.groupContext.rowIndex = val; this.cd.markForCheck(); } get rowIndex(): number { return this._rowIndex; } @Input() set expanded(val: boolean) { this._expanded = val; this.groupContext.expanded = val; this.rowContext.expanded = val; this.cd.markForCheck(); } get expanded(): boolean { return this._expanded; } groupContext: any = { group: this.row, expanded: this.expanded, rowIndex: this.rowIndex }; rowContext: any = { row: this.row, expanded: this.expanded, rowIndex: this.rowIndex }; private rowDiffer: KeyValueDiffer<{}, {}>; private _expanded: boolean = false; private _rowIndex: number; constructor(private cd: ChangeDetectorRef, private differs: KeyValueDiffers) { this.rowDiffer = differs.find({}).create(); } ngDoCheck(): void { if (this.rowDiffer.diff(this.row)) { this.rowContext.row = this.row; this.groupContext.group = this.row; this.cd.markForCheck(); } } @HostListener('contextmenu', ['$event']) onContextmenu($event: MouseEvent): void { this.rowContextmenu.emit({ event: $event, row: this.row }); } getGroupHeaderStyle(): any { const styles = {}; styles['transform'] = 'translate3d(' + this.offsetX + 'px, 0px, 0px)'; styles['backface-visibility'] = 'hidden'; styles['width'] = this.innerWidth; return styles; } }