com.phloxui
Version:
PhloxUI Ng2+ Framework
1,360 lines (1,359 loc) • 129 kB
JavaScript
/**
* @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGhsb3hUYWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvdGFibGUvUGhsb3hUYWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFL0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFLN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBFLE9BQU8sRUFDTCxlQUFlLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQzlJLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSTFELHVCQUFNLFNBQVMsR0FBVyxXQUFXLENBQUM7QUFFdEMsdUJBQU0sd0JBQXdCLEdBQVcsQ0FBQyxDQUFDO0FBQzNDLHVCQUFNLHNCQUFzQixHQUFZLElBQUksQ0FBQztBQXVCN0MsTUFBTSxpQkFBa0IsU0FBUSxtQkFBbUI7Ozs7O2dCQTJNOUIsV0FBK0IsRUFBRSxVQUFzQjtRQUN4RSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRS9DLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFL0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBRTVDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDMUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Z0JBRzVDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEI7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFFOUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUM5RyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUF