@tapsellorg/angular-material-library
Version:
Angular library for Tapsell
1 lines • 57.7 kB
Source Map (JSON)
{"version":3,"file":"tapsellorg-angular-material-library-src-lib-date-range-picker.mjs","sources":["../../projects/pegah-library/src/lib/date-range-picker/constants.ts","../../projects/pegah-library/src/lib/date-range-picker/configs.ts","../../projects/pegah-library/src/lib/date-range-picker/predefined-range-calculator.ts","../../projects/pegah-library/src/lib/date-range-picker/date-picker.service.ts","../../projects/pegah-library/src/lib/date-range-picker/date-range-picker-controller.service.ts","../../projects/pegah-library/src/lib/date-range-picker/date-picker-header/date-picker-header.component.ts","../../projects/pegah-library/src/lib/date-range-picker/date-picker-header/date-picker-header.component.html","../../projects/pegah-library/src/lib/date-range-picker/date-range-picker-selection.strategy.ts","../../projects/pegah-library/src/lib/date-range-picker/max-range.directive.ts","../../projects/pegah-library/src/lib/date-range-picker/date-range-picker.component.ts","../../projects/pegah-library/src/lib/date-range-picker/date-range-picker.component.html","../../projects/pegah-library/src/lib/date-range-picker/date-range-picker.module.ts","../../projects/pegah-library/src/lib/date-range-picker/tapsellorg-angular-material-library-src-lib-date-range-picker.ts"],"sourcesContent":["import { PghPredefinedDate } from './models';\n\nexport const PghPredefinedDateRanges = {\n last7Days: {\n id: 'last 7 days',\n type: 'relative',\n start: -6,\n end: 0,\n title: 'DATE_RANGE_PICKER_LAST_SEVEN_DAYS',\n } as PghPredefinedDate,\n};\n\nexport const PGH_DEFAULT_PREDEFINED_DATE_RANGES: PghPredefinedDate[] = [\n { id: 'today', type: 'relative', start: 0, end: 0, title: 'DATE_RANGE_PICKER_TODAY' },\n { id: 'yesterday', type: 'relative', start: -1, end: -1, title: 'DATE_RANGE_PICKER_YESTERDAY' },\n\n PghPredefinedDateRanges.last7Days,\n {\n id: 'last 30 days',\n type: 'relative',\n start: -29,\n end: 0,\n title: 'DATE_RANGE_PICKER_LAST_THIRTY_DAYS',\n },\n {\n id: 'last 60 days',\n type: 'relative',\n start: -59,\n end: 0,\n title: 'DATE_RANGE_PICKER_LAST_SIXTY_DAYS',\n },\n { id: 'this month', type: 'month', from: 0, title: 'DATE_RANGE_PICKER_CURRENT_MONTH' },\n\n // { id: 'this year', type: 'year', from: 0, title: 'امسال' },\n // { id: 'last year', type: 'year', from: -1, title: 'سال گذشته' },\n\n {\n id: 'clear date',\n type: 'clearDate',\n title: 'DATE_RANGE_PICKER_DELETE_BUTTON',\n },\n];\n\nexport const PGH_DEFAULT_PREDEFINED_EXPANDED_DATE_RANGES: PghPredefinedDate[] = [\n { id: 'today', type: 'relative', start: 0, end: 0, title: 'DATE_RANGE_PICKER_TODAY' },\n\n PghPredefinedDateRanges.last7Days,\n {\n id: 'last 30 days',\n type: 'relative',\n start: -29,\n end: 0,\n title: 'DATE_RANGE_PICKER_LAST_THIRTY_DAYS',\n },\n { id: 'this month', type: 'month', from: 0, title: 'DATE_RANGE_PICKER_CURRENT_MONTH' },\n];\n\nexport interface JalaliDate {\n year: number;\n month: number;\n day: number;\n}\n","import { InjectionToken } from '@angular/core';\nimport {\n PGH_DEFAULT_PREDEFINED_DATE_RANGES,\n PGH_DEFAULT_PREDEFINED_EXPANDED_DATE_RANGES,\n PghPredefinedDateRanges,\n} from './constants';\nimport { PghPredefinedDate } from './models';\n\nexport const PGH_PREDEFINED_DATE_RANGES = new InjectionToken<PghPredefinedDate[]>(\n 'pghPredefinedDateRanges',\n {\n providedIn: 'root',\n factory: () => PGH_DEFAULT_PREDEFINED_DATE_RANGES,\n },\n);\n\nexport const PGH_PREDEFINED_EXPANDED_DATE_RANGES = new InjectionToken<PghPredefinedDate[]>(\n 'pghPredefinedDateRanges',\n {\n providedIn: 'root',\n factory: () => PGH_DEFAULT_PREDEFINED_EXPANDED_DATE_RANGES,\n },\n);\n\nexport const PGH_FALLBACK_PREDEFINED_DATE_RANGE = new InjectionToken<PghPredefinedDate>(\n 'pghPredefinedDateRanges',\n {\n providedIn: 'root',\n factory: () => PghPredefinedDateRanges.last7Days,\n },\n);\n","import {\n GregorianJalaliHelper,\n JalaliDate,\n MaterialJalaliDateAdapter,\n} from '@tapsellorg/angular-material-library/src/lib/jalali-date-adapter';\nimport {\n PghDatePickerSavedItem,\n PghEnrichedDateRange,\n PghJalaliDateRange,\n PghPredefinedDate,\n} from './models';\n\nexport class PghPredefinedRangeCalculator {\n constructor(private dateAdapter: MaterialJalaliDateAdapter) {}\n\n static getEnrichedDateRange(\n range: PghJalaliDateRange,\n predefined?: PghPredefinedDate,\n ): PghEnrichedDateRange | undefined {\n if (predefined && (!range?.start || !range.end)) {\n return;\n }\n const startGregorian = GregorianJalaliHelper.toGregorian(range.start);\n const endGregorian = GregorianJalaliHelper.toGregorian(range.end);\n endGregorian.setHours(23, 59, 59, 999);\n startGregorian.setHours(0, 0, 0, 0);\n\n return {\n start: range.start,\n end: range.end,\n startGregorian,\n endGregorian,\n startTimestamp: startGregorian?.getTime(),\n endTimestamp: endGregorian?.getTime(),\n predefined,\n };\n }\n\n extractRangeFromSavedItem(\n savedDateRange: PghDatePickerSavedItem,\n ): PghJalaliDateRange | undefined {\n if (savedDateRange.type === 'clearDate') {\n return;\n } else if (savedDateRange.type === 'predefined') {\n const predefinedDate = savedDateRange.range as PghPredefinedDate;\n const dateRange = predefinedDate && this.calculateDateRange(predefinedDate);\n if (!dateRange) return;\n\n return dateRange;\n } else {\n const range = savedDateRange.range as PghJalaliDateRange;\n if (!range) return;\n const start = new JalaliDate(range.start.year, range.start.month, range.start.day);\n const end = new JalaliDate(range.end.year, range.end.month, range.end.day);\n return { start, end };\n }\n }\n\n calculateDateRange(range: PghPredefinedDate | undefined): PghJalaliDateRange | undefined {\n if (!range) return;\n const today = this.dateAdapter.today();\n const year = this.dateAdapter.getYear(today);\n\n switch (range.type) {\n case 'relative':\n const start = this.dateAdapter.addCalendarDays(today, range.start);\n const end = this.dateAdapter.addCalendarDays(today, range.end);\n return { start, end };\n case 'week':\n const thisDayAtWantedWeek = this.dateAdapter.addCalendarDays(today, 7 * range.from);\n return this.calculateWeek(thisDayAtWantedWeek);\n\n case 'month':\n const thisDayAtWantedMonth = this.dateAdapter.addCalendarMonths(today, range.from);\n return this.calculateMonth(thisDayAtWantedMonth);\n\n case 'year':\n const startOfYear = this.dateAdapter.createDate(year + range.from, 0, 1);\n\n const lastDayOfYear = this.dateAdapter.isLeapYear(year + range.from) ? 30 : 29;\n const endOfYear = this.dateAdapter.createDate(year + range.from, 11, lastDayOfYear);\n return { start: startOfYear, end: endOfYear };\n\n case 'clearDate':\n default:\n return;\n }\n }\n\n private calculateMonth(forDay: JalaliDate): PghJalaliDateRange {\n const year = this.dateAdapter.getYear(forDay);\n const month = this.dateAdapter.getMonth(forDay);\n\n const start = this.dateAdapter.createDate(year, month, 1);\n const end = this.dateAdapter.addCalendarDays(\n start,\n this.dateAdapter.getNumDaysInMonth(forDay) - 1,\n );\n return { start, end };\n }\n\n private calculateWeek(forDay: JalaliDate): PghJalaliDateRange {\n // Just works for JalaliDates\n const deltaStart =\n ((this.dateAdapter.getFirstDayOfWeek() + 1) % 7) -\n ((this.dateAdapter.getDayOfWeek(forDay) + 1) % 7);\n\n const start = this.dateAdapter.addCalendarDays(forDay, deltaStart);\n const end = this.dateAdapter.addCalendarDays(start, 6);\n return { start, end };\n }\n}\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport {\n DateUtils,\n MaterialJalaliDateAdapter,\n} from '@tapsellorg/angular-material-library/src/lib/jalali-date-adapter';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n PghDatePickerSavedItem,\n PghDateRangeChangeEvent,\n PghJalaliDateRange,\n PghPredefinedDate,\n} from './models';\nimport { DateAdapter } from '@angular/material/core';\nimport { PghPredefinedRangeCalculator } from './predefined-range-calculator';\nimport { PGH_FALLBACK_PREDEFINED_DATE_RANGE } from './configs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PghDatePickerService implements OnDestroy {\n private predefinedRangeCalculator = new PghPredefinedRangeCalculator(this.dateAdapter);\n private readonly DATE_KEY = 'pgh_datepicker_state';\n private readonly EXPIRATION_PERIOD: number | undefined;\n\n dateChange$ = new BehaviorSubject<PghDateRangeChangeEvent | undefined>(\n this.extractLocalStorageValue(),\n );\n\n constructor(\n @Inject(DateAdapter) private dateAdapter: MaterialJalaliDateAdapter,\n @Inject(PGH_FALLBACK_PREDEFINED_DATE_RANGE) private fallBackPredefinedDate: PghPredefinedDate,\n ) {\n window.addEventListener('storage', this.localStorageListener);\n }\n\n ngOnDestroy() {\n window.removeEventListener('storage', this.localStorageListener);\n }\n\n setDateRange(range: PghJalaliDateRange | undefined) {\n if (!range?.start || !range.end) return;\n this.saveDateInLocalStorage({ type: 'range', range });\n this.dateChange$.next(PghPredefinedRangeCalculator.getEnrichedDateRange(range));\n }\n\n setPredefinedDate(predefinedDate: PghPredefinedDate) {\n const range = this.predefinedRangeCalculator.calculateDateRange(predefinedDate);\n this.saveDateInLocalStorage({ type: 'predefined', range: predefinedDate });\n this.dateChange$.next(\n PghPredefinedRangeCalculator.getEnrichedDateRange(range!, predefinedDate),\n );\n }\n\n private saveDateInLocalStorage(dateInfo: Omit<PghDatePickerSavedItem, 'lastChange'>) {\n const datePickerSavedItem: PghDatePickerSavedItem = {\n ...dateInfo,\n lastChange: Date.now(),\n };\n const value = JSON.stringify(datePickerSavedItem);\n localStorage.setItem(this.DATE_KEY, value);\n }\n\n private localStorageListener = (_event: StorageEvent) => {\n const savedItem = this.getSavedDateFromLocalStorage();\n if (!savedItem) return;\n this.dateChange$.next(this.extractLocalStorageValue(savedItem));\n };\n\n private isDateExpired(date: number): boolean {\n if (!this.EXPIRATION_PERIOD) return false;\n const today = new Date();\n return DateUtils.daysBetween(today, new Date(date)) > this.EXPIRATION_PERIOD;\n }\n\n private getSavedDateFromLocalStorage() {\n try {\n const savedRangeItem = localStorage.getItem(this.DATE_KEY);\n if (!savedRangeItem) return;\n\n const savedDateRange = JSON.parse(savedRangeItem) as PghDatePickerSavedItem;\n if (this.isDateExpired(savedDateRange.lastChange)) return;\n\n return savedDateRange;\n } catch (_e) {\n return;\n }\n }\n\n private extractLocalStorageValue(savedDate = this.getSavedDateFromLocalStorage()) {\n const fallBackRange = {\n type: 'predefined' as const,\n lastChange: Date.now(),\n range: this.fallBackPredefinedDate,\n };\n let predefined =\n savedDate?.type === 'predefined' ? (savedDate?.range as PghPredefinedDate) : undefined;\n\n let range = this.predefinedRangeCalculator.extractRangeFromSavedItem(\n savedDate ?? fallBackRange,\n );\n if (!range && !predefined) {\n range = this.predefinedRangeCalculator.extractRangeFromSavedItem(fallBackRange);\n predefined = fallBackRange.range as PghPredefinedDate;\n }\n\n return PghPredefinedRangeCalculator.getEnrichedDateRange(range!, predefined);\n }\n}\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { DateAdapter } from '@angular/material/core';\nimport { MaterialJalaliDateAdapter } from '@tapsellorg/angular-material-library/src/lib/jalali-date-adapter';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { PGH_PREDEFINED_DATE_RANGES, PGH_PREDEFINED_EXPANDED_DATE_RANGES } from './configs';\nimport { PGH_DEFAULT_PREDEFINED_DATE_RANGES } from './constants';\nimport { PghDatePickerService } from './date-picker.service';\nimport {\n PghDatePickerItemId,\n PghEnrichedDateRange,\n PghJalaliDateRange,\n PghPredefinedDate,\n} from './models';\nimport { PghPredefinedRangeCalculator } from './predefined-range-calculator';\nimport { withDestroy } from '@tapsellorg/angular-material-library/src/lib/common';\n\n@Injectable()\nexport class PghDateRangePickerControllerService extends withDestroy() implements OnDestroy {\n private predefinedRangeCalculator = new PghPredefinedRangeCalculator(this.dateAdapter);\n readonly predefinedDates: readonly PghPredefinedDate[];\n private isSynced = true;\n\n private predefinedDate?: PghPredefinedDate;\n dateRange$ = new BehaviorSubject<PghEnrichedDateRange | undefined>(\n this.synchronizationService.dateChange$.value,\n );\n private syncServiceSubscription?: Subscription;\n\n private emitDateRange(dateRange: PghEnrichedDateRange | undefined) {\n this.dateRange$.next(dateRange);\n }\n\n constructor(\n @Inject(DateAdapter) private dateAdapter: MaterialJalaliDateAdapter,\n @Inject(PGH_PREDEFINED_DATE_RANGES) injectedDateRanges: PghPredefinedDate[],\n @Inject(PGH_PREDEFINED_EXPANDED_DATE_RANGES) injectedExpandedDateRanges: PghPredefinedDate[],\n private synchronizationService: PghDatePickerService,\n ) {\n super();\n this.predefinedDates = injectedDateRanges ?? PGH_DEFAULT_PREDEFINED_DATE_RANGES;\n }\n\n ngOnDestroy() {\n this.dateRange$.complete();\n }\n\n setSync(isSynced: boolean) {\n this.isSynced = isSynced;\n this.handleSynchronization();\n }\n\n setDateRange(range: PghJalaliDateRange) {\n this.predefinedDate = undefined;\n if (!range?.start || !range.end) return;\n this.emitDateRange(PghPredefinedRangeCalculator.getEnrichedDateRange(range));\n\n if (this.isSynced) {\n this.synchronizationService.setDateRange(range);\n }\n }\n\n setPredefinedDate(predefinedDate: PghPredefinedDate | undefined) {\n this.predefinedDate = predefinedDate;\n\n const range = this.predefinedRangeCalculator.calculateDateRange(predefinedDate);\n\n if (!predefinedDate) return;\n this.emitDateRange(PghPredefinedRangeCalculator.getEnrichedDateRange(range!, predefinedDate));\n\n if (this.isSynced) {\n this.synchronizationService.setPredefinedDate(predefinedDate);\n }\n }\n\n handleSynchronization() {\n if (this.syncServiceSubscription) {\n this.syncServiceSubscription.unsubscribe();\n }\n if (!this.isSynced) return;\n\n this.syncServiceSubscription = this.synchronizationService.dateChange$\n .pipe(takeUntil(this._destroyed$))\n .subscribe(savedItem => {\n if (!savedItem) return;\n if (savedItem.predefined) {\n this.predefinedDate = savedItem.predefined as PghPredefinedDate;\n }\n this.emitDateRange(savedItem);\n });\n }\n\n setPredefinedDateById(id: PghDatePickerItemId) {\n const predefinedDate = this.predefinedDates.find(item => item.id === id);\n this.setPredefinedDate(predefinedDate);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DateAdapter, MAT_DATE_FORMATS, MatDateFormats } from '@angular/material/core';\nimport { MatCalendar, MatDateRangePicker } from '@angular/material/datepicker';\nimport { JalaliDate } from '@tapsellorg/angular-material-library/src/lib/jalali-date-adapter';\nimport { takeUntil } from 'rxjs/operators';\nimport { PghDateRangePickerControllerService } from '../date-range-picker-controller.service';\nimport { PghPredefinedDate } from '../models';\nimport { withDestroy } from '@tapsellorg/angular-material-library/src/lib/common';\n\n@Component({\n selector: 'pgh-date-picker-header',\n templateUrl: './date-picker-header.component.html',\n styleUrls: ['./date-picker-header.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class PghDatePickerHeaderComponent extends withDestroy() {\n currentPredefinedDate = signal<PghPredefinedDate | undefined>(undefined);\n predefinedDateRanges = signal<readonly PghPredefinedDate[]>(\n this.datePickerController.predefinedDates,\n );\n @HostBinding('class.touch-ui') readonly isTouchUi = this.picker.touchUi;\n\n constructor(\n private calendar: MatCalendar<JalaliDate>,\n private dateAdapter: DateAdapter<JalaliDate>,\n private picker: MatDateRangePicker<JalaliDate>,\n private datePickerController: PghDateRangePickerControllerService,\n @Inject(MAT_DATE_FORMATS) private dateFormats: MatDateFormats,\n cdr: ChangeDetectorRef,\n ) {\n super();\n calendar.stateChanges.pipe(takeUntil(this._destroyed$)).subscribe(() => {\n cdr.markForCheck();\n });\n this.datePickerController.dateRange$.pipe(takeUntil(this._destroyed$)).subscribe(data => {\n this.currentPredefinedDate.set(data?.predefined);\n });\n calendar.selectedChange.pipe(takeUntil(this._destroyed$)).subscribe(() => {\n this.currentPredefinedDate.set(undefined);\n });\n }\n\n get periodLabel(): string {\n return this.dateAdapter\n .format(this.calendar.activeDate, this.dateFormats.display.monthYearLabel)\n .toLocaleUpperCase();\n }\n\n selectRange(predefinedDate: PghPredefinedDate): void {\n this.picker.close();\n this.datePickerController.setPredefinedDate(predefinedDate);\n }\n\n private changeDate(mode: 'month' | 'year', amount: -1 | 1): void {\n this.calendar.activeDate =\n mode === 'month'\n ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, amount)\n : this.dateAdapter.addCalendarYears(this.calendar.activeDate, amount);\n if (!this.dateAdapter.isValid(this.calendar.activeDate)) {\n const diffDaysNumber =\n this.dateAdapter.getNumDaysInMonth(this.calendar.activeDate) - this.calendar.activeDate.day;\n this.calendar.activeDate = this.dateAdapter.addCalendarDays(\n this.calendar.activeDate,\n diffDaysNumber,\n );\n }\n this.calendar.focusActiveCell();\n }\n\n previousClicked(mode: 'month' | 'year'): void {\n this.changeDate(mode, -1);\n }\n\n nextClicked(mode: 'month' | 'year'): void {\n this.changeDate(mode, 1);\n }\n}\n","<div class=\"pgh-date-picker-predefined-dates\">\n @for (item of predefinedDateRanges(); track item) {\n <div\n class=\"pgh-predefined-date\"\n [class.pgh-active]=\"currentPredefinedDate()?.id === item.id\"\n [class.pgh-clear-date]=\"item.type === 'clearDate'\"\n (click)=\"selectRange(item)\"\n >\n {{ item.title | translate }}\n </div>\n }\n</div>\n\n<div class=\"pgh-date-picker-header\">\n <button mat-icon-button (click)=\"previousClicked('year')\">\n <mat-icon svgIcon=\"chevron_right\" style=\"filter: drop-shadow(-6px 0px 0px)\"></mat-icon>\n </button>\n\n <button mat-icon-button (click)=\"previousClicked('month')\">\n <mat-icon svgIcon=\"chevron_right\"></mat-icon>\n </button>\n\n <span class=\"pgh-date-picker-header-label\">{{ periodLabel }}</span>\n\n <button mat-icon-button (click)=\"nextClicked('month')\">\n <mat-icon svgIcon=\"chevron_left\"></mat-icon>\n </button>\n\n <button mat-icon-button (click)=\"nextClicked('year')\">\n <mat-icon svgIcon=\"chevron_left\" style=\"filter: drop-shadow(6px 0px 0px)\"></mat-icon>\n </button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { DateAdapter } from '@angular/material/core';\nimport { DateRange, MatDateRangeSelectionStrategy } from '@angular/material/datepicker';\n\n// https://github.com/angular/components/blob/master/src/material/datepicker/date-range-selection-strategy.ts\n\n@Injectable()\nexport class PghDateRangePickerSelectionStrategy<D> implements MatDateRangeSelectionStrategy<D> {\n delta?: number;\n start?: D;\n\n constructor(private _dateAdapter: DateAdapter<D>) {}\n\n selectionFinished(date: D, currentRange: DateRange<D>) {\n let { start, end } = currentRange;\n if (start == null) {\n start = date;\n } else if (\n !this.delta &&\n end == null &&\n date &&\n this._dateAdapter.compareDate(date, start) >= 0\n ) {\n end = date;\n } else if (\n this.delta &&\n end == null &&\n date &&\n this._dateAdapter.compareDate(date, start) >= 0\n ) {\n const maxDate = this._dateAdapter.addCalendarDays(start, this.delta);\n end = this._dateAdapter.compareDate(date, maxDate) >= 0 ? maxDate : date;\n } else {\n start = date;\n end = null;\n }\n return new DateRange<D>(start, end);\n }\n\n createPreview(activeDate: D | null, currentRange: DateRange<D>): DateRange<D> {\n let start: D | null = null;\n let end: D | null = null;\n if (!this.delta && currentRange.start && !currentRange.end && activeDate) {\n start = currentRange.start;\n end = activeDate;\n } else if (this.delta && currentRange.start && !currentRange.end && activeDate) {\n const maxDate = this._dateAdapter.addCalendarDays(currentRange.start, this.delta);\n start = currentRange.start;\n end = this._dateAdapter.compareDate(activeDate, maxDate) >= 0 ? maxDate : activeDate;\n }\n return new DateRange<D>(start, end);\n }\n\n setMaxRange(maxRange: number) {\n this.delta = maxRange - 1;\n }\n}\n","import { Directive, Inject, input, OnChanges, SimpleChanges } from '@angular/core';\nimport { MAT_DATE_RANGE_SELECTION_STRATEGY } from '@angular/material/datepicker';\nimport { PghDateRangePickerSelectionStrategy } from './date-range-picker-selection.strategy';\n\n@Directive({\n selector: '[pghMaxRange]',\n providers: [\n {\n provide: MAT_DATE_RANGE_SELECTION_STRATEGY,\n useClass: PghDateRangePickerSelectionStrategy,\n },\n ],\n standalone: false,\n})\nexport class PghMaxRangeDirective implements OnChanges {\n maxRange = input<number | undefined>(undefined, {\n alias: 'pghMaxRange',\n });\n constructor(\n @Inject(MAT_DATE_RANGE_SELECTION_STRATEGY)\n private maxRangeStrategy: PghDateRangePickerSelectionStrategy<any>,\n ) {}\n ngOnChanges(changes: SimpleChanges) {\n if (!this.maxRange()) return;\n\n if (changes.maxRange) {\n this.maxRangeStrategy.setMaxRange(this.maxRange()!);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Inject,\n input,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n signal,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { PghDatePickerHeaderComponent } from './date-picker-header/date-picker-header.component';\nimport { PghDateRangePickerControllerService } from './date-range-picker-controller.service';\nimport {\n PghDatePickerItemId,\n PghDateRangeChangeEvent,\n PghEnrichedDateRange,\n PghPredefinedDate,\n} from './models';\nimport { PGH_PREDEFINED_EXPANDED_DATE_RANGES } from './configs';\nimport { PghNotifService } from '@tapsellorg/angular-material-library/notif';\nimport { JalaliDate } from './constants';\n\n@Component({\n selector: 'pgh-date-range-picker',\n templateUrl: './date-range-picker.component.html',\n styleUrls: ['./date-range-picker.component.scss'],\n providers: [PghDateRangePickerControllerService],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PghDateRangePickerComponent implements OnInit, OnChanges, OnDestroy {\n readonly headerComponent = PghDatePickerHeaderComponent;\n start = input(new UntypedFormControl());\n end = input(new UntypedFormControl());\n maxRange = input<number>();\n isSynced = input<boolean>(true);\n expanded = input<boolean>(false);\n disableClickOnInputs = input<boolean>(true);\n defaultSelectedDateRangeId = input<PghDatePickerItemId>();\n disabledDates = input<string[]>();\n rangeChange = output<PghDateRangeChangeEvent>();\n\n private readonly destroy$ = new Subject<void>();\n private selectedDateRange?: PghDateRangeChangeEvent;\n selectedChip = signal<PghDatePickerItemId | undefined>(undefined);\n chipDateRanges = signal<PghPredefinedDate[]>([]);\n\n constructor(\n private dateRangePickerController: PghDateRangePickerControllerService,\n private pghNotifService: PghNotifService,\n @Inject(PGH_PREDEFINED_EXPANDED_DATE_RANGES) injectedExpandedDateRanges: PghPredefinedDate[],\n ) {\n this.chipDateRanges.set(injectedExpandedDateRanges);\n }\n\n ngOnInit(): void {\n this.dateRangePickerController.setSync(this.isSynced());\n this.setDefaultDateRange();\n this.dateRangePickerController.dateRange$\n .pipe(\n takeUntil(this.destroy$),\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n )\n .subscribe(dateRange => {\n this.start().setValue(dateRange?.start);\n this.end().setValue(dateRange?.end);\n this.emitRange(dateRange);\n });\n }\n\n changeSelection(id: PghDatePickerItemId) {\n if (this.selectedChip() !== id) {\n this.selectedChip.set(id);\n this.dateRangePickerController.setPredefinedDateById(this.selectedChip()!);\n } else {\n this.selectedChip.set(undefined);\n this.dateRangePickerController.setPredefinedDateById('clear date');\n }\n }\n jalaliDateToISOString(jalaliDate: JalaliDate) {\n const { year, month, day } = jalaliDate;\n return `${year}${month.toString().padStart(2, '0')}${day.toString().padStart(2, '0')}`;\n }\n\n dateClass = (date: JalaliDate): string => {\n const isoDate = this.jalaliDateToISOString(date);\n return this.isDateDisabled(isoDate) ? 'disabled-day' : '';\n };\n\n isDateDisabled(date: string): boolean {\n return this.disabledDates()?.includes(date) ?? false;\n }\n\n getDatesBetween(startDate: string, endDate: string): string[] {\n const dates = [];\n let currentDate = startDate;\n\n while (currentDate <= endDate) {\n dates.push(currentDate);\n currentDate = this.incrementDate(currentDate);\n }\n\n return dates;\n }\n\n isDateRangeValid(startDate: any, endDate: any): boolean {\n const startDateISO = this.jalaliDateToISOString(startDate);\n const endDateISO = this.jalaliDateToISOString(endDate);\n\n const dateRange = this.getDatesBetween(startDateISO, endDateISO);\n\n return !dateRange.some(date => this.isDateDisabled(date));\n }\n\n incrementDate(date: string): string {\n const parsedDate = new Date(\n parseInt(date.slice(0, 4), 10),\n parseInt(date.slice(4, 6), 10) - 1,\n parseInt(date.slice(6, 8), 10),\n );\n\n parsedDate.setDate(parsedDate.getDate() + 1);\n\n return this.jalaliDateToISOString({\n year: parsedDate.getFullYear(),\n month: parsedDate.getMonth() + 1,\n day: parsedDate.getDate(),\n });\n }\n\n datePickerDateChange() {\n const selectedStartDate = this.start().value;\n const selectedEndDate = this.end().value;\n\n if (!selectedStartDate || !selectedEndDate) return;\n\n if (this.isDateRangeValid(selectedStartDate, selectedEndDate)) {\n this.dateRangePickerController.setDateRange({\n start: selectedStartDate,\n end: selectedEndDate,\n });\n } else {\n this.start().setValue(null);\n this.end().setValue(null);\n\n this.pghNotifService.error('محدوده انتخابی نمیتواند شامل تاریخهای رزرو شده باشد.');\n }\n }\n\n setDefaultDateRange() {\n if (this.defaultSelectedDateRangeId()) {\n this.dateRangePickerController.setPredefinedDateById(this.defaultSelectedDateRangeId()!);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isSynced) {\n this.dateRangePickerController.setSync(this.isSynced());\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n emitRange(range: PghEnrichedDateRange | undefined) {\n if (range?.predefined) {\n this.selectedChip.set(range.predefined.id);\n }\n this.selectedDateRange = range;\n this.rangeChange.emit(<PghDateRangeChangeEvent>range);\n }\n\n getSelectedDateRange() {\n return this.selectedDateRange;\n }\n}\n","<mat-chip-listbox>\n @if (expanded()) { @for (chip of chipDateRanges(); track chip) {\n <mat-chip-option [selected]=\"chip.id === selectedChip()\" (click)=\"changeSelection(chip.id)\">\n {{ chip.title | translate }}\n </mat-chip-option>\n } }\n <div class=\"pgh-date-range-picker\" (click)=\"disableClickOnInputs() && picker.open()\">\n <mat-datepicker-toggle [for]=\"picker\"></mat-datepicker-toggle>\n\n <span class=\"pgh-range-from\">{{ 'DATE_RANGE_PICKER_FROM' | translate }}</span>\n <mat-date-range-input [rangePicker]=\"picker\" [separator]=\"'DATE_RANGE_PICKER_TO' | translate\">\n <input\n [readOnly]=\"disableClickOnInputs()\"\n matStartDate\n [formControl]=\"start()\"\n [placeholder]=\"'DATE_RANGE_PICKER_START_DATE' | translate\"\n (change)=\"!disableClickOnInputs() && datePickerDateChange()\"\n />\n <input\n [readOnly]=\"disableClickOnInputs()\"\n matEndDate\n [formControl]=\"end()\"\n [placeholder]=\"'DATE_RANGE_PICKER_END_DATE' | translate\"\n (dateChange)=\"datePickerDateChange()\"\n />\n </mat-date-range-input>\n\n <!-- TODO: v17 [dateClass]=\"dateClass\" removed from this element -->\n <mat-date-range-picker\n [dateClass]=\"dateClass\"\n [panelClass]=\"'pgh-date-range-picker-panel'\"\n #picker\n [pghMaxRange]=\"maxRange()\"\n [calendarHeaderComponent]=\"headerComponent\"\n ></mat-date-range-picker>\n </div>\n</mat-chip-listbox>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MaterialJalaliDateAdapter } from '@tapsellorg/angular-material-library/src/lib/jalali-date-adapter';\nimport { PghDatePickerHeaderComponent } from './date-picker-header/date-picker-header.component';\nimport { PghDateRangePickerComponent } from './date-range-picker.component';\nimport { PghMaxRangeDirective } from './max-range.directive';\nimport { TranslateModule } from '@tapsellorg/angular-material-library/src/lib/translate';\nimport { MatChipsModule } from '@angular/material/chips';\n\n@NgModule({\n declarations: [PghDateRangePickerComponent, PghMaxRangeDirective, PghDatePickerHeaderComponent],\n imports: [\n CommonModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n ReactiveFormsModule,\n TranslateModule,\n MatChipsModule,\n ],\n exports: [PghDateRangePickerComponent, PghMaxRangeDirective, PghDatePickerHeaderComponent],\n providers: [\n { provide: DateAdapter, useClass: MaterialJalaliDateAdapter, deps: [MAT_DATE_LOCALE] },\n ],\n})\nexport class PghDateRangePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PghDatePickerService","i1","i4","i5","i6.PghMaxRangeDirective","i7"],"mappings":"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