Skip to content

Commit b68419d

Browse files
author
David Speirs
committed
fix: do not use spread operator on valid dates
To ensure that isObject does not return true for dates to avoid using the spread operator on a date causing it to be an empty object. PR Close #7
1 parent 33c288e commit b68419d

File tree

2 files changed

+97
-2
lines changed

2 files changed

+97
-2
lines changed

projects/ngneat/forms-manager/src/lib/forms-manager.spec.ts

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ function getSnapshot(formsManager) {
99
}
1010

1111
describe('FormsManager', () => {
12-
let formsManager: NgFormsManager, control: FormControl, arr: FormArray, group: FormGroup;
12+
let formsManager: NgFormsManager,
13+
control: FormControl,
14+
arr: FormArray,
15+
group: FormGroup,
16+
date: Date;
1317

1418
beforeEach(() => {
1519
formsManager = new NgFormsManager(new NgFormsManagerConfig());
@@ -18,12 +22,14 @@ describe('FormsManager', () => {
1822
group = new FormGroup({
1923
name: new FormControl(),
2024
email: new FormControl(),
25+
date: new FormControl(),
2126
phone: new FormGroup({
2227
number: new FormControl(),
2328
prefix: new FormControl(),
2429
}),
2530
arr: new FormArray([]),
2631
});
32+
date = new Date();
2733

2834
formsManager
2935
.upsert('config', control)
@@ -67,6 +73,7 @@ describe('FormsManager', () => {
6773
value: {
6874
name: null,
6975
email: null,
76+
date: null,
7077
phone: {
7178
number: null,
7279
prefix: null,
@@ -76,6 +83,7 @@ describe('FormsManager', () => {
7683
rawValue: {
7784
name: null,
7885
email: null,
86+
date: null,
7987
phone: {
8088
number: null,
8189
prefix: null,
@@ -115,6 +123,18 @@ describe('FormsManager', () => {
115123
pristine: true,
116124
pending: false,
117125
},
126+
date: {
127+
value: null,
128+
rawValue: null,
129+
valid: true,
130+
dirty: false,
131+
invalid: false,
132+
disabled: false,
133+
errors: null,
134+
touched: false,
135+
pristine: true,
136+
pending: false,
137+
},
118138
phone: {
119139
value: {
120140
number: null,
@@ -207,6 +227,7 @@ describe('FormsManager', () => {
207227
value: {
208228
name: null,
209229
email: null,
230+
date: null,
210231
phone: {
211232
number: null,
212233
prefix: null,
@@ -216,6 +237,7 @@ describe('FormsManager', () => {
216237
rawValue: {
217238
name: null,
218239
email: null,
240+
date: null,
219241
phone: {
220242
number: null,
221243
prefix: null,
@@ -255,6 +277,18 @@ describe('FormsManager', () => {
255277
pristine: true,
256278
pending: false,
257279
},
280+
date: {
281+
value: null,
282+
rawValue: null,
283+
valid: true,
284+
dirty: false,
285+
invalid: false,
286+
disabled: false,
287+
errors: null,
288+
touched: false,
289+
pristine: true,
290+
pending: false,
291+
},
258292
phone: {
259293
value: {
260294
number: null,
@@ -373,6 +407,7 @@ describe('FormsManager', () => {
373407
value: {
374408
name: null,
375409
email: null,
410+
date: null,
376411
phone: {
377412
number: null,
378413
prefix: null,
@@ -382,6 +417,7 @@ describe('FormsManager', () => {
382417
rawValue: {
383418
name: null,
384419
email: null,
420+
date: null,
385421
phone: {
386422
number: null,
387423
prefix: null,
@@ -421,6 +457,18 @@ describe('FormsManager', () => {
421457
pristine: true,
422458
pending: false,
423459
},
460+
date: {
461+
value: null,
462+
rawValue: null,
463+
valid: true,
464+
dirty: false,
465+
invalid: false,
466+
disabled: false,
467+
errors: null,
468+
touched: false,
469+
pristine: true,
470+
pending: false,
471+
},
424472
phone: {
425473
value: {
426474
number: null,
@@ -484,6 +532,7 @@ describe('FormsManager', () => {
484532
group.patchValue({
485533
name: 'Netanel',
486534
535+
date: date,
487536
phone: {
488537
number: 1,
489538
prefix: 2,
@@ -547,6 +596,7 @@ describe('FormsManager', () => {
547596
value: {
548597
name: 'Netanel',
549598
599+
date: date,
550600
phone: {
551601
number: 1,
552602
prefix: 2,
@@ -556,6 +606,7 @@ describe('FormsManager', () => {
556606
rawValue: {
557607
name: 'Netanel',
558608
609+
date: date,
559610
phone: {
560611
number: 1,
561612
prefix: 2,
@@ -595,6 +646,18 @@ describe('FormsManager', () => {
595646
pristine: true,
596647
pending: false,
597648
},
649+
date: {
650+
value: date,
651+
rawValue: null,
652+
valid: true,
653+
dirty: false,
654+
invalid: false,
655+
disabled: false,
656+
errors: null,
657+
touched: false,
658+
pristine: true,
659+
pending: false,
660+
},
598661
phone: {
599662
value: {
600663
number: 1,
@@ -756,6 +819,7 @@ describe('FormsManager', () => {
756819
value: {
757820
name: null,
758821
email: null,
822+
date: null,
759823
phone: {
760824
number: null,
761825
prefix: null,
@@ -765,6 +829,7 @@ describe('FormsManager', () => {
765829
rawValue: {
766830
name: null,
767831
email: null,
832+
date: null,
768833
phone: {
769834
number: null,
770835
prefix: null,
@@ -804,6 +869,18 @@ describe('FormsManager', () => {
804869
pristine: true,
805870
pending: false,
806871
},
872+
date: {
873+
value: null,
874+
rawValue: null,
875+
valid: true,
876+
dirty: false,
877+
invalid: false,
878+
disabled: false,
879+
errors: null,
880+
touched: false,
881+
pristine: true,
882+
pending: false,
883+
},
807884
phone: {
808885
value: {
809886
number: null,
@@ -875,6 +952,7 @@ describe('FormsManager', () => {
875952
value: {
876953
name: null,
877954
email: null,
955+
date: null,
878956
phone: {
879957
number: 3,
880958
prefix: 4,
@@ -884,6 +962,7 @@ describe('FormsManager', () => {
884962
rawValue: {
885963
name: null,
886964
email: null,
965+
date: null,
887966
phone: {
888967
number: 3,
889968
prefix: 4,
@@ -923,6 +1002,18 @@ describe('FormsManager', () => {
9231002
pristine: true,
9241003
pending: false,
9251004
},
1005+
date: {
1006+
value: null,
1007+
rawValue: null,
1008+
valid: true,
1009+
dirty: false,
1010+
invalid: false,
1011+
disabled: false,
1012+
errors: null,
1013+
touched: false,
1014+
pristine: true,
1015+
pending: false,
1016+
},
9261017
phone: {
9271018
value: {
9281019
number: 3,

projects/ngneat/forms-manager/src/lib/utils.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ export function clone(value: any): any {
2525
return isObject(value) ? { ...value } : Array.isArray(value) ? [...value] : value;
2626
}
2727

28+
export function isValidDate(value: any): boolean {
29+
return value && Object.prototype.toString.call(value) === '[object Date]' && !isNaN(value);
30+
}
31+
2832
export function isObject(val) {
29-
if (val == null || Array.isArray(val)) {
33+
if (val == null || Array.isArray(val) || isValidDate(val)) {
3034
return false;
3135
}
3236

0 commit comments

Comments
 (0)