@ydalvik/ionic4-datepicker
Version:
ionic4-datepicker inspired by rajeshwar patlolla ionic1 datepicker
649 lines • 85.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/ionic4-datepicker-modal/ionic4-datepicker-modal.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, ViewChild } from '@angular/core';
import { NavParams, ModalController, IonContent } from '@ionic/angular';
import * as moment_ from 'moment';
import { Ionic4DatepickerService } from '../ionic4-datepicker.service';
/** @type {?} */
const moment = moment_;
export class Ionic4DatepickerModalComponent {
/**
* @param {?} navParams
* @param {?} modalCtrl
* @param {?} datePickerService
*/
constructor(navParams, modalCtrl, datePickerService) {
this.navParams = navParams;
this.modalCtrl = modalCtrl;
this.datePickerService = datePickerService;
// inputs
this.mainObj = {};
this.selectedDate = {};
// component variables
this.selctedDateEpoch = 0;
this.disabledDates = [];
this.highlightedDates = {};
this.disableWeekdays = [];
this.data = {
currentMonth: '',
currentYear: '',
currentMonthSelected: ''
};
this.rows = [0, 7, 14, 21, 28, 35];
this.cols = [0, 1, 2, 3, 4, 5, 6];
this.monthsList = ['Jan', 'Feb', 'March', 'April', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];
this.weeksList = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
this.yearsList = [];
this.daysList = [];
this.yearInAscending = false;
this.momentLocale = 'en-US';
// month year scroll variables
this.isMonthYearSelectorOpen = false;
this.scrollingMonthOrYearArray = [];
this.isSelectedDateFound = false;
this.today = this.resetHMSM(new Date()).getTime();
if (this.navParams.get('selectedDate')) {
// console.log('Selected date =>', this.navParams.get('selectedDate'));
this.selectedDate.date = this.navParams.get('selectedDate');
this.isSelectedDateFound = true;
}
this.mainObj = this.initDatePickerObj(this.navParams.get('objConfig'));
}
/**
* @return {?}
*/
ngOnInit() {
this.datePickerService.isModalOpen = true;
this.initDatePicker();
}
/**
* @return {?}
*/
ngOnDestroy() {
this.datePickerService.isModalOpen = false;
}
// Reset the hours, minutes, seconds and milli seconds
/**
* @param {?} currentDate
* @return {?}
*/
resetHMSM(currentDate) {
currentDate.setHours(0);
currentDate.setMinutes(0);
currentDate.setSeconds(0);
currentDate.setMilliseconds(0);
return currentDate;
}
// this method change month or year list to dateList
/**
* @return {?}
*/
changeToDateList() {
// console.log('changeToDateList');
this.isMonthYearSelectorOpen = false;
}
// Virtual scroll create for select year and month
/**
* @param {?} isMonthSelect
* @return {?}
*/
selectMonthYear(isMonthSelect) {
// console.log('selectMonthYear', i);
this.isMonthYearSelectorOpen = true;
this.isMonthSelect = isMonthSelect;
this.scrollingMonthOrYearArray = isMonthSelect ? this.mainObj.monthsList : this.yearsList;
this.selectedYearOrMonth = isMonthSelect ? this.data.currentMonth : this.data.currentYear;
/** @type {?} */
const index = this.scrollingMonthOrYearArray.indexOf(this.selectedYearOrMonth);
/** @type {?} */
const iditem = index + 'list';
setTimeout((/**
* @return {?}
*/
() => {
document.getElementById(iditem).scrollIntoView(false);
}), 100);
}
// select month or year
/**
* @param {?} monthYear
* @return {?}
*/
onChangeMonthYear(monthYear) {
// console.log('onChangeMonthYear', monthYear);
if (monthYear) {
if (this.isMonthSelect) {
this.data.currentMonth = monthYear;
this.selectedYearOrMonth = this.data.currentMonth;
/** @type {?} */
const monthNumber = this.monthsList.indexOf(this.data.currentMonth);
this.currentDate.setDate(1);
this.currentDate.setMonth(monthNumber);
}
else {
this.data.currentYear = monthYear;
this.selectedYearOrMonth = this.data.currentYear;
this.currentDate.setFullYear(this.data.currentYear);
this.refreshDateList(this.currentDate);
}
this.refreshDateList(this.currentDate);
}
this.isMonthYearSelectorOpen = false;
}
// Previous month
/**
* @return {?}
*/
prevMonth() {
// console.log('prevNext', this.currentDate);
/** @type {?} */
const currentMonth = this.currentDate.getMonth();
/** @type {?} */
const currentYear = this.currentDate.getFullYear();
if (currentYear <= this.yearsList[(this.yearsList.length - 1)] && currentMonth === 0) {
return;
}
if (currentMonth === 1) {
this.currentDate.setFullYear(currentYear);
}
this.currentDate.setMonth(currentMonth - 1);
this.data.currentMonth = this.mainObj.monthsList[currentMonth];
this.data.currentYear = currentYear;
this.refreshDateList(this.currentDate);
// this.changeDaySelected();
}
// Next month
/**
* @return {?}
*/
nextMonth() {
// console.log('nextNext', this.currentDate);
/** @type {?} */
const currentMonth = this.currentDate.getMonth();
/** @type {?} */
const currentYear = this.currentDate.getFullYear();
if (currentYear >= this.yearsList[0] && currentMonth === 11) {
return;
}
if (currentMonth === 11) {
this.currentDate.setFullYear(currentYear);
}
this.currentDate.setDate(1);
this.currentDate.setMonth(currentMonth + 1);
this.data.currentMonth = this.mainObj.monthsList[currentMonth];
this.data.currentYear = currentYear;
this.refreshDateList(this.currentDate);
// this.changeDaySelected();
}
// changeDaySelected ( day selection changes )
/**
* @return {?}
*/
changeDaySelected() {
// console.log('changeDaySelected');
/** @type {?} */
const newSelectedDate = new Date(this.selctedDateEpoch);
newSelectedDate.setMonth(this.currentDate.getMonth());
newSelectedDate.setYear(this.currentDate.getFullYear());
this.selctedDateEpoch = newSelectedDate.getTime();
this.selectedDateString = this.formatDate();
// this.closeModal(this.selctedDateEpoch);
}
// Date selected
/**
* @param {?} selectedDate
* @return {?}
*/
dateSelected(selectedDate) {
// console.log('dateSelected =>', selectedDate);
if (selectedDate && !selectedDate.disabled) {
if (!selectedDate || Object.keys(selectedDate).length === 0) {
return;
}
this.isSelectedDateFound = true;
this.selctedDateEpoch = selectedDate.epoch;
this.selectedDateString = this.formatDate();
if (this.mainObj.closeOnSelect) {
this.closeModal(this.selctedDateEpoch);
}
}
}
// Set today as date for the modal
/**
* @return {?}
*/
setIonicDatePickerTodayDate() {
// console.log('setIonicDatePickerTodayDate');
/** @type {?} */
const today = new Date(this.today);
/** @type {?} */
const today_obj = {
date: today.getDate(),
month: today.getMonth(),
year: today.getFullYear(),
day: today.getDay(),
epoch: today.getTime(),
disabled: false
};
this.dateSelected(today_obj);
this.refreshDateList(new Date());
this.selctedDateEpoch = this.resetHMSM(today).getTime();
this.selectedDateString = this.formatDate();
// this.closeModal(this.selctedDateEpoch);
}
// Set date for the modal
/**
* @return {?}
*/
setIonicDatePickerDate() {
// console.log('setIonicDatePickerDate');
this.closeModal(this.selctedDateEpoch);
}
// Setting the disabled dates list.
/**
* @param {?} obj
* @return {?}
*/
setDisabledDates(obj) {
// console.log('setDisabledDates =>', obj);
if (!obj.disabledDates || obj.disabledDates.length === 0) {
this.disabledDates = [];
}
else {
this.disabledDates = [];
for (let i = 0; i < obj.disabledDates.length; i++) {
// val = resetHMSM(new Date(val));
this.disabledDates.push(this.resetHMSM(new Date(obj.disabledDates[i])).getTime());
}
}
}
// Set hightlighted dates
/**
* @param {?} obj
* @return {?}
*/
setHightlightedDates(obj) {
if (!obj.highlightedDates || obj.highlightedDates.length === 0) {
this.highlightedDates = {};
}
else {
this.highlightedDates = {};
for (let i = 0; i < obj.highlightedDates.length; i++) {
/** @type {?} */
const hDate = obj.highlightedDates[i].date;
/** @type {?} */
const hColor = obj.highlightedDates[i].color;
/** @type {?} */
const hFontColor = obj.highlightedDates[i].fontColor;
/** @type {?} */
const hDateTime = this.resetHMSM(new Date(hDate)).getTime();
this.highlightedDates[hDateTime] = { color: hColor, fontColor: hFontColor };
}
}
}
// Refresh the list of the dates of a month
/**
* @param {?} currentDate
* @return {?}
*/
refreshDateList(currentDate) {
// console.log('refreshDateList =>', currentDate);
currentDate = this.resetHMSM(currentDate);
this.currentDate = currentDate;
/** @type {?} */
const firstDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1).getDate();
/** @type {?} */
const lastDay = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0).getDate();
this.monthsList = [];
if (this.mainObj.monthsList && this.mainObj.monthsList.length === 12) {
this.monthsList = this.mainObj.monthsList;
}
else {
this.monthsList = this.monthsList;
}
this.yearsList = this.getYearsList(this.mainObj.from, this.mainObj.to);
this.daysList = [];
/** @type {?} */
let tempDate;
/** @type {?} */
let disabled;
this.firstDayEpoch = this.resetHMSM(new Date(currentDate.getFullYear(), currentDate.getMonth(), firstDay)).getTime();
this.lastDayEpoch = this.resetHMSM(new Date(currentDate.getFullYear(), currentDate.getMonth(), lastDay)).getTime();
for (let i = firstDay; i <= lastDay; i++) {
tempDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), i);
disabled = false;
/** @type {?} */
const day = tempDate.getDay();
if (this.disableWeekdays.length > 0) {
if (this.disableWeekdays.indexOf(day) >= 0) {
disabled = this.disableWeekdays.indexOf(day) >= 0;
}
else {
disabled = false;
}
}
if (this.disabledDates.length > 0) {
if (this.disabledDates.indexOf(tempDate.getTime()) >= 0) {
disabled = true;
}
}
if (this.fromDate && !disabled) {
disabled = (tempDate.getTime() < this.fromDate)
|| this.mainObj.disableWeekDays.indexOf(tempDate.getDay()) >= 0;
}
if (this.toDate && !disabled) {
disabled = (tempDate.getTime() > this.toDate)
|| this.mainObj.disableWeekDays.indexOf(tempDate.getDay()) >= 0;
}
/** @type {?} */
const hightLightDate = this.highlightedDates[tempDate.getTime()];
/** @type {?} */
let fontColor = null;
if (tempDate.getDay() === 0 && this.mainObj.isSundayHighlighted && this.mainObj.isSundayHighlighted.fontColor) {
fontColor = this.mainObj.isSundayHighlighted.fontColor;
}
else if (hightLightDate && hightLightDate.fontColor) {
fontColor = hightLightDate.fontColor;
}
this.daysList.push({
date: tempDate.getDate(),
month: tempDate.getMonth(),
year: tempDate.getFullYear(),
day: tempDate.getDay(),
epoch: tempDate.getTime(),
disabled: disabled,
color: hightLightDate && hightLightDate.color ? hightLightDate.color : null,
fontColor: fontColor
// fontColor: hightLightDate && hightLightDate.fontColor ? hightLightDate.fontColor : null
});
}
// To set Monday as the first day of the week.
/** @type {?} */
let firstDayMonday = this.daysList[0].day - this.mainObj.mondayFirst;
firstDayMonday = (firstDayMonday < 0) ? 6 : firstDayMonday;
for (let j = 0; j < firstDayMonday; j++) {
this.daysList.unshift({});
}
this.rows = [0, 7, 14, 21, 28, 35];
this.cols = [0, 1, 2, 3, 4, 5, 6];
this.data.currentMonth = this.mainObj.monthsList[currentDate.getMonth()];
this.data.currentYear = currentDate.getFullYear();
this.data.currentMonthSelected = this.data.currentMonth;
this.currentYearSelected = this.data.currentYear;
this.numColumns = 7;
}
// Setting up the initial object
/**
* @param {?} ipObj
* @return {?}
*/
setInitialObj(ipObj) {
// console.log('setInitialObj =>', ipObj);
this.mainObj = ipObj;
if (this.isSelectedDateFound) {
this.isSelectedDateFound = true;
this.selctedDateEpoch = this.resetHMSM(this.mainObj.inputDate).getTime();
}
this.selectedDateString = this.formatDate();
if (this.mainObj.weeksList && this.mainObj.weeksList.length === 7) {
this.weeksList = this.mainObj.weeksList;
}
if (this.mainObj.mondayFirst) {
this.weeksList.push(this.mainObj.weeksList.shift());
}
if (this.mainObj.yearInAscending) {
this.yearInAscending = this.mainObj.yearInAscending;
}
if (this.mainObj.momentLocale) {
this.momentLocale = this.mainObj.momentLocale;
}
this.disableWeekdays = this.mainObj.disableWeekDays;
this.setDisabledDates(this.mainObj);
this.refreshDateList(this.mainObj.inputDate);
}
// for dismiss modal
/**
* @param {?} selectedDate
* @return {?}
*/
closeModal(selectedDate) {
// console.log('closeModal => ', selectedDate);
this.modalCtrl.getTop();
/** @type {?} */
const formattedDate = moment(selectedDate).format(this.mainObj.dateFormat);
this.modalCtrl.dismiss({ 'date': formattedDate });
}
// close modal button
/**
* @return {?}
*/
closeIonicDatePickerModal() {
// console.log('closeIonicDatePickerModal');
this.closeModal(null);
}
// get years list ( GIVE HERE MIN OR MAX YEAR IN DATE_PICKER )
/**
* @param {?} from
* @param {?} to
* @return {?}
*/
getYearsList(from, to) {
// console.log('getYearsList =>', from, to);
/** @type {?} */
const yearsList = [];
/** @type {?} */
let minYear = 1950;
/** @type {?} */
let maxYear = new Date().getFullYear() + 1;
minYear = from ? new Date(from).getFullYear() : minYear;
maxYear = to ? new Date(to).getFullYear() : maxYear;
// console.log('getYearsList: ', this.yearInAscending);
if (this.yearInAscending) {
for (let i = minYear; i <= maxYear; i++) {
yearsList.push(i);
}
}
else {
for (let i = maxYear; i >= minYear; i--) {
yearsList.push(i);
}
}
return yearsList;
}
// Init Date-Picker
/**
* @return {?}
*/
initDatePicker() {
this.fromDate = '';
this.toDate = '';
// $scope.mainObj = angular.extend({}, config, ipObj);
if (this.mainObj.from) {
this.fromDate = this.resetHMSM(new Date(this.mainObj.from)).getTime();
}
if (this.mainObj.to) {
this.toDate = this.resetHMSM(new Date(this.mainObj.to)).getTime();
}
// if (ipObj.disableWeekdays && this.config.disableWeekdays) {
// this.mainObj.disableWeekDays = ipObj.disableWeekdays.concat(this.config.disableWeekdays);
// }
this.setInitialObj(this.mainObj);
}
// Init DatePicker Object
/**
* @param {?} config
* @return {?}
*/
initDatePickerObj(config) {
// const config = this.mainObj;
if (config.inputDate && !this.selectedDate.date) {
this.isSelectedDateFound = true;
this.selectedDate.date = config.inputDate;
}
/** @type {?} */
const objConfig = {};
objConfig.from = config.fromDate ? config.fromDate : '';
objConfig.to = config.toDate ? config.toDate : '';
objConfig.showTodayButton = config.showTodayButton === undefined ? true : config.showTodayButton;
objConfig.closeOnSelect = config.closeOnSelect ? config.closeOnSelect : false;
objConfig.disableWeekDays = config.disableWeekDays ? config.disableWeekDays : [];
objConfig.mondayFirst = config.mondayFirst ? config.mondayFirst : false;
objConfig.setLabel = config.setLabel ? config.setLabel : 'Set';
objConfig.todayLabel = config.todayLabel ? config.todayLabel : 'Today';
objConfig.closeLabel = config.closeLabel ? config.closeLabel : 'Close';
objConfig.disabledDates = config.disabledDates ? config.disabledDates : [];
objConfig.titleLabel = config.titleLabel ? config.titleLabel : null;
objConfig.monthsList = config.monthsList ? config.monthsList : this.monthsList;
objConfig.monthsList = [...objConfig.monthsList];
objConfig.weeksList = config.weeksList ? config.weeksList : this.weeksList;
objConfig.weeksList = [...objConfig.weeksList];
objConfig.dateFormat = config.dateFormat ? config.dateFormat : 'DD MMM YYYY';
// console.log(this.selectedDate.date, objConfig.dateFormat, moment.locale());
objConfig.clearButton = config.clearButton ? config.clearButton : false;
objConfig.yearInAscending = config.yearInAscending ? config.yearInAscending : false;
objConfig.momentLocale = config.momentLocale ? config.momentLocale : 'en-US';
moment.locale(objConfig.momentLocale);
objConfig.inputDate = this.selectedDate.date ? moment(this.selectedDate.date, objConfig.dateFormat).toDate() : new Date();
objConfig.btnCloseSetInReverse = config.btnCloseSetInReverse ? config.btnCloseSetInReverse : false;
objConfig.btnProperties = {};
if (config.btnProperties) {
/** @type {?} */
const btnProperties = config.btnProperties;
objConfig.btnProperties.expand = btnProperties.expand ? btnProperties.expand : 'block';
objConfig.btnProperties.fill = btnProperties.fill ? btnProperties.fill : 'solid';
objConfig.btnProperties.size = btnProperties.size ? btnProperties.size : 'default';
objConfig.btnProperties.color = btnProperties.color ? btnProperties.color : '';
objConfig.btnProperties.disabled = btnProperties.disabled ? btnProperties.disabled : false;
objConfig.btnProperties.strong = btnProperties.strong ? btnProperties.strong : false;
}
else {
objConfig.btnProperties.expand = 'block';
objConfig.btnProperties.fill = 'solid';
objConfig.btnProperties.size = 'default';
objConfig.btnProperties.disabled = false;
objConfig.btnProperties.strong = false;
}
objConfig.arrowNextPrev = {};
if (config.arrowNextPrev) {
/** @type {?} */
const arrowNextPrev = config.arrowNextPrev;
objConfig.arrowNextPrev.nextArrowSrc = arrowNextPrev.nextArrowSrc ? arrowNextPrev.nextArrowSrc : false;
objConfig.arrowNextPrev.prevArrowSrc = arrowNextPrev.prevArrowSrc ? arrowNextPrev.prevArrowSrc : false;
}
objConfig.highlightedDates = [];
if (config.highlightedDates && config.highlightedDates.length > 0) {
objConfig.highlightedDates = config.highlightedDates;
this.setHightlightedDates(objConfig);
}
objConfig.isSundayHighlighted = {};
if (config.isSundayHighlighted) {
/** @type {?} */
const isSundayHighlighted = config.isSundayHighlighted;
objConfig.isSundayHighlighted.fontColor = isSundayHighlighted.fontColor ? isSundayHighlighted.fontColor : null;
}
// console.log('config =>', objConfig);
return objConfig;
}
// Format date
/**
* @return {?}
*/
formatDate() {
// console.log('formatDate: ', this.selctedDateEpoch, new Date(this.selctedDateEpoch));
return moment(this.selctedDateEpoch).format(this.mainObj.dateFormat);
}
}
Ionic4DatepickerModalComponent.decorators = [
{ type: Component, args: [{
selector: 'li-ionic4-datepicker-modal',
template: "<ion-header>\n <ion-toolbar (click)=\"changeToDateList()\">\n <ion-title>\n <h1 *ngIf=\"mainObj?.titleLabel\">{{mainObj?.titleLabel}}</h1>\n {{selectedDateString}}\n </ion-title>\n </ion-toolbar>\n</ion-header>\n\n\n<ion-content forceOverscroll=\"false\" no-padding class=\"ionic_datepicker_modal_content\">\n <ion-grid class=\"dp-month-year-container\" no-padding [ngClass]=\"isMonthYearSelectorOpen ? 'dp-virual-scroller-hide' : 'dp-virual-scroller-show'\">\n <ion-row>\n <ion-col size=\"1.5\" class=\"dp-left-right-arrow\" (click)=\"prevMonth()\">\n <ion-button [ngClass]=\"{'pointer_events_none':((firstDayEpoch - 86400000) < fromDate)}\">\n <ion-icon *ngIf=\"!mainObj?.arrowNextPrev?.prevArrowSrc\" name=\"arrow-back\"></ion-icon>\n <ion-icon *ngIf=\"mainObj?.arrowNextPrev?.prevArrowSrc\" src=\"{{mainObj?.arrowNextPrev?.prevArrowSrc}}\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"9\">\n <ion-grid>\n <ion-row>\n <ion-col class=\"dp-select-month-year\" size=\"5.5\" no-padding (click)=\"selectMonthYear(true)\">\n <ion-button class=\"dp-buttons\">\n {{ data.currentMonth }}\n <ion-icon name=\"md-arrow-dropdown\" class=\"dp-down-arrow\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col size=\"1\"></ion-col>\n <ion-col class=\"dp-select-month-year\" size=\"5.5\" no-padding (click)=\"selectMonthYear(false)\">\n <ion-button class=\"dp-buttons\">\n {{ data.currentYear }}\n <ion-icon name=\"md-arrow-dropdown\" class=\"dp-down-arrow\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-col>\n <ion-col size=\"1.5\" class=\"dp-left-right-arrow\" (click)=\"nextMonth()\">\n <ion-button [ngClass]=\"{'pointer_events_none':((lastDayEpoch + 86400000)> toDate)}\">\n <ion-icon *ngIf=\"!mainObj?.arrowNextPrev?.nextArrowSrc\" name=\"arrow-forward\"></ion-icon>\n <ion-icon *ngIf=\"mainObj?.arrowNextPrev?.nextArrowSrc\" src=\"{{mainObj?.arrowNextPrev?.nextArrowSrc}}\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <ion-grid class=\"dp-weeks-container\" *ngIf=\"daysList\" [ngClass]=\"isMonthYearSelectorOpen ? 'dp-virual-scroller-hide' : 'dp-virual-scroller-show'\">\n <ion-row class=\" dp-weeks-name\">\n <ion-col *ngFor=\"let weekName of mainObj?.weeksList; let i = index\">\n <!-- <div class=\"weeks\">{{weekName}} {{i}}</div> -->\n <div class=\"weeks\" *ngIf=\"mainObj?.mondayFirst\"\n [style.color]=\"mainObj?.isSundayHighlighted && i === 6 ? mainObj?.isSundayHighlighted.fontColor : ''\">\n {{weekName}}</div>\n <div class=\"weeks\" *ngIf=\"!mainObj?.mondayFirst\"\n [style.color]=\"mainObj?.isSundayHighlighted && i === 0 ? mainObj?.isSundayHighlighted.fontColor : ''\">\n {{weekName}}</div>\n </ion-col>\n </ion-row>\n <ion-row *ngFor=\"let row of rows;\" class=\"dp-days-list\">\n <ion-col *ngFor=\"let col of cols; let i = index ;\" (click)=\"dateSelected(daysList[row + i])\"\n [style.background-color]=\"(daysList[row + i]?.color) ? (daysList[row + i]?.color) : ''\"\n [style.border-radius]=\"(daysList[row + i]?.color) ? '4px' : ''\" no-padding [ngClass]=\"{\n 'dp-selecteddate': (daysList[row + i]?.epoch === selctedDateEpoch),\n 'dp-today' : (daysList[row + i]?.epoch == today),\n 'disabled' : (daysList[row + i]?.disabled)}\">\n <div class=\"days\" [style.color]=\"(daysList[row + i]?.fontColor) ? (daysList[row + i]?.fontColor) : ''\">\n {{daysList[row + col]?.date}}\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-col>\n </ion-row>\n </ion-grid>\n <ion-list class=\"dp-month-year-scroll-container\" [ngClass]=\"isMonthYearSelectorOpen ? 'dp-virual-scroller-show' : 'dp-virual-scroller-hide'\">\n <ion-item *ngFor=\"let monthYear of scrollingMonthOrYearArray;let i=index;\" id=\"{{i +'list'}}\" (click)=\"onChangeMonthYear(monthYear)\">\n <ion-label [ngClass]=\"selectedYearOrMonth === monthYear ? 'dp-selected' : ''\">{{ monthYear }}</ion-label>\n </ion-item>\n </ion-list>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-grid no-padding>\n <ion-row no-padding [ngClass]=\"mainObj?.btnCloseSetInReverse ? 'dp-btn-set-close-in-reverse' : ''\">\n <ion-col no-padding>\n <ion-button class=\"ion-button\" expand=\"{{mainObj?.btnProperties?.expand}}\" fill=\"{{mainObj?.btnProperties?.fill}}\"\n size=\"{{mainObj?.btnProperties?.size}}\" color=\"{{mainObj?.btnProperties?.color}}\" disabled=\"{{mainObj?.btnProperties?.disabled}}\"\n strong=\"{{mainObj?.btnProperties?.strong}}\" (click)=\"closeIonicDatePickerModal()\">\n {{mainObj?.closeLabel}}\n </ion-button>\n </ion-col>\n <ion-col no-padding *ngIf=\"mainObj?.showTodayButton\">\n <ion-button class=\"ion-button\" expand=\"{{mainObj?.btnProperties?.expand}}\" fill=\"{{mainObj?.btnProperties?.fill}}\"\n size=\"{{mainObj?.btnProperties?.size}}\" color=\"{{mainObj?.btnProperties?.color}}\" disabled=\"{{mainObj?.btnProperties?.disabled}}\"\n strong=\"{{mainObj?.btnProperties?.strong}}\" (click)=\"setIonicDatePickerTodayDate()\">\n {{mainObj?.todayLabel}}\n </ion-button>\n </ion-col>\n <ion-col no-padding *ngIf=\"!mainObj?.closeOnSelect\">\n <ion-button class=\"ion-button\" expand=\"{{mainObj?.btnProperties?.expand}}\"\n fill=\"{{mainObj?.btnProperties?.fill}}\" size=\"{{mainObj?.btnProperties?.size}}\"\n color=\"{{mainObj?.btnProperties?.color}}\"\n disabled=\"{{mainObj?.btnProperties?.disabled || !isSelectedDateFound}}\"\n strong=\"{{mainObj?.btnProperties?.strong}}\" (click)=\"setIonicDatePickerDate()\">\n {{mainObj?.setLabel}}\n </ion-button>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-toolbar>\n</ion-footer>",
styles: [":host ion-header{height:60px}:host ion-header ion-toolbar{--background:var(--ion-color-primary);height:100%;align-items:center;display:flex;color:var(--ion-color-primary-contrast)}:host ion-header ion-toolbar ion-title{font-size:20px;font-weight:700;text-align:center;padding:0;display:flex;align-items:center;justify-content:center;height:100%;cursor:pointer}:host ion-header ion-toolbar ion-title h1{font-size:14px;margin:0 0 4px}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col{display:flex;justify-content:center;align-items:center}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col ion-grid{width:100%}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col ion-grid .dp-select-month-year{border-bottom:1.5px solid;border-bottom-color:var(--ion-color-primary)}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col ion-grid .dp-select-month-year .dp-buttons{width:100%;height:40px;margin:0;padding:0;color:var(--ion-color-primary);--background:transparent;--box-shadow:none}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col ion-grid .dp-select-month-year .dp-buttons.activated{--background-activated:transparent;--color-activated:var(--ion-color-primary)}:host .ionic_datepicker_modal_content .dp-month-year-container ion-col ion-grid .dp-select-month-year .dp-down-arrow{position:absolute;width:16px;right:0;top:10px;color:var(--ion-color-primary)}:host .ionic_datepicker_modal_content .dp-month-year-container .dp-left-right-arrow ion-button{--background:transparent;--box-shadow:0;color:var(--ion-color-primary)}:host .ionic_datepicker_modal_content .dp-month-year-container .dp-left-right-arrow ion-button:focus{outline:0}:host .ionic_datepicker_modal_content .dp-month-year-container .dp-left-right-arrow ion-button.activated{--ion-color-primary-shade:transparent;--ion-color-primary-contrast:var(--ion-color-primary-tint)}:host .ionic_datepicker_modal_content .dp-weeks-container{margin:8px 0}:host .ionic_datepicker_modal_content .dp-weeks-container .dp-weeks-name ion-col{display:flex;justify-content:center}:host .ionic_datepicker_modal_content .dp-weeks-container .dp-weeks-name ion-col .weeks{width:14%;display:flex;justify-content:center;font-weight:700}:host .ionic_datepicker_modal_content .dp-weeks-container .dp-days-list ion-col{display:flex;justify-content:center;padding:10px;cursor:pointer}:host .ionic_datepicker_modal_content .dp-weeks-container .dp-days-list ion-col .days{width:14%;display:flex;justify-content:center}:host .ionic_datepicker_modal_content .dp-selecteddate{background:var(--ion-color-primary);color:var(--ion-color-primary-contrast);border-radius:4px;font-weight:500}:host .ionic_datepicker_modal_content .dp-today{border-radius:4px;font-weight:500;border:1px solid;border-color:var(--ion-color-primary)}:host .ionic_datepicker_modal_content .dp-month-year-scroll-container{position:absolute;top:0;bottom:0;left:0;right:0;margin:0;overflow-y:scroll}:host .ionic_datepicker_modal_content .dp-month-year-scroll-container ion-item{--padding-start:0;--inner-padding-end:0;--inner-border-width:0}:host .ionic_datepicker_modal_content .dp-month-year-scroll-container ion-item ion-label{text-align:center;margin:0;font-size:16px}:host .ionic_datepicker_modal_content .dp-month-year-scroll-container ion-item ion-label.dp-selected{color:var(--ion-color-primary);font-size:20px;font-weight:500}:host .disabled{color:#aaa}:host .dp-virual-scroller-show{transition:opacity .3s ease-in;opacity:1;visibility:visible}:host .dp-virual-scroller-hide{opacity:0;visibility:hidden;height:auto}:host ion-footer{height:55px}:host ion-footer ion-toolbar{height:100%;--border-width:0;--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px}:host ion-footer ion-toolbar .toolbar-container{height:100%}:host ion-footer ion-toolbar .dp-btn-set-close-in-reverse{flex-direction:row-reverse}:host ion-footer ion-toolbar ion-button{--border-radius:0;height:55px;margin:0}:host ion-footer ion-toolbar ion-button:focus{outline:0}:host ion-footer ion-toolbar ion-button.activated{--background-activated:var(--ion-color-primary-tint);--color-activated:var(--ion-color-primary-contrast)}"]
}] }
];
/** @nocollapse */
Ionic4DatepickerModalComponent.ctorParameters = () => [
{ type: NavParams },
{ type: ModalController },
{ type: Ionic4DatepickerService }
];
Ionic4DatepickerModalComponent.propDecorators = {
content: [{ type: ViewChild, args: [IonContent,] }]
};
if (false) {
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.content;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.currentDate;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.today;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.mainObj;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.selectedDate;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.selctedDateEpoch;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.firstDayEpoch;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.lastDayEpoch;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.disabledDates;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.highlightedDates;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.fromDate;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.toDate;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.disableWeekdays;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.data;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.currentYearSelected;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.numColumns;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.rows;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.cols;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.monthsList;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.weeksList;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.yearsList;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.daysList;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.yearInAscending;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.momentLocale;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.selectedDateString;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.isMonthYearSelectorOpen;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.selectedYearOrMonth;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.isMonthSelect;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.scrollingMonthOrYearArray;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.isSelectedDateFound;
/**
* @type {?}
* @private
*/
Ionic4DatepickerModalComponent.prototype.navParams;
/**
* @type {?}
* @private
*/
Ionic4DatepickerModalComponent.prototype.modalCtrl;
/** @type {?} */
Ionic4DatepickerModalComponent.prototype.datePickerService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9uaWM0LWRhdGVwaWNrZXItbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHlkYWx2aWsvaW9uaWM0LWRhdGVwaWNrZXIvIiwic291cmNlcyI6WyJsaWIvaW9uaWM0LWRhdGVwaWNrZXItbW9kYWwvaW9uaWM0LWRhdGVwaWNrZXItbW9kYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEUsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7O01BQ2pFLE1BQU0sR0FBRyxPQUFPO0FBT3RCLE1BQU0sT0FBTyw4QkFBOEI7Ozs7OztJQWdEekMsWUFDVSxTQUFvQixFQUNwQixTQUEwQixFQUMzQixpQkFBMEM7UUFGekMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMzQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXlCOztRQTNDbkQsWUFBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixpQkFBWSxHQUFRLEVBQUUsQ0FBQzs7UUFHdkIscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBSXJCLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLHFCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUkzQixvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixTQUFJLEdBQVE7WUFDVixZQUFZLEVBQUUsRUFBRTtZQUNoQixXQUFXLEVBQUUsRUFBRTtZQUNmLG9CQUFvQixFQUFFLEVBQUU7U0FDekIsQ0FBQztRQUlGLFNBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFB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