UNPKG

@true-directive/grid

Version:

Angular Data Grid from Yopsilon.

164 lines 17.9 kB
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 { MaskBaseDirective } from './mask-base.directive'; import { InternationalizationService } from '../internationalization/internationalization.service'; import { MaskState } from '@true-directive/base'; import { MaskSettings } from '@true-directive/base'; import { DateParserFormatter } from '@true-directive/base'; var MaskDateDirective = /** @class */ (function (_super) { tslib_1.__extends(MaskDateDirective, _super); function MaskDateDirective(_renderer, _elementRef, intl) { var _this = _super.call(this, _renderer, _elementRef, intl) || this; _this._renderer = _renderer; _this._elementRef = _elementRef; _this.intl = intl; // Implementing ControlValueAccessor _this.onChange = function (_) { }; _this.onTouched = function () { }; return _this; } MaskDateDirective_1 = MaskDateDirective; MaskDateDirective.prototype.registerOnChange = function (fn) { this.onChange = fn; }; MaskDateDirective.prototype.registerOnTouched = function (fn) { this.onTouched = fn; }; MaskDateDirective.prototype.onInput = function (e) { this.input(e.target.value); }; // Focus lost MaskDateDirective.prototype.blur = function (e) { // No need to parse once more if result is as expected var autoCorrected = this._mask.applyMask(this._txtValue); if (autoCorrected !== this._txtValue) { this.setText(autoCorrected); } // Clearing if Date is incorrect if (this._dateValue === null || isNaN(this._dateValue.getTime())) { if (!this._mask.settings.allowIncomplete) { this.setText(''); } } this.onTouched(); }; // Updating the state MaskDateDirective.prototype.updateState = function () { if (!this._dateValue) { this.state = MaskState.EMPTY; // empty value } else { if (isNaN(this._dateValue.getTime())) { this.state = MaskState.TYPING; // User input is in progress } else { this.state = MaskState.OK; } } }; // Sending a value to model MaskDateDirective.prototype.toModel = function () { // Retrieving value this._dateValue = DateParserFormatter.parse(this._txtValue, this._mask); this.maskValueChanged.emit(this._dateValue); // Sending to model this.onChange(this._dateValue); // Updating the state this.updateState(); }; // MaskDateDirective.prototype.processKey = function (e) { return _super.prototype.processKey.call(this, e); }; // Parser: View --> Ctrl MaskDateDirective.prototype.input = function (e) { this.doInput(e.target.value); }; // Formatter: Ctrl --> View MaskDateDirective.prototype.writeValue = function (value) { this._dateValue = value; var txt = DateParserFormatter.format(value, this._mask); if (txt !== this._txtValue) { this.setText(txt, false); } // No need to send to model, because this processor is called on model change // but state still needs to be updated this.updateState(); }; Object.defineProperty(MaskDateDirective.prototype, "pattern", { get: function () { return this._mask.pattern; }, set: function (m) { this._mask.pattern = m; }, enumerable: true, configurable: true }); Object.defineProperty(MaskDateDirective.prototype, "settings", { set: function (v) { this._mask.settings = v; }, enumerable: true, configurable: true }); MaskDateDirective.prototype.keyDown = function (e) { return this.processKey(e); }; MaskDateDirective.prototype.setLocale = function (locale) { _super.prototype.setLocale.call(this, locale); this._mask.updateMask(); // Changing format this.writeValue(this._dateValue); // Updating view }; var MaskDateDirective_1; tslib_1.__decorate([ HostListener('input', ['$event']), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", [Object]), tslib_1.__metadata("design:returntype", void 0) ], MaskDateDirective.prototype, "onInput", null); tslib_1.__decorate([ HostListener('blur', ['$event']), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", [Object]), tslib_1.__metadata("design:returntype", void 0) ], MaskDateDirective.prototype, "blur", null); tslib_1.__decorate([ HostListener('input', ['$event']), tslib_1.__metadata("design:type", Function), tslib_1.__metadata("design:paramtypes", [Object]), tslib_1.__metadata("design:returntype", void 0) ], MaskDateDirective.prototype, "input", null); tslib_1.__decorate([ Input('true-mask-date'), tslib_1.__metadata("design:type", String), tslib_1.__metadata("design:paramtypes", [String]) ], MaskDateDirective.prototype, "pattern", null); tslib_1.__decorate([ Input('true-mask-settings'), tslib_1.__metadata("design:type", MaskSettings), tslib_1.__metadata("design:paramtypes", [MaskSettings]) ], MaskDateDirective.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) ], MaskDateDirective.prototype, "keyDown", null); MaskDateDirective = MaskDateDirective_1 = tslib_1.__decorate([ Directive({ selector: '[true-mask-date]', providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return MaskDateDirective_1; }), multi: true }] }), tslib_1.__metadata("design:paramtypes", [Renderer2, ElementRef, InternationalizationService]) ], MaskDateDirective); return MaskDateDirective; }(MaskBaseDirective)); export { MaskDateDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay1kYXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0cnVlLWRpcmVjdGl2ZS9ncmlkLyIsInNvdXJjZXMiOlsic3JjL21hc2svbWFzay1kYXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7RUFJRTtBQUNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFHbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQVUzRDtJQUF1Qyw2Q0FBaUI7SUE2R3BELDJCQUFzQixTQUFvQixFQUFZLFdBQXVCLEVBQVksSUFBaUM7UUFBMUgsWUFDRSxrQkFBTSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUNwQztRQUZxQixlQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVksaUJBQVcsR0FBWCxXQUFXLENBQVk7UUFBWSxVQUFJLEdBQUosSUFBSSxDQUE2QjtRQXpHMUgsb0NBQW9DO1FBQzVCLGNBQVEsR0FBRyxVQUFDLENBQU0sSUFBTSxDQUFDLENBQUM7UUFDMUIsZUFBUyxHQUFHLGNBQU8sQ0FBQyxDQUFDOztJQXlHN0IsQ0FBQzswQkEvR1EsaUJBQWlCO0lBUTFCLDRDQUFnQixHQUFoQixVQUFpQixFQUFvQixJQUFVLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENB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QUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFNBQVMsRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLG1CQUFpQixFQUFqQixDQUFpQixDQUFDO29CQUNoRCxLQUFLLEVBQUUsSUFBSTtpQkFBQyxDQUFDO1NBQ3BCLENBQUM7aURBOEdtQyxTQUFTLEVBQXlCLFVBQVUsRUFBa0IsMkJBQTJCO09BN0dqSCxpQkFBaUIsQ0FnSDdCO0lBQUQsd0JBQUM7Q0FBQSxBQWhIRCxDQUF1QyxpQkFBaUIsR0FnSHZEO1NBaEhZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBBbGVrc2V5IE1lbG5pa292LCBUcnVlIERpcmVjdGl2ZSBDb21wYW55LlxyXG4gKiBAbGluayBodHRwczovL3RydWVkaXJlY3RpdmUuY29tL1xyXG4gKiBAbGljZW5zZSBNSVRcclxuKi9cclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgSG9zdExpc3RlbmVyLCBSZW5kZXJlcjIsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgTWFza0Jhc2VEaXJlY3RpdmUgfSBmcm9tICcuL21hc2stYmFzZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcm5hdGlvbmFsaXphdGlvbi9pbnRlcm5hdGlvbmFsaXphdGlvbi5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IE1hc2sgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IE1hc2tTdGF0ZSB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgTWFza1NldHRpbmdzIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5cclxuaW1wb3J0IHsgRGF0ZVBhcnNlckZvcm1hdHRlciB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgTG9jYWxlIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1t0cnVlLW1hc2stZGF0ZV0nLFxyXG4gICAgcHJvdmlkZXJzOiBbe1xyXG4gICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hc2tEYXRlRGlyZWN0aXZlKSxcclxuICAgICAgICBtdWx0aTogdHJ1ZX1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXNrRGF0ZURpcmVjdGl2ZSBleHRlbmRzIE1hc2tCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIHByaXZhdGUgX2RhdGVWYWx1ZTogYW55O1xyXG5cclxuICAgIC8vIEltcGxlbWVudGluZyBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xyXG4gICAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQnXSlcclxuICAgIG9uSW5wdXQoZTogYW55KSB7XHJcbiAgICAgIHRoaXMuaW5wdXQoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvY3VzIGxvc3RcclxuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInLCBbJyRldmVudCddKVxyXG4gICAgYmx1cihlOiBhbnkpIHtcclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gcGFyc2Ugb25jZSBtb3JlIGlmIHJlc3VsdCBpcyBhcyBleHBlY3RlZFxyXG4gICAgICBsZXQgYXV0b0NvcnJlY3RlZCA9IHRoaXMuX21hc2suYXBwbHlNYXNrKHRoaXMuX3R4dFZhbHVlKTtcclxuICAgICAgaWYgKGF1dG9Db3JyZWN0ZWQgIT09IHRoaXMuX3R4dFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRUZXh0KGF1dG9Db3JyZWN0ZWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDbGVhcmluZyBpZiBEYXRlIGlzIGluY29ycmVjdFxyXG4gICAgICBpZiAodGhpcy5fZGF0ZVZhbHVlID09PSBudWxsIHx8IGlzTmFOKHRoaXMuX2RhdGVWYWx1ZS5nZXRUaW1lKCkpKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tYXNrLnNldHRpbmdzLmFsbG93SW5jb21wbGV0ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRUZXh0KCcnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRpbmcgdGhlIHN0YXRlXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3RhdGUoKSB7XHJcbiAgICAgIGlmICghdGhpcy5fZGF0ZVZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IE1hc2tTdGF0ZS5FTVBUWTsgLy8gZW1wdHkgdmFsdWVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNOYU4odGhpcy5fZGF0ZVZhbHVlLmdldFRpbWUoKSkpIHtcclxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBNYXNrU3RhdGUuVFlQSU5HOyAvLyBVc2VyIGlucHV0IGlzIGluIHByb2dyZXNzXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBNYXNrU3RhdGUuT0s7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VuZGluZyBhIHZhbHVlIHRvIG1vZGVsXHJcbiAgICBwcm90ZWN0ZWQgdG9Nb2RlbCgpIHtcclxuICAgICAgLy8gUmV0cmlldmluZyB2YWx1ZVxyXG4gICAgICB0aGlzLl9kYXRlVmFsdWUgPSBEYXRlUGFyc2VyRm9ybWF0dGVyLnBhcnNlKHRoaXMuX3R4dFZhbHVlLCB0aGlzLl9tYXNrKTtcclxuICAgICAgdGhpcy5tYXNrVmFsdWVDaGFuZ2VkLmVtaXQodGhpcy5fZGF0ZVZhbHVlKTtcclxuICAgICAgLy8gU2VuZGluZyB0byBtb2RlbFxyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX2RhdGVWYWx1ZSk7XHJcbiAgICAgIC8vIFVwZGF0aW5nIHRoZSBzdGF0ZVxyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuICAgIHB1YmxpYyBwcm9jZXNzS2V5KGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICByZXR1cm4gc3VwZXIucHJvY2Vzc0tleShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQYXJzZXI6IFZpZXcgLS0+IEN0cmxcclxuICAgIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQnXSlcclxuICAgIGlucHV0KGU6IGFueSkge1xyXG4gICAgICB0aGlzLmRvSW5wdXQoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvcm1hdHRlcjogQ3RybCAtLT4gVmlld1xyXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICBjb25zdCB0eHQgPSBEYXRlUGFyc2VyRm9ybWF0dGVyLmZvcm1hdCh2YWx1ZSwgdGhpcy5fbWFzayk7ICAgICAgXHJcbiAgICAgIGlmICh0eHQgIT09IHRoaXMuX3R4dFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRUZXh0KHR4dCwgZmFsc2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIHNlbmQgdG8gbW9kZWwsIGJlY2F1c2UgdGhpcyBwcm9jZXNzb3IgaXMgY2FsbGVkIG9uIG1vZGVsIGNoYW5nZVxyXG4gICAgICAvLyBidXQgc3RhdGUgc3RpbGwgbmVlZHMgdG8gYmUgdXBkYXRlZFxyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCd0cnVlLW1hc2stZGF0ZScpXHJcbiAgICBwdWJsaWMgc2V0IHBhdHRlcm4obTogc3RyaW5nKSB7XHJcbiAgICAgIHRoaXMuX21hc2sucGF0dGVybiA9IG07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXR0ZXJuKCk6IHN0cmluZyB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9tYXNrLnBhdHRlcm47XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCd0cnVlLW1hc2stc2V0dGluZ3MnKVxyXG4gICAgc2V0IHNldHRpbmdzKHY6IE1hc2tTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLl9tYXNrLnNldHRpbmdzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIGtleURvd24oZTogYW55KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NLZXkoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TG9jYWxlKGxvY2FsZTogTG9jYWxlKSB7XHJcbiAgICAgIHN1cGVyLnNldExvY2FsZShsb2NhbGUpO1xyXG4gICAgICB0aGlzLl9tYXNrLnVwZGF0ZU1hc2soKTsgLy8gQ2hhbmdpbmcgZm9ybWF0XHJcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl9kYXRlVmFsdWUpOyAvLyBVcGRhdGluZyB2aWV3XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLCBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByb3RlY3RlZCBpbnRsOiBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UpIHtcclxuICAgICAgc3VwZXIoX3JlbmRlcmVyLCBfZWxlbWVudFJlZiwgaW50bCk7XHJcbiAgICB9XHJcbn1cclxuIl19