ngx-material-date-fns-adapter
Version:
date-fns adapter for Angular-Material applications. (Support jalali)
1 lines • 23.5 kB
Source Map (JSON)
{"version":3,"file":"ngx-material-date-fns-adapter.mjs","sources":["../../../projects/ngx-material-date-fns-adapter/src/lib/date-fns-adapter.ts","../../../projects/ngx-material-date-fns-adapter/src/lib/date-fns-formats.ts","../../../projects/ngx-material-date-fns-adapter/src/lib/index.ts","../../../projects/ngx-material-date-fns-adapter/src/public-api.ts","../../../projects/ngx-material-date-fns-adapter/src/ngx-material-date-fns-adapter.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\r\nimport { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';\r\n\r\nimport * as gregorian from 'date-fns';\r\nimport * as jalali from 'date-fns-jalali';\r\n//\r\nimport { Locale } from 'date-fns';\r\nimport { enUS } from 'date-fns/locale';\r\nimport { faIR } from 'date-fns-jalali/locale';\r\n\r\n/** Creates an array and fills it with values. */\r\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n const valuesArray = Array(length);\r\n for (let i = 0; i < length; i++) {\r\n valuesArray[i] = valueFunction(i);\r\n }\r\n return valuesArray;\r\n}\r\n\r\ntype CalendarType = 'gregorian' | 'jalali';\r\n\r\ntype DateFnsSubset = {\r\n setMonth: typeof gregorian.setMonth;\r\n setDate: typeof gregorian.setDate;\r\n getMonth: typeof gregorian.getMonth;\r\n getYear: typeof gregorian.getYear;\r\n getDate: typeof gregorian.getDate;\r\n getDay: typeof gregorian.getDay;\r\n getHours: typeof gregorian.getHours;\r\n getMinutes: typeof gregorian.getMinutes;\r\n getSeconds: typeof gregorian.getSeconds;\r\n getDaysInMonth: typeof gregorian.getDaysInMonth;\r\n formatISO: typeof gregorian.formatISO;\r\n addYears: typeof gregorian.addYears;\r\n addMonths: typeof gregorian.addMonths;\r\n addDays: typeof gregorian.addDays;\r\n addSeconds: typeof gregorian.addSeconds;\r\n isValid: typeof gregorian.isValid;\r\n isDate: typeof gregorian.isDate;\r\n format: typeof gregorian.format;\r\n parseISO: typeof gregorian.parseISO;\r\n parse: typeof gregorian.parse;\r\n set: typeof gregorian.set;\r\n};\r\n\r\nconst dateFns: Record<CalendarType, DateFnsSubset> = {\r\n gregorian: {\r\n setMonth: gregorian.setMonth,\r\n setDate: gregorian.setDate,\r\n getMonth: gregorian.getMonth,\r\n getYear: gregorian.getYear,\r\n getDate: gregorian.getDate,\r\n getDay: gregorian.getDay,\r\n getHours: gregorian.getHours,\r\n getMinutes: gregorian.getMinutes,\r\n getSeconds: gregorian.getSeconds,\r\n getDaysInMonth: gregorian.getDaysInMonth,\r\n formatISO: gregorian.formatISO,\r\n addYears: gregorian.addYears,\r\n addMonths: gregorian.addMonths,\r\n addDays: gregorian.addDays,\r\n addSeconds: gregorian.addSeconds,\r\n isValid: gregorian.isValid,\r\n isDate: gregorian.isDate,\r\n format: gregorian.format,\r\n parseISO: gregorian.parseISO,\r\n parse: gregorian.parse,\r\n set: gregorian.set,\r\n },\r\n jalali: {\r\n setMonth: jalali.setMonth,\r\n setDate: jalali.setDate,\r\n getMonth: jalali.getMonth,\r\n getYear: jalali.getYear,\r\n getDate: jalali.getDate,\r\n getDay: jalali.getDay,\r\n getHours: jalali.getHours,\r\n getMinutes: jalali.getMinutes,\r\n getSeconds: jalali.getSeconds,\r\n getDaysInMonth: jalali.getDaysInMonth,\r\n formatISO: jalali.formatISO,\r\n addYears: jalali.addYears,\r\n addMonths: jalali.addMonths,\r\n addDays: jalali.addDays,\r\n addSeconds: jalali.addSeconds,\r\n isValid: jalali.isValid,\r\n isDate: jalali.isDate,\r\n format: jalali.format,\r\n parseISO: jalali.parseISO,\r\n parse: jalali.parse,\r\n set: jalali.set,\r\n },\r\n};\r\n\r\n// date-fns doesn't have a way to read/print month names or days of the week directly,\r\n// so we get them by formatting a date with a format that produces the desired month/day.\r\nconst MONTH_FORMATS = {\r\n long: 'LLLL',\r\n short: 'LLL',\r\n narrow: 'LLLLL',\r\n};\r\n\r\nconst DAY_OF_WEEK_FORMATS = {\r\n long: 'EEEE',\r\n short: 'EEE',\r\n narrow: 'EEEEE',\r\n};\r\n\r\n@Injectable()\r\nexport class DateFnsAdapter extends DateAdapter<Date, Locale> {\r\n /** Calendar type. */\r\n private _calendarType: CalendarType = 'gregorian';\r\n\r\n private get activeDateFns() {\r\n return dateFns[this._calendarType];\r\n }\r\n\r\n /**\r\n * constructor\r\n */\r\n constructor(...args: unknown[]);\r\n\r\n constructor() {\r\n super();\r\n const matDateLocale = inject(MAT_DATE_LOCALE, { optional: true });\r\n this.setLocale(matDateLocale as Locale);\r\n }\r\n\r\n /**\r\n * Sets the locale used for all dates.\r\n *\r\n * @param locale The new locale\r\n */\r\n override setLocale(locale: Locale = enUS): void {\r\n if (locale.code === 'fa-IR') {\r\n locale = faIR;\r\n this._calendarType = 'jalali';\r\n } else {\r\n this._calendarType = 'gregorian';\r\n }\r\n\r\n super.setLocale(locale);\r\n }\r\n\r\n getYear(date: Date): number {\r\n return this.activeDateFns.getYear(date);\r\n }\r\n\r\n getMonth(date: Date): number {\r\n return this.activeDateFns.getMonth(date);\r\n }\r\n\r\n getDate(date: Date): number {\r\n return this.activeDateFns.getDate(date);\r\n }\r\n\r\n getDayOfWeek(date: Date): number {\r\n return this.activeDateFns.getDay(date);\r\n }\r\n\r\n getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const pattern = MONTH_FORMATS[style];\r\n return range(12, (i) => this.format(this.activeDateFns.setMonth(this.today(), i), pattern));\r\n }\r\n\r\n getDateNames(): string[] {\r\n const dtf = typeof Intl !== 'undefined' ? new Intl.DateTimeFormat(this.locale.code, { day: 'numeric' }) : null;\r\n\r\n return range(31, (i) => {\r\n const date = this.createDate(2017, 0, i + 1);\r\n\r\n if (dtf) {\r\n return dtf.format(date).replace(/[\\u200e\\u200f]/g, '');\r\n }\r\n\r\n return this.format(date, 'd');\r\n });\r\n }\r\n\r\n getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\r\n const pattern = DAY_OF_WEEK_FORMATS[style];\r\n return range(7, (i) => this.format(new Date(2017, 0, i + 1), pattern));\r\n }\r\n\r\n getYearName(date: Date): string {\r\n return this.format(date, 'y');\r\n }\r\n\r\n getFirstDayOfWeek(): number {\r\n return this.locale.options?.weekStartsOn ?? 0;\r\n }\r\n\r\n getNumDaysInMonth(date: Date): number {\r\n return this.activeDateFns.getDaysInMonth(date);\r\n }\r\n\r\n clone(date: Date): Date {\r\n return new Date(date.getTime());\r\n }\r\n\r\n createDate(year: number, month: number, date: number): Date {\r\n // Check for invalid month and date (except upper bound on date which we have to check after\r\n // creating the Date).\r\n if (month < 0 || month > 11) {\r\n throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\r\n }\r\n\r\n if (date < 1) {\r\n throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\r\n }\r\n\r\n const result = this.activeDateFns.set(new Date(), {\r\n year,\r\n month,\r\n date,\r\n hours: 0,\r\n minutes: 0,\r\n seconds: 0,\r\n milliseconds: 0,\r\n });\r\n\r\n // Check that the date wasn't above the upper bound for the month, causing the month to overflow\r\n if (this.getMonth(result) !== month) {\r\n throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n today(): Date {\r\n return new Date();\r\n }\r\n\r\n parse(value: unknown, parseFormat: string | string[]): Date | null {\r\n if (typeof value === 'string' && value.length > 0) {\r\n const iso8601Date = this.activeDateFns.parseISO(value);\r\n\r\n if (this.isValid(iso8601Date)) {\r\n return iso8601Date;\r\n }\r\n\r\n const formats = Array.isArray(parseFormat) ? parseFormat : [parseFormat];\r\n\r\n if (!formats.length) {\r\n throw Error('Formats array must not be empty.');\r\n }\r\n\r\n for (const currentFormat of formats) {\r\n const fromFormat = this.activeDateFns.parse(value, currentFormat, new Date(), {\r\n locale: this.locale,\r\n });\r\n\r\n if (this.isValid(fromFormat)) {\r\n return fromFormat;\r\n }\r\n }\r\n\r\n return this.invalid();\r\n } else if (typeof value === 'number') {\r\n return new Date(value);\r\n } else if (value instanceof Date) {\r\n return this.clone(value);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n format(date: Date, displayFormat: string): string {\r\n if (!this.isValid(date)) {\r\n throw Error('DateFnsAdapter: Cannot format invalid date.');\r\n }\r\n\r\n // fix persian Month short name\r\n if (this.locale.code === 'fa-IR' && displayFormat === 'LLL') {\r\n displayFormat = 'LLLL';\r\n }\r\n\r\n // fix persian monthYearLabel\r\n if (this.locale.code === 'fa-IR' && displayFormat === 'LLL uuuu') {\r\n displayFormat = 'LLLL uuuu';\r\n }\r\n\r\n return this.activeDateFns.format(date, displayFormat, {\r\n locale: this.locale,\r\n });\r\n }\r\n\r\n addCalendarYears(date: Date, years: number): Date {\r\n return this.activeDateFns.addYears(date, years);\r\n }\r\n\r\n addCalendarMonths(date: Date, months: number): Date {\r\n return this.activeDateFns.addMonths(date, months);\r\n }\r\n\r\n addCalendarDays(date: Date, days: number): Date {\r\n return this.activeDateFns.addDays(date, days);\r\n }\r\n\r\n toIso8601(date: Date): string {\r\n return this.activeDateFns.formatISO(date, {\r\n representation: 'date',\r\n });\r\n }\r\n\r\n /**\r\n * Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings\r\n * (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an\r\n * invalid date for all other values.\r\n */\r\n override deserialize(value: unknown): Date | null {\r\n if (typeof value === 'string') {\r\n if (!value) {\r\n return null;\r\n }\r\n const date = this.activeDateFns.parseISO(value);\r\n if (this.isValid(date)) {\r\n return date;\r\n }\r\n }\r\n return super.deserialize(value);\r\n }\r\n\r\n isDateInstance(obj: unknown): obj is Date {\r\n return this.activeDateFns.isDate(obj);\r\n }\r\n\r\n isValid(date: Date): boolean {\r\n return this.activeDateFns.isValid(date);\r\n }\r\n\r\n invalid(): Date {\r\n return new Date(NaN);\r\n }\r\n\r\n override setTime(target: Date, hours: number, minutes: number, seconds: number): Date {\r\n if (hours < 0 || hours > 23) {\r\n throw Error(`Invalid hours \"${hours}\". Hours value must be between 0 and 23.`);\r\n }\r\n if (minutes < 0 || minutes > 59) {\r\n throw Error(`Invalid minutes \"${minutes}\". Minutes value must be between 0 and 59.`);\r\n }\r\n if (seconds < 0 || seconds > 59) {\r\n throw Error(`Invalid seconds \"${seconds}\". Seconds value must be between 0 and 59.`);\r\n }\r\n\r\n return this.activeDateFns.set(this.clone(target), {\r\n hours,\r\n minutes,\r\n seconds,\r\n milliseconds: 0,\r\n });\r\n }\r\n\r\n override getHours(date: Date): number {\r\n return this.activeDateFns.getHours(date);\r\n }\r\n\r\n override getMinutes(date: Date): number {\r\n return this.activeDateFns.getMinutes(date);\r\n }\r\n\r\n override getSeconds(date: Date): number {\r\n return this.activeDateFns.getSeconds(date);\r\n }\r\n\r\n override parseTime(value: unknown, parseFormat: string | string[]): Date | null {\r\n return this.parse(value, parseFormat);\r\n }\r\n\r\n override addSeconds(date: Date, amount: number): Date {\r\n return this.activeDateFns.addSeconds(date, amount);\r\n }\r\n}\r\n","import { MatDateFormats } from '@angular/material/core';\r\n\r\nexport const MAT_DATE_FNS_FORMATS: MatDateFormats = {\r\n parse: {\r\n dateInput: 'P',\r\n timeInput: 'p',\r\n },\r\n display: {\r\n dateInput: 'P',\r\n timeInput: 'p',\r\n monthYearLabel: 'LLL uuuu',\r\n dateA11yLabel: 'PP',\r\n monthYearA11yLabel: 'LLLL uuuu',\r\n timeOptionLabel: 'p',\r\n },\r\n};\r\n","import { NgModule, Provider } from '@angular/core';\r\nimport {\r\n DateAdapter,\r\n MAT_DATE_FORMATS,\r\n MAT_DATE_LOCALE,\r\n MatDateFormats,\r\n} from '@angular/material/core';\r\nimport { DateFnsAdapter } from './date-fns-adapter';\r\nimport { MAT_DATE_FNS_FORMATS } from './date-fns-formats';\r\n\r\n@NgModule({\r\n providers: [\r\n {\r\n provide: DateAdapter,\r\n useClass: DateFnsAdapter,\r\n deps: [MAT_DATE_LOCALE],\r\n },\r\n ],\r\n})\r\nexport class DateFnsModule {}\r\n\r\n@NgModule({\r\n providers: [provideDateFnsAdapter()],\r\n})\r\nexport class NgxMatDateFnsModule {}\r\n\r\nexport function provideDateFnsAdapter(\r\n formats: MatDateFormats = MAT_DATE_FNS_FORMATS\r\n): Provider[] {\r\n return [\r\n {\r\n provide: DateAdapter,\r\n useClass: DateFnsAdapter,\r\n deps: [MAT_DATE_LOCALE],\r\n },\r\n { provide: MAT_DATE_FORMATS, useValue: formats },\r\n ];\r\n}\r\n","/*\r\n * Public API Surface of ngx-material-date-fns-adapter\r\n */\r\n\r\nexport * from './lib/date-fns-adapter';\r\nexport * from './lib/date-fns-formats';\r\nexport * from './lib/index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}