UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

223 lines (222 loc) 16.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, EventEmitter, Output } from '@angular/core'; import { AbstractHasDataHelp } from '../../../AbstractHasDataHelp'; import { Option } from '../../../../decorator/Option.decorator'; import { EventUtils } from '../../../../share/utils/EventUtils'; import { COLUMN_CHANGE_EVENT, BEFORE_COLUMN_CHANGE_EVENT } from '../../../../share/CustomEventType'; const /** @type {?} */ TYPE_NAME = "phx-column-display"; export class ColumnDisplay extends AbstractHasDataHelp { /** * @param {?} elementRef */ constructor(elementRef) { super(elementRef); this.columnChangeEvent = new EventEmitter(); this.beforeColumnChangeEvent = new EventEmitter(); this.columns = []; } /** * @return {?} */ ngOnInit() { super.ngOnInit(); } /** * @param {?} column * @return {?} */ setColumns(column) { this.columns = column; } /** * @return {?} */ getColumns() { return this.columns; } /** * @param {?} $event * @param {?} item * @return {?} */ onColumnsDisplayChange($event, item) { if ($event !== null || $event !== undefined) { let /** @type {?} */ oldValue = $event.detail.data.oldValue; let /** @type {?} */ newValue = $event.detail.data.newValue; // update value item.show = newValue; // emit column change let /** @type {?} */ data = { oldValue: oldValue, newValue: newValue, column: item }; EventUtils.handleBrowserEvent(this, 'beforeColumnChangeEvent', $event, null, (event) => { // doEvent }, ($event) => { // emitBeforeEvent this.emitBeforeColumnChangeEvent($event); }, ($event, result) => { // emitAfterEvent this.emitColumnChangeEvent(data, $event); }, ($event) => { // doPrevented }); } } /** * @param {?=} $event * @return {?} */ emitBeforeColumnChangeEvent($event) { // emit event if (this.beforeColumnChangeEvent !== null) { let /** @type {?} */ data = {}; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_COLUMN_CHANGE_EVENT, this, data, null); this.beforeColumnChangeEvent.emit(ev); } } /** * @param {?} data * @param {?=} $event * @return {?} */ emitColumnChangeEvent(data, $event) { // emit event if (this.columnChangeEvent !== null) { let /** @type {?} */ ev = EventUtils.newCustomEvent(COLUMN_CHANGE_EVENT, this, data, null); this.columnChangeEvent.emit(ev); } } /** * @return {?} */ getBeforeColumnChangeEvent() { return this.beforeColumnChangeEvent; } /** * @param {?} event * @return {?} */ setBeforeColumnChangeEvent(event) { this.beforeColumnChangeEvent = event; } /** * @return {?} */ getColumnChangeEvent() { return this.columnChangeEvent; } /** * @param {?} event * @return {?} */ setColumnChangeEvent(event) { this.columnChangeEvent = event; } /** * @return {?} */ isSelfDataDirty() { return false; } /** * @param {?} data * @return {?} */ selfSaveData(data) { } /** * @return {?} */ selfResetData() { } } ColumnDisplay.TYPE_NAME = TYPE_NAME; ColumnDisplay.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-column-display"> <div *ngFor="let item of getColumns(); let i = index"> <div class="boder-column-display"> <material-checkbox [data]="item" [label]="item.label" [field]="'show'" (phxChange)="onColumnsDisplayChange($event, item)"></material-checkbox> </div> </div> </div> ` },] }, ]; /** @nocollapse */ ColumnDisplay.ctorParameters = () => [ { type: ElementRef, }, ]; ColumnDisplay.propDecorators = { "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 },], "data": [{ type: Input },], "columnChangeEvent": [{ type: Output, args: ['phxColumnChange',] },], "beforeColumnChangeEvent": [{ type: Output, args: ['phxbeforeColumnChange',] },], }; tslib_1.__decorate([ Option('columnChange'), tslib_1.__metadata("design:type", EventEmitter) ], ColumnDisplay.prototype, "columnChangeEvent", void 0); tslib_1.__decorate([ Option('beforeColumnChange'), tslib_1.__metadata("design:type", EventEmitter) ], ColumnDisplay.prototype, "beforeColumnChangeEvent", void 0); function ColumnDisplay_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ColumnDisplay.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ColumnDisplay.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ColumnDisplay.propDecorators; /** @type {?} */ ColumnDisplay.TYPE_NAME; /** @type {?} */ ColumnDisplay.prototype.dataParent; /** @type {?} */ ColumnDisplay.prototype.ignoreParentData; /** @type {?} */ ColumnDisplay.prototype.ignoreParentDisabled; /** @type {?} */ ColumnDisplay.prototype.delegateHistory; /** @type {?} */ ColumnDisplay.prototype.onDisabled; /** @type {?} */ ColumnDisplay.prototype.onEnabled; /** @type {?} */ ColumnDisplay.prototype.loadingEnabled; /** @type {?} */ ColumnDisplay.prototype.i18nKey; /** @type {?} */ ColumnDisplay.prototype.bypass; /** @type {?} */ ColumnDisplay.prototype.options; /** @type {?} */ ColumnDisplay.prototype.data; /** @type {?} */ ColumnDisplay.prototype.columnChangeEvent; /** @type {?} */ ColumnDisplay.prototype.beforeColumnChangeEvent; /** @type {?} */ ColumnDisplay.prototype.columns; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sdW1uRGlzcGxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL2VkaXRvci5pbnRlcm5hbC9yZWNvcmQuaW50ZXJuYWwvQ29sdW1uRGlzcGxheS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQWlDLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUtwRyx1QkFBTSxTQUFTLEdBQVcsb0JBQW9CLENBQUM7QUFjL0MsTUFBTSxvQkFBcUIsU0FBUSxtQkFBbUI7Ozs7SUFvQ3BELFlBQVksVUFBc0I7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0tBQ25COzs7O0lBRU0sUUFBUTtRQUNiLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7Ozs7O0lBR1osVUFBVSxDQUFDLE1BQXFCO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDOzs7OztJQUdqQixVQUFVO1FBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7Ozs7Ozs7SUFHZixzQkFBc0Is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U0FBQyxpQkFBaUI7d0NBR3hCLE1BQU0sU0FBQyx1QkFBdUI7OztJQUo5QixNQUFNLENBQUMsY0FBYyxDQUFDO3NDQUVNLFlBQVk7OztJQUN4QyxNQUFNLENBQUMsb0JBQW9CLENBQUM7c0NBRU0sWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgSG9zdExpc3RlbmVyLCBUeXBlLCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEhhc0RhdGFIZWxwIH0gZnJvbSAnLi4vLi4vLi4vQWJzdHJhY3RIYXNEYXRhSGVscCc7XG5pbXBvcnQgeyBBYnN0cmFjdERhdGFFZGl0b3IgfSBmcm9tICcuLi8uLi9BYnN0cmFjdERhdGFFZGl0b3InO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9SZWNvcmRWaWV3TW9kZWwnO1xuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlL3V0aWxzL0V2ZW50VXRpbHMnO1xuaW1wb3J0IHsgQ09MVU1OX0NIQU5HRV9FVkVOVCwgQkVGT1JFX0NPTFVNTl9DSEFOR0VfRVZFTlQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZS9DdXN0b21FdmVudFR5cGUnO1xuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuLi8uLi8uLi9JSGFzRGF0YSc7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1jb2x1bW4tZGlzcGxheVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LWNvbHVtbi1kaXNwbGF5XCI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0Q29sdW1ucygpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgPGRpdiBjbGFzcz1cImJvZGVyLWNvbHVtbi1kaXNwbGF5XCI+XG4gICAgICA8bWF0ZXJpYWwtY2hlY2tib3ggW2RhdGFdPVwiaXRlbVwiIFtsYWJlbF09XCJpdGVtLmxhYmVsXCIgW2ZpZWxkXT1cIidzaG93J1wiIChwaHhDaGFuZ2UpPVwib25Db2x1bW5zRGlzcGxheUNoYW5nZSgkZXZlbnQsIGl0ZW0pXCI+PC9tYXRlcmlhbC1jaGVja2JveD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgQ29sdW1uRGlzcGxheSBleHRlbmRzIEFic3RyYWN0SGFzRGF0YUhlbHAgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGF0YTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgZGVsZWdhdGVIaXN0b3J5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgnaTE4bkJ5cGFzcycpXG4gIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBkYXRhOiBhbnk7XG5cbiAgLy8gLS0tIGZyb20gc2VsZlxuICBAT3B0aW9uKCdjb2x1bW5DaGFuZ2UnKVxuICBAT3V0cHV0KCdwaHhDb2x1bW5DaGFuZ2UnKVxuICBwcm90ZWN0ZWQgY29sdW1uQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdiZWZvcmVDb2x1bW5DaGFuZ2UnKVxuICBAT3V0cHV0KCdwaHhiZWZvcmVDb2x1bW5DaGFuZ2UnKVxuICBwcm90ZWN0ZWQgYmVmb3JlQ29sdW1uQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBwcml2YXRlIGNvbHVtbnM6IENvbHVtbk1vZGVsW107XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuICAgIHRoaXMuY29sdW1uQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5iZWZvcmVDb2x1bW5DaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgcHVibGljIHNldENvbHVtbnMoY29sdW1uOiBDb2x1bW5Nb2RlbFtdKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5zID0gY29sdW1uO1xuICB9XG5cbiAgcHVibGljIGdldENvbHVtbnMoKTogQ29sdW1uTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucztcbiAgfVxuXG4gIHB1YmxpYyBvbkNvbHVtbnNEaXNwbGF5Q2hhbmdlKCRldmVudDogQ3VzdG9tRXZlbnQsIGl0ZW06IENvbHVtbk1vZGVsKTogdm9pZCB7XG4gICAgaWYoJGV2ZW50ICE9PSBudWxsIHx8ICRldmVudCAhPT0gdW5kZWZpbmVkKXtcbiAgICAgIGxldCBvbGRWYWx1ZSA9ICRldmVudC5kZXRhaWwuZGF0YS5vbGRWYWx1ZTtcbiAgICAgIGxldCBuZXdWYWx1ZSA9ICRldmVudC5kZXRhaWwuZGF0YS5uZXdWYWx1ZTtcblxuICAgICAgLy8gdXBkYXRlIHZhbHVlXG4gICAgICBpdGVtLnNob3cgPSBuZXdWYWx1ZTtcblxuICAgICAgLy8gZW1pdCBjb2x1bW4gY2hhbmdlXG4gICAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXG4gICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgY29sdW1uOiBpdGVtXG4gICAgICB9O1xuXG4gICAgICBFdmVudFV0aWxzLmhhbmRsZUJyb3dzZXJFdmVudCh0aGlzLCAnYmVmb3JlQ29sdW1uQ2hhbmdlRXZlbnQnLCAkZXZlbnQsIG51bGwsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgLy8gZG9FdmVudFxuICAgICAgfSwgKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgLy8gZW1pdEJlZm9yZUV2ZW50XG4gICAgICAgIHRoaXMuZW1pdEJlZm9yZUNvbHVtbkNoYW5nZUV2ZW50KCRldmVudCk7XG4gICAgICB9LCAoJGV2ZW50OiBFdmVudCwgcmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgLy8gZW1pdEFmdGVyRXZlbnRcbiAgICAgICAgdGhpcy5lbWl0Q29sdW1uQ2hhbmdlRXZlbnQoZGF0YSwgJGV2ZW50KTtcbiAgICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIC8vIGRvUHJldmVudGVkXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0QmVmb3JlQ29sdW1uQ2hhbmdlRXZlbnQoJGV2ZW50PzogYW55KTogdm9pZCB7XG4gICAgLy8gZW1pdCBldmVudFxuICAgIGlmICh0aGlzLmJlZm9yZUNvbHVtbkNoYW5nZUV2ZW50ICE9PSBudWxsKSB7XG4gICAgICBsZXQgZGF0YTogYW55ID0ge307XG4gICAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KEJFRk9SRV9DT0xVTU5fQ0hBTkdFX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgICAgdGhpcy5iZWZvcmVDb2x1bW5DaGFuZ2VFdmVudC5lbWl0KGV2KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdENvbHVtbkNoYW5nZUV2ZW50KGRhdGE6IGFueSwgJGV2ZW50PzogYW55KTogdm9pZCB7XG4gICAgLy8gZW1pdCBldmVudFxuICAgIGlmICh0aGlzLmNvbHVtbkNoYW5nZUV2ZW50ICE9PSBudWxsKSB7XG4gICAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KENPTFVNTl9DSEFOR0VfRVZFTlQsIHRoaXMsIGRhdGEsIG51bGwpO1xuXG4gICAgICB0aGlzLmNvbHVtbkNoYW5nZUV2ZW50LmVtaXQoZXYpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRCZWZvcmVDb2x1bW5DaGFuZ2VFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYmVmb3JlQ29sdW1uQ2hhbmdlRXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgc2V0QmVmb3JlQ29sdW1uQ2hhbmdlRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5iZWZvcmVDb2x1bW5DaGFuZ2VFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldENvbHVtbkNoYW5nZUV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5DaGFuZ2VFdmVudDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb2x1bW5DaGFuZ2VFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtbkNoYW5nZUV2ZW50ID0gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgaXNTZWxmRGF0YURpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxmU2F2ZURhdGEoZGF0YTogYW55KTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgc2VsZlJlc2V0RGF0YSgpOiB2b2lkIHtcbiAgfVxufVxuIl19