UNPKG

@ngx-performance-ui/ui

Version:
222 lines 19 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { ChangeDetectionStrategy, Component, ElementRef, forwardRef, Injector, Input, ViewChild, ViewEncapsulation, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { AbstractNgModelComponent, EventListenerState, uuid } from '@ngx-performance-ui/core'; import { Select } from '@ngxs/store'; import * as enLocale from 'date-fns/locale/en'; import * as trLocale from 'date-fns/locale/tr'; import { NgDatepickerComponent } from 'ng2-datepicker'; import { Observable, Subject } from 'rxjs'; import { filter, takeUntil } from 'rxjs/operators'; export class DatePickerComponent extends AbstractNgModelComponent { /** * @param {?} injector */ constructor(injector) { super(injector); this.injector = injector; this.locale = 'tr'; this.position = 'bottom-right'; this.barTitleIfEmpty = 'Click to select a date'; this.placeholder = 'Click to select a date'; this.addClass = 'form-control'; this.labelClass = ''; this.label = 'Start Date'; this.destroy$ = new Subject(); this.closable = false; } /** * @return {?} */ get options() { return { minYear: 1890, maxYear: 2040, displayFormat: this.displayFormat, barTitleFormat: 'MMMM YYYY', dayNamesFormat: 'dd', firstCalendarDay: 1, // 0 - Sunday, 1 - Monday locale: this.locale === 'tr' ? trLocale : enLocale, barTitleIfEmpty: this.barTitleIfEmpty, placeholder: this.placeholder, // HTML input placeholder attribute (default: '') addClass: this.addClass, // Optional, value to pass on to [ngClass] on the input field fieldId: `p-date-picker-${uuid()}`, }; } /** * @return {?} */ get displayFormat() { return this.locale === 'tr' ? 'dd.MM.yyyy' : 'MMM d, y'; } /** * @return {?} */ get date() { return this.value ? new Date(this.value) : null; } /** * @private * @return {?} */ subscribeToEvents() { this.click$ .pipe(takeUntil(this.destroy$), filter((/** * @param {?} event * @return {?} */ event => event && this.closable && !this.group.nativeElement.contains(event.target) && !document.querySelector('#datepicker').contains((/** @type {?} */ (event.target)))))) .subscribe((/** * @return {?} */ () => this.toggle())); } /** * @return {?} */ ngOnDestroy() { this.destroy$.next(); } /** * @return {?} */ onClick() { if (this.datePicker.isOpened) return; this.toggle(); } /** * @return {?} */ toggle() { if (this.datePicker.isOpened) { this.hide(); } else { this.show(); } setTimeout((/** * @return {?} */ () => this.cdRef.detectChanges()), 0); } /** * @return {?} */ show() { this.flip(); this.datePicker.toggle(); this.closable = false; this.subscribeToEvents(); setTimeout((/** * @return {?} */ () => { this.closable = true; }), 500); } /** * @return {?} */ hide() { this.datePicker.toggle(); this.destroy$.next(); } /** * @return {?} */ flip() { const { bottom, top } = ((/** @type {?} */ (this.group.nativeElement))).getBoundingClientRect(); const { innerHeight } = window; if (bottom + 330 > innerHeight && this.position.indexOf('bottom') > -1) { this.position = (/** @type {?} */ (this.position.replace('bottom', 'top'))); this.cdRef.detectChanges(); } else if (top - 330 < 0 && this.position.indexOf('top') > -1) { this.position = (/** @type {?} */ (this.position.replace('top', 'bottom'))); this.cdRef.detectChanges(); } } /** * @return {?} */ clear() { this.value = null; } } DatePickerComponent.decorators = [ { type: Component, args: [{ selector: 'p-datepicker', template: "<div class=\"datepicker-container\">\n <label class=\"{{ labelClass }}\" [attr.for]=\"options.fieldId\">{{ label }}</label>\n <div #group class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control bg-white\"\n [readonly]=\"true\"\n [attr.placeholder]=\"placeholder\"\n [value]=\"date | date: displayFormat\"\n (click)=\"onClick()\"\n />\n <fa-icon *ngIf=\"value\" [icon]=\"['fas', 'times']\" class=\"text-secondary\" (click)=\"clear()\"></fa-icon>\n <div class=\"input-group-prepend\">\n <span class=\"input-group-text bg-white\" (click)=\"toggle()\">\n <fa-icon *ngIf=\"value\" [icon]=\"['fas', 'calendar-day']\"></fa-icon>\n </span>\n </div>\n </div>\n <ng-datepicker\n id=\"datepicker\"\n #datePicker\n [headless]=\"true\"\n [position]=\"position\"\n [options]=\"options\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"destroy$.next()\"\n >\n </ng-datepicker>\n</div>\n", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => DatePickerComponent)), multi: true, }, ] }] } ]; /** @nocollapse */ DatePickerComponent.ctorParameters = () => [ { type: Injector } ]; DatePickerComponent.propDecorators = { locale: [{ type: Input }], position: [{ type: Input }], barTitleIfEmpty: [{ type: Input }], placeholder: [{ type: Input }], addClass: [{ type: Input }], labelClass: [{ type: Input }], label: [{ type: Input }], datePicker: [{ type: ViewChild, args: ['datePicker',] }], group: [{ type: ViewChild, args: ['group', { read: ElementRef },] }] }; tslib_1.__decorate([ Select(EventListenerState.getOne('click')), tslib_1.__metadata("design:type", Observable) ], DatePickerComponent.prototype, "click$", void 0); if (false) { /** @type {?} */ DatePickerComponent.prototype.locale; /** @type {?} */ DatePickerComponent.prototype.position; /** @type {?} */ DatePickerComponent.prototype.barTitleIfEmpty; /** @type {?} */ DatePickerComponent.prototype.placeholder; /** @type {?} */ DatePickerComponent.prototype.addClass; /** @type {?} */ DatePickerComponent.prototype.labelClass; /** @type {?} */ DatePickerComponent.prototype.label; /** @type {?} */ DatePickerComponent.prototype.click$; /** @type {?} */ DatePickerComponent.prototype.datePicker; /** @type {?} */ DatePickerComponent.prototype.group; /** @type {?} */ DatePickerComponent.prototype.destroy$; /** @type {?} */ DatePickerComponent.prototype.closable; /** @type {?} */ DatePickerComponent.prototype.injector; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LXBlcmZvcm1hbmNlLXVpL3VpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sS0FBSyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQXFCLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWVuRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsd0JBQWdEOzs7O0lBa0R2RixZQUFtQixRQUFrQjtRQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBakQ1QixXQUFNLEdBQWdCLElBQUksQ0FBQztRQUUzQixhQUFRLEdBQThELGNBQWMsQ0FBQztRQUVyRixvQkFBZSxHQUFXLHdCQUF3QixDQUFDO1FBRW5ELGdCQUFXLEdBQVcsd0JBQXdCLENB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TUFBTTtnQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVTs7O3dCQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixFQUFDO3dCQUNsRCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjthQUNGOzs7O1lBMUJDLFFBQVE7OztxQkE0QlAsS0FBSzt1QkFFTCxLQUFLOzhCQUVMLEtBQUs7MEJBRUwsS0FBSzt1QkFFTCxLQUFLO3lCQUVMLEtBQUs7b0JBRUwsS0FBSzt5QkFLTCxTQUFTLFNBQUMsWUFBWTtvQkFFdEIsU0FBUyxTQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O0FBSnhDO0lBREMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztzQ0FDbkMsVUFBVTttREFBYTs7O0lBZi9CLHFDQUFvQzs7SUFFcEMsdUNBQThGOztJQUU5Riw4Q0FBNEQ7O0lBRTVELDBDQUF3RDs7SUFFeEQsdUNBQTJDOztJQUUzQyx5Q0FBaUM7O0lBRWpDLG9DQUFzQzs7SUFFdEMscUNBQytCOztJQUUvQix5Q0FBMkQ7O0lBRTNELG9DQUE0RDs7SUFFNUQsdUNBQStCOztJQUUvQix1Q0FBMEI7O0lBMEJkLHVDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFic3RyYWN0TmdNb2RlbENvbXBvbmVudCwgRXZlbnRMaXN0ZW5lclN0YXRlLCB1dWlkIH0gZnJvbSAnQG5neC1wZXJmb3JtYW5jZS11aS9jb3JlJztcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCAqIGFzIGVuTG9jYWxlIGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbic7XG5pbXBvcnQgKiBhcyB0ckxvY2FsZSBmcm9tICdkYXRlLWZucy9sb2NhbGUvdHInO1xuaW1wb3J0IHsgRGF0ZXBpY2tlck9wdGlvbnMsIE5nRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25nMi1kYXRlcGlja2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwLWRhdGVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0TmdNb2RlbENvbXBvbmVudDxEYXRlIHwgc3RyaW5nIHwgbnVtYmVyPiB7XG4gIEBJbnB1dCgpIGxvY2FsZTogJ3RyJyB8ICdlbicgPSAndHInO1xuXG4gIEBJbnB1dCgpIHBvc2l0aW9uOiAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCcgfCAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgPSAnYm90dG9tLXJpZ2h0JztcblxuICBASW5wdXQoKSBiYXJUaXRsZUlmRW1wdHk6IHN0cmluZyA9ICdDbGljayB0byBzZWxlY3QgYSBkYXRlJztcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ0NsaWNrIHRvIHNlbGVjdCBhIGRhdGUnO1xuXG4gIEBJbnB1dCgpIGFkZENsYXNzOiBzdHJpbmcgPSAnZm9ybS1jb250cm9sJztcblxuICBASW5wdXQoKSBsYWJlbENsYXNzOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJ1N0YXJ0IERhdGUnO1xuXG4gIEBTZWxlY3QoRXZlbnRMaXN0ZW5lclN0YXRlLmdldE9uZSgnY2xpY2snKSlcbiAgY2xpY2skOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyOiBOZ0RhdGVwaWNrZXJDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnZ3JvdXAnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZ3JvdXA6IEVsZW1lbnRSZWY7XG5cbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNsb3NhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IG9wdGlvbnMoKTogRGF0ZXBpY2tlck9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBtaW5ZZWFyOiAxODkwLFxuICAgICAgbWF4WWVhcjogMjA0MCxcbiAgICAgIGRpc3BsYXlGb3JtYXQ6IHRoaXMuZGlzcGxheUZvcm1hdCxcbiAgICAgIGJhclRpdGxlRm9ybWF0OiAnTU1NTSBZWVlZJyxcbiAgICAgIGRheU5hbWVzRm9ybWF0OiAnZGQnLFxuICAgICAgZmlyc3RDYWxlbmRhckRheTogMSwgLy8gMCAtIFN1bmRheSwgMSAtIE1vbmRheVxuICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSA9PT0gJ3RyJyA/IHRyTG9jYWxlIDogZW5Mb2NhbGUsXG4gICAgICBiYXJUaXRsZUlmRW1wdHk6IHRoaXMuYmFyVGl0bGVJZkVtcHR5LFxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsIC8vIEhUTUwgaW5wdXQgcGxhY2Vob2xkZXIgYXR0cmlidXRlIChkZWZhdWx0OiAnJylcbiAgICAgIGFkZENsYXNzOiB0aGlzLmFkZENsYXNzLCAvLyBPcHRpb25hbCwgdmFsdWUgdG8gcGFzcyBvbiB0byBbbmdDbGFzc10gb24gdGhlIGlucHV0IGZpZWxkXG4gICAgICBmaWVsZElkOiBgcC1kYXRlLXBpY2tlci0ke3V1aWQoKX1gLCAvLyBJRCB0byBhc3NpZ24gdG8gdGhlIGlucHV0IGZpZWxkLiBEZWZhdWx0cyB0byBkYXRlcGlja2VyLTxjb3VudGVyPixcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGUgPT09ICd0cicgPyAnZGQuTU0ueXl5eScgOiAnTU1NIGQsIHknO1xuICB9XG5cbiAgZ2V0IGRhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPyBuZXcgRGF0ZSh0aGlzLnZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNsaWNrJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgZmlsdGVyKFxuICAgICAgICAgIGV2ZW50ID0+XG4gICAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgdGhpcy5jbG9zYWJsZSAmJlxuICAgICAgICAgICAgIXRoaXMuZ3JvdXAubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RhdGVwaWNrZXInKS5jb250YWlucyhldmVudC50YXJnZXQgYXMgYW55KSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGUoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIG9uQ2xpY2soKSB7XG4gICAgaWYgKHRoaXMuZGF0ZVBpY2tlci5pc09wZW5lZCkgcmV0dXJuO1xuXG4gICAgdGhpcy50b2dnbGUoKTtcbiAgfVxuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5kYXRlUGlja2VyLmlzT3BlbmVkKSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSwgMCk7XG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMuZmxpcCgpO1xuICAgIHRoaXMuZGF0ZVBpY2tlci50b2dnbGUoKTtcblxuICAgIHRoaXMuY2xvc2FibGUgPSBmYWxzZTtcbiAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNsb3NhYmxlID0gdHJ1ZTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLmRhdGVQaWNrZXIudG9nZ2xlKCk7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gIH1cblxuICBmbGlwKCkge1xuICAgIGNvbnN0IHsgYm90dG9tLCB0b3AgfSA9ICh0aGlzLmdyb3VwLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHsgaW5uZXJIZWlnaHQgfSA9IHdpbmRvdztcblxuICAgIGlmIChib3R0b20gKyAzMzAgPiBpbm5lckhlaWdodCAmJiB0aGlzLnBvc2l0aW9uLmluZGV4T2YoJ2JvdHRvbScpID4gLTEpIHtcbiAgICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uLnJlcGxhY2UoJ2JvdHRvbScsICd0b3AnKSBhcyBhbnk7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2UgaWYgKHRvcCAtIDMzMCA8IDAgJiYgdGhpcy5wb3NpdGlvbi5pbmRleE9mKCd0b3AnKSA+IC0xKSB7XG4gICAgICB0aGlzLnBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbi5yZXBsYWNlKCd0b3AnLCAnYm90dG9tJykgYXMgYW55O1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cbn1cbiJdfQ==