ngx-mat-calendar
Version:
A datepicker with nepali and english calendar support
724 lines • 109 kB
JavaScript
import { Component, EventEmitter, Input, Optional, Output, Self, ViewChild, ViewEncapsulation } from '@angular/core';
import { FormControl, NgControl } from '@angular/forms';
import { MatMenuTrigger } from '@angular/material/menu';
import * as moment_ from 'moment';
import { Subject } from 'rxjs';
import { CalendarService } from '../../services/calendar.service';
import { DateFormat, DateType } from '../../model/calendar.model';
import { CalendarErrorStateMatcher } from '../../validators/calendar-error-state-matcher';
import * as language from '../../data/language.data';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { MatSnackBar } from '@angular/material/snack-bar';
const moment = moment_;
export class DateComponent {
constructor(dpService, snackbar, controlDir) {
this.dpService = dpService;
this.snackbar = snackbar;
this.controlDir = controlDir;
this.onDateChanged = new EventEmitter();
this.matcher = new CalendarErrorStateMatcher();
this.dateFormat = DateFormat.ddMMyyyy;
this.datemask = [/\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/];
this.stateChanges = new Subject();
///////////////////////////////////////////
this.changeDateTooltip = 'Toggle Date Type';
this.showCalendarTooltip = 'Show Calendar';
this.clearTooltip = 'Clear date';
this.errorMessage = '';
this.isPickerVisible = false;
this.dateObject = [];
///////////////////////////////////////////////
// private _dateType: DateType = DateType.AD;
// private _dateFormatAD: DateFormat = DateFormat.ddMMyyyy;
// private _dateFormatBS: DateFormat = DateFormat.yyyyMMdd;
this._withTime = false;
this._placeholder = "Date";
this._readonly = false;
this._closeOnClick = true;
this._isRange = false;
this._language = 0;
this._required = false;
this.lastEmitted = null;
this.manualChanged = true;
this._param = { dateType: DateType.AD, dateFormatAD: DateFormat.ddMMyyyy, dateFormatBS: DateFormat.yyyyMMdd };
this.propagateChange = (_) => {
};
this.onTouched = () => { };
this.onBlur = (event) => {
if (event.target.value === "" || event.target.value.toString().includes("_")) {
this.setDateValueByString(event.target.value, this.dateFormat, this._param.dateType);
}
};
this.formControl = new FormControl();
controlDir.valueAccessor = this;
this.caption = language.label;
}
set param(val) {
this._param = JSON.parse(val);
this.changeDateFormat(this._param.dateType, this._param.dateType === DateType.AD ? this._param.dateFormatAD : this._param.dateFormatBS);
this.setValue(false, false);
}
get param() {
return this._param;
}
// @Input() set dateType(val: DateType) {
// this._dateType = val;
// console.log(this._dateType, "datet")
// this.changeDateFormat(val);
// } get dateType(): DateType {
// return this._dateType;
// }
// @Input() set dateFormatAD(val: DateFormat) {
// this._dateFormatAD = val;
// } get dateFormatAD(): DateFormat {
// return this._dateFormatAD;
// }
// @Input() set dateFormatBS(val: DateFormat) {
// this._dateFormatBS = val;
// } get dateFormatBS(): DateFormat {
// return this._dateFormatBS;
// }
set required(val) {
this._required = coerceBooleanProperty(val);
}
get required() {
return this._required;
}
pushTimeMask(mask) {
mask.push(' ');
mask.push(/\d/);
mask.push(/\d/);
mask.push(':');
mask.push(/\d/);
mask.push(/\d/);
return mask;
}
changeDateFormat(dType, val) {
if (!val) {
if (dType === DateType.AD) {
val = this._param.dateFormatAD;
}
else {
val = this._param.dateFormatBS;
}
}
let mask;
if (dType === DateType.AD) {
if (val === DateFormat.MMddyyyy || val === DateFormat.ddMMyyyy) {
mask = [/\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/];
}
else {
mask = [/\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/];
}
}
else {
if (val === DateFormat.MMddyyyy || val === DateFormat.ddMMyyyy) {
mask = [/\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/];
}
else {
mask = [/\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/];
}
}
if (this.withTime) {
mask = this.pushTimeMask(mask);
}
if (this.isRange) {
const mask1 = [...mask];
const mask2 = [...mask];
const seperator = [' ', '|', ' '];
this.datemask = [...mask1, ...seperator, ...mask2];
}
else {
this.datemask = [...mask];
}
this.dateFormat = val;
}
set withTime(val) {
this._withTime = coerceBooleanProperty(val);
}
get withTime() {
return this._withTime;
}
set placeholder(val) {
this._placeholder = val;
}
get placeholder() {
return this._placeholder;
}
// @Input() set showCalendarOnFocus(val: boolean) {
// this._showCalendarOnFocus = val;
// } get showCalendarOnFocus(): boolean {
// return this._showCalendarOnFocus;
// }
set readonly(val) {
this._readonly = coerceBooleanProperty(val);
}
get readonly() {
return this._readonly;
}
set closeOnClick(val) {
this._closeOnClick = coerceBooleanProperty(val);
}
get closeOnClick() {
return this._closeOnClick;
}
set disabled(val) {
this.setDisabledState(coerceBooleanProperty(val));
}
get disabled() {
return this.formControl.disabled;
}
set isRange(val) {
this._isRange = coerceBooleanProperty(val);
this.changeDateFormat(this._param.dateType);
}
get isRange() {
return this._isRange;
}
set language(val) {
this._language = val;
}
get language() {
return this._language;
}
// private _object: any;
// @Input() set object(val: any) {
// console.log(val)
// this._object = val;
// } get object(): any {
// return this._object;
// }
// ngDoCheck() {
// if(this.object){
// if(!this.object.equals(this._object)) {
// // inputSettings changed
// // some logic here to react to the change
// this._object = this.object;
// }
// }
// }
//start controlValueAccsor
registerOnChange(fn) {
this.propagateChange = fn;
}
writeValue(value) {
// const val = new Date(value);
this.dateObject = [];
this.manualChanged = true;
this.setDateValueByDate(value);
this.formControl.markAsUntouched();
}
registerOnTouched(fn) {
this.onTouched = fn;
}
setDisabledState(isDisabled) {
if (isDisabled) {
this.formControl.disable();
}
else {
this.formControl.enable();
}
}
//end controlValueAccsor
setDateValueByDate(value) {
// let date = value;
if (!value) {
this.setValue(true, true);
return;
}
let timeString = "";
let h, m;
const FORMAT_DATE = moment.defaultFormat;
this.changeDateFormat(this._param.dateType);
if (this.isRange) {
let formatedStartDateAD = '';
let formatedStartDateBS = '';
let formatedEndDateAD = '';
let formatedEndDateBS = '';
if (value && value.start) {
const startDate = moment(value.start, FORMAT_DATE);
const endDate = moment(value.end, FORMAT_DATE);
if (startDate.isValid()) {
h = startDate.hour();
m = startDate.minute();
timeString = h > 9 ? `${h}:` : `0${h}:`;
timeString = timeString + (m > 9 ? `${m}` : `0${m}`);
formatedStartDateAD = this.dpService.GetFormatedDateAD(value.start, this._param.dateFormatAD);
formatedStartDateBS = this.dpService.GetDateBS(value.start, this._param.dateFormatBS);
if (this.withTime) {
formatedStartDateAD = `${formatedStartDateAD} ${timeString}`;
formatedStartDateBS = `${formatedStartDateBS} ${timeString}`;
}
}
if (endDate.isValid()) {
h = endDate.hour();
m = endDate.minute();
timeString = h > 9 ? `${h}:` : `0${h}:`;
timeString = timeString + (m > 9 ? `${m}` : `0${m}`);
formatedEndDateAD = this.dpService.GetFormatedDateAD(value.end, this._param.dateFormatAD);
formatedEndDateBS = this.dpService.GetDateBS(value.end, this._param.dateFormatBS);
if (this.withTime) {
formatedEndDateAD = `${formatedStartDateAD} ${timeString}`;
formatedEndDateBS = `${formatedStartDateBS} ${timeString}`;
}
}
// if (initial === true) {
// if (this.dateType === DateType.AD) {
// this.formControl.setValue(`${formatedStartDateAD} | ${formatedEndDateAD}`);
// } else {
// this.formControl.setValue(`${formatedStartDateBS} | ${formatedEndDateBS}`);
// }
// }
this.setDateObject(0, value.start, formatedStartDateBS, formatedStartDateAD, this._param.dateType);
this.setDateObject(1, value.end, formatedEndDateBS, formatedEndDateAD, this._param.dateType);
}
}
else {
const date = moment(value, FORMAT_DATE);
if (date.isValid()) {
h = date.hour();
m = date.minute();
timeString = h > 9 ? `${h}:` : `0${h}:`;
timeString = timeString + (m > 9 ? `${m}` : `0${m}`);
const dtAD = this.withTime ? `${this.dpService.GetFormatedDateAD(value, this._param.dateFormatAD)} ${timeString}` : `${this.dpService.GetFormatedDateAD(value, this._param.dateFormatAD)}`;
const dtBS = this.withTime ? `${this.dpService.GetDateBS(value, this._param.dateFormatBS)} ${timeString}` : `${this.dpService.GetDateBS(value, this._param.dateFormatBS)}`;
this.setDateObject(0, value, dtBS, dtAD, this._param.dateType);
// if (initial === true) {
// if (this.dateType === DateType.AD) {
// this.formControl.setValue(dtAD)
// } else {
// this.formControl.setValue(dtBS)
// }
// }
}
}
this.setValue(true, true);
// this.execPropagateChange(date);
}
setDateValueByString(dtValue, dtFormat, dtType) {
if ((dtValue.toString().includes("_")) || (dtValue.toString() === "")) {
this.dateObject = [];
this.execPropagateChange(null);
return;
}
const givenArray = dtValue.split(' | ');
let loop = 0;
givenArray.forEach(element => {
const lineArray = element.split(" ");
const dateString = lineArray[0];
const splitedDate = dateString.split("-");
let timeString = "";
let yr;
let mn;
let dy;
let hr = 0;
let mu = 0;
if (dtFormat === DateFormat.MMddyyyy) {
yr = +splitedDate[2];
mn = +splitedDate[0];
dy = +splitedDate[1];
}
else if (dtFormat === DateFormat.ddMMyyyy) {
yr = +splitedDate[2];
mn = +splitedDate[1];
dy = +splitedDate[0];
}
else if (dtFormat === DateFormat.yyyyddMM) {
yr = +splitedDate[0];
mn = +splitedDate[2];
dy = +splitedDate[1];
}
else if (dtFormat === DateFormat.yyyyMMdd) {
yr = +splitedDate[0];
mn = +splitedDate[1];
dy = +splitedDate[2];
}
if (mn <= 0 || mn > 12) {
this.execPropagateChange(null);
return;
}
if (dy <= 0 || dy > 32) {
this.execPropagateChange(null);
return;
}
if (lineArray.length > 1) {
const splitedTime = lineArray[1].split(":");
hr = +splitedTime[0];
mu = +splitedTime[1];
if (hr > 23 || mu > 59) {
this.execPropagateChange(null);
if (hr > 23) {
this.errorMessage = "Hour is invalid.";
}
if (mu > 59) {
this.errorMessage = "Minute is invalid.";
}
return;
}
const strHr = (hr < 10) ? '0' + hr : hr.toString();
const strMn = (mu < 10) ? '0' + mu : mu.toString();
timeString = ` ${strHr}:${strMn}`;
}
if (dtType === DateType.AD) {
const newDate = new Date(yr, mn - 1, dy, hr, mu);
const dtAD = `${this.dpService.GetFormatedDateAD(newDate, this._param.dateFormatAD)}${timeString}`;
const dtBS = this.dpService.GetDateBS(newDate, this._param.dateFormatBS);
this.setDateObject(loop, newDate, dtBS ? `${dtBS}${timeString}` : '', dtAD, dtType);
}
else {
let newDate = this.dpService.GetDateAD(yr, mn, dy);
if (newDate === null) {
this.execPropagateChange(null);
this.errorMessage = this.language === 0 ? 'BS Calendar not match!' : 'नेपाली क्यालेन्डर अनुसार गते मिलेन।';
return;
}
else {
const dtAD = `${this.dpService.GetFormatedDateAD(newDate, this._param.dateFormatAD)}${timeString}`;
const dtBS = `${this.dpService.GetDateBS(newDate, this._param.dateFormatBS)}`;
newDate = new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate(), hr, mu);
this.setDateObject(loop, newDate, dtBS ? `${dtBS}${timeString}` : '', dtAD, dtType);
}
}
loop++;
});
if (this.dateObject && this.dateObject.length >= 1) {
if (this.isRange) {
this.execPropagateChange({
start: this.dateObject[0].date,
end: this.dateObject[1].date
});
}
else {
this.execPropagateChange(this.dateObject[0].date);
}
}
else {
this.execPropagateChange(null);
}
}
setDateObject(index, dt, dtBS, dtAD, dtType) {
if (index === 0) {
this.dateObject = [];
}
this.dateObject.push({
date: dt,
dateAD: dtAD,
dateBS: dtBS,
selectedDateType: dtType
});
}
onManualChange(event) {
// if(this.readonly){
// return
// }
let newValue;
if (event.type === 'change' || event.type === 'paste') {
if (event.type === 'change') {
newValue = event.target.value;
}
else {
newValue = event.clipboardData.getData('Text');
}
this.setDateValueByString(newValue, this.dateFormat, this._param.dateType);
}
else if (event.type === 'keyup') {
if (event.target.value.toString().trim() === "") {
this.execPropagateChange(null);
}
else if (!event.target.value.toString().includes("_")) {
this.setDateValueByString(event.target.value, this.dateFormat, this._param.dateType);
}
else {
this.execPropagateChange(null);
}
if ((event.keyCode >= 48 && event.keyCode <= 57) || event.keyCode === 8 || event.keyCode === 46 || event.keyCode === 32) {
newValue = event.target.value;
if (this.controlDir.control.valid && this.dateObject.length > 0) {
if (!this.isRange) {
if (newValue !== (this._param.dateType === DateType.AD ? this.dateObject[0].dateAD : this.dateObject[0].dateBS)) {
this.setDateValueByString(newValue, this.dateFormat, this._param.dateType);
}
}
else {
if (newValue !== (this._param.dateType === DateType.AD ? `${this.dateObject[0].dateAD} | ${this.dateObject[1].dateAD}` : `${this.dateObject[0].dateBS} | ${this.dateObject[1].dateBS}`)) {
this.setDateValueByString(newValue, this.dateFormat, this._param.dateType);
}
}
}
}
}
else if (event.type === "keydown") {
if (event.code === "Space") {
event.stopPropagation();
event.preventDefault();
this.showPicker();
}
}
}
emitChange(withToolTip) {
//console.log(withToolTip)
if (this.formControl.value !== this.lastEmitted) {
let dateToEmit = null;
if (this.dateObject.length > 0) {
if (this.isRange) {
dateToEmit = {
start: this.dateObject[0],
end: this.dateObject[1]
};
}
else {
dateToEmit = this.dateObject[0];
}
}
else {
dateToEmit = null;
}
this.setTooltip();
if (this.manualChanged === false && withToolTip) {
this.elTooltip ? this.elTooltip.show() : undefined;
}
else {
this.manualChanged = false;
}
//
this.onDateChanged.emit(dateToEmit);
this.lastEmitted = this.formControl.value;
}
}
execPropagateChange(obj, isDateTypeChanged = false, withToolTip = true) {
if (obj === null) {
this.dateObject = [];
}
if (this.lastChanged !== obj) {
this.propagateChange(obj);
this.emitChange(withToolTip);
}
else {
if (isDateTypeChanged) {
this.emitChange(withToolTip);
}
}
this.lastChanged = obj;
if (this.controlDir.errors) {
if (this.controlDir.errors["date-maximum"]) {
this.errorMessage = "Maximum date is invalid.";
}
if (this.controlDir.errors["date-minimum"]) {
this.errorMessage = "Minimum date is invalid.";
}
if (this.controlDir.errors["date-between"]) {
if (this._param.dateType === DateType.BS) {
this.errorMessage = `Date must between
${this.dpService.GetDateBS(this.controlDir.control["minDate"], this._param.dateFormatBS)}
and
${this.dpService.GetDateBS(this.controlDir.control["maxDate"], this._param.dateFormatBS)}
`;
}
else {
this.errorMessage = `Date must between ${this.controlDir.errors["date-between"]["date-minimum"]} and ${this.controlDir.errors["date-between"]["date-maximum"]}`;
}
}
if (this.controlDir.errors["required"]) {
if (this.formControl.value === "") {
this.errorMessage = `Date is required`;
}
else {
this.errorMessage = `Date is Invalid`;
}
}
if (this.errorMessage) {
this.formControl.setErrors(this.controlDir.errors);
}
}
else {
this.formControl.setErrors(null);
}
}
ngOnInit() {
}
ngOnDestroy() {
this.stateChanges.complete();
}
clearText() {
this.formControl.setValue('');
this.dateObject = [];
this.execPropagateChange(null);
}
setValue(initial, withToolTip) {
// if(this.readonly){return}
if (this.dateObject.length > 0) {
const startDate = this._param.dateType === DateType.AD ? `${this.dateObject[0].dateAD}` : `${this.dateObject[0].dateBS}`;
let endDate = '';
this.dateObject[0].selectedDateType = this._param.dateType;
if (!this.isRange) {
this.formControl.setValue(startDate);
}
else {
if (this.dateObject.length > 1) {
endDate = this._param.dateType === DateType.AD ? `${this.dateObject[1].dateAD}` : `${this.dateObject[1].dateBS}`;
this.dateObject[1].selectedDateType = this._param.dateType;
}
this.formControl.setValue(`${startDate} | ${endDate}`);
}
}
else {
this.formControl.setValue("");
}
if (this.dateObject && this.dateObject.length >= 1) {
if (this.isRange) {
this.execPropagateChange({
start: this.dateObject[0].date,
end: this.dateObject[1].date
}, true, withToolTip);
}
else {
this.execPropagateChange(this.dateObject[0].date, true, withToolTip);
}
}
else {
if (initial) {
this.formControl.setValue("");
}
this.execPropagateChange(null);
}
}
changeDateType() {
if (this._param.dateType === DateType.AD) {
this._param.dateType = DateType.BS;
}
else {
this._param.dateType = DateType.AD;
}
this.changeDateFormat(this._param.dateType, this._param.dateType === DateType.AD ? this._param.dateFormatAD : this._param.dateFormatBS);
this.setValue(false, false);
}
showPicker() {
if (this.isPickerVisible) {
return;
}
this.isPickerVisible = true;
const currentDate = this.dateObject.length > 0 ? this.dateObject[0].date : new Date();
if (this.withTime) {
this.closeOnClick = false;
}
this.calPopUp.dateRange = this.isRange;
this.calPopUp.showCalendar(this._param.dateType, this._param.dateFormatAD, this._param.dateFormatBS, this.withTime, this.controlDir.control["minDate"], this.controlDir.control["maxDate"], this.closeOnClick, currentDate, this.language);
this.menuTrigger.openMenu();
}
setTooltip() {
let result = '';
if (this.dateObject && this.dateObject.length > 0) {
if (this.isRange) {
const ad = `AD: ${this.dpService.getFormatedDateLong(this.dateObject[0].dateAD, this._param.dateFormatAD, DateType.AD)} to ${this.dpService.getFormatedDateLong(this.dateObject[1].dateAD, this._param.dateFormatAD, DateType.AD)} \n`;
const bs = `BS: ${this.dpService.getFormatedDateLong(this.dateObject[0].dateBS, this._param.dateFormatBS, DateType.BS)} to ${this.dpService.getFormatedDateLong(this.dateObject[1].dateBS, this._param.dateFormatBS, DateType.BS)} \n`;
if (this._param.dateType === DateType.AD) {
result = `${ad} ${bs}`;
}
else {
result = `${bs} ${ad}`;
}
}
else {
const ad = `AD: ${this.dpService.getFormatedDateLong(this.dateObject[0].dateAD, this._param.dateFormatAD, DateType.AD)} \n`;
const bs = `BS: ${this.dpService.getFormatedDateLong(this.dateObject[0].dateBS, this._param.dateFormatBS, DateType.BS)} \n`;
const longDateString = (new Date(this.dateObject[0].date)).toString().replace("00:00:00", ""); // this.dateObject[0].date.toString().replace("00:00:00","");
if (this._param.dateType === DateType.AD) {
result = `${ad} ${bs} \n Date: ${longDateString}`;
}
else {
result = `${bs} ${ad} \n Date: ${longDateString}`;
}
}
}
else {
result = `Display Type: ${this._param.dateType === DateType.AD ? this.caption.AD[this.language] + ', ' : this.caption.BS[this.language]}`;
result = `${result} \n Format: ${this.dateFormat}`;
}
this.tooltipText = result;
}
dateChangedFromPopUp(result) {
this.menuTrigger.closeMenu();
this.isPickerVisible = false;
if (this.disabled || this.readonly) {
this.snackbar.open("Date Is Readonly!", "Cancel", { duration: 3000 });
return;
}
if (result === undefined) {
return;
}
else if (result !== -1) {
if (result.length >= 1) {
// console.log(this._param.dateType, result[0].selectedDateType)
if (this._param.dateType !== result[0].selectedDateType) {
this._param.dateType = result[0].selectedDateType;
this.changeDateFormat(this._param.dateType);
}
let index = 0;
if (!this.isRange) {
if (this._param.dateType === DateType.AD) {
this.formControl.setValue(result[0].dateAD);
}
else {
this.formControl.setValue(result[0].dateBS);
}
}
else {
if (this._param.dateType === DateType.AD) {
this.formControl.setValue(`${result[0].dateAD} | ${result[1].dateAD}`);
}
else {
this.formControl.setValue(`${result[0].dateBS} | ${result[1].dateBS}`);
}
}
result.forEach((el) => {
this.setDateObject(index, el.date, el.dateBS, el.dateAD, el.selectedDateType);
index++;
});
if (this.isRange) {
this.execPropagateChange({
start: this.dateObject[0].date,
end: this.dateObject[1].date
});
}
else {
this.execPropagateChange(this.dateObject[0].date);
}
this.dateInput.nativeElement.focus();
}
}
}
onMenuClosed() {
this.isPickerVisible = false;
this.dateInput.nativeElement.focus();
}
}
DateComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-date',
template: "<mat-form-field class=\"full-width\" style=\"max-width: fit-content;\">\r\n <input matInput #dateInput [textMask]=\"{mask: datemask}\" [formControl]=\"formControl\" [placeholder]=\"placeholder\"\r\n [matTooltip]=\"tooltipText\" matTooltipPosition=\"above\" matTooltipClass=\"date-tooltip\" #tooltip=\"matTooltip\"\r\n (change)=\"onManualChange($event)\" (paste)=\"onManualChange($event)\" (keyup)=\"onManualChange($event)\"\r\n (keydown)=\"onManualChange($event)\" (blur)=\"onBlur($event)\"\r\n (focus)=\"(!isPickerVisible && readonly)? tooltip.hide():tooltip.show()\" [errorStateMatcher]=\"matcher\"\r\n [required]=\"required\" autocomplete=\"off\" [readonly]=\"readonly\">\r\n\r\n <button *ngIf=\"!readonly && formControl.value\" mat-button type=\"button\" [matTooltip]=\"clearTooltip\" tabindex=\"-1\"\r\n matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearText()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <div *ngIf=\"readonly || !formControl.value\" class=\"icon-placement\" matSuffix>\r\n\r\n </div>\r\n\r\n <button mat-button [matTooltip]=\"changeDateTooltip\" type=\"button\" matTooltipPosition=\"above\" matSuffix\r\n mat-icon-button aria-label=\"Calendar\" tabindex=\"-1\" (click)=\"changeDateType()\">\r\n <mat-icon>repeat</mat-icon>\r\n </button>\r\n <button mat-button [matTooltip]=\"showCalendarTooltip\" tabindex=\"-1\" type=\"button\" matSuffix mat-icon-button\r\n aria-label=\"Calendar\" (click)=\"$event.stopPropagation();$event.preventDefault(); showPicker()\">\r\n <mat-icon>date_range</mat-icon>\r\n </button>\r\n\r\n <div [matMenuTriggerFor]=\"calendarPopUp\" #menu style=\"background-color: transparent; width: 0px; \"></div>\r\n\r\n <mat-hint>\r\n {{param.dateType===1? caption.AD[language]+', ': caption.BS[language] +', '}}\r\n Format: {{dateFormat}} {{withTime==true? 'hh:mm':''}}\r\n </mat-hint>\r\n <mat-error>\r\n {{errorMessage}} </mat-error>\r\n</mat-form-field>\r\n\r\n\r\n<mat-menu #calendarPopUp=\"matMenu\" class=\"popup\" x-position=\"before\" yPosition=\"below\" [overlapTrigger]=\"false\"\r\n (close)=\"onMenuClosed()\">\r\n <div (click)=\"$event.stopPropagation()\">\r\n <app-calendar-popup #calPopUp [dateRange]=\"false\" (DateTimeChanged)=\"dateChangedFromPopUp($event)\">\r\n </app-calendar-popup>\r\n </div>\r\n</mat-menu>\r\n\r\n<!-- <div class=\"date-tooltip\" style=\"width: 500px; height: 100px;\"></div> -->",
encapsulation: ViewEncapsulation.None,
styles: [".date-tooltip{background:#f0eec9;border-bottom:3px solid #a9a6a6;border-left:2px solid #726c6c;color:navy!important;font-size:14px;line-height:20px;max-width:250px!important;min-width:150px!important;text-align:center;white-space:pre-line}.mat-menu-content:not(:empty){padding-bottom:0!important;padding-top:0!important}.full-width{width:100%}.icon-placement{border-right:21px solid transparent;display:inline}"]
},] }
];
DateComponent.ctorParameters = () => [
{ type: CalendarService },
{ type: MatSnackBar },
{ type: NgControl, decorators: [{ type: Self }, { type: Optional }] }
];
DateComponent.propDecorators = {
calPopUp: [{ type: ViewChild, args: ['calPopUp', { static: false },] }],
menuTrigger: [{ type: ViewChild, args: [MatMenuTrigger, { static: false },] }],
dateInput: [{ type: ViewChild, args: ["dateInput", { static: true },] }],
elTooltip: [{ type: ViewChild, args: ["tooltip",] }],
onDateChanged: [{ type: Output }],
param: [{ type: Input }],
required: [{ type: Input }],
withTime: [{ type: Input }],
placeholder: [{ type: Input }],
readonly: [{ type: Input }],
closeOnClick: [{ type: Input }],
disabled: [{ type: Input }],
isRange: [{ type: Input }],
language: [{ type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovbGlicmFyeS9NYXRDYWxlbmRhci9wcm9qZWN0cy9uZ3gtbWF0LWNhbGVuZGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2RhdGUvZGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEosT0FBTyxFQUF3QixXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFpQixNQUFNLDRCQUE0QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sS0FBSyxRQUFRLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQWN2QixNQUFNLE9BQU8sYUFBYTtJQWlpQnRCLFlBQ1ksU0FBMEIsRUFDMUIsUUFBcUIsRUFDRixVQUFxQjtRQUZ4QyxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ0YsZUFBVSxHQUFW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