From d99874ae408299c5278025e3f17172acc1724818 Mon Sep 17 00:00:00 2001 From: Alvaro Tinoco Date: Sat, 20 Apr 2024 23:55:46 +0200 Subject: [PATCH 1/2] fix #973 --- packages/imask/src/masked/date.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/imask/src/masked/date.ts b/packages/imask/src/masked/date.ts index 720fcbd9..5556ef9f 100644 --- a/packages/imask/src/masked/date.ts +++ b/packages/imask/src/masked/date.ts @@ -24,7 +24,10 @@ export type MaskedDateOptions = Omit, 'mask'> & Partial> & - { mask?: string | DateMaskType } + { mask?: string | DateMaskType } & + // Make format and parse required when pattern is provided + ({ pattern?: never; format?: MaskedDate["format"]; parse?: MaskedDate["parse"] } | + { pattern: MaskedDate["pattern"]; format: MaskedDate["format"]; parse: MaskedDate["parse"] }) ; /** Date mask */ From 5b506926d4f2f4097cb86d96968e7d42518eaefb Mon Sep 17 00:00:00 2001 From: Alvaro Tinoco Marmol Date: Sun, 21 Apr 2024 00:13:26 +0200 Subject: [PATCH 2/2] ignore default pattern --- packages/imask/src/masked/date.ts | 15 +++++++++------ packages/imask/test/masked/date.ts | 1 + 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/imask/src/masked/date.ts b/packages/imask/src/masked/date.ts index 5556ef9f..202297a6 100644 --- a/packages/imask/src/masked/date.ts +++ b/packages/imask/src/masked/date.ts @@ -20,15 +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 } & - // Make format and parse required when pattern is provided - ({ pattern?: never; format?: MaskedDate["format"]; parse?: MaskedDate["parse"] } | - { pattern: MaskedDate["pattern"]; format: MaskedDate["format"]; parse: MaskedDate["parse"] }) -; + RequiredDateOptions; /** Date mask */ export default @@ -55,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 ''; @@ -98,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) + '.';