diff --git a/packages/imask/src/masked/date.ts b/packages/imask/src/masked/date.ts index 720fcbd9..202297a6 100644 --- a/packages/imask/src/masked/date.ts +++ b/packages/imask/src/masked/date.ts @@ -20,12 +20,18 @@ type DateOptionsKeys = export type DateValue = Date | null; +const DefaultPattern = 'd{.}`m{.}`Y' + +// Make format and parse required when pattern is provided +type RequiredDateOptions = ({ pattern?: never | typeof DefaultPattern; format?: MaskedDate["format"]; parse?: MaskedDate["parse"] } | + { pattern: MaskedDate["pattern"]; format: MaskedDate["format"]; parse: MaskedDate["parse"] }) + export type MaskedDateOptions = Omit, 'mask'> & Partial> & - { mask?: string | DateMaskType } -; + { mask?: string | DateMaskType } & + RequiredDateOptions; /** Date mask */ export default @@ -52,7 +58,7 @@ class MaskedDate extends MaskedPattern { static DEFAULTS = { ...MaskedPattern.DEFAULTS, mask: Date, - pattern: 'd{.}`m{.}`Y', + pattern: DefaultPattern, format: (date: DateValue, masked: Masked): string => { if (!date) return ''; @@ -95,7 +101,7 @@ class MaskedDate extends MaskedPattern { })); } - override updateOptions (opts: Partial) { + override updateOptions (opts: Partial & RequiredDateOptions) { super.updateOptions(opts as Partial>); } diff --git a/packages/imask/test/masked/date.ts b/packages/imask/test/masked/date.ts index e0743225..09c91b68 100644 --- a/packages/imask/test/masked/date.ts +++ b/packages/imask/test/masked/date.ts @@ -17,6 +17,7 @@ describe('MaskedDate', function () { describe('#isDateExist', function () { masked.updateOptions({ pattern: MaskedDate.DEFAULTS.pattern + '.', + parse: MaskedDate.DEFAULTS.parse, lazy: false, format: function (date) { return MaskedDate.DEFAULTS.format(date, masked) + '.';