@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
JavaScript
/**
* @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=