angular-custom-datepicker
Version:
Custom Datepicker component for Angular
1 lines • 37.2 kB
Source Map (JSON)
{"version":3,"file":"angular-custom-datepicker.mjs","sources":["../../../projects/angular-custom-datepicker/src/lib/angular-custom-datepicker.service.ts","../../../projects/angular-custom-datepicker/src/lib/angular-custom-datepicker.component.ts","../../../projects/angular-custom-datepicker/src/lib/date-picker.component.html","../../../projects/angular-custom-datepicker/src/lib/angular-custom-datepicker.module.ts","../../../projects/angular-custom-datepicker/src/public-api.ts","../../../projects/angular-custom-datepicker/src/angular-custom-datepicker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AngularCustomDatepickerService {\n\n constructor() { }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { faAngleLeft } from '@fortawesome/free-solid-svg-icons';\nimport { faAngleRight } from '@fortawesome/free-solid-svg-icons';\n@Component({\n selector: 'date-picker',\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.scss'],\n})\nexport class AngularCustomDatepickerComponent implements OnInit, AfterViewInit, OnChanges {\n @ViewChild('cally') calendar: ElementRef;\n @ViewChild('callyinp') calendarInput: ElementRef;\n @ViewChild('callyicon') calendarIcon: ElementRef;\n faAngleLeft = faAngleLeft;\n faAngleRight = faAngleRight;\n constructor(private window: Window) {}\n\n // To detect any outside click to toggle or close the calendar accordingly\n @HostListener('document:click', ['$event'])\n clickedOutside(event) {\n if (this.disabled == true) return;\n else if (this.calendarInput?.nativeElement.contains(event.target)) {\n this.show = !this.show;\n if (this.show == true) {\n // to display the selected date after dropdown is re-opened\n if (this.displayDate != null) {\n this.renderSelectedDate();\n }\n }\n }\n // Do not close the calendar if user clicks anywhere inside calendar\n else if (this.calendar?.nativeElement.contains(event.target)) {\n this.show = true;\n } else {\n // Close the calendar if user clicks anywhere outside calendar/calendar input\n this.show = false;\n }\n }\n\n // To detect where to render (upside/downside) the calendar based on spacing\n @HostListener('window:resize', ['$event'])\n onResize(event) {\n this.dropUpOrDown();\n }\n\n years = [];\n months = [\n { id: 0, val: 'Jan' },\n { id: 1, val: 'Feb' },\n { id: 2, val: 'Mar' },\n { id: 3, val: 'Apr' },\n { id: 4, val: 'May' },\n { id: 5, val: 'Jun' },\n { id: 6, val: 'Jul' },\n { id: 7, val: 'Aug' },\n { id: 8, val: 'Sep' },\n { id: 9, val: 'Oct' },\n { id: 10, val: 'Nov' },\n { id: 11, val: 'Dec' },\n ];\n\n date: any = new Date();\n show: boolean = false;\n days: any[] = [];\n lastDayofCurrentMonth: any;\n lastDayofPrevMonth: any;\n firstDayIndex: any;\n lastDayIndex: any;\n nextDays: any;\n // Display on input box\n displayDate: any = null;\n minDate: any = null;\n maxDate: any = null;\n\n leftIconDisabled: boolean;\n rightIconDisabled: boolean;\n currentDateOrignal: any;\n\n @Input() min = null;\n @Input() max = null;\n @Input() disabled: boolean = false;\n @Input() selectedValue: any = null;\n @Input() placeholder: string = 'Select Date';\n @Output() SelectedDate = new EventEmitter<any>();\n\n ngOnInit(): void {\n this.yearAssigner();\n let todaysDate = new Date().setHours(0, 0, 0, 0);\n this.currentDateOrignal = new Date(todaysDate);\n\n this.date.setDate(1);\n this.date.setHours(0, 0, 0, 0);\n this.selectedYear = this.date.getFullYear();\n this.selectedMonth = this.date.getMonth();\n\n if (this.min != null) {\n let d = new Date(this.min).setHours(0, 0, 0, 0);\n this.minDate = new Date(d);\n }\n\n if (this.max != null) {\n let d = new Date(this.max).setHours(0, 0, 0, 0);\n this.maxDate = new Date(d);\n this.date.setYear(this.maxDate.getFullYear());\n this.selectedYear = this.maxDate.getFullYear();\n this.date.setMonth(this.maxDate.getMonth());\n this.selectedMonth = this.maxDate.getMonth();\n }\n if (this?.selectedValue) {\n this.setDisplayDateAccordingtoInput();\n }\n // Index of day of the first-date\n this.firstDayIndex = this.date.getDay();\n this.configureAndRenderCalendar();\n }\n\n ngAfterViewInit(): void {\n this.dropUpOrDown();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.min = null;\n this.max = null;\n if (changes?.['min']?.currentValue) {\n this.min = `${changes?.['min'].currentValue}`;\n }\n if (changes?.['max']?.currentValue) {\n this.max = `${changes?.['max'].currentValue}`;\n }\n if (changes?.['selectedValue']?.currentValue) {\n let selectedDate = new Date(`${changes?.['selectedValue'].currentValue}`);\n selectedDate.setHours(0, 0, 0, 0);\n this.selectedValue = selectedDate;\n }\n else{\n this.displayDate=null;\n }\n if (\n changes?.['min']?.currentValue ||\n changes?.['max']?.currentValue ||\n changes?.['selectedValue']?.currentValue\n )\n this.ngOnInit();\n }\n\n configureAndRenderCalendar() {\n this.days = [];\n this.lastDayofCurrentMonth = 0;\n this.lastDayofPrevMonth = 0;\n this.lastDayIndex = 0;\n this.nextDays = 0;\n\n this.lastDayIndex = new Date(\n this.date.getFullYear(),\n this.date.getMonth() + 1,\n 0\n ).getDay();\n\n //days of next month to be displayed\n this.nextDays = 7 - this.lastDayIndex - 1;\n\n this.lastDayofCurrentMonth = new Date(\n this.date.getFullYear(),\n this.date.getMonth() + 1,\n 0\n ).getDate();\n\n this.lastDayofPrevMonth = new Date(\n this.date.getFullYear(),\n this.date.getMonth(),\n 0\n ).getDate();\n\n // Previous month dates (Dates like 29,30,31,1)\n for (let x = this.firstDayIndex - 1; x >= 0; x--) {\n this.days.push({\n day: this.lastDayofPrevMonth - x,\n type: 'prev',\n disabled: true,\n });\n }\n\n // Setting Current month dates (1-30 / 1-31)\n let disabled;\n for (let i = 1; i <= this.lastDayofCurrentMonth; i++) {\n disabled = false;\n\n // Check if mindate lies between these dates\n if (this?.minDate) {\n if (this.checkIfDateisEqualtoMinDate(i)) this.leftIconDisabled = true;\n\n if (this.checkIfDateisLessThanMinDate(i)) {\n this.leftIconDisabled = true;\n disabled = true;\n }\n }\n // Check if maxdate lies between these dates\n if (this?.maxDate) {\n if (this.checkIfDateisEqualtoMaxDate(i)) this.rightIconDisabled = true;\n\n if (this.checkIfDateisGreaterThanMaxDate(i)) {\n this.rightIconDisabled = true;\n disabled = true;\n }\n }\n\n // To highlight the selected date\n if (\n i == this?.displayDate?.getDate() &&\n this?.displayDate?.getMonth() == this.date.getMonth() &&\n this?.displayDate?.getFullYear() == this.date.getFullYear()\n ) {\n this.days.push({ day: i, type: 'target', disabled: disabled });\n } else {\n this.days.push({ day: i, type: 'curr', disabled: disabled });\n }\n }\n\n // Number of next days to be displayed\n if (this.nextDays <= 2) {\n this.nextDays += 3;\n }\n\n // Dates of next month\n for (let j = 1; j <= this.nextDays; j++) {\n this.days.push({ day: j, type: 'next', disabled: true });\n }\n }\n\n // Toggle calendar on icon click\n calendarClick() {\n this.show = !this.show;\n }\n\n // If left arrow is clicked\n prevArrow() {\n // Do not allow if disabled\n if (this.leftIconDisabled) return;\n\n // Reset\n this.leftIconDisabled = false;\n this.rightIconDisabled = false;\n\n this.date.setMonth(this.date.getMonth() - 1);\n this.selectedYear = this.date.getFullYear();\n\n // If calendar is finished (first month and first year of calendar)\n this.checkIfCalendarisFinished(this.date.getMonth(), this.selectedYear);\n\n this.date.setDate(1);\n\n this.firstDayIndex = this.date.getDay();\n this.configureAndRenderCalendar();\n }\n\n // If right arrow is clicked\n nextArrow() {\n // Do not allow if disabled\n if (this.rightIconDisabled) return;\n // Reset\n this.leftIconDisabled = false;\n this.rightIconDisabled = false;\n this.date.setMonth(this.date.getMonth() + 1);\n this.selectedYear = this.date.getFullYear();\n // If calendar is finished (last month and last year of calendar)\n this.checkIfCalendarisFinished(this.date.getMonth(), this.selectedYear);\n\n this.date.setDate(1);\n this.firstDayIndex = this.date.getDay();\n this.configureAndRenderCalendar();\n }\n\n selectedDay;\n selectedMonth;\n selectedYear;\n dateClicked(val) {\n // If date is not disabled\n if ((val.type == 'curr' || val.type == 'target') && !val.disabled) {\n this.show = false;\n let day = val.day;\n let month = this.date.getMonth();\n let year = this.date.getFullYear();\n\n this.selectedDay = day;\n this.selectedMonth = month;\n this.selectedYear = year;\n\n this.date = new Date(year, month, day);\n this.displayDate = new Date(year, month, day);\n this.SelectedDate.emit(this.displayDate);\n this.configureAndRenderCalendar();\n }\n }\n\n // Year is changed\n yearSelected(e) {\n this.leftIconDisabled = false;\n this.rightIconDisabled = false;\n let y = e.target.value;\n this.date.setYear(y);\n this.selectedYear = this.date.getFullYear();\n\n this.date.setDate(1);\n // Disable leftIcon/RightIcon if calendar is finished\n this.checkIfCalendarisFinished(this.date.getMonth(), this.selectedYear);\n // To Display and render correct month in case mindate and/or maxdate is set\n if (\n this?.minDate?.getFullYear() == this.selectedYear ||\n this?.maxDate?.getFullYear() == this.selectedYear\n ) {\n if (this?.minDate?.getFullYear() == this.selectedYear) {\n if (this.date.getMonth() <= this.minDate.getMonth())\n this.date.setMonth(this.minDate.getMonth());\n } else if (this?.maxDate?.getFullYear() == this.selectedYear) {\n if (this.date.getMonth() >= this.maxDate.getMonth())\n this.date.setMonth(this.maxDate.getMonth());\n }\n }\n\n this.date.setDate(1);\n\n this.firstDayIndex = this.date.getDay(0);\n this.configureAndRenderCalendar();\n }\n\n // Month is changed\n monthSelected(e) {\n this.leftIconDisabled = false;\n this.rightIconDisabled = false;\n let m = e.target.value;\n this.date.setMonth(m);\n this.selectedMonth = this.date.getMonth();\n // Disable leftIcon/RightIcon if calendar is finished\n this.checkIfCalendarisFinished(this.date.getMonth(), this.selectedYear);\n\n this.firstDayIndex = this.date.getDay();\n this.configureAndRenderCalendar();\n }\n\n // Position to render the calendar accordingly\n dropUpOrDown() {\n let dropdownHeight = 288 + 42;\n let windowHeight = this.window.innerHeight;\n let calendarStart =\n this.calendarInput.nativeElement.getBoundingClientRect().top;\n if (windowHeight - calendarStart < dropdownHeight) {\n return 'dropup';\n } else {\n return 'dropdown';\n }\n }\n\n // Assign 100 years starting from (currentYear-100);\n yearAssigner() {\n this.years = [];\n let currentYear = new Date().getFullYear();\n let startYear = Number(currentYear) - 100;\n for (let i = startYear; i <= currentYear; i++) {\n this.years.push({ val: `${i}` });\n }\n }\n\n checkIfCalendarisFinished(month:any, year:any) {\n if (month == 0 && year == this.years[0].val) {\n this.leftIconDisabled = true;\n } else if (month == 11 && year == this.years[this.years.length - 1].val) {\n this.rightIconDisabled = true;\n }\n }\n\n checkIfDateisLessThanMinDate(d:any) {\n if (\n new Date(this.date.getFullYear(), this.date.getMonth(), d).getTime() <\n this?.minDate?.getTime()\n ) {\n return true;\n } else return false;\n }\n\n checkIfDateisEqualtoMinDate(d:any) {\n if (\n new Date(this.date.getFullYear(), this.date.getMonth(), d).getTime() ==\n this?.minDate?.getTime()\n ) {\n return true;\n } else return false;\n }\n\n checkIfDateisEqualtoMaxDate(d:any) {\n if (\n new Date(this.date.getFullYear(), this.date.getMonth(), d).getTime() ==\n this?.maxDate?.getTime()\n ) {\n return true;\n } else return false;\n }\n\n checkIfDateisGreaterThanMaxDate(d:any) {\n if (\n new Date(this.date.getFullYear(), this.date.getMonth(), d).getTime() >\n this?.maxDate?.getTime()\n ) {\n return true;\n } else return false;\n }\n\n renderSelectedDate() {\n this.leftIconDisabled = false;\n this.rightIconDisabled = false;\n this.date.setYear(this.displayDate?.getFullYear());\n this.date.setMonth(this.displayDate?.getMonth());\n this.date.setDate(this.displayDate?.getDate());\n this.firstDayIndex = new Date(\n this.displayDate?.getFullYear(),\n this.displayDate?.getMonth(),\n 1\n ).getDay();\n this.selectedYear = this.displayDate?.getFullYear();\n this.selectedMonth = this.displayDate?.getMonth();\n this.checkIfCalendarisFinished(this.selectedMonth, this.selectedYear);\n this.configureAndRenderCalendar();\n }\n\n setDisplayDateAccordingtoInput() {\n if (this.minDate != null && this.maxDate != null) {\n if (\n this?.selectedValue?.getTime() >= this?.minDate?.getTime() &&\n this?.selectedValue?.getTime() <= this?.maxDate?.getTime()\n ) {\n this.displayDate = this.selectedValue;\n }\n } else if (\n this.minDate != null &&\n this?.selectedValue?.getTime() >= this?.minDate?.getTime()\n ) {\n this.displayDate = this.selectedValue;\n } else if (\n this.maxDate != null &&\n this?.selectedValue?.getTime() <= this?.maxDate?.getTime()\n ) {\n this.displayDate = this.selectedValue;\n } else if (this.minDate == null && this.maxDate == null)\n this.displayDate = this.selectedValue;\n }\n}\n\n","<div>\n <div class=\"set\">\n <div #callyinp class=\"inputtag\">\n <input\n [disabled]=\"this?.disabled\"\n [readonly]=\"true\"\n placeholder=\"{{placeholder}}\"\n [value]=\"displayDate?.toDateString() | date: 'dd/MM/yyyy'\"\n class=\"calendar-input\"\n type=\"text\"\n />\n <div #callyicon class=\"iconholder\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n fill=\"currentColor\"\n class=\"icon bi bi-calendar-event\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M11 6.5a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5v-1z\"\n />\n <path\n d=\"M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z\"\n />\n </svg>\n </div>\n </div>\n <div *ngIf=\"show\" #cally class=\"calendar\" [ngClass]=\"dropUpOrDown()\">\n <div class=\"calendarheader\">\n <span (click)=\"prevArrow()\" class=\"leftIcon\">\n <fa-icon\n [ngClass]=\"{ 'fa-disabled': leftIconDisabled }\"\n size=\"lg\"\n [icon]=\"faAngleLeft\"\n ></fa-icon>\n </span>\n\n <div class=\"month_year\">\n <select (change)=\"monthSelected($event)\" class=\"monthpicker\">\n <ng-container *ngFor=\"let month of months\">\n <option\n *ngIf=\"\n month.id <= this?.maxDate?.getMonth() ||\n this.selectedYear != this?.maxDate?.getFullYear()\n \"\n [disabled]=\"\n (this.selectedYear == this?.minDate?.getFullYear() &&\n month.id < this?.minDate?.getMonth()) ||\n (month.id > this?.maxDate?.getMonth() &&\n this.selectedYear == this?.maxDate?.getFullYear())\n \"\n [selected]=\"this.date.getMonth() == month.id\"\n [value]=\"month.id\"\n >\n {{ month.val }}\n </option>\n </ng-container>\n <!-- (this.selectedYear == this?.minDate?.getFullYear() &&\n month.id < this?.minDate?.getMonth()) ||\n (month.id > this?.maxDate?.getMonth() &&\n this.selectedYear == this?.maxDate?.getFullYear()) ||\n (this.selectedYear >= this.currentDateOrignal.getFullYear() &&\n month.id > this.currentDateOrignal.getMonth()) -->\n </select>\n <select (change)=\"yearSelected($event)\" class=\"yearpicker\">\n <ng-container *ngFor=\"let year of years\">\n <option\n *ngIf=\"\n !(this?.minDate && year.val < this?.minDate?.getFullYear()) &&\n !(this?.maxDate && year.val > this?.maxDate?.getFullYear())\n \"\n [disabled]=\"\n (this?.minDate && year.val < this?.minDate?.getFullYear()) ||\n (this?.maxDate && year.val > this?.maxDate?.getFullYear())\n \"\n [selected]=\"this.date.getFullYear() == year.val\"\n [value]=\"year.val\"\n >\n <span>{{ year.val }}</span>\n </option>\n </ng-container>\n </select>\n </div>\n\n <span (click)=\"nextArrow()\" class=\"rightIcon\">\n <fa-icon\n [ngClass]=\"{ 'fa-disabled': rightIconDisabled }\"\n size=\"lg\"\n [icon]=\"faAngleRight\"\n ></fa-icon>\n </span>\n </div>\n <div class=\"weekdays\">\n <div>Su</div>\n <div>Mo</div>\n <div>Tu</div>\n <div>We</div>\n <div>Th</div>\n <div>Fr</div>\n <div>Sa</div>\n </div>\n <div class=\"days\">\n <div\n (click)=\"dateClicked(day)\"\n [ngClass]=\"{\n 'prev-date': day.type == 'prev',\n 'next-date': day.type == 'next',\n target: day.type == 'target',\n disabled: day.disabled == true,\n currentDate:\n this.currentDateOrignal.getDate() == day.day &&\n day.type == 'curr' &&\n this.currentDateOrignal.getFullYear() ==\n this.date.getFullYear() &&\n this.currentDateOrignal.getMonth() == this.date.getMonth()\n }\"\n *ngFor=\"let day of days\"\n >\n {{ day.day }}\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { AngularCustomDatepickerComponent } from './angular-custom-datepicker.component';\n\n\n\n@NgModule({\n declarations: [\n AngularCustomDatepickerComponent\n ],\n imports: [\n BrowserModule,\n FontAwesomeModule,\n ],\n exports: [\n AngularCustomDatepickerComponent\n ],\n providers: [ { provide: Window, useValue: window }]\n})\nexport class AngularCustomDatepickerModule { }\n","/*\n * Public API Surface of angular-custom-datepicker\n */\n\nexport * from './lib/angular-custom-datepicker.service';\nexport * from './lib/angular-custom-datepicker.component';\nexport * from './lib/angular-custom-datepicker.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}