UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

217 lines (216 loc) 15.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { AsiCalendarComponent } from './../asi-calendar/asi-calendar.component'; import { DefaultControlValueAccessor } from './../common/default-control-value-accessor'; import { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms'; import { Component, forwardRef, Input, ElementRef, ViewChild, Renderer2 } from '@angular/core'; import moment from 'moment'; export class AsiDatePickerComponent extends DefaultControlValueAccessor { /** * @param {?} renderer * @param {?} elementRef */ constructor(renderer, elementRef) { super(); this.renderer = renderer; this.elementRef = elementRef; /** * Label position */ this.labelPosition = 'top'; /** * placeholder if not null else will be the date display pattern */ this.placeholder = null; /** * date display pattern */ this.pattern = 'DD/MM/YYYY'; /** * min year selectable */ this.minYear = 1900; /** * max year selectable */ this.maxYear = new Date().getFullYear() + 1; /** * open automatically when the input is focused */ this.autoOpen = true; this.inputControl = new FormControl(); } /** * @return {?} */ ngOnInit() { this.renderer.addClass(this.elementRef.nativeElement, 'label-' + this.labelPosition); if (this.placeholder == null) { this.placeholder = this.pattern.toLowerCase(); } } /** * @return {?} */ ngAfterViewInit() { this.inputControl.valueChanges.subscribe((val) => { if (val === '' || val == null) { this.value = null; } else { /** @type {?} */ let momentTest = moment.utc(val, this.pattern); if (momentTest.isValid()) { if (val.length === this.pattern.length) { this.value = momentTest.toDate(); } else { this.value = { error: 'Invalid_Date', value: val }; } } else { this.value = { error: 'Invalid_Date', value: val }; } } }); } /** * @return {?} */ openCalendar() { if (this.autoOpen) { this.calendarElement.openCalendar(); } } /** * @param {?} date * @return {?} */ onDatePicked(date) { /** @type {?} */ let formattedValue = moment(date).format(this.pattern); this.inputControl.setValue(formattedValue); } /** * @param {?} value * @return {?} */ writeValue(value) { if (value != null) { /** @type {?} */ let momentValue = moment.utc(value); this._value = momentValue.toDate(); /** @type {?} */ let formattedValue = momentValue.format(this.pattern); this.inputControl.setValue(formattedValue, { emitEvent: false }); } else { this._value = value; this.inputControl.setValue(null, { emitEvent: false }); } } } AsiDatePickerComponent.decorators = [ { type: Component, args: [{ selector: 'asi-datepicker', host: { class: 'asi-component asi-datepicker' }, template: "<label class=\"input-label\" *ngIf=\"label != null\">{{ label | translate }}</label>\n<div class=\"asi-datepicker-container\">\n <input\n #input\n [attr.disabled]=\"disabled ? '' : null\"\n class=\"asi-focus-error\"\n [placeholder]=\"placeholder\"\n (click)=\"openCalendar()\"\n [formControl]=\"inputControl\"\n />\n <asi-calendar\n #calendar\n [relativeTo]=\"inputElement\"\n [disableDayOfWeek]=\"disableDayOfWeek\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minYear]=\"minYear\"\n [maxYear]=\"maxYear\"\n (onDatePicked)=\"onDatePicked($event)\"\n ></asi-calendar>\n</div>\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AsiDatePickerComponent), multi: true } ] }] } ]; /** @nocollapse */ AsiDatePickerComponent.ctorParameters = () => [ { type: Renderer2 }, { type: ElementRef } ]; AsiDatePickerComponent.propDecorators = { label: [{ type: Input }], labelPosition: [{ type: Input }], placeholder: [{ type: Input }], pattern: [{ type: Input }], minDate: [{ type: Input }], maxDate: [{ type: Input }], minYear: [{ type: Input }], maxYear: [{ type: Input }], autoOpen: [{ type: Input }], disableDayOfWeek: [{ type: Input }], inputElement: [{ type: ViewChild, args: ['input',] }], calendarElement: [{ type: ViewChild, args: ['calendar',] }] }; if (false) { /** * Label to display (is translated) * @type {?} */ AsiDatePickerComponent.prototype.label; /** * Label position * @type {?} */ AsiDatePickerComponent.prototype.labelPosition; /** * placeholder if not null else will be the date display pattern * @type {?} */ AsiDatePickerComponent.prototype.placeholder; /** * date display pattern * @type {?} */ AsiDatePickerComponent.prototype.pattern; /** * min date available * @type {?} */ AsiDatePickerComponent.prototype.minDate; /** * max date available * @type {?} */ AsiDatePickerComponent.prototype.maxDate; /** * min year selectable * @type {?} */ AsiDatePickerComponent.prototype.minYear; /** * max year selectable * @type {?} */ AsiDatePickerComponent.prototype.maxYear; /** * open automatically when the input is focused * @type {?} */ AsiDatePickerComponent.prototype.autoOpen; /** * allow you to disable day of week exemple [disableDayOfWeek]="[1, 2]"" while disabled monday and tusday * @type {?} */ AsiDatePickerComponent.prototype.disableDayOfWeek; /** @type {?} */ AsiDatePickerComponent.prototype.inputControl; /** @type {?} */ AsiDatePickerComponent.prototype.inputElement; /** @type {?} */ AsiDatePickerComponent.prototype.calendarElement; /** @type {?} */ AsiDatePickerComponent.prototype.renderer; /** @type {?} */ AsiDatePickerComponent.prototype.elementRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWRhdGVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFzaS1uZ3Rvb2xzL2xpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FzaS1kYXRlcGlja2VyL2FzaS1kYXRlcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQXlCLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEgsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBYzVCLE1BQU0sNkJBQThCLFNBQVEsMkJBQTJCOzs7OztJQWlDckUsWUFBb0IsUUFBbUIsRUFBVSxVQUFzQjtRQUNyRSxLQUFLLEVBQUUsQ0FBQztRQURVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZOzs7OzZCQTdCd0IsS0FBSzs7OzsyQkFFN0UsSUFBSTs7Ozt1QkFHUixZQUFZOzs7O3VCQVFKLElBQUk7Ozs7dUJBR0osSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDOzs7O3dCQUduQyxJQUFJOzRCQUtULElBQUksV0FBVyxFQUFFO0tBTy9COzs7O0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckYsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENB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O3FCQUNaO2lCQUNGO2FBQ0Y7Ozs7WUFmb0YsU0FBUztZQUF2RCxVQUFVOzs7b0JBa0I5QyxLQUFLOzRCQUVMLEtBQUs7MEJBRUwsS0FBSztzQkFHTCxLQUFLO3NCQUdMLEtBQUs7c0JBRUwsS0FBSztzQkFHTCxLQUFLO3NCQUdMLEtBQUs7dUJBR0wsS0FBSzsrQkFHTCxLQUFLOzJCQUlMLFNBQVMsU0FBQyxPQUFPOzhCQUNqQixTQUFTLFNBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzaUNhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi8uLi9hc2ktY2FsZW5kYXIvYXNpLWNhbGVuZGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJy4vLi4vY29tbW9uL2RlZmF1bHQtY29udHJvbC12YWx1ZS1hY2Nlc3Nvcic7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgRWxlbWVudFJlZiwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhc2ktZGF0ZXBpY2tlcicsXHJcbiAgaG9zdDogeyBjbGFzczogJ2FzaS1jb21wb25lbnQgYXNpLWRhdGVwaWNrZXInIH0sXHJcbiAgdGVtcGxhdGVVcmw6ICdhc2ktZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBc2lEYXRlUGlja2VyQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc2lEYXRlUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgRGVmYXVsdENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICAvKiogTGFiZWwgdG8gZGlzcGxheSAoaXMgdHJhbnNsYXRlZCkgKi9cclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBMYWJlbCBwb3NpdGlvbiAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsUG9zaXRpb246ICd0b3AnIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2JvdHRvbS1jZW50ZXInIHwgJ3RvcC1jZW50ZXInID0gJ3RvcCc7XHJcbiAgLyoqIHBsYWNlaG9sZGVyIGlmIG5vdCBudWxsIGVsc2Ugd2lsbCBiZSB0aGUgZGF0ZSBkaXNwbGF5IHBhdHRlcm4gKi9cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IG51bGw7XHJcblxyXG4gIC8qKiBkYXRlIGRpc3BsYXkgcGF0dGVybiAqL1xyXG4gIEBJbnB1dCgpIHBhdHRlcm4gPSAnREQvTU0vWVlZWSc7XHJcblxyXG4gIC8qKiBtaW4gZGF0ZSBhdmFpbGFibGUgKi9cclxuICBASW5wdXQoKSBtaW5EYXRlOiBEYXRlO1xyXG4gIC8qKiBtYXggZGF0ZSBhdmFpbGFibGUgKi9cclxuICBASW5wdXQoKSBtYXhEYXRlOiBEYXRlO1xyXG5cclxuICAvKiogbWluIHllYXIgc2VsZWN0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIG1pblllYXI6IG51bWJlciA9IDE5MDA7XHJcblxyXG4gIC8qKiBtYXggeWVhciBzZWxlY3RhYmxlICovXHJcbiAgQElucHV0KCkgbWF4WWVhcjogbnVtYmVyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICsgMTtcclxuXHJcbiAgLyoqIG9wZW4gYXV0b21hdGljYWxseSB3aGVuIHRoZSBpbnB1dCBpcyBmb2N1c2VkKi9cclxuICBASW5wdXQoKSBhdXRvT3BlbiA9IHRydWU7XHJcblxyXG4gIC8qKiBhbGxvdyB5b3UgdG8gZGlzYWJsZSBkYXkgb2Ygd2VlayBleGVtcGxlIFtkaXNhYmxlRGF5T2ZXZWVrXT1cIlsxLCAyXVwiXCIgd2hpbGUgZGlzYWJsZWQgbW9uZGF5IGFuZCB0dXNkYXkgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlRGF5T2ZXZWVrOiBudW1iZXIgfCBBcnJheTxudW1iZXI+O1xyXG5cclxuICBpbnB1dENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXInKSBjYWxlbmRhckVsZW1lbnQ6IEFzaUNhbGVuZGFyQ29tcG9uZW50O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2xhYmVsLScgKyB0aGlzLmxhYmVsUG9zaXRpb24pO1xyXG4gICAgaWYgKHRoaXMucGxhY2Vob2xkZXIgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5wYXR0ZXJuLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmlucHV0Q29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgaWYgKHZhbCA9PT0gJycgfHwgdmFsID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgbW9tZW50VGVzdCA9IG1vbWVudC51dGModmFsLCB0aGlzLnBhdHRlcm4pO1xyXG4gICAgICAgIGlmIChtb21lbnRUZXN0LmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgaWYgKHZhbC5sZW5ndGggPT09IHRoaXMucGF0dGVybi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG1vbWVudFRlc3QudG9EYXRlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0ge1xyXG4gICAgICAgICAgICAgIGVycm9yOiAnSW52YWxpZF9EYXRlJyxcclxuICAgICAgICAgICAgICB2YWx1ZTogdmFsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSB7XHJcbiAgICAgICAgICAgIGVycm9yOiAnSW52YWxpZF9EYXRlJyxcclxuICAgICAgICAgICAgdmFsdWU6IHZhbFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3BlbkNhbGVuZGFyKCkge1xyXG4gICAgaWYgKHRoaXMuYXV0b09wZW4pIHtcclxuICAgICAgdGhpcy5jYWxlbmRhckVsZW1lbnQub3BlbkNhbGVuZGFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRhdGVQaWNrZWQoZGF0ZTogRGF0ZSkge1xyXG4gICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gbW9tZW50KGRhdGUpLmZvcm1hdCh0aGlzLnBhdHRlcm4pO1xyXG4gICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUoZm9ybWF0dGVkVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSkge1xyXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgbGV0IG1vbWVudFZhbHVlID0gbW9tZW50LnV0Yyh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gbW9tZW50VmFsdWUudG9EYXRlKCk7XHJcbiAgICAgIGxldCBmb3JtYXR0ZWRWYWx1ZSA9IG1vbWVudFZhbHVlLmZvcm1hdCh0aGlzLnBhdHRlcm4pO1xyXG4gICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZShmb3JtYXR0ZWRWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=