UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

206 lines (205 loc) 15.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, Output, EventEmitter, ElementRef } from '@angular/core'; import { AbstractHasFormatterDataView } from './AbstractHasFormatterDataView'; import { DATA_CHANGE_EVENT } from '../../share/CustomEventType'; import { FormatterFactory } from '../../service/FormatterFactory.service'; import { Option } from '../../decorator/Option.decorator'; import { EventUtils } from '../../share/utils/EventUtils'; const /** @type {?} */ TYPE_NAME = "phx-string-editor-data-view"; const /** @type {?} */ DEFAULT_FIELD = "label"; export class StringEditorDataView extends AbstractHasFormatterDataView { /** * @param {?} elementRef * @param {?} formatterFactory */ constructor(elementRef, formatterFactory) { super(elementRef, formatterFactory); this.DEFAULT_FIELD_NAME = "label"; this.handler = new EventEmitter(); this.changeEvent = new EventEmitter(); } /** * @return {?} */ ngOnInit() { super.ngOnInit(); // Auto set default field if not specified if (this.field === null || typeof this.field !== 'string') { this.field = DEFAULT_FIELD; } if (this.data !== null && typeof this.data !== 'undefined') { this.setData(this.data); } } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes['data'] !== null && typeof changes['data'] !== 'undefined') { let /** @type {?} */ oldData = changes['data'].previousValue; let /** @type {?} */ newData = changes['data'].currentValue; if (oldData !== newData) { this.setData(newData); } } } /** * @param {?} $event * @return {?} */ onValueChanged($event) { let /** @type {?} */ data = { data: this.value, source: ($event === null || typeof $event === 'undefined') ? undefined : $event.target }; let /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_CHANGE_EVENT, this, data, $event); this.changeEvent.emit(ev); this.handler.emit(ev); this.handler.emit($event); } /** * @param {?} data * @return {?} */ setData(data) { super.setData(data); this.value = this.getFormattedData(); } /** * @return {?} */ getEventHandler() { return this.handler; } /** * @param {?} event * @return {?} */ setEventHandler(event) { this.handler = event; } /** * @return {?} */ getChangeEvent() { return this.changeEvent; } /** * @param {?} event * @return {?} */ setChangeEvent(event) { this.changeEvent = event; } /** * @return {?} */ isSelfDataDirty() { return false; } /** * @return {?} */ selfSaveData() { } /** * @return {?} */ selfResetData() { } } StringEditorDataView.TYPE_NAME = TYPE_NAME; StringEditorDataView.DEFAULT_FIELD = DEFAULT_FIELD; StringEditorDataView.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-string-editor-data-view"><input type="text" class="form-control" [(ngModel)]="value" (input)="onValueChanged($event)"></div> ` },] }, ]; /** @nocollapse */ StringEditorDataView.ctorParameters = () => [ { type: ElementRef, }, { type: FormatterFactory, }, ]; StringEditorDataView.propDecorators = { "data": [{ type: Input },], "field": [{ type: Input },], "dataParent": [{ type: Input },], "ignoreParentData": [{ 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 },], "handler": [{ type: Output, args: ['phxHandler',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", EventEmitter) ], StringEditorDataView.prototype, "handler", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], StringEditorDataView.prototype, "changeEvent", void 0); function StringEditorDataView_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ StringEditorDataView.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ StringEditorDataView.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ StringEditorDataView.propDecorators; /** @type {?} */ StringEditorDataView.TYPE_NAME; /** @type {?} */ StringEditorDataView.DEFAULT_FIELD; /** @type {?} */ StringEditorDataView.prototype.value; /** @type {?} */ StringEditorDataView.prototype.DEFAULT_FIELD_NAME; /** @type {?} */ StringEditorDataView.prototype.data; /** @type {?} */ StringEditorDataView.prototype.field; /** @type {?} */ StringEditorDataView.prototype.dataParent; /** @type {?} */ StringEditorDataView.prototype.ignoreParentData; /** @type {?} */ StringEditorDataView.prototype.ignoreParentDisabled; /** @type {?} */ StringEditorDataView.prototype.delegateHistory; /** @type {?} */ StringEditorDataView.prototype.onDisabled; /** @type {?} */ StringEditorDataView.prototype.onEnabled; /** @type {?} */ StringEditorDataView.prototype.loadingEnabled; /** @type {?} */ StringEditorDataView.prototype.i18nKey; /** @type {?} */ StringEditorDataView.prototype.bypass; /** @type {?} */ StringEditorDataView.prototype.options; /** @type {?} */ StringEditorDataView.prototype.disabled; /** @type {?} */ StringEditorDataView.prototype.handler; /** @type {?} */ StringEditorDataView.prototype.changeEvent; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nRWRpdG9yRGF0YVZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2RhdGF2aWV3L1N0cmluZ0VkaXRvckRhdGFWaWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHMUQsdUJBQU0sU0FBUyxHQUFXLDZCQUE2QixDQUFDO0FBRXhELHVCQUFNLGFBQWEsR0FBVyxPQUFPLENBQUM7QUFTdEMsTUFBTSwyQkFBNEIsU0FBUSw0QkFBNEI7Ozs7O0lBMkNsRSxZQUFZLFVBQXNCLEVBQUUsZ0JBQWtDO1FBQ2xFLEtBQUssQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztrQ0FwQ0gsT0FBTztRQXNDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztLQUN6Qzs7OztJQUdNLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7O1FBR2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENB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O0lBQzlCLE1BQU0sQ0FBQyxRQUFRLENBQUM7c0NBRU0sWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElEYXRhVmlldyB9IGZyb20gJy4vSURhdGFWaWV3JztcbmltcG9ydCB7IEFic3RyYWN0SGFzRm9ybWF0dGVyRGF0YVZpZXcgfSBmcm9tICcuL0Fic3RyYWN0SGFzRm9ybWF0dGVyRGF0YVZpZXcnO1xuaW1wb3J0IHsgRGF0YVV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmUvdXRpbHMvRGF0YVV0aWxzJztcbmltcG9ydCB7IERBVEFfQ0hBTkdFX0VWRU5UIH0gZnJvbSAnLi4vLi4vc2hhcmUvQ3VzdG9tRXZlbnRUeXBlJztcbmltcG9ydCB7IEZvcm1hdHRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL0Zvcm1hdHRlckZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBFdmVudFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmUvdXRpbHMvRXZlbnRVdGlscyc7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4uL0lIYXNEYXRhJztcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1zdHJpbmctZWRpdG9yLWRhdGEtdmlld1wiO1xuXG5jb25zdCBERUZBVUxUX0ZJRUxEOiBzdHJpbmcgPSBcImxhYmVsXCI7XG5cbi8vIFdhaXRpbmcgZm9yIHJlbW92ZS4gVXNlIFRleHRCb3ggaW5zdGFkZSB0aGlzIGNvbXBvbmVudFxuQENvbXBvbmVudCh7XG4gICAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1zdHJpbmctZWRpdG9yLWRhdGEtdmlld1wiPjxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlZCgkZXZlbnQpXCI+PC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIFN0cmluZ0VkaXRvckRhdGFWaWV3IGV4dGVuZHMgQWJzdHJhY3RIYXNGb3JtYXR0ZXJEYXRhVmlldyBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0ZJRUxEOiBzdHJpbmcgPSBERUZBVUxUX0ZJRUxEO1xuXG4gICAgcHVibGljIHZhbHVlOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIERFRkFVTFRfRklFTERfTkFNRTogc3RyaW5nID0gXCJsYWJlbFwiO1xuXG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICAgIEBJbnB1dCgpXG4gICAgcHJvdGVjdGVkIGZpZWxkOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgZGF0YVBhcmVudDogSUhhc0RhdGE7XG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGF0YTogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcbiAgICBASW5wdXQoKVxuICAgIHByb3RlY3RlZCBsb2FkaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XG4gICAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIHByb3RlY3RlZCBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBAT3B0aW9uKClcbiAgICBAT3V0cHV0KCdwaHhIYW5kbGVyJylcbiAgICBwcm90ZWN0ZWQgaGFuZGxlcjogRXZlbnRFbWl0dGVyPGFueT47XG4gICAgQE9wdGlvbignY2hhbmdlJylcbiAgICBAT3V0cHV0KCdwaHhDaGFuZ2UnKVxuICAgIHByb3RlY3RlZCBjaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBmb3JtYXR0ZXJGYWN0b3J5OiBGb3JtYXR0ZXJGYWN0b3J5KSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGZvcm1hdHRlckZhY3RvcnkpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZVxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgIC8vIEF1dG8gc2V0IGRlZmF1bHQgZmllbGQgaWYgbm90IHNwZWNpZmllZFxuICAgICAgaWYgKHRoaXMuZmllbGQgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMuZmllbGQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuZmllbGQgPSBERUZBVUxUX0ZJRUxEO1xuICAgICAgfVxuXG4gICAgICBpZih0aGlzLmRhdGEgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGF0YSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICB0aGlzLnNldERhdGEodGhpcy5kYXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KSB7XG4gICAgICBpZiAoY2hhbmdlc1snZGF0YSddICE9PSBudWxsICYmIHR5cGVvZiBjaGFuZ2VzWydkYXRhJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCBvbGREYXRhID0gY2hhbmdlc1snZGF0YSddLnByZXZpb3VzVmFsdWU7XG4gICAgICAgIGxldCBuZXdEYXRhOiBhbnkgPSBjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlO1xuXG4gICAgICAgIGlmIChvbGREYXRhICE9PSBuZXdEYXRhKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKG5ld0RhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKCRldmVudDogRXZlbnQpIHtcbiAgICAgICAgbGV0IGRhdGE6IGFueSA9IHtcbiAgICAgICAgICBkYXRhOiB0aGlzLnZhbHVlLFxuICAgICAgICAgIHNvdXJjZTogKCRldmVudCA9PT0gbnVsbCB8fCB0eXBlb2YgJGV2ZW50ID09PSAndW5kZWZpbmVkJykgPyB1bmRlZmluZWQgOiAkZXZlbnQudGFyZ2V0XG4gICAgICAgIH07XG4gICAgICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoREFUQV9DSEFOR0VfRVZFTlQsIHRoaXMsIGRhdGEsICRldmVudCk7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VFdmVudC5lbWl0KGV2KTtcbiAgICAgICAgdGhpcy5oYW5kbGVyLmVtaXQoZXYpO1xuICAgICAgICB0aGlzLmhhbmRsZXIuZW1pdCgkZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXREYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgc3VwZXIuc2V0RGF0YShkYXRhKTtcblxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0Rm9ybWF0dGVkRGF0YSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFdmVudEhhbmRsZXIoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRFdmVudEhhbmRsZXIoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlciA9IGV2ZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGFuZ2VFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5nZUV2ZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDaGFuZ2VFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VFdmVudCA9IGV2ZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1NlbGZEYXRhRGlydHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZlNhdmVEYXRhKCk6IHZvaWQge1xuXG4gICAgfVxuXG4gICAgcHVibGljIHNlbGZSZXNldERhdGEoKTogdm9pZCB7XG5cbiAgICB9XG59XG4iXX0=