UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

182 lines (181 loc) 18.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Component, Input, Output, ViewContainerRef, Type, EventEmitter, ComponentFactoryResolver } from '@angular/core'; import { AbstractDataViewWrapper } from '../dataview/AbstractDataViewWrapper'; import { DATA_CHANGE_EVENT } from '../../share/CustomEventType'; const /** @type {?} */ TYPE_NAME = "phx-record-data-view-wrapper"; export class RecordDataViewWrapper extends AbstractDataViewWrapper { /** * @param {?} target * @param {?} componentFactoryResolver */ constructor(target, componentFactoryResolver) { super(target, componentFactoryResolver); } /** * @return {?} */ ngOnInit() { super.ngOnInit(); } /** * @param {?} key * @param {?} dataObj * @return {?} */ parseValue(key, dataObj) { if (key == null || dataObj == null) { return null; } let /** @type {?} */ result = null; if (key.indexOf(".") > 0) { let /** @type {?} */ splitKeys = key.split("."); if (splitKeys.length > 0) { let /** @type {?} */ firstKey = splitKeys[0]; let /** @type {?} */ firstValue = dataObj[firstKey]; if (firstValue != null && typeof firstValue !== 'undefined') { if (typeof firstValue === 'object') { if (splitKeys.length > 1) { let /** @type {?} */ secondKey = key.substring(key.indexOf(".") + 1, key.length); return this.parseValue(secondKey, firstValue); // recursive beware looping } } } } } else { result = dataObj[key]; } if (result != null && typeof result !== 'undefined') { return result; } return null; } /** * @param {?} key * @param {?} dataObj * @param {?} value * @return {?} */ editDataObjectValue(key, dataObj, value) { if (key == null || dataObj == null || value == null) { return; } if (key.indexOf(".") > 0) { let /** @type {?} */ splitKeys = key.split("."); if (splitKeys.length > 0) { let /** @type {?} */ firstKey = splitKeys[0]; let /** @type {?} */ firstValue = dataObj[firstKey]; if (firstValue != null && typeof firstValue !== 'undefined') { if (typeof firstValue === 'object') { if (splitKeys.length > 1) { let /** @type {?} */ secondKey = key.substring(key.indexOf(".") + 1, key.length); this.editDataObjectValue(secondKey, firstValue, value); // recursive beware looping } } } } } else { dataObj[key] = value; } } /** * @return {?} */ render() { if (this.componentType != null && (typeof this.componentType !== 'undefined')) { const /** @type {?} */ simpleCompoFactory = this.componentFactoryResolver.resolveComponentFactory(this.componentType); let /** @type {?} */ compRef = this.target.createComponent(simpleCompoFactory); if (typeof compRef.instance.setData === 'function') { compRef.instance.setData(this.data); } if (typeof compRef.instance.setField === 'function') { compRef.instance.setField(this.fieldValue); } if (typeof compRef.instance.setOptions === 'function') { compRef.instance.setOptions(this.options); } 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 if (this.editorHandler != null) { this.editorHandler.onDataChange(event.detail.data); } else { this.editDataObjectValue(this.fieldValue, this.data, event.detail.data); } } this.eventHandler.emit(event); }); } } } /** * @return {?} */ getEventHandler() { return this.eventHandler; } /** * @param {?} event * @return {?} */ setEventHandler(event) { this.eventHandler = event; } } RecordDataViewWrapper.TYPE_NAME = TYPE_NAME; RecordDataViewWrapper.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `` },] }, ]; /** @nocollapse */ RecordDataViewWrapper.ctorParameters = () => [ { type: ViewContainerRef, }, { type: ComponentFactoryResolver, }, ]; RecordDataViewWrapper.propDecorators = { "componentType": [{ type: Input },], "data": [{ type: Input },], "eventHandler": [{ type: Output },], "fieldValue": [{ type: Input },], "options": [{ type: Input },], "editorHandler": [{ type: Input },], }; function RecordDataViewWrapper_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ RecordDataViewWrapper.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ RecordDataViewWrapper.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ RecordDataViewWrapper.propDecorators; /** @type {?} */ RecordDataViewWrapper.TYPE_NAME; /** @type {?} */ RecordDataViewWrapper.prototype.componentType; /** @type {?} */ RecordDataViewWrapper.prototype.data; /** @type {?} */ RecordDataViewWrapper.prototype.eventHandler; /** @type {?} */ RecordDataViewWrapper.prototype.fieldValue; /** @type {?} */ RecordDataViewWrapper.prototype.options; /** @type {?} */ RecordDataViewWrapper.prototype.editorHandler; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkRGF0YVZpZXdXcmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9lZGl0b3IvUmVjb3JkRGF0YVZpZXdXcmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJaEUsdUJBQU0sU0FBUyxHQUFXLDhCQUE4QixDQUFDO0FBT3pELE1BQU0sNEJBQTZCLFNBQVEsdUJBQXVCOzs7OztJQWlCaEUsWUFBWSxNQUF3QixFQUFFLHdCQUFrRDtRQUN0RixLQUFLLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUM7S0FDekM7Ozs7SUFFTSxRQUFRO1FBQ2IsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDOzs7Ozs7O0lBR1gsVUFBVSxDQUFDLEdBQVcsRUFBRSxPQUFZO1FBQzFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQztTQUNiO1FBRUQscUJBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUVsQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIscUJBQUksU0FBUyxHQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsRUFBRSxDQUFDLENBQUMsU0FBUyxD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QUVwQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7NEJBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ3BEO3dCQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDekU7cUJBQ0Y7b0JBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQy9CLENBQUMsQ0FBQzthQUNKO1NBRUY7Ozs7O0lBR0ksZUFBZTtRQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzs7Ozs7O0lBR3BCLGVBQWUsQ0FBQyxLQUFVO1FBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDOzs7a0NBOUhlLFNBQVM7O1lBUHJELFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ25CLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixRQUFRLEVBQUUsRUFBRTthQUNiOzs7O1lBYjBDLGdCQUFnQjtZQUFzQix3QkFBd0I7Ozs4QkFrQnRHLEtBQUs7cUJBRUwsS0FBSzs2QkFFTCxNQUFNOzJCQUVOLEtBQUs7d0JBRUwsS0FBSzs4QkFFTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIFZpZXdDb250YWluZXJSZWYsIFR5cGUsIEV2ZW50RW1pdHRlciwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdERhdGFWaWV3V3JhcHBlciB9IGZyb20gJy4uL2RhdGF2aWV3L0Fic3RyYWN0RGF0YVZpZXdXcmFwcGVyJztcbmltcG9ydCB7IElFZGl0b3JIYW5kbGVyIH0gZnJvbSAnLi9JRWRpdG9ySGFuZGxlcic7XG5pbXBvcnQgeyBEQVRBX0NIQU5HRV9FVkVOVCB9IGZyb20gJy4uLy4uL3NoYXJlL0N1c3RvbUV2ZW50VHlwZSc7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1yZWNvcmQtZGF0YS12aWV3LXdyYXBwZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgYFxufSlcbmV4cG9ydCBjbGFzcyBSZWNvcmREYXRhVmlld1dyYXBwZXIgZXh0ZW5kcyBBYnN0cmFjdERhdGFWaWV3V3JhcHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgY29tcG9uZW50VHlwZTogVHlwZTxhbnk+O1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBAT3V0cHV0KClcbiAgcHJvdGVjdGVkIGV2ZW50SGFuZGxlcjogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBmaWVsZFZhbHVlOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgZWRpdG9ySGFuZGxlcjogSUVkaXRvckhhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IodGFyZ2V0OiBWaWV3Q29udGFpbmVyUmVmLCBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikge1xuICAgIHN1cGVyKHRhcmdldCwgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVZhbHVlKGtleTogc3RyaW5nLCBkYXRhT2JqOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChrZXkgPT0gbnVsbCB8fCBkYXRhT2JqID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSBudWxsO1xuXG4gICAgaWYgKGtleS5pbmRleE9mKFwiLlwiKSA+IDApIHtcbiAgICAgIGxldCBzcGxpdEtleXM6IHN0cmluZ1tdID0ga2V5LnNwbGl0KFwiLlwiKTtcbiAgICAgIGlmIChzcGxpdEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgZmlyc3RLZXk6IHN0cmluZyA9IHNwbGl0S2V5c1swXTtcbiAgICAgICAgbGV0IGZpcnN0VmFsdWU6IGFueSA9IGRhdGFPYmpbZmlyc3RLZXldO1xuXG4gICAgICAgIGlmIChmaXJzdFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIGZpcnN0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBmaXJzdFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHNwbGl0S2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIGxldCBzZWNvbmRLZXk6IHN0cmluZyA9IGtleS5zdWJzdHJpbmcoa2V5LmluZGV4T2YoXCIuXCIpICsgMSwga2V5Lmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VWYWx1ZShzZWNvbmRLZXksIGZpcnN0VmFsdWUpOyAvLyByZWN1cnNpdmUgYmV3YXJlIGxvb3BpbmdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gZGF0YU9ialtrZXldO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZWRpdERhdGFPYmplY3RWYWx1ZShrZXk6IHN0cmluZywgZGF0YU9iajogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKGtleSA9PSBudWxsIHx8IGRhdGFPYmogPT0gbnVsbCB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleS5pbmRleE9mKFwiLlwiKSA+IDApIHtcbiAgICAgIGxldCBzcGxpdEtleXM6IHN0cmluZ1tdID0ga2V5LnNwbGl0KFwiLlwiKTtcbiAgICAgIGlmIChzcGxpdEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgZmlyc3RLZXk6IHN0cmluZyA9IHNwbGl0S2V5c1swXTtcbiAgICAgICAgbGV0IGZpcnN0VmFsdWU6IGFueSA9IGRhdGFPYmpbZmlyc3RLZXldO1xuXG4gICAgICAgIGlmIChmaXJzdFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIGZpcnN0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBmaXJzdFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHNwbGl0S2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIGxldCBzZWNvbmRLZXk6IHN0cmluZyA9IGtleS5zdWJzdHJpbmcoa2V5LmluZGV4T2YoXCIuXCIpICsgMSwga2V5Lmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5lZGl0RGF0YU9iamVjdFZhbHVlKHNlY29uZEtleSwgZmlyc3RWYWx1ZSwgdmFsdWUpOyAvLyByZWN1cnNpdmUgYmV3YXJlIGxvb3BpbmdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YU9ialtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbmRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRUeXBlICE9IG51bGwgJiYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudFR5cGUgIT09ICd1bmRlZmluZWQnKSkge1xuICAgICAgY29uc3Qgc2ltcGxlQ29tcG9GYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGhpcy5jb21wb25lbnRUeXBlKTtcbiAgICAgIGxldCBjb21wUmVmID0gdGhpcy50YXJnZXQuY3JlYXRlQ29tcG9uZW50KHNpbXBsZUNvbXBvRmFjdG9yeSk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcFJlZi5pbnN0YW5jZS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uuc2V0RGF0YSh0aGlzLmRhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb21wUmVmLmluc3RhbmNlLnNldEZpZWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uuc2V0RmllbGQodGhpcy5maWVsZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY29tcFJlZi5pbnN0YW5jZS5zZXRPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBsZXQgY29tcEhhbmRsZXIgPSBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBjb21wUmVmLmluc3RhbmNlLmdldEV2ZW50SGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb21wSGFuZGxlciA9IGNvbXBSZWYuaW5zdGFuY2UuZ2V0RXZlbnRIYW5kbGVyKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wSGFuZGxlciAhPT0gbnVsbCAmJiB0eXBlb2YgY29tcEhhbmRsZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbXBIYW5kbGVyLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC50eXBlID09IERBVEFfQ0hBTkdFX0VWRU5UKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZGF0YSByb3dcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvckhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLmVkaXRvckhhbmRsZXIub25EYXRhQ2hhbmdlKGV2ZW50LmRldGFpbC5kYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZWRpdERhdGFPYmplY3RWYWx1ZSh0aGlzLmZpZWxkVmFsdWUsIHRoaXMuZGF0YSwgZXZlbnQuZGV0YWlsLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRFdmVudEhhbmRsZXIoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50SGFuZGxlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRFdmVudEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gZXZlbnQ7XG4gIH1cblxufVxuIl19