@@ -103,6 +103,8 @@ describe('FormState (mode: object) validation', () => {
103103
104104 expect ( state . validating ) . toBe ( false )
105105 expect ( state . validated ) . toBe ( false )
106+ expect ( state . hasOwnError ) . toBe ( false )
107+ expect ( state . ownError ) . toBeUndefined ( )
106108 expect ( state . hasError ) . toBe ( false )
107109 expect ( state . error ) . toBeUndefined ( )
108110
@@ -120,6 +122,8 @@ describe('FormState (mode: object) validation', () => {
120122
121123 await delay ( )
122124 expect ( state . validating ) . toBe ( false )
125+ expect ( state . hasOwnError ) . toBe ( true )
126+ expect ( state . ownError ) . toBe ( 'same' )
123127 expect ( state . hasError ) . toBe ( true )
124128 expect ( state . error ) . toBe ( 'same' )
125129
@@ -138,6 +142,8 @@ describe('FormState (mode: object) validation', () => {
138142 await delay ( )
139143 expect ( state . validating ) . toBe ( false )
140144 expect ( state . validated ) . toBe ( true )
145+ expect ( state . hasOwnError ) . toBe ( true )
146+ expect ( state . ownError ) . toBe ( 'same' )
141147 expect ( state . hasError ) . toBe ( true )
142148 expect ( state . error ) . toBe ( 'same' )
143149
@@ -151,6 +157,8 @@ describe('FormState (mode: object) validation', () => {
151157 await delay ( )
152158 expect ( state . validating ) . toBe ( false )
153159 expect ( state . validated ) . toBe ( true )
160+ expect ( state . hasOwnError ) . toBe ( false )
161+ expect ( state . ownError ) . toBeUndefined ( )
154162 expect ( state . hasError ) . toBe ( false )
155163 expect ( state . error ) . toBeUndefined ( )
156164
@@ -177,6 +185,8 @@ describe('FormState (mode: object) validation', () => {
177185 expect ( state . value ) . toEqual ( initialValue )
178186 expect ( state . dirty ) . toBe ( false )
179187 expect ( state . validating ) . toBe ( false )
188+ expect ( state . hasOwnError ) . toBe ( false )
189+ expect ( state . ownError ) . toBeUndefined ( )
180190 expect ( state . hasError ) . toBe ( false )
181191 expect ( state . error ) . toBeUndefined ( )
182192
@@ -337,38 +347,44 @@ describe('FormState (mode: object) validation', () => {
337347 await delay ( )
338348 expect ( state . $ . foo . error ) . toBe ( 'empty' )
339349 expect ( state . $ . bar . error ) . toBeUndefined ( )
350+ expect ( state . ownError ) . toBeUndefined ( )
340351 expect ( state . error ) . toBe ( 'empty' )
341352
342353 state . $ . foo . onChange ( '123' )
343354 await delay ( )
344355 expect ( state . $ . foo . error ) . toBeUndefined ( )
345356 expect ( state . $ . bar . error ) . toBeUndefined ( )
357+ expect ( state . ownError ) . toBeUndefined ( )
346358 expect ( state . error ) . toBeUndefined ( )
347359
348360 state . $ . bar . onChange ( '123' )
349361 await delay ( )
350362 expect ( state . $ . foo . error ) . toBeUndefined ( )
351363 expect ( state . $ . bar . error ) . toBeUndefined ( )
364+ expect ( state . ownError ) . toBe ( 'same' )
352365 expect ( state . error ) . toBe ( 'same' )
353366
354367 state . $ . bar . onChange ( '' )
355368 await delay ( )
356369 expect ( state . $ . foo . error ) . toBeUndefined ( )
357370 expect ( state . $ . bar . error ) . toBe ( 'empty' )
371+ expect ( state . ownError ) . toBeUndefined ( )
358372 expect ( state . error ) . toBe ( 'empty' )
359373
360374 state . $ . bar . onChange ( '123' )
361375 state . $ . foo . onChange ( '456' )
362376 await delay ( )
363377 expect ( state . $ . foo . error ) . toBeUndefined ( )
364378 expect ( state . $ . bar . error ) . toBeUndefined ( )
379+ expect ( state . ownError ) . toBeUndefined ( )
365380 expect ( state . error ) . toBeUndefined ( )
366381
367382 state . $ . bar . onChange ( '123456' )
368383 state . $ . foo . onChange ( '123456' )
369384 await delay ( )
370385 expect ( state . $ . foo . error ) . toBeUndefined ( )
371386 expect ( state . $ . bar . error ) . toBeUndefined ( )
387+ expect ( state . ownError ) . toBe ( 'same' )
372388 expect ( state . error ) . toBe ( 'same' )
373389
374390 state . dispose ( )
@@ -388,38 +404,44 @@ describe('FormState (mode: object) validation', () => {
388404 await delay ( )
389405 expect ( state . $ . foo . error ) . toBe ( 'empty' )
390406 expect ( state . $ . bar . error ) . toBeUndefined ( )
407+ expect ( state . ownError ) . toBeUndefined ( )
391408 expect ( state . error ) . toBe ( 'empty' )
392409
393410 state . $ . foo . onChange ( '123' )
394411 await delay ( )
395412 expect ( state . $ . foo . error ) . toBeUndefined ( )
396413 expect ( state . $ . bar . error ) . toBeUndefined ( )
414+ expect ( state . ownError ) . toBeUndefined ( )
397415 expect ( state . error ) . toBeUndefined ( )
398416
399417 state . $ . bar . onChange ( '123' )
400418 await delay ( )
401419 expect ( state . $ . foo . error ) . toBeUndefined ( )
402420 expect ( state . $ . bar . error ) . toBeUndefined ( )
421+ expect ( state . ownError ) . toBe ( 'same' )
403422 expect ( state . error ) . toBe ( 'same' )
404423
405424 state . $ . bar . onChange ( '' )
406425 await delay ( )
407426 expect ( state . $ . foo . error ) . toBeUndefined ( )
408427 expect ( state . $ . bar . error ) . toBe ( 'empty' )
428+ expect ( state . ownError ) . toBeUndefined ( )
409429 expect ( state . error ) . toBe ( 'empty' )
410430
411431 state . $ . bar . onChange ( '123' )
412432 state . $ . foo . onChange ( '456' )
413433 await delay ( )
414434 expect ( state . $ . foo . error ) . toBeUndefined ( )
415435 expect ( state . $ . bar . error ) . toBeUndefined ( )
436+ expect ( state . ownError ) . toBeUndefined ( )
416437 expect ( state . error ) . toBeUndefined ( )
417438
418439 state . $ . bar . onChange ( '123456' )
419440 state . $ . foo . onChange ( '123456' )
420441 await delay ( )
421442 expect ( state . $ . foo . error ) . toBeUndefined ( )
422443 expect ( state . $ . bar . error ) . toBeUndefined ( )
444+ expect ( state . ownError ) . toBe ( 'same' )
423445 expect ( state . error ) . toBe ( 'same' )
424446
425447 state . dispose ( )
@@ -448,19 +470,31 @@ describe('FormState (mode: object) validation', () => {
448470 expect ( state . validating ) . toBe ( false )
449471 expect ( state . validated ) . toBe ( false )
450472 expect ( state . hasError ) . toBe ( false )
473+ expect ( state . ownError ) . toBeUndefined ( )
451474 expect ( state . error ) . toBeUndefined ( )
452475
453476 state . $ . foo . onChange ( '' )
454477 await state . validate ( )
478+ expect ( state . hasOwnError ) . toBe ( false )
479+ expect ( state . ownError ) . toBeUndefined ( )
455480 expect ( state . hasError ) . toBe ( false )
456481 expect ( state . error ) . toBeUndefined ( )
457482
458483 runInAction ( ( ) => options . disabled = false )
459484
460485 await delay ( )
486+ expect ( state . hasOwnError ) . toBe ( false )
487+ expect ( state . ownError ) . toBeUndefined ( )
461488 expect ( state . hasError ) . toBe ( true )
462489 expect ( state . error ) . toBe ( 'empty' )
463490
491+ state . $ . foo . onChange ( '123' )
492+ await state . validate ( )
493+ expect ( state . hasOwnError ) . toBe ( true )
494+ expect ( state . ownError ) . toBe ( 'same' )
495+ expect ( state . hasError ) . toBe ( true )
496+ expect ( state . error ) . toBe ( 'same' )
497+
464498 state . dispose ( )
465499 } )
466500} )
@@ -549,6 +583,8 @@ describe('FormState (mode: array) validation', () => {
549583
550584 expect ( state . validating ) . toBe ( false )
551585 expect ( state . validated ) . toBe ( false )
586+ expect ( state . hasOwnError ) . toBe ( false )
587+ expect ( state . ownError ) . toBeUndefined ( )
552588 expect ( state . hasError ) . toBe ( false )
553589 expect ( state . error ) . toBeUndefined ( )
554590
@@ -565,6 +601,8 @@ describe('FormState (mode: array) validation', () => {
565601
566602 await delay ( )
567603 expect ( state . $ [ 1 ] . validated ) . toBe ( true )
604+ expect ( state . hasOwnError ) . toBe ( true )
605+ expect ( state . ownError ) . toBe ( 'too long' )
568606 expect ( state . hasError ) . toBe ( true )
569607 expect ( state . error ) . toBe ( 'too long' )
570608
@@ -582,6 +620,8 @@ describe('FormState (mode: array) validation', () => {
582620 await delay ( )
583621 expect ( state . validating ) . toBe ( false )
584622 expect ( state . validated ) . toBe ( true )
623+ expect ( state . hasOwnError ) . toBe ( true )
624+ expect ( state . ownError ) . toBe ( 'too long' )
585625 expect ( state . hasError ) . toBe ( true )
586626 expect ( state . error ) . toBe ( 'too long' )
587627
@@ -627,6 +667,8 @@ describe('FormState (mode: array) validation', () => {
627667 expect ( state . value ) . toEqual ( initialValue )
628668 expect ( state . dirty ) . toBe ( false )
629669 expect ( state . validating ) . toBe ( false )
670+ expect ( state . hasOwnError ) . toBe ( false )
671+ expect ( state . ownError ) . toBeUndefined ( )
630672 expect ( state . hasError ) . toBe ( false )
631673 expect ( state . error ) . toBeUndefined ( )
632674
@@ -793,32 +835,37 @@ describe('FormState (mode: array) validation', () => {
793835 await delay ( )
794836 expect ( state . $ [ 0 ] . error ) . toBeUndefined ( )
795837 expect ( state . $ [ 1 ] . error ) . toBe ( 'empty' )
838+ expect ( state . ownError ) . toBeUndefined ( )
796839 expect ( state . error ) . toBe ( 'empty' )
797840
798841 state . $ [ 1 ] . onChange ( '456' )
799842 await delay ( )
800843 expect ( state . $ [ 0 ] . error ) . toBeUndefined ( )
801844 expect ( state . $ [ 1 ] . error ) . toBeUndefined ( )
845+ expect ( state . ownError ) . toBe ( 'too long' )
802846 expect ( state . error ) . toBe ( 'too long' )
803847
804848 state . $ [ 0 ] . onChange ( '1' )
805849 await delay ( )
806850 expect ( state . $ [ 0 ] . error ) . toBeUndefined ( )
807851 expect ( state . $ [ 1 ] . error ) . toBeUndefined ( )
852+ expect ( state . ownError ) . toBeUndefined ( )
808853 expect ( state . error ) . toBeUndefined ( )
809854
810855 state . $ [ 0 ] . onChange ( '123' )
811856 state . $ [ 1 ] . onChange ( '4' )
812857 await delay ( )
813858 expect ( state . $ [ 0 ] . error ) . toBeUndefined ( )
814859 expect ( state . $ [ 1 ] . error ) . toBeUndefined ( )
860+ expect ( state . ownError ) . toBeUndefined ( )
815861 expect ( state . error ) . toBeUndefined ( )
816862
817863 state . $ [ 0 ] . onChange ( '1234' )
818864 state . $ [ 1 ] . onChange ( '56' )
819865 await delay ( )
820866 expect ( state . $ [ 0 ] . error ) . toBeUndefined ( )
821867 expect ( state . $ [ 1 ] . error ) . toBeUndefined ( )
868+ expect ( state . ownError ) . toBe ( 'too long' )
822869 expect ( state . error ) . toBe ( 'too long' )
823870
824871 state . dispose ( )
@@ -837,32 +884,37 @@ describe('FormState (mode: array) validation', () => {
837884 await delay ( )
838885 expect ( state . $ [ 0 ] . error ) . toBeUndefined ( )
839886 expect ( state . $ [ 1 ] . error ) . toBe ( 'empty' )
887+ expect ( state . ownError ) . toBeUndefined ( )
840888 expect ( state . error ) . toBe ( 'empty' )
841889
842890 state . $ [ 1 ] . onChange ( '456' )
843891 await delay ( )
844892 expect ( state . $ [ 0 ] . error ) . toBeUndefined ( )
845893 expect ( state . $ [ 1 ] . error ) . toBeUndefined ( )
894+ expect ( state . ownError ) . toBe ( 'too long' )
846895 expect ( state . error ) . toBe ( 'too long' )
847896
848897 state . $ [ 0 ] . onChange ( '1' )
849898 await delay ( )
850899 expect ( state . $ [ 0 ] . error ) . toBeUndefined ( )
851900 expect ( state . $ [ 1 ] . error ) . toBeUndefined ( )
901+ expect ( state . ownError ) . toBeUndefined ( )
852902 expect ( state . error ) . toBeUndefined ( )
853903
854904 state . $ [ 0 ] . onChange ( '123' )
855905 state . $ [ 1 ] . onChange ( '4' )
856906 await delay ( )
857907 expect ( state . $ [ 0 ] . error ) . toBeUndefined ( )
858908 expect ( state . $ [ 1 ] . error ) . toBeUndefined ( )
909+ expect ( state . ownError ) . toBeUndefined ( )
859910 expect ( state . error ) . toBeUndefined ( )
860911
861912 state . $ [ 0 ] . onChange ( '1234' )
862913 state . $ [ 1 ] . onChange ( '56' )
863914 await delay ( )
864915 expect ( state . $ [ 0 ] . error ) . toBeUndefined ( )
865916 expect ( state . $ [ 1 ] . error ) . toBeUndefined ( )
917+ expect ( state . ownError ) . toBe ( 'too long' )
866918 expect ( state . error ) . toBe ( 'too long' )
867919
868920 state . dispose ( )
@@ -883,19 +935,32 @@ describe('FormState (mode: array) validation', () => {
883935 runInAction ( ( ) => options . disabled = true )
884936
885937 await state . validate ( )
938+ expect ( state . hasOwnError ) . toBe ( false )
939+ expect ( state . ownError ) . toBeUndefined ( )
886940 expect ( state . hasError ) . toBe ( false )
887941 expect ( state . error ) . toBeUndefined ( )
888942
889943 state . $ [ 0 ] . onChange ( '' )
890944 await state . validate ( )
945+ expect ( state . hasOwnError ) . toBe ( false )
946+ expect ( state . ownError ) . toBeUndefined ( )
891947 expect ( state . hasError ) . toBe ( false )
892948 expect ( state . error ) . toBeUndefined ( )
893949
894950 runInAction ( ( ) => options . disabled = false )
895951 await delay ( )
952+ expect ( state . hasOwnError ) . toBe ( false )
953+ expect ( state . ownError ) . toBeUndefined ( )
896954 expect ( state . hasError ) . toBe ( true )
897955 expect ( state . error ) . toBe ( 'empty' )
898956
957+ state . $ [ 0 ] . onChange ( '123' )
958+ await delay ( )
959+ expect ( state . hasOwnError ) . toBe ( true )
960+ expect ( state . ownError ) . toBe ( 'too long' )
961+ expect ( state . hasError ) . toBe ( true )
962+ expect ( state . error ) . toBe ( 'too long' )
963+
899964 state . dispose ( )
900965 } )
901966
@@ -962,28 +1027,35 @@ describe('nested FormState', () => {
9621027 } )
9631028
9641029 await state . validate ( )
1030+ expect ( state . ownError ) . toBeUndefined ( )
9651031 expect ( state . error ) . toBe ( 'empty' )
1032+ expect ( state . $ . inputs . ownError ) . toBeUndefined ( )
9661033 expect ( state . $ . inputs . $ [ 0 ] . error ) . toBe ( 'empty' )
9671034 expect ( state . $ . inputs . $ [ 1 ] . error ) . toBe ( 'empty' )
9681035
9691036 state . $ . inputs . $ [ 0 ] . onChange ( '123' )
9701037 state . $ . inputs . $ [ 1 ] . onChange ( '456' )
9711038
9721039 await state . validate ( )
1040+ expect ( state . ownError ) . toBeUndefined ( )
9731041 expect ( state . error ) . toBe ( 'too long' )
1042+ expect ( state . $ . inputs . error ) . toBe ( 'too long' )
9741043 expect ( state . $ . inputs . $ [ 0 ] . error ) . toBeUndefined ( )
9751044 expect ( state . $ . inputs . $ [ 1 ] . error ) . toBeUndefined ( )
9761045
9771046 state . $ . enabled . onChange ( false )
9781047
9791048 await delay ( )
1049+ expect ( state . ownError ) . toBeUndefined ( )
9801050 expect ( state . error ) . toBeUndefined ( )
9811051
9821052 state . $ . enabled . onChange ( true )
9831053 state . $ . inputs . $ [ 1 ] . onChange ( '' )
9841054
9851055 await delay ( )
1056+ expect ( state . ownError ) . toBeUndefined ( )
9861057 expect ( state . error ) . toBe ( 'empty' )
1058+ expect ( state . $ . inputs . ownError ) . toBeUndefined ( )
9871059 expect ( state . $ . inputs . $ [ 0 ] . error ) . toBeUndefined ( )
9881060 expect ( state . $ . inputs . $ [ 1 ] . error ) . toBe ( 'empty' )
9891061
@@ -993,7 +1065,9 @@ describe('nested FormState', () => {
9931065 } )
9941066
9951067 await delay ( )
1068+ expect ( state . ownError ) . toBeUndefined ( )
9961069 expect ( state . error ) . toBe ( 'too long' )
1070+ expect ( state . $ . inputs . error ) . toBe ( 'too long' )
9971071 expect ( state . $ . inputs . $ [ 0 ] . error ) . toBeUndefined ( )
9981072 expect ( state . $ . inputs . $ [ 1 ] . error ) . toBeUndefined ( )
9991073 expect ( state . $ . inputs . $ [ 2 ] . error ) . toBeUndefined ( )
0 commit comments