File tree Expand file tree Collapse file tree 3 files changed +34
-2
lines changed
Expand file tree Collapse file tree 3 files changed +34
-2
lines changed Original file line number Diff line number Diff line change @@ -1380,6 +1380,35 @@ export class FieldApi<
13801380 value : this . state . value ,
13811381 fieldApi : this ,
13821382 } )
1383+
1384+ // Only used so that `transform` works properly in the React adapter after first render
1385+ // This can be removed when `transform` is able to use the values directly from FormAPI instead of duplicate them
1386+ // @see https://github.com/TanStack/form-v2-private-discussions/blob/001-duplicated-error-map-keys/RFCs/001-duplicated-error-map-keys.md
1387+ const unsubFormListener = this . form . baseStore . subscribe ( ( ) => {
1388+ const perFieldStore = this . form . _getOrCreatePerFieldStore (
1389+ this . name as string ,
1390+ this . options . defaultMeta as any ,
1391+ )
1392+
1393+ if ( this . getValue ( ) !== perFieldStore . get ( ) . value ) {
1394+ perFieldStore . setState ( ( prev ) => ( {
1395+ ...prev ,
1396+ value : this . getValue ( ) ,
1397+ } ) )
1398+ }
1399+ if (
1400+ this . form . _getFieldMetaBase ( this . name ) !== perFieldStore . get ( ) . metaBase
1401+ ) {
1402+ perFieldStore . setState ( ( prev ) => ( {
1403+ ...prev ,
1404+ meta : this . getMeta ( ) ,
1405+ } ) )
1406+ }
1407+ } )
1408+
1409+ return ( ) => {
1410+ unsubFormListener . unsubscribe ( )
1411+ }
13831412 }
13841413
13851414 /**
Original file line number Diff line number Diff line change @@ -1596,7 +1596,8 @@ describe('field api', () => {
15961596 name : 'name' ,
15971597 } )
15981598
1599- field . mount ( )
1599+ const unmount = field . mount ( )
1600+ unmount ( )
16001601 expect ( form . getFieldInfo ( field . name ) . instance ) . toBeDefined ( )
16011602 expect ( form . getFieldInfo ( field . name ) ) . toBeDefined ( )
16021603 } )
Original file line number Diff line number Diff line change @@ -141,12 +141,14 @@ describe('fieldMeta accessing', () => {
141141 name : 'name' ,
142142 } )
143143
144- field . mount ( )
144+ const cleanup = field . mount ( )
145145
146146 field . setValue ( 'test' )
147147 expect ( form . state . fieldMeta . name ?. isTouched ) . toBe ( true )
148148 expect ( form . state . fieldMeta . name ?. isDirty ) . toBe ( true )
149149
150+ cleanup ( )
151+
150152 const metaAfterCleanup = form . state . fieldMeta . name
151153
152154 expect ( metaAfterCleanup ) . toBeDefined ( )
You can’t perform that action at this time.
0 commit comments