UNPKG

@true-directive/grid

Version:

Angular Data Grid from Yopsilon.

152 lines 16.6 kB
import * as tslib_1 from "tslib"; var MaskDateDirective_1; /** * 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'; let MaskDateDirective = MaskDateDirective_1 = class MaskDateDirective extends MaskBaseDirective { constructor(_renderer, _elementRef, intl) { super(_renderer, _elementRef, intl); this._renderer = _renderer; this._elementRef = _elementRef; this.intl = intl; // Implementing ControlValueAccessor this.onChange = (_) => { }; this.onTouched = () => { }; } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } onInput(e) { this.input(e.target.value); } // Focus lost blur(e) { // No need to parse once more if result is as expected let 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 updateState() { 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 toModel() { // 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(); } // processKey(e) { return super.processKey(e); } // Parser: View --> Ctrl input(e) { this.doInput(e.target.value); } // Formatter: Ctrl --> View writeValue(value) { this._dateValue = value; const 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(); } set pattern(m) { this._mask.pattern = m; } get pattern() { return this._mask.pattern; } set settings(v) { this._mask.settings = v; } keyDown(e) { return this.processKey(e); } setLocale(locale) { super.setLocale(locale); this._mask.updateMask(); // Changing format this.writeValue(this._dateValue); // Updating view } }; 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(() => MaskDateDirective_1), multi: true }] }), tslib_1.__metadata("design:paramtypes", [Renderer2, ElementRef, InternationalizationService]) ], MaskDateDirective); export { MaskDateDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay1kYXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0cnVlLWRpcmVjdGl2ZS9ncmlkLyIsInNvdXJjZXMiOlsic3JjL21hc2svbWFzay1kYXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7O0VBSUU7QUFDRixPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBR25HLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFVM0QsSUFBYSxpQkFBaUIseUJBQTlCLE1BQWEsaUJBQWtCLFNBQVEsaUJBQWlCO0lBNkdwRCxZQUFzQixTQUFvQixFQUFZLFdBQXVCLEVBQVksSUFBaUM7UUFDeEgsS0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFEaEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFZLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQVksU0FBSSxHQUFKLElBQUksQ0FBNkI7UUF6RzFILG9DQUFvQztRQUM1QixhQUFRLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUMxQixjQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBeUc3QixDQUFDO0lBdkdELGdCQUFnQixDQUFDLEVBQW9CLElBQVUsSUFBSSxD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UyxFQUFFLENBQUM7Z0JBQ1IsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBaUIsQ0FBQztnQkFDaEQsS0FBSyxFQUFFLElBQUk7YUFBQyxDQUFDO0tBQ3BCLENBQUM7NkNBOEdtQyxTQUFTLEVBQXlCLFVBQVUsRUFBa0IsMkJBQTJCO0dBN0dqSCxpQkFBaUIsQ0FnSDdCO1NBaEhZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBBbGVrc2V5IE1lbG5pa292LCBUcnVlIERpcmVjdGl2ZSBDb21wYW55LlxyXG4gKiBAbGluayBodHRwczovL3RydWVkaXJlY3RpdmUuY29tL1xyXG4gKiBAbGljZW5zZSBNSVRcclxuKi9cclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgSG9zdExpc3RlbmVyLCBSZW5kZXJlcjIsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgTWFza0Jhc2VEaXJlY3RpdmUgfSBmcm9tICcuL21hc2stYmFzZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcm5hdGlvbmFsaXphdGlvbi9pbnRlcm5hdGlvbmFsaXphdGlvbi5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IE1hc2sgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IE1hc2tTdGF0ZSB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgTWFza1NldHRpbmdzIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5cclxuaW1wb3J0IHsgRGF0ZVBhcnNlckZvcm1hdHRlciB9IGZyb20gJ0B0cnVlLWRpcmVjdGl2ZS9iYXNlJztcclxuaW1wb3J0IHsgTG9jYWxlIH0gZnJvbSAnQHRydWUtZGlyZWN0aXZlL2Jhc2UnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1t0cnVlLW1hc2stZGF0ZV0nLFxyXG4gICAgcHJvdmlkZXJzOiBbe1xyXG4gICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hc2tEYXRlRGlyZWN0aXZlKSxcclxuICAgICAgICBtdWx0aTogdHJ1ZX1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXNrRGF0ZURpcmVjdGl2ZSBleHRlbmRzIE1hc2tCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIHByaXZhdGUgX2RhdGVWYWx1ZTogYW55O1xyXG5cclxuICAgIC8vIEltcGxlbWVudGluZyBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xyXG4gICAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQnXSlcclxuICAgIG9uSW5wdXQoZTogYW55KSB7XHJcbiAgICAgIHRoaXMuaW5wdXQoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvY3VzIGxvc3RcclxuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInLCBbJyRldmVudCddKVxyXG4gICAgYmx1cihlOiBhbnkpIHtcclxuXHJcbiAgICAgIC8vIE5vIG5lZWQgdG8gcGFyc2Ugb25jZSBtb3JlIGlmIHJlc3VsdCBpcyBhcyBleHBlY3RlZFxyXG4gICAgICBsZXQgYXV0b0NvcnJlY3RlZCA9IHRoaXMuX21hc2suYXBwbHlNYXNrKHRoaXMuX3R4dFZhbHVlKTtcclxuICAgICAgaWYgKGF1dG9Db3JyZWN0ZWQgIT09IHRoaXMuX3R4dFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRUZXh0KGF1dG9Db3JyZWN0ZWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDbGVhcmluZyBpZiBEYXRlIGlzIGluY29ycmVjdFxyXG4gICAgICBpZiAodGhpcy5fZGF0ZVZhbHVlID09PSBudWxsIHx8IGlzTmFOKHRoaXMuX2RhdGVWYWx1ZS5nZXRUaW1lKCkpKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tYXNrLnNldHRpbmdzLmFsbG93SW5jb21wbGV0ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRUZXh0KCcnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRpbmcgdGhlIHN0YXRlXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlU3RhdGUoKSB7XHJcbiAgICAgIGlmICghdGhpcy5fZGF0ZVZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IE1hc2tTdGF0ZS5FTVBUWTsgLy8gZW1wdHkgdmFsdWVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNOYU4odGhpcy5fZGF0ZVZhbHVlLmdldFRpbWUoKSkpIHtcclxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBNYXNrU3RhdGUuVFlQSU5HOyAvLyBVc2VyIGlucHV0IGlzIGluIHByb2dyZXNzXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBNYXNrU3RhdGUuT0s7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VuZGluZyBhIHZhbHVlIHRvIG1vZGVsXHJcbiAgICBwcm90ZWN0ZWQgdG9Nb2RlbCgpIHtcclxuICAgICAgLy8gUmV0cmlldmluZyB2YWx1ZVxyXG4gICAgICB0aGlzLl9kYXRlVmFsdWUgPSBEYXRlUGFyc2VyRm9ybWF0dGVyLnBhcnNlKHRoaXMuX3R4dFZhbHVlLCB0aGlzLl9tYXNrKTtcclxuICAgICAgdGhpcy5tYXNrVmFsdWVDaGFuZ2VkLmVtaXQodGhpcy5fZGF0ZVZhbHVlKTtcclxuICAgICAgLy8gU2VuZGluZyB0byBtb2RlbFxyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX2RhdGVWYWx1ZSk7XHJcbiAgICAgIC8vIFVwZGF0aW5nIHRoZSBzdGF0ZVxyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9cclxuICAgIHB1YmxpYyBwcm9jZXNzS2V5KGU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICByZXR1cm4gc3VwZXIucHJvY2Vzc0tleShlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQYXJzZXI6IFZpZXcgLS0+IEN0cmxcclxuICAgIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQnXSlcclxuICAgIGlucHV0KGU6IGFueSkge1xyXG4gICAgICB0aGlzLmRvSW5wdXQoZS50YXJnZXQudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvcm1hdHRlcjogQ3RybCAtLT4gVmlld1xyXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgIHRoaXMuX2RhdGVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICBjb25zdCB0eHQgPSBEYXRlUGFyc2VyRm9ybWF0dGVyLmZvcm1hdCh2YWx1ZSwgdGhpcy5fbWFzayk7ICAgICAgXHJcbiAgICAgIGlmICh0eHQgIT09IHRoaXMuX3R4dFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRUZXh0KHR4dCwgZmFsc2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBObyBuZWVkIHRvIHNlbmQgdG8gbW9kZWwsIGJlY2F1c2UgdGhpcyBwcm9jZXNzb3IgaXMgY2FsbGVkIG9uIG1vZGVsIGNoYW5nZVxyXG4gICAgICAvLyBidXQgc3RhdGUgc3RpbGwgbmVlZHMgdG8gYmUgdXBkYXRlZFxyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCd0cnVlLW1hc2stZGF0ZScpXHJcbiAgICBwdWJsaWMgc2V0IHBhdHRlcm4obTogc3RyaW5nKSB7XHJcbiAgICAgIHRoaXMuX21hc2sucGF0dGVybiA9IG07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwYXR0ZXJuKCk6IHN0cmluZyB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9tYXNrLnBhdHRlcm47XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCd0cnVlLW1hc2stc2V0dGluZ3MnKVxyXG4gICAgc2V0IHNldHRpbmdzKHY6IE1hc2tTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLl9tYXNrLnNldHRpbmdzID0gdjtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIGtleURvd24oZTogYW55KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NLZXkoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TG9jYWxlKGxvY2FsZTogTG9jYWxlKSB7XHJcbiAgICAgIHN1cGVyLnNldExvY2FsZShsb2NhbGUpO1xyXG4gICAgICB0aGlzLl9tYXNrLnVwZGF0ZU1hc2soKTsgLy8gQ2hhbmdpbmcgZm9ybWF0XHJcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl9kYXRlVmFsdWUpOyAvLyBVcGRhdGluZyB2aWV3XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLCBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByb3RlY3RlZCBpbnRsOiBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UpIHtcclxuICAgICAgc3VwZXIoX3JlbmRlcmVyLCBfZWxlbWVudFJlZiwgaW50bCk7XHJcbiAgICB9XHJcbn1cclxuIl19