UNPKG

@true-directive/grid

Version:

Angular Data Grid from Yopsilon.

135 lines 17.3 kB
import * as tslib_1 from "tslib"; /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ import { Component, Output, EventEmitter, ViewChild, ChangeDetectorRef } from '@angular/core'; import { Keys } from '@true-directive/base'; import { DOMUtils } from '../common/dom-utils.class'; // showPopupRelative - устанавливаем position: relative для popup container // Если этого не сделать, то popup-element будет увеличивать data area. // Вообще этот параметр сделает невозможным редактирование даты в // абсолютно позиционированных контейнерах (модальные окна, например). var EditorDateComponent = /** @class */ (function () { function EditorDateComponent(changeDetector) { this.changeDetector = changeDetector; this.value = null; this.datepickerInputClass = 'true-grid-input'; this.commit = new EventEmitter(); this.cancel = new EventEmitter(); this.change = new EventEmitter(); this._initialized = false; } EditorDateComponent.prototype.init = function (value, valueChanged, height, ie, wasShown) { if (ie === void 0) { ie = false; } if (wasShown === void 0) { wasShown = false; } if (this.state.touchMode) { this.datepicker.popupPosition = 'MODAL'; } else { this.datepicker.popupPosition = 'RELATIVE'; } this.ie = ie; this.valueTemp = value; this.valueChanged = valueChanged; this.height = height; if (this.state.iOS) { DOMUtils.focusAndOpenKeyboard(this.datepicker.input.nativeElement, 50); } }; EditorDateComponent.prototype.ngAfterContentInit = function () { var _this = this; if (!this.valueChanged) { this.value = this.valueTemp; setTimeout(function () { return _this.datepicker.focus(); }); this._initialized = true; } else { this.datepicker.focus(); var txt_1 = this.valueTemp; setTimeout(function () { for (var i = 0; i < txt_1.length; i++) { var e = Keys.generateEvent(null, 0, txt_1[i]); _this.datepicker.acceptKey(e); } _this._initialized = true; }); } // Не помогает // setTimeout(() => this.changeDetector.detectChanges(), 100); }; EditorDateComponent.prototype.datepickerChange = function (e) { if (this._initialized) { this.change.emit(this.purify(e)); } }; EditorDateComponent.prototype.inputMouseDown = function (e) { e.stopPropagation(); }; EditorDateComponent.prototype.inputKeyDown = function (e) { if (e.keyCode === Keys.UP || e.keyCode === Keys.DOWN || e.keyCode === Keys.TAB) { return; } if (e.keyCode === Keys.ESCAPE) { this.cancel.emit(false); return; } e.stopPropagation(); if (e.keyCode === Keys.ENTER) { this.commit.emit(this.purify(this.value)); return; } }; EditorDateComponent.prototype.getClass = function () { var res = 'true-editor-date__datepicker'; if (this.height !== null && this.height > 0) { return res; } if (this.ie) { return res + ' true-grid-editor-ie'; } else { return res + ' true-grid-editor-100p'; } }; EditorDateComponent.prototype.getH = function () { if (this.height !== null && this.height > 0) { return this.height + 'px'; } return '100%'; }; EditorDateComponent.prototype.purify = function (v) { if (v === undefined || v === null || isNaN(v.getTime())) { return null; } return v; }; tslib_1.__decorate([ ViewChild('datepicker', { static: true }), tslib_1.__metadata("design:type", Object) ], EditorDateComponent.prototype, "datepicker", void 0); tslib_1.__decorate([ Output("commit"), tslib_1.__metadata("design:type", EventEmitter) ], EditorDateComponent.prototype, "commit", void 0); tslib_1.__decorate([ Output("cancel"), tslib_1.__metadata("design:type", EventEmitter) ], EditorDateComponent.prototype, "cancel", void 0); tslib_1.__decorate([ Output("change"), tslib_1.__metadata("design:type", EventEmitter) ], EditorDateComponent.prototype, "change", void 0); EditorDateComponent = tslib_1.__decorate([ Component({ selector: 'true-editor-date', template: "<div class=\"true-grid__input-container\" [style.height]=\"getH()\">\n <true-datepicker #datepicker\n class=\"true-editor-date__datepicker\"\n [pattern]=\"column.format\"\n [ngClass]=\"getClass()\"\n [inputClass]=\"datepickerInputClass\"\n [showError]=\"false\"\n [(ngModel)]=\"value\"\n (keydown)=\"inputKeyDown($event)\"\n (ngModelChange)=\"datepickerChange($event)\">\n </true-datepicker>\n </div>", styles: ["\n :host {\n padding: 0;\n margin: 0;\n border: 0;\n }\n .true-editor-date__datepicker {\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n "] }), tslib_1.__metadata("design:paramtypes", [ChangeDetectorRef]) ], EditorDateComponent); return EditorDateComponent; }()); export { EditorDateComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRydWUtZGlyZWN0aXZlL2dyaWQvIiwic291cmNlcyI6WyJzcmMvZWRpdG9ycy9lZGl0b3ItZGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0VBSUU7QUFDRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTlGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJckQsMkVBQTJFO0FBQzNFLHVFQUF1RTtBQUN2RSxpRUFBaUU7QUFDakUsc0VBQXNFO0FBOEJ0RTtJQTJIRSw2QkFBb0IsY0FBaUM7UUFBakMsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBeEhyRCxVQUFLLEdBQVEsSUFBSSxDQUFDO1FBS2xCLHlCQUFvQixHQUFHLGlCQUFpQixDQUFDO1FBV3pDLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUcvQyxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHL0MsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXZDLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBZ0c0QixDQUFDO0lBL0YxRCxrQ0FBSSxHQUFKLFVBQUssS0FBVSxFQUFFLFlBQXFCLEVBQUUsTUFBYyxFQUFFLEVBQW1CLEVBQUUsUUFBeUI7UUFBOUMsbUJBQUEsRUFBQSxVQUFtQjtRQUFFLHlCQUFBLEVBQUEsZ0JBQXlCO1FBRXBHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1NBQ3pDO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLGFB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aWdodCAoYykgMjAxOC0yMDE5IEFsZWtzZXkgTWVsbmlrb3YsIFRydWUgRGlyZWN0aXZlIENvbXBhbnkuXHJcbiAqIEBsaW5rIGh0dHBzOi8vdHJ1ZWRpcmVjdGl2ZS5jb20vXHJcbiAqIEBsaWNlbnNlIE1JVFxyXG4qL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBDb2x1bW4gfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IEdyaWRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLZXlzIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5pbXBvcnQgeyBET01VdGlscyB9IGZyb20gJy4uL2NvbW1vbi9kb20tdXRpbHMuY2xhc3MnO1xyXG5cclxuaW1wb3J0IHsgSUVkaXRvciB9IGZyb20gXCIuL2VkaXRvci5pbnRlcmZhY2VcIjtcclxuXHJcbi8vIHNob3dQb3B1cFJlbGF0aXZlIC0g0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10LwgcG9zaXRpb246IHJlbGF0aXZlINC00LvRjyBwb3B1cCBjb250YWluZXJcclxuLy8g0JXRgdC70Lgg0Y3RgtC+0LPQviDQvdC1INGB0LTQtdC70LDRgtGMLCDRgtC+IHBvcHVwLWVsZW1lbnQg0LHRg9C00LXRgiDRg9Cy0LXQu9C40YfQuNCy0LDRgtGMIGRhdGEgYXJlYS5cclxuLy8g0JLQvtC+0LHRidC1INGN0YLQvtGCINC/0LDRgNCw0LzQtdGC0YAg0YHQtNC10LvQsNC10YIg0L3QtdCy0L7Qt9C80L7QttC90YvQvCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC00LDRgtGLINCyXHJcbi8vINCw0LHRgdC+0LvRjtGC0L3QviDQv9C+0LfQuNGG0LjQvtC90LjRgNC+0LLQsNC90L3Ri9GFINC60L7QvdGC0LXQudC90LXRgNCw0YUgKNC80L7QtNCw0LvRjNC90YvQtSDQvtC60L3QsCwg0L3QsNC/0YDQuNC80LXRgCkuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1ZS1lZGl0b3ItZGF0ZScsXHJcbiAgdGVtcGxhdGU6XHJcbiAgYDxkaXYgY2xhc3M9XCJ0cnVlLWdyaWRfX2lucHV0LWNvbnRhaW5lclwiIFtzdHlsZS5oZWlnaHRdPVwiZ2V0SCgpXCI+XHJcbiAgICA8dHJ1ZS1kYXRlcGlja2VyICNkYXRlcGlja2VyXHJcbiAgICAgIGNsYXNzPVwidHJ1ZS1lZGl0b3ItZGF0ZV9fZGF0ZXBpY2tlclwiXHJcbiAgICAgIFtwYXR0ZXJuXT1cImNvbHVtbi5mb3JtYXRcIlxyXG4gICAgICBbbmdDbGFzc109XCJnZXRDbGFzcygpXCJcclxuICAgICAgW2lucHV0Q2xhc3NdPVwiZGF0ZXBpY2tlcklucHV0Q2xhc3NcIlxyXG4gICAgICBbc2hvd0Vycm9yXT1cImZhbHNlXCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcbiAgICAgIChrZXlkb3duKT1cImlucHV0S2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZGF0ZXBpY2tlckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L3RydWUtZGF0ZXBpY2tlcj5cclxuICA8L2Rpdj5gLFxyXG4gIHN0eWxlczogW2BcclxuICAgIDpob3N0IHtcclxuICAgICAgcGFkZGluZzogMDtcclxuICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICBib3JkZXI6IDA7XHJcbiAgICB9XHJcbiAgICAudHJ1ZS1lZGl0b3ItZGF0ZV9fZGF0ZXBpY2tlciB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgIG1hcmdpbjogMDtcclxuICAgIH1cclxuICAgIGBdXHJcbiAgfSlcclxuZXhwb3J0IGNsYXNzIEVkaXRvckRhdGVDb21wb25lbnQgaW1wbGVtZW50cyBJRWRpdG9yICB7XHJcblxyXG4gIGllOiBib29sZWFuO1xyXG4gIHZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIHZhbHVlVGVtcDogYW55O1xyXG4gIHZhbHVlQ2hhbmdlZDogYm9vbGVhbjtcclxuICBoZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgZGF0ZXBpY2tlcklucHV0Q2xhc3MgPSAndHJ1ZS1ncmlkLWlucHV0JztcclxuXHJcbiAgQFZpZXdDaGlsZCgnZGF0ZXBpY2tlcicsIHtzdGF0aWM6IHRydWV9KVxyXG4gIGRhdGVwaWNrZXI6IGFueTtcclxuXHJcbiAgLy8gSW1wbGVtZW50YXRpb24gb2YgSUVkaXRvclxyXG4gIHN0YXRlOiBHcmlkU3RhdGVTZXJ2aWNlO1xyXG4gIGNvbHVtbjogQ29sdW1uO1xyXG4gIHJvdzogYW55O1xyXG5cclxuICBAT3V0cHV0KFwiY29tbWl0XCIpXHJcbiAgY29tbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dChcImNhbmNlbFwiKVxyXG4gIGNhbmNlbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoXCJjaGFuZ2VcIilcclxuICBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIGluaXQodmFsdWU6IGFueSwgdmFsdWVDaGFuZ2VkOiBib29sZWFuLCBoZWlnaHQ6IG51bWJlciwgaWU6IGJvb2xlYW4gPSBmYWxzZSwgd2FzU2hvd246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cclxuICAgIGlmICh0aGlzLnN0YXRlLnRvdWNoTW9kZSkge1xyXG4gICAgICB0aGlzLmRhdGVwaWNrZXIucG9wdXBQb3NpdGlvbiA9ICdNT0RBTCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGVwaWNrZXIucG9wdXBQb3NpdGlvbiA9ICdSRUxBVElWRSc7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pZSA9IGllO1xyXG4gICAgdGhpcy52YWx1ZVRlbXAgPSB2YWx1ZTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2VkID0gdmFsdWVDaGFuZ2VkO1xyXG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgaWYgKHRoaXMuc3RhdGUuaU9TKSB7XHJcbiAgICAgIERPTVV0aWxzLmZvY3VzQW5kT3BlbktleWJvYXJkKHRoaXMuZGF0ZXBpY2tlci5pbnB1dC5uYXRpdmVFbGVtZW50LCA1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICBpZighdGhpcy52YWx1ZUNoYW5nZWQpIHtcclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWVUZW1wO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGF0ZXBpY2tlci5mb2N1cygpKTtcclxuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRlcGlja2VyLmZvY3VzKCk7XHJcbiAgICAgIGNvbnN0IHR4dCA9IHRoaXMudmFsdWVUZW1wO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR4dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgZSA9IEtleXMuZ2VuZXJhdGVFdmVudChudWxsLCAwLCB0eHRbaV0pO1xyXG4gICAgICAgICAgdGhpcy5kYXRlcGlja2VyLmFjY2VwdEtleShlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDQndC1INC/0L7QvNC+0LPQsNC10YJcclxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCksIDEwMCk7XHJcbiAgfVxyXG5cclxuICBkYXRlcGlja2VyQ2hhbmdlKGU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5wdXJpZnkoZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5wdXRNb3VzZURvd24oZTogYW55KSB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRLZXlEb3duKGU6IGFueSkge1xyXG5cclxuICAgIGlmIChlLmtleUNvZGUgPT09IEtleXMuVVAgfHwgZS5rZXlDb2RlID09PSBLZXlzLkRPV04gfHwgZS5rZXlDb2RlID09PSBLZXlzLlRBQikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUua2V5Q29kZSA9PT0gS2V5cy5FU0NBUEUpIHtcclxuICAgICAgdGhpcy5jYW5jZWwuZW1pdChmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGlmIChlLmtleUNvZGUgPT09IEtleXMuRU5URVIpIHtcclxuICAgICAgdGhpcy5jb21taXQuZW1pdCh0aGlzLnB1cmlmeSh0aGlzLnZhbHVlKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENsYXNzKCkge1xyXG4gICAgbGV0IHJlcyA9ICd0cnVlLWVkaXRvci1kYXRlX19kYXRlcGlja2VyJztcclxuICAgIGlmICh0aGlzLmhlaWdodCAhPT0gbnVsbCAmJiB0aGlzLmhlaWdodCA+IDApIHtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pZSkge1xyXG4gICAgICByZXR1cm4gcmVzICsgJyB0cnVlLWdyaWQtZWRpdG9yLWllJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiByZXMgKyAnIHRydWUtZ3JpZC1lZGl0b3ItMTAwcCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIKCkge1xyXG4gICAgaWYgKHRoaXMuaGVpZ2h0ICE9PSBudWxsICYmIHRoaXMuaGVpZ2h0ID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oZWlnaHQgKyAncHgnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcxMDAlJztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwdXJpZnkodjogYW55KTogYW55IHtcclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbCB8fCBpc05hTih2LmdldFRpbWUoKSkpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cclxufVxyXG4iXX0=