@true-directive/grid
Version:
Angular Data Grid from Yopsilon.
140 lines • 16.2 kB
JavaScript
import * as tslib_1 from "tslib";
/**
* Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company.
* @link https://truedirective.com/
* @license MIT
*/
import { Directive, ElementRef, Input, HostListener, Renderer2, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { InternationalizationService } from '../internationalization/internationalization.service';
import { MaskSettings } from '@true-directive/base';
import { MaskState } from '@true-directive/base';
import { MaskBaseDirective } from './mask-base.directive';
var MaskDirective = /** @class */ (function (_super) {
tslib_1.__extends(MaskDirective, _super);
function MaskDirective(_renderer, _elementRef, intl) {
var _this = _super.call(this, _renderer, _elementRef, intl) || this;
_this._renderer = _renderer;
_this._elementRef = _elementRef;
_this.intl = intl;
_this.onChange = function (_) { };
_this.onTouched = function () { };
return _this;
}
MaskDirective_1 = MaskDirective;
MaskDirective.prototype.registerOnChange = function (fn) { this.onChange = fn; };
MaskDirective.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };
MaskDirective.prototype.blur = function () {
// Очищаем, если маска неверна
var autocorrected = this._mask.applyMask(this._txtValue);
if (autocorrected === '' && !this._mask.settings.allowIncomplete) {
this.setText('');
}
else {
// Маска верна, но нужно автокоррекцию провернуть
if (autocorrected !== this._txtValue) {
this.setText(autocorrected);
}
}
this.onTouched();
};
// Пользователь вносит значение. Parser: View --> Ctrl
// Только то, что не обработано маской
MaskDirective.prototype.input = function (txt) {
this.doInput(txt);
};
// Обновляем состояние
MaskDirective.prototype.updateState = function () {
if (this._txtValue === '') {
// Пустое значение
this.state = MaskState.EMPTY;
}
else {
if (!this._mask.checkMask(this._txtValue)) {
// Считаем, что пользователь не завершил ввод
this.state = MaskState.TYPING;
}
else {
this.state = MaskState.OK;
}
}
};
MaskDirective.prototype.toModel = function () {
// Отправляем в модель
this.onChange(this._txtValue);
// Обновляем состояние
this.updateState();
};
// Отображаем значение в компоненте. Formatter: Ctrl --> View
MaskDirective.prototype.writeValue = function (txt) {
if (this._txtValue !== txt) {
this.setText(txt, false); // Не отправляем значение в модель, т.к. этот метод вызывается как раз после изменения модели
}
// Но обновить состояние нужно...
this.updateState();
};
Object.defineProperty(MaskDirective.prototype, "pattern", {
get: function () {
return this._mask.pattern;
},
set: function (m) {
if (this._txtValue !== '' && this._mask.pattern !== '' && this._mask.pattern !== m) {
// По сложному пути
var res = this.currentRes();
var s = this._mask.pureValue(res.newValue);
this._mask.pattern = m;
res.newValue = this._mask.applyPureValue(s);
this.setRes(res);
}
else {
this._mask.pattern = m;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(MaskDirective.prototype, "settings", {
set: function (v) {
this._mask.settings = v;
},
enumerable: true,
configurable: true
});
MaskDirective.prototype.keyDown = function (e) {
return this.processKey(e);
};
var MaskDirective_1;
tslib_1.__decorate([
Input('true-mask'),
tslib_1.__metadata("design:type", String),
tslib_1.__metadata("design:paramtypes", [String])
], MaskDirective.prototype, "pattern", null);
tslib_1.__decorate([
Input('true-mask-settings'),
tslib_1.__metadata("design:type", MaskSettings),
tslib_1.__metadata("design:paramtypes", [MaskSettings])
], MaskDirective.prototype, "settings", null);
tslib_1.__decorate([
HostListener('keydown', ['$event']),
tslib_1.__metadata("design:type", Function),
tslib_1.__metadata("design:paramtypes", [Object]),
tslib_1.__metadata("design:returntype", void 0)
], MaskDirective.prototype, "keyDown", null);
MaskDirective = MaskDirective_1 = tslib_1.__decorate([
Directive({
selector: '[true-mask]',
host: { '(input)': 'input($event.target.value)', '(blur)': 'blur()' },
providers: [{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return MaskDirective_1; }),
multi: true
}]
}),
tslib_1.__metadata("design:paramtypes", [Renderer2,
ElementRef,
InternationalizationService])
], MaskDirective);
return MaskDirective;
}(MaskBaseDirective));
export { MaskDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9tYXNrL21hc2suZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztFQUlFO0FBQ0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUVuRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBVTFEO0lBQW1DLHlDQUFpQjtJQXlGaEQsdUJBQ1ksU0FBb0IsRUFDcEIsV0FBdUIsRUFDdkIsSUFBaUM7UUFIN0MsWUFJRSxrQkFBTSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUNwQztRQUpXLGVBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsaUJBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsVUFBSSxHQUFKLElBQUksQ0FBNkI7UUExRnJDLGNBQVEsR0FBRyxVQUFDLENBQU0sSUFBTSxDQUFDLENBQUM7UUFDMUIsZUFBUyxHQUFHLGNBQU8sQ0FBQyxDQUFDOztJQTJGN0IsQ0FBQztzQkE5RlEsYUFBYTtJQUt0Qix3Q0FBZ0IsR0FBaEIsVUFBaUIsRUFBb0IsSUFBVSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEUseUNBQWlCLEdBQWpCLFVBQWtCLEVBQWMsSUFBVSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUs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QUFhLENBQWU7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7OztPQUFBO0lBR0QsK0JBQU8sR0FBUCxVQUFRLENBQU07UUFDWixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7SUExQkQ7UUFEQyxLQUFLLENBQUMsV0FBVyxDQUFDOzs7Z0RBYWxCO0lBT0Q7UUFEQyxLQUFLLENBQUMsb0JBQW9CLENBQUM7MENBQ1osWUFBWTtpREFBWixZQUFZO2lEQUUzQjtJQUdEO1FBREMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7O2dEQUduQztJQXZGUSxhQUFhO1FBUnpCLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLElBQUksRUFBRSxFQUFDLFNBQVMsRUFBRSw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDO1lBQ25FLFNBQVMsRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLGVBQWEsRUFBYixDQUFhLENBQUM7b0JBQzVDLEtBQUssRUFBRSxJQUFJO2lCQUFDLENBQUM7U0FDcEIsQ0FBQztpREEyRnlCLFNBQVM7WUFDUCxVQUFVO1lBQ2pCLDJCQUEyQjtPQTVGcEMsYUFBYSxDQWdHekI7SUFBRCxvQkFBQztDQUFBLEFBaEdELENBQW1DLGlCQUFpQixHQWdHbkQ7U0FoR1ksYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBBbGVrc2V5IE1lbG5pa292LCBUcnVlIERpcmVjdGl2ZSBDb21wYW55LlxyXG4gKiBAbGluayBodHRwczovL3RydWVkaXJlY3RpdmUuY29tL1xyXG4gKiBAbGljZW5zZSBNSVRcclxuKi9cclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgSG9zdExpc3RlbmVyLCBSZW5kZXJlcjIsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgSW50ZXJuYXRpb25hbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJuYXRpb25hbGl6YXRpb24vaW50ZXJuYXRpb25hbGl6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc2sgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IE1hc2tTZXR0aW5ncyB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgTWFza1N0YXRlIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5cclxuaW1wb3J0IHsgTWFza0Jhc2VEaXJlY3RpdmUgfSBmcm9tICcuL21hc2stYmFzZS5kaXJlY3RpdmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1t0cnVlLW1hc2tdJyxcclxuICAgIGhvc3Q6IHsnKGlucHV0KSc6ICdpbnB1dCgkZXZlbnQudGFyZ2V0LnZhbHVlKScsICcoYmx1ciknOiAnYmx1cigpJ30sXHJcbiAgICBwcm92aWRlcnM6IFt7XHJcbiAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWFza0RpcmVjdGl2ZSksXHJcbiAgICAgICAgbXVsdGk6IHRydWV9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFza0RpcmVjdGl2ZSBleHRlbmRzIE1hc2tCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIHByaXZhdGUgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuICAgIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge307XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cclxuXHJcbiAgICBibHVyKCkge1xyXG4gICAgICAvLyDQntGH0LjRidCw0LXQvCwg0LXRgdC70Lgg0LzQsNGB0LrQsCDQvdC10LLQtdGA0L3QsFxyXG4gICAgICBjb25zdCBhdXRvY29ycmVjdGVkID0gdGhpcy5fbWFzay5hcHBseU1hc2sodGhpcy5fdHh0VmFsdWUpO1xyXG4gICAgICBpZiAoYXV0b2NvcnJlY3RlZCA9PT0gJycgJiYgIXRoaXMuX21hc2suc2V0dGluZ3MuYWxsb3dJbmNvbXBsZXRlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRUZXh0KCcnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDQnNCw0YHQutCwINCy0LXRgNC90LAsINC90L4g0L3Rg9C20L3QviDQsNCy0YLQvtC60L7RgNGA0LXQutGG0LjRjiDQv9GA0L7QstC10YDQvdGD0YLRjFxyXG4gICAgICAgIGlmIChhdXRvY29ycmVjdGVkICE9PSB0aGlzLl90eHRWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRUZXh0KGF1dG9jb3JyZWN0ZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDQn9C+0LvRjNC30L7QstCw0YLQtdC70Ywg0LLQvdC+0YHQuNGCINC30L3QsNGH0LXQvdC40LUuIFBhcnNlcjogVmlldyAtLT4gQ3RybFxyXG4gICAgLy8g0KLQvtC70YzQutC+INGC0L4sINGH0YLQviDQvdC1INC+0LHRgNCw0LHQvtGC0LDQvdC+INC80LDRgdC60L7QuVxyXG4gICAgaW5wdXQodHh0OiBhbnkpIHtcclxuICAgICAgdGhpcy5kb0lucHV0KHR4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g0J7QsdC90L7QstC70Y/QtdC8INGB0L7RgdGC0L7Rj9C90LjQtVxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlKCkge1xyXG4gICAgICBpZiAodGhpcy5fdHh0VmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgLy8g0J/Rg9GB0YLQvtC1INC30L3QsNGH0LXQvdC40LVcclxuICAgICAgICB0aGlzLnN0YXRlID0gTWFza1N0YXRlLkVNUFRZO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWFzay5jaGVja01hc2sodGhpcy5fdHh0VmFsdWUpKSB7XHJcbiAgICAgICAgICAvLyDQodGH0LjRgtCw0LXQvCwg0YfRgtC+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCDQvdC1INC30LDQstC10YDRiNC40Lsg0LLQstC+0LRcclxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBNYXNrU3RhdGUuVFlQSU5HO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXRlID0gTWFza1N0YXRlLk9LO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0b01vZGVsKCk6IHZvaWQge1xyXG4gICAgICAvLyDQntGC0L/RgNCw0LLQu9GP0LXQvCDQsiDQvNC+0LTQtdC70YxcclxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl90eHRWYWx1ZSk7XHJcbiAgICAgIC8vINCe0LHQvdC+0LLQu9GP0LXQvCDRgdC+0YHRgtC+0Y/QvdC40LVcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vINCe0YLQvtCx0YDQsNC20LDQtdC8INC30L3QsNGH0LXQvdC40LUg0LIg0LrQvtC80L/QvtC90LXQvdGC0LUuIEZvcm1hdHRlcjogQ3RybCAtLT4gVmlld1xyXG4gICAgd3JpdGVWYWx1ZSh0eHQ6IGFueSk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy5fdHh0VmFsdWUgIT09IHR4dCkge1xyXG4gICAgICAgIHRoaXMuc2V0VGV4dCh0eHQsIGZhbHNlKTsgLy8g0J3QtSDQvtGC0L/RgNCw0LLQu9GP0LXQvCDQt9C90LDRh9C10L3QuNC1INCyINC80L7QtNC10LvRjCwg0YIu0LouINGN0YLQvtGCINC80LXRgtC+0LQg0LLRi9C30YvQstCw0LXRgtGB0Y8g0LrQsNC6INGA0LDQtyDQv9C+0YHQu9C1INC40LfQvNC10L3QtdC90LjRjyDQvNC+0LTQtdC70LhcclxuICAgICAgfVxyXG4gICAgICAvLyDQndC+INC+0LHQvdC+0LLQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INC90YPQttC90L4uLi5cclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgndHJ1ZS1tYXNrJylcclxuICAgIHB1YmxpYyBzZXQgcGF0dGVybihtOiBzdHJpbmcpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLl90eHRWYWx1ZSAhPT0gJycgJiYgdGhpcy5fbWFzay5wYXR0ZXJuICE9PSAnJyAmJiB0aGlzLl9tYXNrLnBhdHRlcm4gIT09IG0pIHtcclxuICAgICAgICAvLyDQn9C+INGB0LvQvtC20L3QvtC80YMg0L/Rg9GC0LhcclxuICAgICAgICBsZXQgcmVzID0gdGhpcy5jdXJyZW50UmVzKCk7XHJcbiAgICAgICAgbGV0IHMgPSB0aGlzLl9tYXNrLnB1cmVWYWx1ZShyZXMubmV3VmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX21hc2sucGF0dGVybiA9IG07XHJcbiAgICAgICAgcmVzLm5ld1ZhbHVlID0gdGhpcy5fbWFzay5hcHBseVB1cmVWYWx1ZShzKTtcclxuICAgICAgICB0aGlzLnNldFJlcyhyZXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX21hc2sucGF0dGVybiA9IG07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHBhdHRlcm4oKTogc3RyaW5nIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX21hc2sucGF0dGVybjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoJ3RydWUtbWFzay1zZXR0aW5ncycpXHJcbiAgICBzZXQgc2V0dGluZ3ModjogTWFza1NldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMuX21hc2suc2V0dGluZ3MgPSB2O1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gICAga2V5RG93bihlOiBhbnkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0tleShlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgIHByb3RlY3RlZCBpbnRsOiBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UpIHtcclxuICAgICAgc3VwZXIoX3JlbmRlcmVyLCBfZWxlbWVudFJlZiwgaW50bCk7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==