UNPKG

@true-directive/grid

Version:

Angular Data Grid from Yopsilon.

123 lines 14.9 kB
import * as tslib_1 from "tslib"; /** * Copyright (c) 2018-2019 Aleksey Melnikov, True Directive Company. * @link https://truedirective.com/ * @license MIT */ import { Component, Input, Renderer2, ElementRef, ViewChild, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { CalendarComponent } from './calendar.component'; import { DropdownBaseComponent } from './dropdown-base.component'; import { MaskDateDirective } from '../mask/mask-date.directive'; import { InternationalizationService } from '../internationalization/internationalization.service'; import { Mask } from '@true-directive/base'; import { Keys } from '@true-directive/base'; /** * Datepicker component */ var DatepickerComponent = /** @class */ (function (_super) { tslib_1.__extends(DatepickerComponent, _super); function DatepickerComponent(intl, _elementRef, _renderer) { var _this = _super.call(this, _elementRef, _renderer) || this; _this.intl = intl; _this._elementRef = _elementRef; _this._renderer = _renderer; _this._pattern = ''; _this.showError = true; _this.inputClass = ''; return _this; } DatepickerComponent_1 = DatepickerComponent; Object.defineProperty(DatepickerComponent.prototype, "pattern", { get: function () { return this._pattern; }, set: function (s) { this._pattern = s; this.checkPattern(); }, enumerable: true, configurable: true }); DatepickerComponent.prototype.checkPattern = function () { var hasDateComponents = false; var mask = Mask.maskWithPattern(this.intl, this._pattern); mask.sections.forEach(function (section) { if (section.sectionType.datePart === 'd' || section.sectionType.datePart === 'm' || section.sectionType.datePart === 'y' || section.sectionType.datePart === 'yy' || section.sectionType.datePart === 'yyyy') { hasDateComponents = true; } }); this.usePopup = hasDateComponents; }; DatepickerComponent.prototype.getIcon = function () { if (!this.usePopup) { return ''; } return 'true-icon-calendar-empty'; }; DatepickerComponent.prototype.dateClick = function (e) { this.popup.closePopup(); }; DatepickerComponent.prototype.escape = function (e) { this.popup.closePopup(); }; // Overriding this method to send focus in the calendar DatepickerComponent.prototype.focusPopup = function () { this.calendar.setFocus(); }; DatepickerComponent.prototype.acceptKey = function (e) { this.maskDateDirective.keyDown(Keys.generateEvent(this.input.nativeElement, -1, Keys.keyChar(e), e.shiftKey, e.ctrlKey)); }; var DatepickerComponent_1; tslib_1.__decorate([ Input('pattern'), tslib_1.__metadata("design:type", String), tslib_1.__metadata("design:paramtypes", [String]) ], DatepickerComponent.prototype, "pattern", null); tslib_1.__decorate([ Input('error'), tslib_1.__metadata("design:type", String) ], DatepickerComponent.prototype, "error", void 0); tslib_1.__decorate([ Input('showError'), tslib_1.__metadata("design:type", Boolean) ], DatepickerComponent.prototype, "showError", void 0); tslib_1.__decorate([ Input('inputClass'), tslib_1.__metadata("design:type", String) ], DatepickerComponent.prototype, "inputClass", void 0); tslib_1.__decorate([ ViewChild('calendar', { static: false }), tslib_1.__metadata("design:type", CalendarComponent) ], DatepickerComponent.prototype, "calendar", void 0); tslib_1.__decorate([ ViewChild('input', { static: true }), tslib_1.__metadata("design:type", Object) ], DatepickerComponent.prototype, "input", void 0); tslib_1.__decorate([ ViewChild('input', { static: true, read: MaskDateDirective }), tslib_1.__metadata("design:type", MaskDateDirective) ], DatepickerComponent.prototype, "maskDateDirective", void 0); DatepickerComponent = DatepickerComponent_1 = tslib_1.__decorate([ Component({ selector: 'true-datepicker', template: "<true-input-wrapper\r\n (btnClick)=\"btnClick($event)\"\r\n class=\"true-datepicker__input\"\r\n [class.true-input_popup-visible]=\"popupVisible\"\r\n [disabled]=\"disabled\"\r\n [error]=\"error\"\r\n [showError]=\"showError\"\r\n [icon]=\"getIcon()\"><input #input\r\n [ngClass]=\"inputClass\"\r\n [true-mask-date]=\"pattern\"\r\n [readonly]=\"disableTextEditor\"\r\n [attr.disabled]=\"disabled\"\r\n [(ngModel)]=\"value\"\r\n (blur)=\"inputBlur($event)\"\r\n (focus)=\"inputFocus($event)\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (keydown)=\"inputKeyDown($event)\" />\r\n</true-input-wrapper><true-popup #popup (close)=\"popupClose($event)\">\r\n <true-calendar #calendar\r\n *ngIf=\"popupVisible\"\r\n [(ngModel)]=\"value\"\r\n (escape)=\"escape($event)\"\r\n (dateClick)=\"dateClick($event)\">\r\n </true-calendar>\r\n</true-popup>\r\n", providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return DatepickerComponent_1; }), multi: true }], styles: ["\n :host {\n padding: 0;\n }\n .true-datepicker__input {\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n input {\n box-sizing: border-box;\n width: 100%;\n margin: 0;\n }\n "] }), tslib_1.__metadata("design:paramtypes", [InternationalizationService, ElementRef, Renderer2]) ], DatepickerComponent); return DatepickerComponent; }(DropdownBaseComponent)); export { DatepickerComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdHJ1ZS1kaXJlY3RpdmUvZ3JpZC8iLCJzb3VyY2VzIjpbInNyYy9jb250cm9scy9kYXRlcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7RUFJRTtBQUNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQyxTQUFTLEVBQUUsVUFBVSxFQUUxRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUVuRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTVDOztHQUVHO0FBMkJIO0lBQXlDLCtDQUFxQjtJQTRFNUQsNkJBQ1ksSUFBaUMsRUFDakMsV0FBdUIsRUFDdkIsU0FBb0I7UUFIaEMsWUFJSSxrQkFBTSxXQUFXLEVBQUUsU0FBUyxDQUFDLFNBQ2hDO1FBSlcsVUFBSSxHQUFKLElBQUksQ0FBNkI7UUFDakMsaUJBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsZUFBUyxHQUFULFNBQVMsQ0FBVztRQTdFaEMsY0FBUSxHQUFHLEVBQUUsQ0FBQztRQWdCZCxlQUFTLEdBQVksSUFBSSxDQUFDO1FBRzFCLGdCQUFVLEdBQVcsRUFBRSxDQUFDOztJQTREeEIsQ0FBQzs0QkFqRlUsbUJBQW1CO0lBSzlCLHNCQUFJLHdDQUFP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Q2xELEtBQUssRUFBRSxJQUFJO2lCQUFDLENBQUM7cUJBcEJSLDRQQWdCUjtTQUtBLENBQUM7aURBOEVnQiwyQkFBMkI7WUFDcEIsVUFBVTtZQUNaLFNBQVM7T0EvRXJCLG1CQUFtQixDQWtGL0I7SUFBRCwwQkFBQztDQUFBLEFBbEZELENBQXlDLHFCQUFxQixHQWtGN0Q7U0FsRlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IEFsZWtzZXkgTWVsbmlrb3YsIFRydWUgRGlyZWN0aXZlIENvbXBhbnkuXHJcbiAqIEBsaW5rIGh0dHBzOi8vdHJ1ZWRpcmVjdGl2ZS5jb20vXHJcbiAqIEBsaWNlbnNlIE1JVFxyXG4qL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEhvc3RCaW5kaW5nLCBFdmVudEVtaXR0ZXIsIFJlbmRlcmVyMiwgRWxlbWVudFJlZixcclxuICAgICAgICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgIFZpZXdDaGlsZCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERyb3Bkb3duQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vZHJvcGRvd24tYmFzZS5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgTWFza0RhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9tYXNrL21hc2stZGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcm5hdGlvbmFsaXphdGlvbi9pbnRlcm5hdGlvbmFsaXphdGlvbi5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IE1hc2sgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcbmltcG9ydCB7IEtleXMgfSBmcm9tICdAdHJ1ZS1kaXJlY3RpdmUvYmFzZSc7XHJcblxyXG4vKipcclxuICogRGF0ZXBpY2tlciBjb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1ZS1kYXRlcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgLyogcmVtb3ZlZDogIDpob3N0IHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9IC0gaW52YWxpZCBpT1MgcmVuZGVyICovXHJcbiAgc3R5bGVzOiBbYFxyXG4gICAgOmhvc3Qge1xyXG4gICAgICBwYWRkaW5nOiAwO1xyXG4gICAgfVxyXG4gICAgLnRydWUtZGF0ZXBpY2tlcl9faW5wdXQge1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICBtYXJnaW46IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaW5wdXQge1xyXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgbWFyZ2luOiAwO1xyXG4gICAgfVxyXG4gIGBdLFxyXG4gIHByb3ZpZGVyczogW3tcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVwaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZX1dXHJcbiAgfSlcclxuZXhwb3J0IGNsYXNzIERhdGVwaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBEcm9wZG93bkJhc2VDb21wb25lbnQge1xyXG5cclxuICBfcGF0dGVybiA9ICcnO1xyXG5cclxuICBASW5wdXQoJ3BhdHRlcm4nKVxyXG4gIGdldCBwYXR0ZXJuKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGF0dGVybjtcclxuICB9XHJcblxyXG4gIHNldCBwYXR0ZXJuKHM6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGF0dGVybiA9IHM7XHJcbiAgICB0aGlzLmNoZWNrUGF0dGVybigpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCdlcnJvcicpXHJcbiAgZXJyb3I6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCdzaG93RXJyb3InKVxyXG4gIHNob3dFcnJvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgnaW5wdXRDbGFzcycpXHJcbiAgaW5wdXRDbGFzczogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJywge3N0YXRpYzogZmFsc2V9KVxyXG4gIGNhbGVuZGFyOiBDYWxlbmRhckNvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7c3RhdGljOiB0cnVlfSlcclxuICBpbnB1dDogYW55O1xyXG5cclxuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBNYXNrRGF0ZURpcmVjdGl2ZSB9KVxyXG4gIG1hc2tEYXRlRGlyZWN0aXZlOiBNYXNrRGF0ZURpcmVjdGl2ZTtcclxuXHJcbiAgY2hlY2tQYXR0ZXJuKCkge1xyXG5cclxuICAgIGxldCBoYXNEYXRlQ29tcG9uZW50cyA9IGZhbHNlO1xyXG4gICAgY29uc3QgbWFzazogTWFzayA9IE1hc2subWFza1dpdGhQYXR0ZXJuKHRoaXMuaW50bCwgdGhpcy5fcGF0dGVybik7XHJcblxyXG4gICAgbWFzay5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICBpZiAoc2VjdGlvbi5zZWN0aW9uVHlwZS5kYXRlUGFydCA9PT0gJ2QnIHx8XHJcbiAgICAgICAgICBzZWN0aW9uLnNlY3Rpb25UeXBlLmRhdGVQYXJ0ID09PSAnbScgfHxcclxuICAgICAgICAgIHNlY3Rpb24uc2VjdGlvblR5cGUuZGF0ZVBhcnQgPT09ICd5JyB8fFxyXG4gICAgICAgICAgc2VjdGlvbi5zZWN0aW9uVHlwZS5kYXRlUGFydCA9PT0gJ3l5JyB8fFxyXG4gICAgICAgICAgc2VjdGlvbi5zZWN0aW9uVHlwZS5kYXRlUGFydCA9PT0gJ3l5eXknXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgaGFzRGF0ZUNvbXBvbmVudHMgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMudXNlUG9wdXAgPSBoYXNEYXRlQ29tcG9uZW50cztcclxuICB9XHJcblxyXG4gIGdldEljb24oKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy51c2VQb3B1cCkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3RydWUtaWNvbi1jYWxlbmRhci1lbXB0eSc7XHJcbiAgfVxyXG5cclxuICBkYXRlQ2xpY2soZTogYW55KSB7XHJcbiAgICB0aGlzLnBvcHVwLmNsb3NlUG9wdXAoKTtcclxuICB9XHJcblxyXG4gIGVzY2FwZShlOiBhbnkpIHtcclxuICAgIHRoaXMucG9wdXAuY2xvc2VQb3B1cCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gT3ZlcnJpZGluZyB0aGlzIG1ldGhvZCB0byBzZW5kIGZvY3VzIGluIHRoZSBjYWxlbmRhclxyXG4gIGZvY3VzUG9wdXAoKSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyLnNldEZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBhY2NlcHRLZXkoZTogYW55KSB7XHJcbiAgICB0aGlzLm1hc2tEYXRlRGlyZWN0aXZlLmtleURvd24oXHJcbiAgICAgIEtleXMuZ2VuZXJhdGVFdmVudCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIC0xLCBLZXlzLmtleUNoYXIoZSksIGUuc2hpZnRLZXksIGUuY3RybEtleSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBpbnRsOiBJbnRlcm5hdGlvbmFsaXphdGlvblNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcm90ZWN0ZWQgX3JlbmRlcmVyOiBSZW5kZXJlcjIpIHtcclxuICAgICAgc3VwZXIoX2VsZW1lbnRSZWYsIF9yZW5kZXJlcik7XHJcbiAgfVxyXG59XHJcbiJdfQ==