@true-directive/grid
Version:
Angular Data Grid from Yopsilon.
152 lines • 16.6 kB
JavaScript
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