UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

161 lines (160 loc) 17.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Component, Input, Output, ViewContainerRef, Type, EventEmitter, ComponentFactoryResolver } from '@angular/core'; import { DATA_CHANGE_EVENT } from '../../share/CustomEventType'; import { AbstractDataViewWrapper } from './AbstractDataViewWrapper'; const /** @type {?} */ TYPE_NAME = "phx-data-view-wrapper"; export class DataViewWrapper extends AbstractDataViewWrapper { /** * @param {?} target * @param {?} componentFactoryResolver */ constructor(target, componentFactoryResolver) { super(target, componentFactoryResolver); } /** * @return {?} */ ngOnInit() { super.ngOnInit(); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes['componentType'] !== null && typeof changes['componentType'] !== 'undefined') { let /** @type {?} */ oldType = changes['componentType'].previousValue; let /** @type {?} */ newType = changes['componentType'].currentValue; if (oldType !== newType) { this.render(); } } if (changes['data'] !== null && typeof changes['data'] !== 'undefined') { let /** @type {?} */ oldData = changes['data'].previousValue; let /** @type {?} */ newData = changes['data'].currentValue; if (oldData !== newData) { if (this.componentRef !== null && this.componentRef !== undefined) { this.componentRef.instance.setData(this.data); } else { this.render(); } } } if (changes['options'] !== null && typeof changes['options'] !== 'undefined') { let /** @type {?} */ oldOpt = changes['options'].previousValue; let /** @type {?} */ newOpt = changes['options'].currentValue; if (oldOpt !== newOpt) { if (this.componentRef !== null && this.componentRef !== undefined) { this.componentRef.instance.setOptions(this.options); } else { this.render(); } } } if (this.componentRef !== null && typeof this.componentRef !== 'undefined') { if (changes['class'] !== null && typeof changes['class'] !== 'undefined') { let /** @type {?} */ oldClass = changes['class'].previousValue; let /** @type {?} */ newClass = changes['class'].currentValue; if (oldClass !== newClass) { $(this.componentRef.location.nativeElement).attr('class', newClass); } } } } /** * @return {?} */ render() { // remove old dom if (this.componentRef !== null && typeof this.componentRef !== 'undefined') { if (typeof this.componentRef.instance.setData === 'function') { this.componentRef.instance.setData(null); } if (typeof this.componentRef.instance.setDataParent === 'function') { this.componentRef.instance.setDataParent(null); } this.componentRef.destroy(); } if (this.componentType != null && (typeof this.componentType !== 'undefined')) { const /** @type {?} */ simpleCompoFactory = this.componentFactoryResolver.resolveComponentFactory(this.componentType); let /** @type {?} */ compRef = this.target.createComponent(simpleCompoFactory); compRef.instance.setData(this.data); compRef.instance.setOptions(this.options); this.componentRef = compRef; let /** @type {?} */ compHandler = null; if (typeof compRef.instance.getEventHandler === 'function') { compHandler = compRef.instance.getEventHandler(); } if (compHandler !== null && typeof compHandler !== 'undefined') { compHandler.subscribe((event) => { if (event.type == DATA_CHANGE_EVENT) { // update data row this.data = event.detail.data; } this.eventHandler.emit(event); }); } } } /** * @return {?} */ getEventHandler() { return this.eventHandler; } /** * @param {?} event * @return {?} */ setEventHandler(event) { this.eventHandler = event; } } DataViewWrapper.TYPE_NAME = TYPE_NAME; DataViewWrapper.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `` },] }, ]; /** @nocollapse */ DataViewWrapper.ctorParameters = () => [ { type: ViewContainerRef, }, { type: ComponentFactoryResolver, }, ]; DataViewWrapper.propDecorators = { "componentType": [{ type: Input, args: ['type',] },], "data": [{ type: Input },], "options": [{ type: Input },], "eventHandler": [{ type: Output },], }; function DataViewWrapper_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DataViewWrapper.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ DataViewWrapper.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ DataViewWrapper.propDecorators; /** @type {?} */ DataViewWrapper.TYPE_NAME; /** @type {?} */ DataViewWrapper.prototype.componentType; /** @type {?} */ DataViewWrapper.prototype.data; /** @type {?} */ DataViewWrapper.prototype.options; /** @type {?} */ DataViewWrapper.prototype.eventHandler; /** @type {?} */ DataViewWrapper.prototype.componentRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVZpZXdXcmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kYXRhdmlldy9EYXRhVmlld1dyYXBwZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUlwRSx1QkFBTSxTQUFTLEdBQVcsdUJBQXVCLENBQUM7QUFPbEQsTUFBTSxzQkFBdUIsU0FBUSx1QkFBdUI7Ozs7O0lBZTFELFlBQVksTUFBd0IsRUFBRSx3QkFBa0Q7UUFDdEYsS0FBSyxDQUFDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0tBQ3pDOzs7O0lBRU0sUUFBUTtRQUNiLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7Ozs7O0lBR1osV0FBVyxDQUFDLE9BQVk7UUFDN0IsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLHFCQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ3JELHFCQUFJLE9BQU8sR0FBUSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsWUFBWSxDQUFDO1lBRXpELEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDZjtTQUNGO1FB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SSxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQzs7d0JBRXBDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7cUJBQy9CO29CQUNELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMvQixDQUFDLENBQUM7YUFDSjtTQUVGOzs7OztJQUdJLGVBQWU7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7Ozs7OztJQUdwQixlQUFlLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzs7OzRCQWpIZSxTQUFTOztZQVByRCxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixRQUFRLEVBQUUsU0FBUztnQkFDbkIsUUFBUSxFQUFFLEVBQUU7YUFDYjs7OztZQVowQyxnQkFBZ0I7WUFBc0Isd0JBQXdCOzs7OEJBaUJ0RyxLQUFLLFNBQUMsTUFBTTtxQkFFWixLQUFLO3dCQUVMLEtBQUs7NkJBRUwsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBWaWV3Q29udGFpbmVyUmVmLCBUeXBlLCBFdmVudEVtaXR0ZXIsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgREFUQV9DSEFOR0VfRVZFTlQgfSBmcm9tICcuLi8uLi9zaGFyZS9DdXN0b21FdmVudFR5cGUnO1xuaW1wb3J0IHsgQWJzdHJhY3REYXRhVmlld1dyYXBwZXIgfSBmcm9tICcuL0Fic3RyYWN0RGF0YVZpZXdXcmFwcGVyJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LWRhdGEtdmlldy13cmFwcGVyXCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYGBcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVZpZXdXcmFwcGVyIGV4dGVuZHMgQWJzdHJhY3REYXRhVmlld1dyYXBwZXIgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgQElucHV0KCd0eXBlJylcbiAgcHJvdGVjdGVkIGNvbXBvbmVudFR5cGU6IFR5cGU8YW55PjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcbiAgQE91dHB1dCgpXG4gIHByb3RlY3RlZCBldmVudEhhbmRsZXI6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmOiBhbnk7XG5cbiAgY29uc3RydWN0b3IodGFyZ2V0OiBWaWV3Q29udGFpbmVyUmVmLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikge1xuICAgIHN1cGVyKHRhcmdldCwgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSkge1xuICAgIGlmIChjaGFuZ2VzWydjb21wb25lbnRUeXBlJ10gIT09IG51bGwgJiYgdHlwZW9mIGNoYW5nZXNbJ2NvbXBvbmVudFR5cGUnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxldCBvbGRUeXBlID0gY2hhbmdlc1snY29tcG9uZW50VHlwZSddLnByZXZpb3VzVmFsdWU7XG4gICAgICBsZXQgbmV3VHlwZTogYW55ID0gY2hhbmdlc1snY29tcG9uZW50VHlwZSddLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgaWYgKG9sZFR5cGUgIT09IG5ld1R5cGUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZGF0YSddICE9PSBudWxsICYmIHR5cGVvZiBjaGFuZ2VzWydkYXRhJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgb2xkRGF0YSA9IGNoYW5nZXNbJ2RhdGEnXS5wcmV2aW91c1ZhbHVlO1xuICAgICAgbGV0IG5ld0RhdGE6IGFueSA9IGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmIChvbGREYXRhICE9PSBuZXdEYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPT0gbnVsbCAmJiB0aGlzLmNvbXBvbmVudFJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0RGF0YSh0aGlzLmRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snb3B0aW9ucyddICE9PSBudWxsICYmIHR5cGVvZiBjaGFuZ2VzWydvcHRpb25zJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgb2xkT3B0ID0gY2hhbmdlc1snb3B0aW9ucyddLnByZXZpb3VzVmFsdWU7XG4gICAgICBsZXQgbmV3T3B0OiBhbnkgPSBjaGFuZ2VzWydvcHRpb25zJ10uY3VycmVudFZhbHVlO1xuXG4gICAgICBpZiAob2xkT3B0ICE9PSBuZXdPcHQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICE9PSBudWxsICYmIHRoaXMuY29tcG9uZW50UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb21wb25lbnRSZWYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoY2hhbmdlc1snY2xhc3MnXSAhPT0gbnVsbCAmJiB0eXBlb2YgY2hhbmdlc1snY2xhc3MnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbGV0IG9sZENsYXNzID0gY2hhbmdlc1snY2xhc3MnXS5wcmV2aW91c1ZhbHVlO1xuICAgICAgICBsZXQgbmV3Q2xhc3M6IGFueSA9IGNoYW5nZXNbJ2NsYXNzJ10uY3VycmVudFZhbHVlO1xuXG4gICAgICAgIGlmIChvbGRDbGFzcyAhPT0gbmV3Q2xhc3MpIHtcbiAgICAgICAgICAkKHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpLmF0dHIoJ2NsYXNzJywgbmV3Q2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbmRlcigpOiB2b2lkIHtcbiAgICAvLyByZW1vdmUgb2xkIGRvbVxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb21wb25lbnRSZWYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnNldERhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uuc2V0RGF0YShudWxsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXREYXRhUGFyZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnNldERhdGFQYXJlbnQobnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb21wb25lbnRUeXBlICE9IG51bGwgJiYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudFR5cGUgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgY29uc3Qgc2ltcGxlQ29tcG9GYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5jb21wb25lbnRUeXBlKTtcbiAgICAgIGxldCBjb21wUmVmID0gdGhpcy50YXJnZXQuY3JlYXRlQ29tcG9uZW50KHNpbXBsZUNvbXBvRmFjdG9yeSk7XG4gICAgICBjb21wUmVmLmluc3RhbmNlLnNldERhdGEodGhpcy5kYXRhKTtcbiAgICAgIGNvbXBSZWYuaW5zdGFuY2Uuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBjb21wUmVmO1xuXG4gICAgICBsZXQgY29tcEhhbmRsZXIgPSBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBjb21wUmVmLmluc3RhbmNlLmdldEV2ZW50SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb21wSGFuZGxlciA9IGNvbXBSZWYuaW5zdGFuY2UuZ2V0RXZlbnRIYW5kbGVyKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wSGFuZGxlciAhPT0gbnVsbCAmJiB0eXBlb2YgY29tcEhhbmRsZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbXBIYW5kbGVyLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC50eXBlID09IERBVEFfQ0hBTkdFX0VWRU5UKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZGF0YSByb3dcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGV2ZW50LmRldGFpbC5kYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RXZlbnRIYW5kbGVyKCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5ldmVudEhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0RXZlbnRIYW5kbGVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlciA9IGV2ZW50O1xuICB9XG59XG4iXX0=