UNPKG

@true-directive/grid

Version:

Angular Data Grid from Yopsilon.

132 lines 14.5 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, Renderer2 } from '@angular/core'; import { Keys } from '@true-directive/base'; import { DOMUtils } from '../common/dom-utils.class'; let EditorTextComponent = class EditorTextComponent { constructor(_renderer) { this._renderer = _renderer; this.ie = false; this.valueChanged = false; this.height = 0; this.commit = new EventEmitter(); this.change = new EventEmitter(); this.cancel = new EventEmitter(); } init(value, valueChanged, height, ie = false, wasShown = false) { this.value = value; this.valueChanged = valueChanged; this.height = height; this.ie = ie; if (this.state.iOS) { DOMUtils.focusAndOpenKeyboard(this.input.nativeElement, 50); } } // Останавливаем propagation, чтобы не влиять на grid inputMouseDown(e) { e.stopPropagation(); } inputChange(e) { this.change.emit(e); } inputKeyDown(e) { if (e.defaultPrevented) { return; } if (e.keyCode === Keys.UP || e.keyCode === Keys.DOWN || e.keyCode === Keys.PAGE_UP || e.keyCode === Keys.PAGE_DOWN || e.keyCode === Keys.TAB) { // По идее просто их должен отработать грид return; } e.stopPropagation(); if (e.keyCode === Keys.ESCAPE) { this.cancel.emit(); return; } if (e.keyCode === Keys.ENTER) { this.commit.emit(this.value); return; } } ngAfterContentInit() { if (!this.valueChanged) { if (this.state.iOS) { // Мы уже позаботились об этом при инициализации } else { setTimeout(() => { this.input.nativeElement.select(); this.input.nativeElement.focus(); }); } } else { this.input.nativeElement.focus(); this._renderer.setProperty(this.input.nativeElement, 'value', this.value); this._renderer.setProperty(this.input.nativeElement, 'selectionStart', this.value.length); this._renderer.setProperty(this.input.nativeElement, 'selectionEnd', this.value.length); } } // Если у нас есть информация о высоте строки - берем её и не // назначаем никакого класса getClass() { if ((this.height !== null && this.height > 0)) { return 'true-grid__input-container'; } if (this.ie) { return 'true-grid-editor-ie'; } else { return 'true-grid-editor-100p'; } } getH() { if (this.height !== null && this.height > 0) { return this.height + 'px'; } return '100%'; } }; tslib_1.__decorate([ ViewChild('input', { static: true }), tslib_1.__metadata("design:type", Object) ], EditorTextComponent.prototype, "input", void 0); tslib_1.__decorate([ Output("commit"), tslib_1.__metadata("design:type", EventEmitter) ], EditorTextComponent.prototype, "commit", void 0); tslib_1.__decorate([ Output("change"), tslib_1.__metadata("design:type", EventEmitter) ], EditorTextComponent.prototype, "change", void 0); tslib_1.__decorate([ Output("cancel"), tslib_1.__metadata("design:type", EventEmitter) ], EditorTextComponent.prototype, "cancel", void 0); EditorTextComponent = tslib_1.__decorate([ Component({ selector: 'true-editor-text', template: `<input #input class="true-grid-input" [(ngModel)]="value" (ngModelChange)="inputChange($event)" [style.height]="getH()" [ngClass]="getClass()" (mousedown)="inputMouseDown($event)" (keydown)="inputKeyDown($event)" />`, styles: [` :host { padding: 0; } `] }), tslib_1.__metadata("design:paramtypes", [Renderer2]) ], EditorTextComponent); export { EditorTextComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLXRleHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHRydWUtZGlyZWN0aXZlL2dyaWQvIiwic291cmNlcyI6WyJzcmMvZWRpdG9ycy9lZGl0b3ItdGV4dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0VBSUU7QUFDRixPQUFPLEVBQUUsU0FBUyxFQUFTLE1BQU0sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUNqRCxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQWlCckQsSUFBYSxtQkFBbUIsR0FBaEMsTUFBYSxtQkFBbUI7SUE2RzlCLFlBQXNCLFNBQW9CO1FBQXBCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUEzR2xDLE9BQUUsR0FBWSxLQUFLLENBQUM7UUFDcEIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQVkzQixXQUFNLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHbEQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRy9DLFdBQU0sR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQXVGRixDQUFDO0lBckYvQyxJQUFJLENBQUMsS0FBVSxFQUFFLFlBQXFCLEVBQUUsTUFBYyxFQUFFLEtBQWMsS0FBSyxFQUFFLFdBQW9CLEtBQUs7UUFDcEcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2xCLFFBQVEsQ0FB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TSxHQUFHLENBQUMsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQzNCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUdGLENBQUE7QUFqR0M7SUFEQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDOztrREFDeEI7QUFHWDtJQURDLE1BQU0sQ0FBQyxRQUFRLENBQUM7c0NBQ1QsWUFBWTttREFBOEI7QUFHbEQ7SUFEQyxNQUFNLENBQUMsUUFBUSxDQUFDO3NDQUNULFlBQVk7bURBQTJCO0FBRy9DO0lBREMsTUFBTSxDQUFDLFFBQVEsQ0FBQztzQ0FDVCxZQUFZO21EQUE0QjtBQXRCckMsbUJBQW1CO0lBZi9CLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsUUFBUSxFQUFFOzs7Ozs7c0RBTTBDO2lCQUMzQzs7OztLQUlOO0tBQ0YsQ0FBQzs2Q0E4RytCLFNBQVM7R0E3Ry9CLG1CQUFtQixDQThHL0I7U0E5R1ksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IEFsZWtzZXkgTWVsbmlrb3YsIFRydWUgRGlyZWN0aXZlIENvbXBhbnkuXHJcbiAqIEBsaW5rIGh0dHBzOi8vdHJ1ZWRpcmVjdGl2ZS5jb20vXHJcbiAqIEBsaWNlbnNlIE1JVFxyXG4qL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLFxyXG4gICAgICAgICBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgS2V5cyB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuXHJcbmltcG9ydCB7IEdyaWRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJRWRpdG9yIH0gZnJvbSBcIi4vZWRpdG9yLmludGVyZmFjZVwiO1xyXG5cclxuaW1wb3J0IHsgRE9NVXRpbHMgfSBmcm9tICcuLi9jb21tb24vZG9tLXV0aWxzLmNsYXNzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1ZS1lZGl0b3ItdGV4dCcsXHJcbiAgdGVtcGxhdGU6IGA8aW5wdXQgI2lucHV0IGNsYXNzPVwidHJ1ZS1ncmlkLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImlucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImdldEgoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENsYXNzKClcIlxyXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cImlucHV0TW91c2VEb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJpbnB1dEtleURvd24oJGV2ZW50KVwiIC8+YCxcclxuICBzdHlsZXM6IFtgXHJcbiAgICA6aG9zdCB7XHJcbiAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICB9XHJcbiAgICBgXVxyXG4gIH0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0b3JUZXh0Q29tcG9uZW50IGltcGxlbWVudHMgSUVkaXRvciB7XHJcblxyXG4gIHByaXZhdGUgaWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaGVpZ2h0OiBudW1iZXIgPSAwO1xyXG5cclxuICBwdWJsaWMgdmFsdWU6IHN0cmluZztcclxuXHJcbiAgc3RhdGU6IEdyaWRTdGF0ZVNlcnZpY2U7XHJcbiAgY29sdW1uOiBDb2x1bW47XHJcbiAgcm93OiBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0Jywge3N0YXRpYzogdHJ1ZX0pXHJcbiAgaW5wdXQ6IGFueTtcclxuXHJcbiAgQE91dHB1dChcImNvbW1pdFwiKVxyXG4gIGNvbW1pdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoXCJjaGFuZ2VcIilcclxuICBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KFwiY2FuY2VsXCIpXHJcbiAgY2FuY2VsOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGluaXQodmFsdWU6IGFueSwgdmFsdWVDaGFuZ2VkOiBib29sZWFuLCBoZWlnaHQ6IG51bWJlciwgaWU6IGJvb2xlYW4gPSBmYWxzZSwgd2FzU2hvd246IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZWQgPSB2YWx1ZUNoYW5nZWQ7XHJcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIHRoaXMuaWUgPSBpZTtcclxuICAgIGlmICh0aGlzLnN0YXRlLmlPUykge1xyXG4gICAgICBET01VdGlscy5mb2N1c0FuZE9wZW5LZXlib2FyZCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDUwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vINCe0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8IHByb3BhZ2F0aW9uLCDRh9GC0L7QsdGLINC90LUg0LLQu9C40Y/RgtGMINC90LAgZ3JpZFxyXG4gIGlucHV0TW91c2VEb3duKGU6IGFueSkge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGlucHV0Q2hhbmdlKGU6IGFueSkge1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIGlucHV0S2V5RG93bihlOiBhbnkpIHtcclxuXHJcbiAgICBpZiAoZS5kZWZhdWx0UHJldmVudGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS5rZXlDb2RlID09PSBLZXlzLlVQIHx8XHJcbiAgICAgICAgZS5rZXlDb2RlID09PSBLZXlzLkRPV04gfHxcclxuICAgICAgICBlLmtleUNvZGUgPT09IEtleXMuUEFHRV9VUCB8fFxyXG4gICAgICAgIGUua2V5Q29kZSA9PT0gS2V5cy5QQUdFX0RPV04gfHxcclxuICAgICAgICBlLmtleUNvZGUgPT09IEtleXMuVEFCKSB7XHJcbiAgICAgIC8vINCf0L4g0LjQtNC10LUg0L/RgNC+0YHRgtC+INC40YUg0LTQvtC70LbQtdC9INC+0YLRgNCw0LHQvtGC0LDRgtGMINCz0YDQuNC0XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGlmIChlLmtleUNvZGUgPT09IEtleXMuRVNDQVBFKSB7XHJcbiAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLmtleUNvZGUgPT09IEtleXMuRU5URVIpIHtcclxuICAgICAgdGhpcy5jb21taXQuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgaWYoIXRoaXMudmFsdWVDaGFuZ2VkKSB7XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlLmlPUykge1xyXG4gICAgICAgIC8vINCc0Ysg0YPQttC1INC/0L7Qt9Cw0LHQvtGC0LjQu9C40YHRjCDQvtCxINGN0YLQvtC8INC/0YDQuCDQuNC90LjRhtC40LDQu9C40LfQsNGG0LjQuFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpXHJcbiAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdGhpcy52YWx1ZSk7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgJ3NlbGVjdGlvblN0YXJ0JywgdGhpcy52YWx1ZS5sZW5ndGgpO1xyXG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdzZWxlY3Rpb25FbmQnLCB0aGlzLnZhbHVlLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDQldGB0LvQuCDRgyDQvdCw0YEg0LXRgdGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0LLRi9GB0L7RgtC1INGB0YLRgNC+0LrQuCAtINCx0LXRgNC10Lwg0LXRkSDQuCDQvdC1XHJcbiAgLy8g0L3QsNC30L3QsNGH0LDQtdC8INC90LjQutCw0LrQvtCz0L4g0LrQu9Cw0YHRgdCwXHJcbiAgZ2V0Q2xhc3MoKSB7XHJcbiAgICBpZiAoKHRoaXMuaGVpZ2h0ICE9PSBudWxsICYmIHRoaXMuaGVpZ2h0ID4gMCkpIHtcclxuICAgICAgcmV0dXJuICd0cnVlLWdyaWRfX2lucHV0LWNvbnRhaW5lcic7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pZSkge1xyXG4gICAgICByZXR1cm4gJ3RydWUtZ3JpZC1lZGl0b3ItaWUnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICd0cnVlLWdyaWQtZWRpdG9yLTEwMHAnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SCgpIHtcclxuICAgIGlmICh0aGlzLmhlaWdodCAhPT0gbnVsbCAmJiB0aGlzLmhlaWdodCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0ICsgJ3B4JztcclxuICAgIH1cclxuICAgIHJldHVybiAnMTAwJSc7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3JlbmRlcmVyOiBSZW5kZXJlcjIpIHsgfVxyXG59XHJcbiJdfQ==