igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
177 lines • 17.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { ChangeDetectionStrategy, Component, HostBinding, forwardRef, ElementRef, ChangeDetectorRef, ViewChildren, QueryList, ViewChild } from '@angular/core';
import { IgxRowComponent } from '../row.component';
import { IgxHierarchicalSelectionAPIService } from './selection';
import { GridBaseAPIService } from '.././api.service';
import { IgxHierarchicalGridCellComponent } from './hierarchical-cell.component';
import { IgxGridCRUDService, IgxGridSelectionService } from '../../core/grid-selection';
var IgxHierarchicalRowComponent = /** @class */ (function (_super) {
tslib_1.__extends(IgxHierarchicalRowComponent, _super);
function IgxHierarchicalRowComponent(gridAPI, crudService, selectionService, hselection, element, cdr) {
var _this = _super.call(this, gridAPI, crudService, selectionService, hselection, element, cdr) || this;
_this.gridAPI = gridAPI;
_this.crudService = crudService;
_this.selectionService = selectionService;
_this.hselection = hselection;
_this.element = element;
_this.cdr = cdr;
/**
* @hidden
*/
_this.tabindex = 0;
return _this;
}
Object.defineProperty(IgxHierarchicalRowComponent.prototype, "expanded", {
/**
* Returns whether the row is expanded.
* ```typescript
* const RowExpanded = this.grid1.rowList.first.expanded;
* ```
*/
get: /**
* Returns whether the row is expanded.
* ```typescript
* const RowExpanded = this.grid1.rowList.first.expanded;
* ```
* @return {?}
*/
function () {
return this.grid.isExpanded(this.rowData);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxHierarchicalRowComponent.prototype, "hasChildren", {
get: /**
* @return {?}
*/
function () {
return !!this.grid.childLayoutKeys.length;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxHierarchicalRowComponent.prototype, "highlighted", {
/**
* @hidden
*/
get: /**
* @hidden
* @return {?}
*/
function () {
return this.grid && this.grid.highlightedRowID === this.rowID;
},
enumerable: true,
configurable: true
});
/**
* Toggles the hierarchical row.
* ```typescript
* this.grid1.rowList.first.toggle()
* ```
*/
/**
* Toggles the hierarchical row.
* ```typescript
* this.grid1.rowList.first.toggle()
* ```
* @return {?}
*/
IgxHierarchicalRowComponent.prototype.toggle = /**
* Toggles the hierarchical row.
* ```typescript
* this.grid1.rowList.first.toggle()
* ```
* @return {?}
*/
function () {
var _this = this;
if (this.added) {
return;
}
/** @type {?} */
var grid = this.gridAPI.grid;
/** @type {?} */
var state = this.gridAPI.grid.hierarchicalState;
if (!this.expanded) {
state.push({ rowID: this.rowID });
grid.hierarchicalState = tslib_1.__spread(state);
}
else {
grid.hierarchicalState = state.filter(function (v) {
return v.rowID !== _this.rowID;
});
}
grid.cdr.detectChanges();
requestAnimationFrame(function () {
grid.reflow();
});
};
IgxHierarchicalRowComponent.decorators = [
{ type: Component, args: [{
changeDetection: ChangeDetectionStrategy.OnPush,
preserveWhitespaces: false,
selector: 'igx-hierarchical-grid-row',
template: "<div (click)=\"toggle()\" class=\"igx-grid__hierarchical-expander\" [tabIndex]=\"tabindex\" *ngIf=\"hasChildren\" #expander>\n <igx-icon *ngIf=\"!expanded\" [isActive]='!added' fontSet=\"material\">expand_more</igx-icon>\n <igx-icon *ngIf=\"expanded\" [isActive]='!added' fontSet=\"material\">expand_less</igx-icon>\n</div>\n\n<ng-container *ngIf=\"rowSelectable\">\n <div class=\"igx-grid__cbx-selection\">\n <igx-checkbox [checked]=\"isSelected\" (change)=\"onCheckboxClick($event)\" disableRipple=\"true\" [disableTransitions]=\"grid.disableTransitions\" [aria-label]=\"rowCheckboxAriaLabel\"></igx-checkbox>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0\">\n <igx-hierarchical-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--number]=\"col.dataType === 'number'\"\n [ngClass]=\"col.cellClasses | igxCellStyles:rowData[col.field]:rowData:col.field\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [lastPinned]=\"col.isLastPinned\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [style.min-width.px]=\"col.width\"\n [style.flex-basis.px]=\"col.width\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\">\n </igx-hierarchical-grid-cell>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcWidth\"' [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-hierarchical-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--number]=\"col.dataType === 'number'\"\n [ngClass]=\"col.cellClasses | igxCellStyles:rowData[col.field]:rowData:col.field\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [style.min-width.px]=\"col.width\"\n [style.flex-basis.px]=\"col.width\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\">\n </igx-hierarchical-grid-cell>\n</ng-template>\n\n",
providers: [{ provide: IgxRowComponent, useExisting: forwardRef(function () { return IgxHierarchicalRowComponent; }) }]
}] }
];
/** @nocollapse */
IgxHierarchicalRowComponent.ctorParameters = function () { return [
{ type: GridBaseAPIService },
{ type: IgxGridCRUDService },
{ type: IgxGridSelectionService },
{ type: IgxHierarchicalSelectionAPIService },
{ type: ElementRef },
{ type: ChangeDetectorRef }
]; };
IgxHierarchicalRowComponent.propDecorators = {
cells: [{ type: ViewChildren, args: [forwardRef(function () { return IgxHierarchicalGridCellComponent; }), { read: IgxHierarchicalGridCellComponent },] }],
expander: [{ type: ViewChild, args: ['expander', { read: ElementRef },] }],
tabindex: [{ type: HostBinding, args: ['attr.tabindex',] }],
expanded: [{ type: HostBinding, args: ['class.igx-grid__tr--expanded',] }],
highlighted: [{ type: HostBinding, args: ['class.igx-grid__tr--highlighted',] }]
};
return IgxHierarchicalRowComponent;
}(IgxRowComponent));
export { IgxHierarchicalRowComponent };
if (false) {
/**
* The rendered cells in the row component.
*
* ```typescript
* // get the cells of the third selected row
* let selectedRowCells = this.grid.selectedRows[2].cells;
* ```
* @type {?}
*/
IgxHierarchicalRowComponent.prototype.cells;
/** @type {?} */
IgxHierarchicalRowComponent.prototype.expander;
/**
* @hidden
* @type {?}
*/
IgxHierarchicalRowComponent.prototype.tabindex;
/** @type {?} */
IgxHierarchicalRowComponent.prototype.gridAPI;
/** @type {?} */
IgxHierarchicalRowComponent.prototype.crudService;
/** @type {?} */
IgxHierarchicalRowComponent.prototype.selectionService;
/**
* @type {?}
* @private
*/
IgxHierarchicalRowComponent.prototype.hselection;
/** @type {?} */
IgxHierarchicalRowComponent.prototype.element;
/** @type {?} */
IgxHierarchicalRowComponent.prototype.cdr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1yb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEY7SUFPaUQsdURBQTZDO0lBc0UxRixxQ0FBbUIsT0FBeUQsRUFDakUsV0FBK0IsRUFDL0IsZ0JBQXlDLEVBQ3hDLFVBQThDLEVBQy9DLE9BQW1CLEVBQ25CLEdBQXNCO1FBTGpDLFlBTVEsa0JBQU0sT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxTQUMxRTtRQVBjLGFBQU8sR0FBUCxPQUFPLENBQWtEO1FBQ2pFLGlCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixzQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3hDLGdCQUFVLEdBQVYsVUFBVSxDQUFvQztRQUMvQyxhQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLFNBQUcsR0FBSCxHQUFHLENBQW1C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dGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBmb3J3YXJkUmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Um93Q29tcG9uZW50IH0gZnJvbSAnLi4vcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRDUlVEU2VydmljZSwgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2dyaWQtc2VsZWN0aW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgc2VsZWN0b3I6ICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQtcm93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJZ3hSb3dDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElneEhpZXJhcmNoaWNhbFJvd0NvbXBvbmVudCkgfV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4SGllcmFyY2hpY2FsUm93Q29tcG9uZW50IGV4dGVuZHMgSWd4Um93Q29tcG9uZW50PElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQ+IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZWQgY2VsbHMgaW4gdGhlIHJvdyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBjZWxscyBvZiB0aGUgdGhpcmQgc2VsZWN0ZWQgcm93XG4gICAgICogbGV0IHNlbGVjdGVkUm93Q2VsbHMgPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzJdLmNlbGxzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCksIHsgcmVhZDogSWd4SGllcmFyY2hpY2FsR3JpZENlbGxDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgY2VsbHM6IFF1ZXJ5TGlzdDxJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudD47XG5cbiAgICBAVmlld0NoaWxkKCdleHBhbmRlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBleHBhbmRlcjogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICAgIHB1YmxpYyB0YWJpbmRleCA9IDA7XG5cbiAgICAgICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByb3cgaXMgZXhwYW5kZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IFJvd0V4cGFuZGVkID0gdGhpcy5ncmlkMS5yb3dMaXN0LmZpcnN0LmV4cGFuZGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RyLS1leHBhbmRlZCcpXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0V4cGFuZGVkKHRoaXMucm93RGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuICAhIXRoaXMuZ3JpZC5jaGlsZExheW91dEtleXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ci0taGlnaGxpZ2h0ZWQnKVxuICAgIHB1YmxpYyBnZXQgaGlnaGxpZ2h0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQgJiYgdGhpcy5ncmlkLmhpZ2hsaWdodGVkUm93SUQgPT09IHRoaXMucm93SUQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgaGllcmFyY2hpY2FsIHJvdy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkMS5yb3dMaXN0LmZpcnN0LnRvZ2dsZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkQVBJLmdyaWQ7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5ncmlkQVBJLmdyaWQuaGllcmFyY2hpY2FsU3RhdGU7XG4gICAgICAgIGlmICghdGhpcy5leHBhbmRlZCkge1xuICAgICAgICAgICAgc3RhdGUucHVzaCh7IHJvd0lEOiB0aGlzLnJvd0lEIH0pO1xuICAgICAgICAgICAgZ3JpZC5oaWVyYXJjaGljYWxTdGF0ZSA9IFsuLi5zdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncmlkLmhpZXJhcmNoaWNhbFN0YXRlID0gc3RhdGUuZmlsdGVyKHYgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB2LnJvd0lEICE9PSB0aGlzLnJvd0lEO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgZ3JpZC5yZWZsb3coKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50PixcbiAgICAgICAgcHVibGljIGNydWRTZXJ2aWNlOiBJZ3hHcmlkQ1JVRFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBoc2VsZWN0aW9uOiBJZ3hIaWVyYXJjaGljYWxTZWxlY3Rpb25BUElTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgICAgIHN1cGVyKGdyaWRBUEksIGNydWRTZXJ2aWNlLCBzZWxlY3Rpb25TZXJ2aWNlLCBoc2VsZWN0aW9uLCBlbGVtZW50LCBjZHIpO1xuICAgICAgICB9XG59XG4iXX0=