@rsuci/shared-form-components 1.0.85 → 1.0.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/form-renderer/FormRenderer.d.ts.map +1 -1
- package/dist/components/form-renderer/FormRenderer.js +4 -1
- package/dist/hooks/useFormTree.d.ts.map +1 -1
- package/dist/hooks/useFormTree.js +4 -2
- package/dist/lib/__tests__/date-functions.test.js +32 -0
- package/dist/lib/utils/date-functions.d.ts +1 -1
- package/dist/lib/utils/date-functions.d.ts.map +1 -1
- package/dist/lib/utils/date-functions.js +32 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/form-renderer/FormRenderer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAsBlF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClD,oCAAoC;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,iCAAiC;IACjC,SAAS,EAAE,qBAAqB,CAAC;IACjC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"FormRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/form-renderer/FormRenderer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAsBlF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClD,oCAAoC;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,iCAAiC;IACjC,SAAS,EAAE,qBAAqB,CAAC;IACjC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AA0xBD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgBpD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -99,7 +99,10 @@ const FormRendererInner = () => {
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
});
|
|
102
|
-
|
|
102
|
+
// Différer le reset après que React ait committé les state updates
|
|
103
|
+
requestAnimationFrame(() => {
|
|
104
|
+
isApplyingAutoActions.current = false;
|
|
105
|
+
});
|
|
103
106
|
}
|
|
104
107
|
}, [responses, currentGroup, currentInstance, evaluateAutoActionsForInstance, updateResponse]);
|
|
105
108
|
// Vérifier si une variable est visible
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormTree.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE7F,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,kCAAkC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IAEnB,kDAAkD;IAClD,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,kBAAkB,EAAE,CAAC;IAElE,mGAAmG;IACnG,8BAA8B,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,kBAAkB,EAAE,CAAC;IAErG,8DAA8D;IAC9D,sBAAsB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5D,gGAAgG;IAChG,iCAAiC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IAE/F,+CAA+C;IAC/C,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAE9E,wEAAwE;IACxE,wBAAwB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAEjH,uEAAuE;IACvE,yBAAyB,EAAE,MAAM,MAAM,EAAE,CAAC;IAE1C,qCAAqC;IACrC,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAE1E,kCAAkC;IAClC,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;IAElE,0CAA0C;IAC1C,UAAU,EAAE,SAAS,EAAE,CAAC;IAExB,6BAA6B;IAC7B,WAAW,EAAE,SAAS,EAAE,CAAC;IAEzB,6DAA6D;IAC7D,yBAAyB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;IAEvF,sDAAsD;IACtD,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IAEpB,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAErD,+EAA+E;IAC/E,8BAA8B,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC9G;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACzC,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,
|
|
1
|
+
{"version":3,"file":"useFormTree.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormTree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE7F,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,kCAAkC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IAEnB,kDAAkD;IAClD,mBAAmB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,kBAAkB,EAAE,CAAC;IAElE,mGAAmG;IACnG,8BAA8B,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,kBAAkB,EAAE,CAAC;IAErG,8DAA8D;IAC9D,sBAAsB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5D,gGAAgG;IAChG,iCAAiC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IAE/F,+CAA+C;IAC/C,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAE9E,wEAAwE;IACxE,wBAAwB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAEjH,uEAAuE;IACvE,yBAAyB,EAAE,MAAM,MAAM,EAAE,CAAC;IAE1C,qCAAqC;IACrC,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAE1E,kCAAkC;IAClC,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;IAElE,0CAA0C;IAC1C,UAAU,EAAE,SAAS,EAAE,CAAC;IAExB,6BAA6B;IAC7B,WAAW,EAAE,SAAS,EAAE,CAAC;IAEzB,6DAA6D;IAC7D,yBAAyB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;IAEvF,sDAAsD;IACtD,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IAEpB,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAErD,+EAA+E;IAC/E,8BAA8B,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC9G;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACzC,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CA2KnB;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -102,8 +102,10 @@ export function useFormTree(groupes, responses, options = {}) {
|
|
|
102
102
|
setUpdateCount(c => c + 1);
|
|
103
103
|
}, [formTree]);
|
|
104
104
|
// Méthodes pour les autoactions
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
// Note: pas de dépendance sur updateCount car formTree est une instance mutable
|
|
106
|
+
// dont l'état interne est toujours à jour. Ces callbacks sont appelés impérativement.
|
|
107
|
+
const executeAutoActions = useCallback(() => formTree.executeAutoActions(), [formTree]);
|
|
108
|
+
const evaluateAutoActionsForInstance = useCallback((groupeCode, instanceNumber) => formTree.evaluateAutoActionsForInstance(groupeCode, instanceNumber), [formTree]);
|
|
107
109
|
// Valeurs dérivées
|
|
108
110
|
const jumpErrors = useMemo(() => formTree.getJumpErrors(), [formTree, updateCount]);
|
|
109
111
|
const activeJumps = useMemo(() => formTree.getActiveJumps(), [formTree, updateCount]);
|
|
@@ -166,6 +166,38 @@ describe('date-functions', () => {
|
|
|
166
166
|
it('devrait retourner null pour une date invalide', () => {
|
|
167
167
|
expect(parseDateString('invalid')).toBe(null);
|
|
168
168
|
});
|
|
169
|
+
it('devrait parser une date DD/MM/YYYY', () => {
|
|
170
|
+
const result = parseDateString('13/05/2006');
|
|
171
|
+
expect(result).not.toBe(null);
|
|
172
|
+
expect(result.getDate()).toBe(13);
|
|
173
|
+
expect(result.getMonth()).toBe(4); // 0-indexé
|
|
174
|
+
expect(result.getFullYear()).toBe(2006);
|
|
175
|
+
});
|
|
176
|
+
it('devrait parser une date D/M/YYYY (chiffres simples)', () => {
|
|
177
|
+
const result = parseDateString('1/5/2006');
|
|
178
|
+
expect(result).not.toBe(null);
|
|
179
|
+
expect(result.getDate()).toBe(1);
|
|
180
|
+
expect(result.getMonth()).toBe(4);
|
|
181
|
+
expect(result.getFullYear()).toBe(2006);
|
|
182
|
+
});
|
|
183
|
+
it('devrait rejeter un mois > 12 en DD/MM/YYYY', () => {
|
|
184
|
+
expect(parseDateString('13/13/2006')).toBe(null);
|
|
185
|
+
});
|
|
186
|
+
it('devrait rejeter un jour invalide (31 février)', () => {
|
|
187
|
+
expect(parseDateString('31/02/2006')).toBe(null);
|
|
188
|
+
});
|
|
189
|
+
it('devrait parser DD/MM/YYYY HH:mm', () => {
|
|
190
|
+
const result = parseDateString('13/05/2006 14:30');
|
|
191
|
+
expect(result).not.toBe(null);
|
|
192
|
+
expect(result.getDate()).toBe(13);
|
|
193
|
+
expect(result.getMonth()).toBe(4);
|
|
194
|
+
expect(result.getFullYear()).toBe(2006);
|
|
195
|
+
expect(result.getHours()).toBe(14);
|
|
196
|
+
expect(result.getMinutes()).toBe(30);
|
|
197
|
+
});
|
|
198
|
+
it('devrait rejeter DD/MM/YYYY HH:mm avec heure invalide', () => {
|
|
199
|
+
expect(parseDateString('13/05/2006 25:00')).toBe(null);
|
|
200
|
+
});
|
|
169
201
|
});
|
|
170
202
|
describe('isValidDateUnit', () => {
|
|
171
203
|
it('devrait retourner true pour "d"', () => {
|
|
@@ -21,7 +21,7 @@ export declare function calculateDateDiff(date1: Date | null | undefined, date2:
|
|
|
21
21
|
export declare function calculateDateAdd(date: Date | null | undefined, value: number, unit: DateUnit): Date | null;
|
|
22
22
|
/**
|
|
23
23
|
* Parse une chaîne de date en objet Date
|
|
24
|
-
* Supporte les formats: ISO 8601, timestamp
|
|
24
|
+
* Supporte les formats: DD/MM/YYYY, DD/MM/YYYY HH:mm, ISO 8601, timestamp
|
|
25
25
|
* @param value - Chaîne à parser
|
|
26
26
|
* @returns Date ou null si invalide
|
|
27
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-functions.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/date-functions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAC9B,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAC9B,IAAI,EAAE,QAAQ,GACb,MAAM,GAAG,IAAI,CA2Cf;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,QAAQ,GACb,IAAI,GAAG,IAAI,CA6Bb;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"date-functions.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/date-functions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAC9B,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAC9B,IAAI,EAAE,QAAQ,GACb,MAAM,GAAG,IAAI,CA2Cf;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,QAAQ,GACb,IAAI,GAAG,IAAI,CA6Bb;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAkD1D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,QAAQ,CAE9D"}
|
|
@@ -78,7 +78,7 @@ export function calculateDateAdd(date, value, unit) {
|
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
80
80
|
* Parse une chaîne de date en objet Date
|
|
81
|
-
* Supporte les formats: ISO 8601, timestamp
|
|
81
|
+
* Supporte les formats: DD/MM/YYYY, DD/MM/YYYY HH:mm, ISO 8601, timestamp
|
|
82
82
|
* @param value - Chaîne à parser
|
|
83
83
|
* @returns Date ou null si invalide
|
|
84
84
|
*/
|
|
@@ -93,6 +93,37 @@ export function parseDateString(value) {
|
|
|
93
93
|
const date = new Date(timestamp);
|
|
94
94
|
return isNaN(date.getTime()) ? null : date;
|
|
95
95
|
}
|
|
96
|
+
// Format DD/MM/YYYY ou D/M/YYYY (locale française)
|
|
97
|
+
const ddmmyyyy = trimmed.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
|
|
98
|
+
if (ddmmyyyy) {
|
|
99
|
+
const day = parseInt(ddmmyyyy[1], 10);
|
|
100
|
+
const month = parseInt(ddmmyyyy[2], 10);
|
|
101
|
+
const year = parseInt(ddmmyyyy[3], 10);
|
|
102
|
+
if (month >= 1 && month <= 12 && day >= 1 && day <= 31) {
|
|
103
|
+
const date = new Date(year, month - 1, day);
|
|
104
|
+
// Vérifier que les composants correspondent (attrape les dates invalides comme 31/02)
|
|
105
|
+
if (date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day) {
|
|
106
|
+
return date;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
// Format DD/MM/YYYY HH:mm (pour variables DATEHEURE)
|
|
112
|
+
const ddmmyyyyHHmm = trimmed.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})\s+(\d{1,2}):(\d{2})$/);
|
|
113
|
+
if (ddmmyyyyHHmm) {
|
|
114
|
+
const day = parseInt(ddmmyyyyHHmm[1], 10);
|
|
115
|
+
const month = parseInt(ddmmyyyyHHmm[2], 10);
|
|
116
|
+
const year = parseInt(ddmmyyyyHHmm[3], 10);
|
|
117
|
+
const hours = parseInt(ddmmyyyyHHmm[4], 10);
|
|
118
|
+
const minutes = parseInt(ddmmyyyyHHmm[5], 10);
|
|
119
|
+
if (month >= 1 && month <= 12 && day >= 1 && day <= 31 && hours >= 0 && hours <= 23 && minutes >= 0 && minutes <= 59) {
|
|
120
|
+
const date = new Date(year, month - 1, day, hours, minutes);
|
|
121
|
+
if (date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day) {
|
|
122
|
+
return date;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
96
127
|
// Parser comme date ISO ou autre format
|
|
97
128
|
const date = new Date(trimmed);
|
|
98
129
|
return isNaN(date.getTime()) ? null : date;
|
package/package.json
CHANGED