UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

1,037 lines 108 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input, TemplateRef, ViewChild, NgZone, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core'; import { IgxTextHighlightDirective } from '../directives/text-highlight/text-highlight.directive'; import { GridBaseAPIService } from './api.service'; import { getNodeSizeViaRange, ROW_COLLAPSE_KEYS, ROW_EXPAND_KEYS, SUPPORTED_KEYS, NAVIGATION_KEYS, isIE, isLeftClick, PlatformUtil } from '../core/utils'; import { IgxGridSelectionService, ISelectionNode, IgxGridCRUDService } from './selection/selection.service'; import { DeprecateProperty, DeprecateMethod } from '../core/deprecateDecorators'; import { HammerGesturesManager } from '../core/touch'; import { GridSelectionMode } from './common/enums'; /** * Providing reference to `IgxGridCellComponent`: * ```typescript * @ViewChild('grid', { read: IgxGridComponent }) * public grid: IgxGridComponent; * ``` * ```typescript * let column = this.grid.columnList.first; * ``` * ```typescript * let cell = column.cells[0]; * ``` */ let IgxGridCellComponent = class IgxGridCellComponent { constructor(selectionService, crudService, gridAPI, cdr, element, zone, touchManager, platformUtil) { this.selectionService = selectionService; this.crudService = crudService; this.gridAPI = gridAPI; this.cdr = cdr; this.element = element; this.zone = zone; this.touchManager = touchManager; this.platformUtil = platformUtil; this._vIndex = -1; /** * Sets/gets the highlight class of the cell. * Default value is `"igx-highlight"`. * ```typescript * let highlightClass = this.cell.highlightClass; * ``` * ```typescript * this.cell.highlightClass = 'igx-cell-highlight'; * ``` * @memberof IgxGridCellComponent */ this.highlightClass = 'igx-highlight'; /** * Sets/gets the active highlight class class of the cell. * Default value is `"igx-highlight__active"`. * ```typescript * let activeHighlightClass = this.cell.activeHighlightClass; * ``` * ```typescript * this.cell.activeHighlightClass = 'igx-cell-highlight_active'; * ``` * @memberof IgxGridCellComponent */ this.activeHighlightClass = 'igx-highlight__active'; /** * @hidden * @internal */ this.lastPinned = false; /** * Returns whether the cell is in edit mode. */ this.editMode = false; /** * Sets/get the `tabindex` property of the cell. * Default value is `0`. * ```typescript * this.cell.tabindex = 1; * ``` * ```typescript * let cellTabIndex = this.cell.tabindex; * ``` * @memberof IgxGridCellComponent */ this.tabindex = 0; /** * Sets/get the `role` property of the cell. * Default value is `"gridcell"`. * ```typescript * this.cell.role = 'grid-cell'; * ``` * ```typescript * let cellRole = this.cell.role; * ``` * @memberof IgxGridCellComponent */ this.role = 'gridcell'; /** * Gets the width of the cell. * ```typescript * let cellWidth = this.cell.width; * ``` * @memberof IgxGridCellComponent */ this.width = ''; /** * @hidden * @internal */ this.focused = false; this.isInCompositionMode = false; this._cellSelection = GridSelectionMode.multiple; /** * * @hidden * @internal */ this.pointerdown = (event) => { if (!isLeftClick(event)) { this.selectionService.addKeyboardRange(); this.selectionService.initKeyboardState(); this.selectionService.primaryButton = false; return; } this.selectionService.pointerDown(this.selectionNode, event.shiftKey, event.ctrlKey); }; /** * * @hidden * @internal */ this.pointerenter = (event) => { const dragMode = this.selectionService.pointerEnter(this.selectionNode, event); if (dragMode) { this.grid.cdr.detectChanges(); } }; /** * @hidden * @internal */ this.pointerup = (event) => { if (this.grid.hasColumnLayouts) { this.grid.navigation.setStartNavigationCell(this.colStart, this.rowStart, null); } if (!isLeftClick(event)) { return; } if (this.selectionService.pointerUp(this.selectionNode, this.grid.onRangeSelection)) { this.grid.cdr.detectChanges(); } this._updateCRUDStatus(); }; /** * @hidden * @internal */ this.onDoubleClick = (event) => { if (event.type === 'doubletap') { // prevent double-tap to zoom on iOS event.preventDefault(); } if (this.editable && !this.editMode && !this.row.deleted) { this.crudService.begin(this); } this.grid.onDoubleClick.emit({ cell: this, event }); }; } /** * Gets the cell template context object. * ```typescript * let context = this.cell.context(); * ``` * @memberof IgxGridCellComponent */ get context() { return { $implicit: this.value, cell: this }; } /** * Gets the cell template. * ```typescript * let template = this.cell.template; * ``` * @memberof IgxGridCellComponent */ get template() { if (this.editMode) { const inlineEditorTemplate = this.column.inlineEditorTemplate; return inlineEditorTemplate ? inlineEditorTemplate : this.inlineEditorTemplate; } if (this.cellTemplate) { return this.cellTemplate; } return this.defaultCellTemplate; } /** * Gets the `id` of the grid in which the cell is stored. * ```typescript * let gridId = this.cell.gridID; * ``` * @memberof IgxGridCellComponent */ get gridID() { return this.row.gridID; } /** * Gets the grid of the cell. * ```typescript * let grid = this.cell.grid; * ``` * @memberof IgxGridCellComponent */ get grid() { return this.gridAPI.grid; } /** * Gets the `index` of the row where the cell is stored. * ```typescript * let rowIndex = this.cell.rowIndex; * ``` * @memberof IgxGridCellComponent */ get rowIndex() { return this.row.index; } /** * Gets the `index` of the cell column. * ```typescript * let columnIndex = this.cell.columnIndex; * ``` * @memberof IgxGridCellComponent */ get columnIndex() { return this.column.index; } /** * Gets the visible `index` of the in which the cell is stored. * ```typescript * let visibleColumnIndex = this.cell.visibleColumnIndex; * ``` * @memberof IgxGridCellComponent */ get visibleColumnIndex() { return this.column.columnLayoutChild ? this.column.visibleIndex : this._vIndex; } set visibleColumnIndex(val) { this._vIndex = val; } /** * Gets the ID of the cell. * ```typescript * let cellID = this.cell.cellID; * ``` * @memberof IgxGridCellComponent */ get cellID() { const primaryKey = this.grid.primaryKey; const rowID = primaryKey ? this.rowData[primaryKey] : this.rowData; return { rowID, columnID: this.columnIndex, rowIndex: this.rowIndex }; } /** * Returns a reference to the nativeElement of the cell. * ```typescript * let cellNativeElement = this.cell.nativeElement; * ``` * @memberof IgxGridCellComponent */ get nativeElement() { return this.element.nativeElement; } /** * @deprecated * Use `cell.editMode` as a getter and * `cell.setEditMode(true | false)` to start/exit edit mode. * * Gets/sets whether the cell is in edit mode. * ```typescript * let isCellInEditMode = this.cell.inEditMode; * ``` * @memberof IgxGridCellComponent */ get inEditMode() { return this.editMode; } set inEditMode(value) { this.setEditMode(value); } /** * @hidden * @internal */ get cellSelectionMode() { return this._cellSelection; } set cellSelectionMode(value) { if (this._cellSelection === value) { return; } this.zone.runOutsideAngular(() => { value === GridSelectionMode.multiple ? this.addPointerListeners(value) : this.removePointerListeners(this._cellSelection); }); this._cellSelection = value; } /** * Gets whether the cell is editable. * ```typescript * let isCellReadonly = this.cell.readonly; * ``` * @memberof IgxGridCellComponent */ get readonly() { return !this.column.editable; } get gridRowSpan() { return this.column.gridRowSpan; } get gridColumnSpan() { return this.column.gridColumnSpan; } get rowEnd() { return this.column.rowEnd; } get colEnd() { return this.column.colEnd; } get rowStart() { return this.column.rowStart; } get colStart() { return this.column.colStart; } /** * Returns a string containing the grid `id` and the column `field` concatenated by "_". * ```typescript * let describedBy = this.cell.describedBy; * ``` * @memberof IgxGridCellComponent */ get describedby() { return `${this.row.gridID}_${this.column.field}`; } /** * Gets whether the cell is selected. * ```typescript * let isSelected = this.cell.selected; * ``` * @memberof IgxGridCellComponent */ get selected() { return this.selectionService.selected(this.selectionNode); } /** * Selects/deselects the cell. * ```typescript * this.cell.selected = true. * ``` * @memberof IgxGridCellComponent */ set selected(val) { const node = this.selectionNode; val ? this.selectionService.add(node) : this.selectionService.remove(node); this.grid.notifyChanges(); } get dirty() { if (this.grid.rowEditable) { const rowCurrentState = this.grid.transactions.getAggregatedValue(this.row.rowID, false); if (rowCurrentState) { return rowCurrentState[this.column.field] !== undefined && rowCurrentState[this.column.field] !== null; } } else { const rowTransaction = this.grid.transactions.getState(this.row.rowID); return rowTransaction && rowTransaction.value && (rowTransaction.value[this.column.field] || rowTransaction.value[this.column.field] === 0 || rowTransaction.value[this.column.field] === false); } return false; } /** * Sets the current edit value while a cell is in edit mode. * Only for cell editing mode. * ```typescript * this.cell.editValue = value; * ``` * @memberof IgxGridCellComponent */ set editValue(value) { if (this.crudService.inEditMode) { this.crudService.cell.editValue = value; } } /** * Gets the current edit value while a cell is in edit mode. * Only for cell editing mode. * ```typescript * let editValue = this.cell.editValue; * ``` * @memberof IgxGridCellComponent */ get editValue() { if (this.crudService.inEditMode) { return this.crudService.cell.editValue; } } /** * Returns whether the cell is editable. */ get editable() { return this.column.editable; } set highlight(value) { this._highlight = value; if (this._highlight && this.grid.lastSearchInfo.searchText) { this._highlight.highlight(this.grid.lastSearchInfo.searchText, this.grid.lastSearchInfo.caseSensitive, this.grid.lastSearchInfo.exactMatch); this._highlight.activateIfNecessary(); } } get highlight() { return this._highlight; } get selectionNode() { return { row: this.rowIndex, column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.visibleColumnIndex, layout: this.column.columnLayoutChild ? { rowStart: this.column.rowStart, colStart: this.column.colStart, rowEnd: this.column.rowEnd, colEnd: this.column.colEnd, columnVisibleIndex: this.visibleColumnIndex } : null }; } addPointerListeners(selection) { if (selection !== GridSelectionMode.multiple) { return; } this.nativeElement.addEventListener('pointerdown', this.pointerdown); this.nativeElement.addEventListener('pointerenter', this.pointerenter); this.nativeElement.addEventListener('pointerup', this.pointerup); } removePointerListeners(selection) { if (selection !== GridSelectionMode.multiple) { return; } this.nativeElement.removeEventListener('pointerdown', this.pointerdown); this.nativeElement.removeEventListener('pointerenter', this.pointerenter); this.nativeElement.removeEventListener('pointerup', this.pointerup); } /** * @hidden * @internal */ ngOnInit() { this.zone.runOutsideAngular(() => { this.addPointerListeners(this.cellSelectionMode); // IE 11 workarounds if (isIE()) { this.compositionStartHandler = () => this.isInCompositionMode = true; this.compositionEndHandler = () => this.isInCompositionMode = false; // Hitting Enter with IME submits and exits from edit mode instead of first closing the IME dialog this.nativeElement.addEventListener('compositionstart', this.compositionStartHandler); this.nativeElement.addEventListener('compositionend', this.compositionEndHandler); } }); if (this.platformUtil.isIOS) { this.touchManager.addEventListener(this.nativeElement, 'doubletap', this.onDoubleClick, { cssProps: {} /* don't disable user-select, etc */ }); } } /** * @hidden * @internal */ ngOnDestroy() { this.zone.runOutsideAngular(() => { this.removePointerListeners(this.cellSelectionMode); if (isIE()) { this.nativeElement.removeEventListener('compositionstart', this.compositionStartHandler); this.nativeElement.removeEventListener('compositionend', this.compositionEndHandler); } }); this.touchManager.destroy(); } /** * @hidden * @internal */ _updateCRUDStatus() { if (this.editMode) { return; } const crud = this.crudService; const editableCell = this.crudService.cell; const editMode = !!(crud.row || crud.cell); if (this.editable && editMode && !this.row.deleted) { if (editableCell) { this.gridAPI.update_cell(editableCell, editableCell.editValue); } crud.end(); this.grid.notifyChanges(); crud.begin(this); return; } if (editableCell && crud.sameRow(this.cellID.rowID)) { this.gridAPI.submit_value(); } else if (editMode && !crud.sameRow(this.cellID.rowID)) { this.grid.endEdit(true); } } /** * @deprecated * Gets whether the cell is selected. * ```typescript * let isCellSelected = thid.cell.isCellSelected(); * ``` * @memberof IgxGridCellComponent */ isCellSelected() { return this.selectionService.selected(this.selectionNode); } /** * @hidden * @internal */ ngOnChanges(changes) { if (changes.value && !changes.value.firstChange) { if (this.highlight) { this.highlight.lastSearchInfo.searchedText = this.grid.lastSearchInfo.searchText; this.highlight.lastSearchInfo.caseSensitive = this.grid.lastSearchInfo.caseSensitive; this.highlight.lastSearchInfo.exactMatch = this.grid.lastSearchInfo.exactMatch; } } } /** * Starts/ends edit mode for the cell. * * ```typescript * cell.setEditMode(true); * ``` */ setEditMode(value) { if (this.row.deleted) { return; } if (this.editable && value) { this.gridAPI.submit_value(); this.crudService.begin(this); } else { this.gridAPI.escape_editMode(); } this.grid.notifyChanges(); } /** * Sets new value to the cell. * ```typescript * this.cell.update('New Value'); * ``` * @memberof IgxGridCellComponent */ // TODO: Refactor update(val) { if (this.row.deleted) { return; } const cell = this.crudService.createCell(this); const args = this.gridAPI.update_cell(cell, val); if (this.crudService.cell && this.crudService.sameCell(cell)) { if (args.cancel) { return; } this.gridAPI.escape_editMode(); } this.cdr.markForCheck(); } /** * @hidden * @internal */ onClick(event) { this.grid.onCellClick.emit({ cell: this, event }); } /** * @hidden * @internal */ onContextMenu(event) { this.grid.onContextMenu.emit({ cell: this, event }); } /** * @hidden * @internal */ onFocus(event) { if (this.focused) { return; } this.focused = true; this.row.focused = true; const node = this.selectionNode; const shouldEmitSelection = !this.selectionService.isActiveNode(node); if (this.selectionService.primaryButton) { this._updateCRUDStatus(); this.selectionService.activeElement = node; } else { this.selectionService.activeElement = null; if (this.crudService.inEditMode && !this.editMode) { this.gridAPI.submit_value(); } } this.selectionService.primaryButton = true; if (this.cellSelectionMode === GridSelectionMode.multiple && this.selectionService.activeElement) { this.selectionService.add(this.selectionService.activeElement, false); // pointer events handle range generation this.selectionService.keyboardStateOnFocus(node, this.grid.onRangeSelection, this.nativeElement); } if (this.grid.isCellSelectable && shouldEmitSelection) { this.grid.onSelection.emit({ cell: this, event }); } } /** * @hidden * @internal */ onBlur() { this.focused = false; this.row.focused = false; } handleAlt(key, event) { if (this.row.nativeElement.tagName.toLowerCase() === 'igx-tree-grid-row' && this.isToggleKey(key)) { const collapse = this.row.expanded && ROW_COLLAPSE_KEYS.has(key); const expand = !this.row.expanded && ROW_EXPAND_KEYS.has(key); if (collapse) { this.gridAPI.trigger_row_expansion_toggle(this.row.treeRow, !this.row.expanded, event, this.visibleColumnIndex); } else if (expand) { this.gridAPI.trigger_row_expansion_toggle(this.row.treeRow, !this.row.expanded, event, this.visibleColumnIndex); } } else if (this.grid.hasDetails && this.isToggleKey(key)) { const collapse = this.row.expanded && ROW_COLLAPSE_KEYS.has(key); const expand = !this.row.expanded && ROW_EXPAND_KEYS.has(key); const expandedStates = this.grid.expansionStates; if (expand) { expandedStates.set(this.row.rowID, true); } else if (collapse) { expandedStates.set(this.row.rowID, false); } this.grid.expansionStates = expandedStates; this.grid.notifyChanges(); } } handleTab(shift) { if (shift) { this.grid.navigation.performShiftTabKey(this.row.nativeElement, this.selectionNode); } else { this.grid.navigation.performTab(this.row.nativeElement, this.selectionNode); } } handleEnd(ctrl) { if (ctrl) { this.grid.navigation.goToLastCell(); } else { this.grid.navigation.onKeydownEnd(this.rowIndex, false, this.rowStart); } } handleHome(ctrl) { if (ctrl) { this.grid.navigation.goToFirstCell(); } else { this.grid.navigation.onKeydownHome(this.rowIndex, false, this.rowStart); } } // TODO: Refactor /** * * @hidden * @internal */ dispatchEvent(event) { const key = event.key.toLowerCase(); const shift = event.shiftKey; const ctrl = event.ctrlKey; const node = this.selectionNode; if (!SUPPORTED_KEYS.has(key)) { return; } event.stopPropagation(); const keydownArgs = { targetType: 'dataCell', target: this, event: event, cancel: false }; this.grid.onGridKeydown.emit(keydownArgs); if (keydownArgs.cancel) { this.selectionService.clear(); this.selectionService.keyboardState.active = true; return; } if (event.altKey) { event.preventDefault(); this.handleAlt(key, event); return; } this.selectionService.keyboardStateOnKeydown(node, shift, shift && key === 'tab'); if (key === 'tab') { event.preventDefault(); } if (this.editMode) { if (NAVIGATION_KEYS.has(key)) { if (this.column.inlineEditorTemplate) { return; } if (['date', 'boolean'].indexOf(this.column.dataType) > -1) { return; } return; } } if (NAVIGATION_KEYS.has(key)) { event.preventDefault(); } switch (key) { case 'tab': this.handleTab(shift); break; case 'end': this.handleEnd(ctrl); break; case 'home': this.handleHome(ctrl); break; case 'arrowleft': case 'left': if (ctrl) { this.grid.navigation.onKeydownHome(node.row, false, this.rowStart); break; } this.grid.navigation.onKeydownArrowLeft(this.nativeElement, this.selectionNode); break; case 'arrowright': case 'right': if (ctrl) { this.grid.navigation.onKeydownEnd(node.row, false, this.rowStart); break; } this.grid.navigation.onKeydownArrowRight(this.nativeElement, this.selectionNode); break; case 'arrowup': case 'up': if (ctrl) { this.grid.navigation.navigateTop(this.visibleColumnIndex); break; } this.grid.navigation.navigateUp(this.row.nativeElement, this.selectionNode); break; case 'arrowdown': case 'down': if (ctrl) { this.grid.navigation.navigateBottom(this.visibleColumnIndex); break; } this.grid.navigation.navigateDown(this.row.nativeElement, this.selectionNode); break; case 'enter': case 'f2': this.onKeydownEnterEditMode(); break; case 'escape': case 'esc': this.onKeydownExitEditMode(); break; case ' ': case 'spacebar': case 'space': if (this.grid.isRowSelectable) { this.row.selected ? this.selectionService.deselectRow(this.row.rowID, event) : this.selectionService.selectRowById(this.row.rowID, false, event); } break; default: return; } } /** * @hidden * @internal */ onKeydownEnterEditMode() { if (this.isInCompositionMode) { return; } if (this.column.editable && !this.row.deleted) { if (this.editMode) { this.grid.endEdit(true); this.nativeElement.focus(); } else { this.crudService.begin(this); } } } /** * @hidden * @internal */ onKeydownExitEditMode() { if (this.isInCompositionMode) { return; } if (this.editMode) { const args = this.crudService.cell.createEditEventArgs(); this.grid.onCellEditCancel.emit(args); if (args.cancel) { return; } this.grid.endEdit(false); this.nativeElement.focus(); } } /** * If the provided string matches the text in the cell, the text gets highlighted. * ```typescript * this.cell.highlightText('Cell Value', true); * ``` * @memberof IgxGridCellComponent */ highlightText(text, caseSensitive, exactMatch) { return this.highlight && this.column.searchable ? this.highlight.highlight(text, caseSensitive, exactMatch) : 0; } /** * Clears the highlight of the text in the cell. * ```typescript * this.cell.clearHighLight(); * ``` * @memberof IgxGridCellComponent */ clearHighlight() { if (this.highlight && this.column.searchable) { this.highlight.clearHighlight(); } } /** * @hidden * @internal */ calculateSizeToFit(range) { return Math.max(...Array.from(this.nativeElement.children) .map((child) => getNodeSizeViaRange(range, child))); } isToggleKey(key) { return ROW_COLLAPSE_KEYS.has(key) || ROW_EXPAND_KEYS.has(key); } }; IgxGridCellComponent.ctorParameters = () => [ { type: IgxGridSelectionService }, { type: IgxGridCRUDService }, { type: GridBaseAPIService }, { type: ChangeDetectorRef }, { type: ElementRef }, { type: NgZone }, { type: HammerGesturesManager }, { type: PlatformUtil } ]; __decorate([ Input(), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "column", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "row", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "rowData", void 0); __decorate([ Input(), __metadata("design:type", TemplateRef) ], IgxGridCellComponent.prototype, "cellTemplate", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "value", void 0); __decorate([ Input(), __metadata("design:type", Function) ], IgxGridCellComponent.prototype, "formatter", void 0); __decorate([ HostBinding('attr.data-rowIndex'), __metadata("design:type", Number), __metadata("design:paramtypes", []) ], IgxGridCellComponent.prototype, "rowIndex", null); __decorate([ HostBinding('attr.data-visibleIndex'), Input(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], IgxGridCellComponent.prototype, "visibleColumnIndex", null); __decorate([ DeprecateProperty(`'inEditMode' is deprecated\nUse 'editMode' to get the current state and 'setEditMode(boolean)' as a setter`), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], IgxGridCellComponent.prototype, "inEditMode", null); __decorate([ Input(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], IgxGridCellComponent.prototype, "cellSelectionMode", null); __decorate([ Input(), HostBinding('class.igx-grid__td--pinned-last'), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "lastPinned", void 0); __decorate([ Input(), HostBinding('class.igx-grid__td--editing'), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "editMode", void 0); __decorate([ HostBinding('attr.tabindex'), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "tabindex", void 0); __decorate([ HostBinding('attr.role'), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "role", void 0); __decorate([ HostBinding('attr.aria-readonly'), __metadata("design:type", Boolean), __metadata("design:paramtypes", []) ], IgxGridCellComponent.prototype, "readonly", null); __decorate([ HostBinding('attr.aria-describedby'), __metadata("design:type", String), __metadata("design:paramtypes", []) ], IgxGridCellComponent.prototype, "describedby", null); __decorate([ Input(), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "width", void 0); __decorate([ HostBinding('attr.aria-selected'), HostBinding('class.igx-grid__td--selected'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], IgxGridCellComponent.prototype, "selected", null); __decorate([ HostBinding('class.igx-grid__td--edited'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxGridCellComponent.prototype, "dirty", null); __decorate([ HostBinding('class.igx-grid__td--active'), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "focused", void 0); __decorate([ ViewChild('defaultCell', { read: TemplateRef, static: true }), __metadata("design:type", TemplateRef) ], IgxGridCellComponent.prototype, "defaultCellTemplate", void 0); __decorate([ ViewChild('inlineEditor', { read: TemplateRef, static: true }), __metadata("design:type", TemplateRef) ], IgxGridCellComponent.prototype, "inlineEditorTemplate", void 0); __decorate([ ViewChild(IgxTextHighlightDirective, { read: IgxTextHighlightDirective }), __metadata("design:type", IgxTextHighlightDirective), __metadata("design:paramtypes", [IgxTextHighlightDirective]) ], IgxGridCellComponent.prototype, "highlight", null); __decorate([ DeprecateMethod(`'isCellSelected' is deprecated. Use 'selected' property instead.`), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], IgxGridCellComponent.prototype, "isCellSelected", null); __decorate([ HostListener('dblclick', ['$event']), __metadata("design:type", Object) ], IgxGridCellComponent.prototype, "onDoubleClick", void 0); __decorate([ HostListener('click', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [MouseEvent]), __metadata("design:returntype", void 0) ], IgxGridCellComponent.prototype, "onClick", null); __decorate([ HostListener('contextmenu', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [MouseEvent]), __metadata("design:returntype", void 0) ], IgxGridCellComponent.prototype, "onContextMenu", null); __decorate([ HostListener('focus', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [FocusEvent]), __metadata("design:returntype", void 0) ], IgxGridCellComponent.prototype, "onFocus", null); __decorate([ HostListener('blur'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], IgxGridCellComponent.prototype, "onBlur", null); __decorate([ HostListener('keydown', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [KeyboardEvent]), __metadata("design:returntype", void 0) ], IgxGridCellComponent.prototype, "dispatchEvent", null); IgxGridCellComponent = __decorate([ Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-cell', template: "<ng-template #defaultCell>\n <div igxTextHighlight style=\"pointer-events: none\" [cssClass]=\"highlightClass\" [activeCssClass]=\"activeHighlightClass\" [groupName]=\"gridID\"\n [value]=\"formatter ? formatter(value) : column.dataType === 'number' ? (value | igxdecimal: grid.locale) : column.dataType === 'date' ? (value | igxdate: grid.locale) : value\"\n [row]=\"rowData\" [column]=\"this.column.field\" [containerClass]=\"'igx-grid__td-text'\"\n class=\"igx-grid__td-text\">{{ formatter ? formatter(value) : column.dataType === 'number' ? (value | igxdecimal:\n grid.locale) : column.dataType === 'date' ? (value | igxdate: grid.locale) : value }}</div>\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n <ng-container *ngIf=\"column.dataType === 'string'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [value]=\"editValue\" (input)=\"editValue = $event.target.value\" [igxFocus]=\"focused\" />\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'number'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [value]=\"editValue\" (input)=\"editValue = $event.target.value\" [igxFocus]=\"focused\" type=\"number\">\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'boolean'\">\n <igx-checkbox (change)=\"editValue = $event.checked\" [value]=\"editValue\" [checked]=\"editValue\"\n [igxFocus]=\"focused\" [disableRipple]=\"true\"></igx-checkbox>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'date'\">\n <igx-date-picker [style.width.%]=\"100\" [outlet]=\"grid.outletDirective\" mode=\"dropdown\"\n [locale]=\"grid.locale\" [(value)]=\"editValue\" [igxFocus]=\"focused\" [labelVisibility]=\"false\">\n </igx-date-picker>\n </ng-container>\n</ng-template>\n<ng-container *ngTemplateOutlet=\"template; context: context\">\n</ng-container>\n", providers: [HammerGesturesManager] }), __metadata("design:paramtypes", [IgxGridSelectionService, IgxGridCRUDService, GridBaseAPIService, ChangeDetectorRef, ElementRef, NgZone, HammerGesturesManager, PlatformUtil]) ], IgxGridCellComponent); export { IgxGridCellComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2NlbGwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULGFBQWEsRUFDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDbEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFDSCxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFDNUgsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJbkQ7Ozs7Ozs7Ozs7OztHQVlHO0FBT0gsSUFBYSxvQkFBb0IsR0FBakMsTUFBYSxvQkFBb0I7SUE2ZTdCLFlBQ2MsZ0JBQXlDLEVBQ3pDLFdBQStCLEVBQ2xDLE9BQTRELEVBQzVELEdBQXNCLEVBQ3JCLE9BQW1CLEVBQ2pCLElBQVksRUFDZCxZQUFtQyxFQUNqQyxZQUEwQjtRQVAxQixx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