Skip to content

Commit f250e65

Browse files
authored
Merge pull request #864 from rvsia/managerValidationErrors
fix(manager): compute hasValidationErrors
2 parents d1ec51b + a4f0c03 commit f250e65

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

packages/form-state-manager/src/tests/utils/manager-api.test.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,7 @@ describe('managerApi', () => {
602602
expect(managerApi().submitSucceeded).toEqual(false);
603603
expect(managerApi().submitErrors).toEqual(error);
604604
expect(managerApi().hasSubmitErrors).toEqual(true);
605+
expect(managerApi().hasValidationErrors).toEqual(false);
605606
});
606607

607608
it('onsubmit receives an error - form level', () => {
@@ -624,6 +625,7 @@ describe('managerApi', () => {
624625
expect(managerApi().submitSucceeded).toEqual(false);
625626
expect(managerApi().submitErrors).toEqual(error);
626627
expect(managerApi().hasSubmitErrors).toEqual(true);
628+
expect(managerApi().hasValidationErrors).toEqual(false);
627629
});
628630

629631
it('getField state should return correct field state', () => {
@@ -1071,6 +1073,7 @@ describe('managerApi', () => {
10711073
expect(managerApi().getState().valid).toEqual(false);
10721074
expect(managerApi().getState().invalid).toEqual(true);
10731075
expect(managerApi().getState().validating).toEqual(false);
1076+
expect(managerApi().hasValidationErrors).toEqual(true);
10741077
});
10751078

10761079
it('should pass async level validation', () => {
@@ -1155,6 +1158,7 @@ describe('managerApi', () => {
11551158
expect(managerApi().getState().valid).toEqual(false);
11561159
expect(managerApi().getState().invalid).toEqual(true);
11571160
expect(managerApi().getState().validating).toEqual(false);
1161+
expect(managerApi().hasValidationErrors).toEqual(true);
11581162
});
11591163
});
11601164

@@ -1173,13 +1177,15 @@ describe('managerApi', () => {
11731177
expect(managerApi().getState().valid).toEqual(false);
11741178
expect(managerApi().getState().invalid).toEqual(true);
11751179
expect(managerApi().getState().validating).toEqual(false);
1180+
expect(managerApi().hasValidationErrors).toEqual(true);
11761181

11771182
change('foo', 'ok');
11781183

11791184
expect(managerApi().getState().errors).toEqual({});
11801185
expect(managerApi().getState().valid).toEqual(true);
11811186
expect(managerApi().getState().invalid).toEqual(false);
11821187
expect(managerApi().getState().validating).toEqual(false);
1188+
expect(managerApi().hasValidationErrors).toEqual(false);
11831189
});
11841190

11851191
it('should fail and then pass async validation', () => {
@@ -1200,6 +1206,7 @@ describe('managerApi', () => {
12001206
expect(managerApi().getState().valid).toEqual(false);
12011207
expect(managerApi().getState().invalid).toEqual(true);
12021208
expect(managerApi().getState().validating).toEqual(false);
1209+
expect(managerApi().hasValidationErrors).toEqual(true);
12031210

12041211
change('foo', 'ok');
12051212
jest.advanceTimersByTime(10);
@@ -1208,6 +1215,7 @@ describe('managerApi', () => {
12081215
expect(managerApi().getState().valid).toEqual(true);
12091216
expect(managerApi().getState().invalid).toEqual(false);
12101217
expect(managerApi().getState().validating).toEqual(false);
1218+
expect(managerApi().hasValidationErrors).toEqual(false);
12111219
});
12121220
});
12131221
});

packages/form-state-manager/src/utils/manager-api.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,7 @@ const createManagerApi: CreateManagerApi = ({
432432
.then(() => {
433433
if (!state.validating) {
434434
state.errors = {};
435+
state.hasValidationErrors = false;
435436
state.valid = true;
436437
state.invalid = false;
437438
state.error = undefined;
@@ -440,6 +441,7 @@ const createManagerApi: CreateManagerApi = ({
440441
})
441442
.catch((errors) => {
442443
state.errors = errors;
444+
state.hasValidationErrors = true;
443445
state.valid = false;
444446
state.invalid = true;
445447
});
@@ -451,10 +453,12 @@ const createManagerApi: CreateManagerApi = ({
451453
handleFieldError(name, false, syncError[name]);
452454
});
453455
state.errors = syncError;
456+
state.hasValidationErrors = true;
454457
state.valid = false;
455458
state.invalid = true;
456459
} else {
457460
state.errors = {};
461+
state.hasValidationErrors = false;
458462
state.valid = true;
459463
state.invalid = false;
460464
state.error = undefined;
@@ -795,13 +799,15 @@ const createManagerApi: CreateManagerApi = ({
795799
state.errors[name] = error;
796800
state.valid = false;
797801
state.invalid = true;
802+
state.hasValidationErrors = true;
798803
} else {
799804
delete state.errors[name];
800805
}
801806

802807
if (Object.keys(state.errors).length === 0) {
803808
state.valid = true;
804809
state.invalid = false;
810+
state.hasValidationErrors = false;
805811
}
806812

807813
render();

0 commit comments

Comments
 (0)