UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

1,360 lines (1,359 loc) 129 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { TypeResolveService } from '../../service/TypeResolveService.service'; import { TableModel } from '.././model/models'; import { I18N, Option } from '../../decorator/decorators'; import { DataUtils } from '../../share/utils/DataUtils'; import { AbstractHasDataHelp } from '../AbstractHasDataHelp'; import { TableRowController } from './TableRowController'; import { DefaultTableRowGenerator } from './DefaultTableRowGenerator'; import { DefaultTableBody } from './DefaultTableBody.component'; import { DefaultTableRow } from './DefaultTableRow.component'; import { DefaultTableHeader } from './DefaultTableHeader.component'; import { DBL_CLICK_EVENT, CHANGE_EVENT, CLICK_EVENT, FOCUS_EVENT, LOST_FOCUS_EVENT, BEFORE_CLICK_EVENT, BEFORE_DBL_CLICK_EVENT, BEFORE_LOST_FOCUS_EVENT, BEFORE_FOCUS_EVENT, BEFORE_CHANGE_EVENT } from '../../share/CustomEventType'; import { EventUtils } from '../../share/utils/EventUtils'; const /** @type {?} */ TYPE_NAME = "phx-table"; const /** @type {?} */ DEFAULT_LOAD_STATE_DELAY = 0; const /** @type {?} */ DEFAULT_DBL_CLICK_EDIT = true; export class PhloxTable extends AbstractHasDataHelp { /** * @param {?} typeService * @param {?} elementRef */ constructor(typeService, elementRef) { super(elementRef); this.beforeChangeEvent = new EventEmitter(); this.changeEvent = new EventEmitter(); this.beforeChangeEvent = new EventEmitter(); this.beforeCellClickEvent = new EventEmitter(); this.beforeCellDblClickEvent = new EventEmitter(); this.beforeCellLostFocusEvent = new EventEmitter(); this.beforeCellFocusEvent = new EventEmitter(); this.cellClickEvent = new EventEmitter(); this.cellDblClickEvent = new EventEmitter(); this.cellLostFocusEvent = new EventEmitter(); this.cellFocusEvent = new EventEmitter(); this.rowDragEvent = new EventEmitter(); this.rowDragStartEvent = new EventEmitter(); this.rowDragEndEvent = new EventEmitter(); this.rowDragEnterEvent = new EventEmitter(); this.rowDragOverEvent = new EventEmitter(); this.rowDragLeaveEvent = new EventEmitter(); this.rowDropEvent = new EventEmitter(); this.rowDropAcceptedEvent = new EventEmitter(); this.rowDropRejectedEvent = new EventEmitter(); this.typeResolveService = typeService; this.model = new TableModel(typeService); this.header = new TableRowController(this); this.rows = []; this.bodyWrapperHandler = (event) => { this.bodyComponentInstance = event.instance; if (this.bodyComponentInstance !== null && typeof this.bodyComponentInstance['initialize'] === 'function') { this.bodyComponentInstance.initialize(this); // Auto re-render when new table body was initialized this.rerender(false); } }; this.headerWrapperHandler = (event) => { this.headerComponentInstance = event.instance; if (this.headerComponentInstance !== null && typeof this.headerComponentInstance['initialize'] === 'function') { this.headerComponentInstance.initialize(this); } }; } /** * @return {?} */ ngOnInit() { super.ngOnInit(); // Auto set default header's component type if (this.model.getHeaderModel().getComponentTypeName() === null || typeof this.model.getHeaderModel().getComponentTypeName() === 'undefined') { this.model.getHeaderModel().setComponentTypeName(DefaultTableHeader.TYPE_NAME); } // Auto set default body's component type if (this.model.getBodyComponentTypeName() === null || typeof this.model.getBodyComponentTypeName() === 'undefined') { this.model.setBodyComponentTypeName(DefaultTableBody.TYPE_NAME); } // Auto set default row's component type if (this.model.getRowModel().getComponentTypeName() === null || typeof this.model.getRowModel().getComponentTypeName() === 'undefined') { this.model.getRowModel().setComponentTypeName(DefaultTableRow.TYPE_NAME); } // Set default option values if (this.loadStateDelay === null || typeof this.loadStateDelay === 'undefined') { this.loadStateDelay = DEFAULT_LOAD_STATE_DELAY; } if (this.dblClickEdit === null || typeof this.dblClickEdit === 'undefined') { this.dblClickEdit = DEFAULT_DBL_CLICK_EDIT; } if (this.rowGenerator === null || typeof this.rowGenerator === 'undefined') { this.rowGenerator = new DefaultTableRowGenerator(); } // Auto render when table is initialized (this method also auto apply i18n into "bodyComponentInstance") this.rerender(true); } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} compChangeEvent * @return {?} */ emitBeforeChangeEvent(rowIdx, colIdx, compChangeEvent) { if (this.beforeChangeEvent !== null && this.beforeChangeEvent !== undefined) { let /** @type {?} */ data = { oldValue: DataUtils.getDataValue('detail.data.oldValue', compChangeEvent), newValue: DataUtils.getDataValue('detail.data.newValue', compChangeEvent), rowIndex: rowIdx, columnIndex: colIdx, cellComponent: DataUtils.getDataValue('detail.target', compChangeEvent) }; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_CHANGE_EVENT, this, data, compChangeEvent); this.beforeChangeEvent.emit(ev); } } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} compChangeEvent * @return {?} */ emitChangeEvent(rowIdx, colIdx, compChangeEvent) { if (this.changeEvent !== null && this.changeEvent !== undefined) { let /** @type {?} */ data = { oldValue: DataUtils.getDataValue('detail.data.oldValue', compChangeEvent), newValue: DataUtils.getDataValue('detail.data.newValue', compChangeEvent), rowIndex: rowIdx, columnIndex: colIdx, cellComponent: DataUtils.getDataValue('detail.target', compChangeEvent) }; let /** @type {?} */ ev = EventUtils.newCustomEvent(CHANGE_EVENT, this, data, compChangeEvent); this.changeEvent.emit(ev); } } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} browserEvent * @return {?} */ emitBeforeCellClickEvent(rowIdx, colIdx, browserEvent) { if (this.beforeCellClickEvent !== null && this.beforeCellClickEvent !== undefined) { let /** @type {?} */ data = { rowIndex: rowIdx, columnIndex: colIdx }; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_CLICK_EVENT, this, data, browserEvent); this.beforeCellClickEvent.emit(ev); } } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} browserEvent * @return {?} */ emitCellClickEvent(rowIdx, colIdx, browserEvent) { if (this.cellClickEvent !== null && this.cellClickEvent !== undefined) { let /** @type {?} */ data = { rowIndex: rowIdx, columnIndex: colIdx }; let /** @type {?} */ ev = EventUtils.newCustomEvent(CLICK_EVENT, this, data, browserEvent); this.cellClickEvent.emit(ev); } } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} browserEvent * @return {?} */ emitBeforeCellDblClickEvent(rowIdx, colIdx, browserEvent) { if (this.beforeCellDblClickEvent !== null && this.beforeCellDblClickEvent !== undefined) { let /** @type {?} */ data = { rowIndex: rowIdx, columnIndex: colIdx }; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_DBL_CLICK_EVENT, this, data, browserEvent); this.beforeCellDblClickEvent.emit(ev); } } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} browserEvent * @return {?} */ emitCellDblClickEvent(rowIdx, colIdx, browserEvent) { if (this.cellDblClickEvent !== null && this.cellDblClickEvent !== undefined) { let /** @type {?} */ data = { rowIndex: rowIdx, columnIndex: colIdx }; let /** @type {?} */ ev = EventUtils.newCustomEvent(DBL_CLICK_EVENT, this, data, browserEvent); this.cellDblClickEvent.emit(ev); } } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} compFocusEvent * @return {?} */ emitBeforeCellFocusEvent(rowIdx, colIdx, compFocusEvent) { if (this.beforeCellFocusEvent !== null && this.beforeCellFocusEvent !== undefined) { let /** @type {?} */ data = { rowIndex: rowIdx, columnIndex: colIdx }; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_FOCUS_EVENT, this, data, compFocusEvent); this.beforeCellFocusEvent.emit(ev); } } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} compFocusEvent * @return {?} */ emitCellFocusEvent(rowIdx, colIdx, compFocusEvent) { if (this.cellFocusEvent !== null && this.cellFocusEvent !== undefined) { let /** @type {?} */ data = { rowIndex: rowIdx, columnIndex: colIdx }; let /** @type {?} */ ev = EventUtils.newCustomEvent(FOCUS_EVENT, this, data, compFocusEvent); this.cellFocusEvent.emit(ev); } } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} compFocusEvent * @return {?} */ emitBeforeCellLostFocusEvent(rowIdx, colIdx, compFocusEvent) { if (this.beforeCellLostFocusEvent !== null && this.beforeCellLostFocusEvent !== undefined) { let /** @type {?} */ data = { rowIndex: rowIdx, columnIndex: colIdx }; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_LOST_FOCUS_EVENT, this, data, compFocusEvent); this.beforeCellLostFocusEvent.emit(ev); } } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} compFocusEvent * @return {?} */ emitCellLostFocusEvent(rowIdx, colIdx, compFocusEvent) { if (this.cellLostFocusEvent !== null && this.cellLostFocusEvent !== undefined) { let /** @type {?} */ data = { rowIndex: rowIdx, columnIndex: colIdx }; let /** @type {?} */ ev = EventUtils.newCustomEvent(LOST_FOCUS_EVENT, this, data, compFocusEvent); this.cellLostFocusEvent.emit(ev); } } /** * @param {?} model * @return {?} */ setModel(model) { this.model = model; if (this.model !== null && typeof this.model !== 'undefined') { // Auto set options & auto apply i18n into this.model. if (this.options !== null && typeof this.options !== 'undefined') { this.model.setOptions(this.options['model']); } else { // Set null or undefined into the method. this.model.setOptions(this.options); } // Since @I18N() bypasses key, we directly pass i18nValue into the method here. this.model.applyI18N(this.i18nValue); } } /** * @return {?} */ getModel() { return this.model; } /** * @param {?} data * @return {?} */ setData(data) { super.setData(data); // Save original data with cloned value this.selfSaveData(this.data); // Auto re-render when new data was set this.rerender(true); } /** * @return {?} */ isSelfDataDirty() { let /** @type {?} */ b = JSON.stringify(this.data) !== JSON.stringify(this.originalData); return b; } /** * @param {?} data * @return {?} */ selfSaveData(data) { if (typeof this.data === 'object') { this.originalData = JSON.parse(JSON.stringify(this.data)); } else { this.originalData = this.data; } } /** * @return {?} */ selfResetData() { if (this.originalData === null || typeof this.originalData === 'undefined') { this.data = this.originalData; } else if (this.data === null || typeof this.data === 'undefined') { this.data = JSON.parse(JSON.stringify(this.originalData)); } else if (Array.isArray(this.originalData)) { if (Array.isArray(this.data)) { // Re-copy members from original data (do not change this.data object reference) this.data.splice(0, this.data.length); this.data.concat(this.originalData); } else { // Copy array member values this.data = [].concat(this.originalData); } } else if (typeof this.originalData === 'object') { if (typeof this.data === 'object') { // Copy data values from originalData (overwrite=true and resetOldValues=true) // (do not change this.data object reference) DataUtils.copyDataValues(this.originalData, this.data, true, true); } else { // Clone object from original data this.data = JSON.parse(JSON.stringify(this.originalData)); } } else { this.data = this.originalData; } } /** * @return {?} */ getOriginalData() { return this.originalData; } /** * @return {?} */ getBodyComponentInstance() { return this.bodyComponentInstance; } /** * @return {?} */ getRowGenerator() { return this.rowGenerator; } /** * @param {?} rowGenerator * @return {?} */ setRowGenerator(rowGenerator) { let /** @type {?} */ oldGen = this.rowGenerator; this.rowGenerator = rowGenerator; if (oldGen !== this.rowGenerator) { // If the new row generator was set into this table, // we'll rerender the table automatically. this.rerender(true); } } /** * @return {?} */ isDblClickEdit() { return this.dblClickEdit; } /** * @param {?} dblClickEdit * @return {?} */ setDblClickEdit(dblClickEdit) { this.dblClickEdit = dblClickEdit; } /** * @param {?=} generateRows * @param {?=} keepState * @return {?} */ rerender(generateRows = false, keepState = true) { this.render(generateRows, keepState).catch((error) => { // ! TODO Display error on UI? console.error(error); }); } /** * @param {?=} generateRows * @param {?=} keepState * @return {?} */ render(generateRows = false, keepState = true) { let /** @type {?} */ oldRowStates = this.rows; if (generateRows) { if (this.rowGenerator !== null && typeof this.rowGenerator !== 'undefined') { this.rows = this.rowGenerator.generateTableRows(this, this.data); } else { this.rows = []; } if (this.rows === null || typeof this.rows === 'undefined' || !Array.isArray(this.rows)) { this.rows = []; } } return Promise.resolve().then(() => { if (this.bodyComponentInstance !== null && typeof this.bodyComponentInstance.render === 'function') { return this.bodyComponentInstance.render(this.rows); } }).then(() => { // Auto apply i18n on "bodyComponentInstance" after re-rendering if (this.bodyComponentInstance !== null && typeof (/** @type {?} */ (this.bodyComponentInstance)).applyI18N === 'function') { if (this.i18nValue === null) { (/** @type {?} */ (this.bodyComponentInstance)).applyI18N(null); } else if (typeof this.i18nValue !== 'undefined') { // "bodyComponentInstance" is mapped to "body" i18n key. (/** @type {?} */ (this.bodyComponentInstance)).applyI18N(this.i18nValue['body']); } } // Load old row states if (generateRows && keepState) { let /** @type {?} */ doLoad = () => { this.loadStateTimer = null; this.loadStateResolve = null; for (let /** @type {?} */ row of this.rows) { // Find old row state let /** @type {?} */ oldRowState = null; for (let /** @type {?} */ i = 0; i < oldRowStates.length; i++) { if (this.rowGenerator.compareRow(row, oldRowStates[i]) === 0) { oldRowState = oldRowStates[i]; oldRowStates.splice(i, 1); break; } } if (oldRowState !== null) { if (row.getComponentInstance() !== null && typeof row.getComponentInstance() !== 'undefined') { // Call loadState() via component instance to let its (the component) sub class can be // able to hook this event to do something more. row.getComponentInstance().loadState(oldRowState); } else { row.loadState(oldRowState); } } } }; if (this.loadStateDelay > 0) { // Call doLoad after timeout reached. return new Promise((resolve, reject) => { if (this.loadStateTimer !== null && typeof this.loadStateTimer !== 'undefined') { clearTimeout(this.loadStateTimer); } if (this.loadStateResolve !== null && typeof this.loadStateResolve !== 'undefined') { this.loadStateResolve(); } this.loadStateTimer = setTimeout(() => { try { doLoad(); resolve(); } catch (/** @type {?} */ e) { reject(e); } }, this.loadStateDelay); // In case of this timer is canceled out, we'll resolve this promise immeidately. this.loadStateResolve = resolve; }); } else { // Call doLoad immeidately. doLoad(); } } }); } /** * @return {?} */ getRowControllers() { if (this.rows === null || !Array.isArray(this.rows)) { return null; } return [].concat(this.rows); } /** * @param {?} row * @return {?} */ getRowIndex(row) { if (row === null || typeof row === 'undefined') { return -1; } if (this.rows === null || !Array.isArray(this.rows)) { return -1; } return this.rows.indexOf(row); } /** * @param {?} data * @param {?=} compareByRef * @return {?} */ getRowIndexByData(data, compareByRef = true) { if (this.rows === null || !Array.isArray(this.rows)) { return -1; } for (let /** @type {?} */ i = 0; i < this.rows.length; i++) { let /** @type {?} */ row = this.rows[i]; if (row === null || typeof row === 'undefined') { continue; } if (compareByRef) { if (row.getData() === data) { return i; } } else { if (JSON.stringify(row.getData()) === JSON.stringify(data)) { return i; } } } return -1; } /** * @param {?} data * @param {?=} compareByRef * @return {?} */ getRowController(data, compareByRef = true) { let /** @type {?} */ rowIdx = this.getRowIndexByData(data, compareByRef); if (rowIdx < 0) { return null; } return this.rows[rowIdx]; } /** * @return {?} */ getHeaderController() { return this.header; } /** * @param {?} rowData * @return {?} */ findRow(rowData) { return this.rowGenerator.findRow(this.rows, rowData); } /** * @param {?} rowIdx * @param {?} colIdx * @return {?} */ isCellEditable(rowIdx, colIdx) { if (rowIdx === null || typeof rowIdx !== 'number') { return false; } if (colIdx === null || typeof colIdx !== 'number') { return false; } if (rowIdx < 0 || rowIdx >= this.rows.length) { return false; } let /** @type {?} */ row = this.rows[rowIdx]; if (colIdx < 0 || colIdx >= row.getCellComponentInstances().length) { return false; } return row.isCellEditable(colIdx); } /** * @param {?} rowIdx * @param {?} colIdx * @return {?} */ isCellEditing(rowIdx, colIdx) { if (rowIdx === null || typeof rowIdx !== 'number') { return false; } if (colIdx === null || typeof colIdx !== 'number') { return false; } if (rowIdx < 0 || rowIdx >= this.rows.length) { return false; } let /** @type {?} */ row = this.rows[rowIdx]; if (colIdx < 0 || colIdx >= row.getCellComponentInstances().length) { return false; } return row.isCellEditing(colIdx); } /** * @param {?} rowIdx * @param {?} colIdx * @return {?} */ isCellEditingMode(rowIdx, colIdx) { if (rowIdx === null || typeof rowIdx !== 'number') { return false; } if (colIdx === null || typeof colIdx !== 'number') { return false; } if (rowIdx < 0 || rowIdx >= this.rows.length) { return false; } let /** @type {?} */ row = this.rows[rowIdx]; if (colIdx < 0 || colIdx >= row.getCellComponentInstances().length) { return false; } return row.isCellEditingMode(colIdx); } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} editing * @return {?} */ setCellEditing(rowIdx, colIdx, editing) { if (rowIdx === null || typeof rowIdx !== 'number') { return; } if (colIdx === null || typeof colIdx !== 'number') { return; } if (rowIdx < 0 || rowIdx >= this.rows.length) { return; } let /** @type {?} */ row = this.rows[rowIdx]; if (colIdx < 0 || colIdx >= row.getCellComponentInstances().length) { return; } return row.setCellEditing(colIdx, editing); } /** * @param {?} rowIdx * @param {?} colIdx * @return {?} */ toggleCellEditing(rowIdx, colIdx) { if (rowIdx === null || typeof rowIdx !== 'number') { return; } if (colIdx === null || typeof colIdx !== 'number') { return; } if (rowIdx < 0 || rowIdx >= this.rows.length) { return; } let /** @type {?} */ row = this.rows[rowIdx]; if (colIdx < 0 || colIdx >= row.getCellComponentInstances().length) { return; } return row.setCellEditing(colIdx, !this.isCellEditing(rowIdx, colIdx)); } /** * @return {?} */ _getBodyWrapperHandler() { return this.bodyWrapperHandler; } /** * @return {?} */ _getHeaderWrapperHandler() { return this.headerWrapperHandler; } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} compChangeEvent * @param {?=} fireEvent * @return {?} */ onCellChanged(rowIdx, colIdx, compChangeEvent, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeChangeEvent', compChangeEvent, fireEvent, ($event) => { // doEvent }, ($event) => { // emitBeforeEvent this.emitBeforeChangeEvent(rowIdx, colIdx, $event); }, ($event, result) => { // emitAfterEvent this.emitChangeEvent(rowIdx, colIdx, $event); }, ($event) => { // doPrevented }); } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} browserEvent * @param {?=} fireEvent * @return {?} */ onCellClicked(rowIdx, colIdx, browserEvent, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeCellClickEvent', browserEvent, fireEvent, ($event) => { // doEvent }, ($event) => { // emitBeforeEvent this.emitBeforeCellClickEvent(rowIdx, colIdx, $event); }, ($event, result) => { // emitAfterEvent this.emitCellClickEvent(rowIdx, colIdx, $event); }, ($event) => { // doPrevented }); } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} browserEvent * @param {?=} fireEvent * @return {?} */ onCellDblClicked(rowIdx, colIdx, browserEvent, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeCellDblClickEvent', browserEvent, fireEvent, ($event) => { // doEvent if (this.isDblClickEdit() && this.isCellEditable(rowIdx, colIdx)) { // Toggle cell editing flag if isDblClickEdit() is enabled. this.toggleCellEditing(rowIdx, colIdx); } }, ($event) => { // emitBeforeEvent this.emitBeforeCellDblClickEvent(rowIdx, colIdx, $event); }, ($event, result) => { // emitAfterEvent this.emitCellDblClickEvent(rowIdx, colIdx, $event); }, ($event) => { // doPrevented }); } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} compFocusEvent * @param {?=} fireEvent * @return {?} */ onCellFocused(rowIdx, colIdx, compFocusEvent, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeCellFocusEvent', compFocusEvent, fireEvent, ($event) => { // doEvent }, ($event) => { // emitBeforeEvent this.emitBeforeCellFocusEvent(rowIdx, colIdx, $event); }, ($event, result) => { // emitAfterEvent this.emitCellFocusEvent(rowIdx, colIdx, $event); }, ($event) => { // doPrevented }); } /** * @param {?} rowIdx * @param {?} colIdx * @param {?} compLostFocusEvent * @param {?=} fireEvent * @return {?} */ onCellLostFocused(rowIdx, colIdx, compLostFocusEvent, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeCellLostFocusEvent', compLostFocusEvent, fireEvent, ($event) => { // doEvent }, ($event) => { // emitBeforeEvent this.emitBeforeCellLostFocusEvent(rowIdx, colIdx, $event); }, ($event, result) => { // emitAfterEvent this.emitCellLostFocusEvent(rowIdx, colIdx, $event); }, ($event) => { // doPrevented }); } /** * @param {?} event * @return {?} */ onDrag(event) { if (this.rowDragEvent !== null && this.rowDragEvent !== undefined) { this.rowDragEvent.emit(event); } } /** * @param {?} event * @return {?} */ onDragStart(event) { if (this.rowDragStartEvent !== null && this.rowDragStartEvent !== undefined) { this.rowDragStartEvent.emit(event); } } /** * @param {?} event * @return {?} */ onDragEnd(event) { if (this.rowDragEndEvent !== null && this.rowDragEndEvent !== undefined) { this.rowDragEndEvent.emit(event); } } /** * @param {?} event * @return {?} */ onDragEnter(event) { if (this.rowDragEnterEvent !== null && this.rowDragEnterEvent !== undefined) { this.rowDragEnterEvent.emit(event); } } /** * @param {?} event * @return {?} */ onDragOver(event) { if (this.rowDragOverEvent !== null && this.rowDragOverEvent !== undefined) { this.rowDragOverEvent.emit(event); } } /** * @param {?} event * @return {?} */ onDragLeave(event) { if (this.rowDragLeaveEvent !== null && this.rowDragLeaveEvent !== undefined) { this.rowDragLeaveEvent.emit(event); } } /** * @param {?} event * @return {?} */ onDrop(event) { if (this.rowDropEvent !== null && this.rowDropEvent !== undefined) { this.rowDropEvent.emit(event); } } /** * @param {?} event * @return {?} */ onDropAccepted(event) { if (this.rowDropAcceptedEvent !== null && this.rowDropAcceptedEvent !== undefined) { this.rowDropAcceptedEvent.emit(event); } } /** * @param {?} event * @return {?} */ onDropRejected(event) { if (this.rowDropRejectedEvent !== null && this.rowDropRejectedEvent !== undefined) { this.rowDropRejectedEvent.emit(event); } } /** * @return {?} */ getBeforeCellFocusEvent() { return this.beforeCellFocusEvent; } /** * @param {?} event * @return {?} */ setBeforeCellFocusEvent(event) { this.beforeCellFocusEvent = event; } /** * @return {?} */ getCellFocusEvent() { return this.cellFocusEvent; } /** * @param {?} event * @return {?} */ setCellFocusEvent(event) { this.cellFocusEvent = event; } /** * @return {?} */ getBeforeCellLostFocusEvent() { return this.beforeCellLostFocusEvent; } /** * @param {?} event * @return {?} */ setBeforeCellLostFocusEvent(event) { this.beforeCellLostFocusEvent = event; } /** * @return {?} */ getCellLostFocusEvent() { return this.cellLostFocusEvent; } /** * @param {?} event * @return {?} */ setCellLostFocusEvent(event) { this.cellLostFocusEvent = event; } /** * @return {?} */ getBeforeCellClickEvent() { return this.beforeCellClickEvent; } /** * @param {?} event * @return {?} */ setBeforeCellClickEvent(event) { this.beforeCellClickEvent = event; } /** * @return {?} */ getCellClickEvent() { return this.cellClickEvent; } /** * @param {?} event * @return {?} */ setCellClickEvent(event) { this.cellClickEvent = event; } /** * @return {?} */ getBeforeCellDblClickEvent() { return this.beforeCellDblClickEvent; } /** * @param {?} event * @return {?} */ setBeforeCellDblClickEvent(event) { this.beforeCellDblClickEvent = event; } /** * @return {?} */ getCellDblClickEvent() { return this.cellDblClickEvent; } /** * @param {?} event * @return {?} */ setCellDblClickEvent(event) { this.cellDblClickEvent = event; } /** * @return {?} */ getBeforeChangeEvent() { return this.beforeChangeEvent; } /** * @param {?} event * @return {?} */ setBeforeChangeEvent(event) { this.beforeChangeEvent = event; } /** * @return {?} */ getChangeEvent() { return this.changeEvent; } /** * @param {?} event * @return {?} */ setChangeEvent(event) { this.changeEvent = event; } } PhloxTable.TYPE_NAME = TYPE_NAME; PhloxTable.DEFAULT_LOAD_STATE_DELAY = DEFAULT_LOAD_STATE_DELAY; PhloxTable.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<!-- <thead> --> <phx-component-wrapper [type]="getModel().getHeaderModel().getComponentType()" [options]="getModel().getHeaderModel().getComponentOptions()" [dataParent]="this" [data]="getData()" [handler]="_getHeaderWrapperHandler()" [class]="'phx-table-header' + (getModel().getHeaderModel().getCSSClass() ? ' ' + getModel().getHeaderModel().getCSSClass() : '')"> </phx-component-wrapper> <!-- <tbody> --> <phx-component-wrapper [type]="getModel().getBodyComponentType()" [options]="getModel().getBodyComponentOptions()" [handler]="_getBodyWrapperHandler()" [dataParent]="this" [data]="getData()" [class]="'phx-table-body' + (getModel().getBodyCSSClass() ? ' ' + getModel().getBodyCSSClass() : '')"> </phx-component-wrapper> ` },] }, ]; /** @nocollapse */ PhloxTable.ctorParameters = () => [ { type: TypeResolveService, }, { type: ElementRef, }, ]; PhloxTable.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "help": [{ type: Input },], "rowGenerator": [{ type: Input },], "loadStateDelay": [{ type: Input },], "dblClickEdit": [{ type: Input },], "beforeCellClickEvent": [{ type: Output, args: ['phxBeforeCellClick',] },], "beforeCellDblClickEvent": [{ type: Output, args: ['phxBeforeCellDblClick',] },], "beforeCellLostFocusEvent": [{ type: Output, args: ['phxBeforeCellLostFocus',] },], "beforeCellFocusEvent": [{ type: Output, args: ['phxBeforeCellFocus',] },], "cellClickEvent": [{ type: Output, args: ['phxCellClick',] },], "cellDblClickEvent": [{ type: Output, args: ['phxCellDblClick',] },], "cellLostFocusEvent": [{ type: Output, args: ['phxCellLostFocus',] },], "cellFocusEvent": [{ type: Output, args: ['phxCellFocus',] },], "rowDragEvent": [{ type: Output, args: ['phxRowDrag',] },], "rowDragStartEvent": [{ type: Output, args: ['phxRowDragStart',] },], "rowDragEndEvent": [{ type: Output, args: ['phxRowDragEnd',] },], "rowDragEnterEvent": [{ type: Output, args: ['phxRowDragEnter',] },], "rowDragOverEvent": [{ type: Output, args: ['phxRowDragOver',] },], "rowDragLeaveEvent": [{ type: Output, args: ['phxRowDragLeave',] },], "rowDropEvent": [{ type: Output, args: ['phxRowDrop',] },], "rowDropAcceptedEvent": [{ type: Output, args: ['phxRowDropAccepted',] },], "rowDropRejectedEvent": [{ type: Output, args: ['phxRowDropRejected',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], PhloxTable.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], PhloxTable.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], PhloxTable.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], PhloxTable.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], PhloxTable.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], PhloxTable.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], PhloxTable.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], PhloxTable.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], PhloxTable.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], PhloxTable.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], PhloxTable.prototype, "disabled", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], PhloxTable.prototype, "help", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], PhloxTable.prototype, "rowGenerator", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Number) ], PhloxTable.prototype, "loadStateDelay", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], PhloxTable.prototype, "dblClickEdit", void 0); tslib_1.__decorate([ Option('beforeCellClick'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "beforeCellClickEvent", void 0); tslib_1.__decorate([ Option('beforeCellDblClick'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "beforeCellDblClickEvent", void 0); tslib_1.__decorate([ Option('beforeCellLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "beforeCellLostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeCellFocus'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "beforeCellFocusEvent", void 0); tslib_1.__decorate([ Option('cellClick'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "cellClickEvent", void 0); tslib_1.__decorate([ Option('cellDblClick'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "cellDblClickEvent", void 0); tslib_1.__decorate([ Option('cellLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "cellLostFocusEvent", void 0); tslib_1.__decorate([ Option('cellFocus'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "cellFocusEvent", void 0); tslib_1.__decorate([ Option('rowDrag'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "rowDragEvent", void 0); tslib_1.__decorate([ Option('rowDragStart'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "rowDragStartEvent", void 0); tslib_1.__decorate([ Option('rowDragEnd'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "rowDragEndEvent", void 0); tslib_1.__decorate([ Option('rowDragEnter'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "rowDragEnterEvent", void 0); tslib_1.__decorate([ Option('rowDragOver'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "rowDragOverEvent", void 0); tslib_1.__decorate([ Option('rowDragLeave'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "rowDragLeaveEvent", void 0); tslib_1.__decorate([ Option('rowDrop'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "rowDropEvent", void 0); tslib_1.__decorate([ Option('rowDropAccepted'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "rowDropAcceptedEvent", void 0); tslib_1.__decorate([ Option('rowDropRejected'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "rowDropRejectedEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], PhloxTable.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option(), I18N({ /* { "header": { ... }, "body": { ... }, "columns": [ { "name": "column-name" } ] } */ bypass: true }), tslib_1.__metadata("design:type", TableModel) ], PhloxTable.prototype, "model", void 0); tslib_1.__decorate([ I18N('header'), tslib_1.__metadata("design:type", Object) ], PhloxTable.prototype, "header", void 0); tslib_1.__decorate([ I18N('body'), tslib_1.__metadata("design:type", Object) ], PhloxTable.prototype, "bodyComponentInstance", void 0); function PhloxTable_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ PhloxTable.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ PhloxTable.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ PhloxTable.propDecorators; /** @type {?} */ PhloxTable.TYPE_NAME; /** @type {?} */ PhloxTable.DEFAULT_LOAD_STATE_DELAY; /** @type {?} */ PhloxTable.prototype.dataParent; /** @type {?} */ PhloxTable.prototype.ignoreParentData; /** @type {?} */ PhloxTable.prototype.data; /** @type {?} */ PhloxTable.prototype.ignoreParentDisabled; /** @type {?} */ PhloxTable.prototype.delegateHistory; /** @type {?} */ PhloxTable.prototype.onDisabled; /** @type {?} */ PhloxTable.prototype.onEnabled; /** @type {?} */ PhloxTable.prototype.loadingEnabled; /** @type {?} */ PhloxTable.prototype.i18nKey; /** @type {?} */ PhloxTable.prototype.bypass; /** @type {?} */ PhloxTable.prototype.options; /** @type {?} */ PhloxTable.prototype.disabled; /** @type {?} */ PhloxTable.prototype.help; /** @type {?} */ PhloxTable.prototype.rowGenerator; /** @type {?} */ PhloxTable.prototype.loadStateDelay; /** @type {?} */ PhloxTable.prototype.dblClickEdit; /** @type {?} */ PhloxTable.prototype.beforeCellClickEvent; /** @type {?} */ PhloxTable.prototype.beforeCellDblClickEvent; /** @type {?} */ PhloxTable.prototype.beforeCellLostFocusEvent; /** @type {?} */ PhloxTable.prototype.beforeCellFocusEvent; /** @type {?} */ PhloxTable.prototype.cellClickEvent; /** @type {?} */ PhloxTable.prototype.cellDblClickEvent; /** @type {?} */ PhloxTable.prototype.cellLostFocusEvent; /** @type {?} */ PhloxTable.prototype.cellFocusEvent; /** @type {?} */ PhloxTable.prototype.rowDragEvent; /** @type {?} */ PhloxTable.prototype.rowDragStartEvent; /** @type {?} */ PhloxTable.prototype.rowDragEndEvent; /** @type {?} */ PhloxTable.prototype.rowDragEnterEvent; /** @type {?} */ PhloxTable.prototype.rowDragOverEvent; /** @type {?} */ PhloxTable.prototype.rowDragLeaveEvent; /** @type {?} */ PhloxTable.prototype.rowDropEvent; /** @type {?} */ PhloxTable.prototype.rowDropAcceptedEvent; /** @type {?} */ PhloxTable.prototype.rowDropRejectedEvent; /** @type {?} */ PhloxTable.prototype.changeEvent; /** @type {?} */ PhloxTable.prototype.beforeChangeEvent; /** @type {?} */ PhloxTable.prototype.model; /** @type {?} */ PhloxTable.prototype.header; /** @type {?} */ PhloxTable.prototype.bodyComponentInstance; /** @type {?} */ PhloxTable.prototype.headerComponentInstance; /** @type {?} */ PhloxTable.prototype.typeResolveService; /** @type {?} */ PhloxTable.prototype.rows; /** @type {?} */ PhloxTable.prototype.bodyWrapperHandler; /** @type {?} */ PhloxTable.prototype.headerWrapperHandler; /** @type {?} */ PhloxTable.prototype.originalData; /** @type {?} */ PhloxTable.prototype.loadStateTimer; /** @type {?} */ PhloxTable.prototype.loadStateResolve; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGhsb3hUYWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvdGFibGUvUGhsb3hUYWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFL0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFLN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBFLE9BQU8sRUFDTCxlQUFlLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQzlJLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSTFELHVCQUFNLFNB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