@@ -4,7 +4,7 @@ import { useEffect, useState } from 'react';
44import { Control , useFormState , useWatch } from 'react-hook-form' ;
55import useDeepCompareEffect from 'use-deep-compare-effect' ;
66import { MessageData , UpdatePayload } from './types' ;
7- import { proxyToObject } from './utils' ;
7+ import { nestToFlat , proxyToObject } from './utils' ;
88
99const id = nanoid ( ) ;
1010
@@ -33,14 +33,6 @@ export function useExportControlToExtension(control: Control<any>) {
3333 return ( ) => window . removeEventListener ( 'message' , handleInitMessage ) ;
3434 } , [ ] ) ;
3535
36- const toFlat = < V > ( obj : object , defaultValue ?: V ) => {
37- return [ ...control . _names . mount ] . reduce ( ( perv , name ) => {
38- // nested field may be `undefined`
39- perv [ name ] = _ . get ( obj , name ) || defaultValue ;
40- return perv ;
41- } , { } as Record < string , V > ) ;
42- } ;
43-
4436 useDeepCompareEffect ( ( ) => {
4537 if ( ! isExtensionEnabled ) {
4638 return ;
@@ -53,21 +45,29 @@ export function useExportControlToExtension(control: Control<any>) {
5345 ...formStatus
5446 } = proxyToObject ( formState ) ;
5547
56- const formValues = toFlat ( nestedFormValues , '' ) ;
57- const dirtyFields = toFlat ( nestedDirtyFields , false ) ;
58- const touchedFields = toFlat ( nestedTouchedFields , false ) ;
48+ const flatFieldNames = [ ...control . _names . mount ] ;
49+
50+ const formValues = nestToFlat ( flatFieldNames , nestedFormValues , '' ) ;
51+ const dirtyFields = nestToFlat ( flatFieldNames , nestedDirtyFields , false ) ;
52+ const touchedFields = nestToFlat (
53+ flatFieldNames ,
54+ nestedTouchedFields ,
55+ false ,
56+ ) ;
57+ const flatErrors = nestToFlat < { type ?: string ; message ?: string } > (
58+ flatFieldNames ,
59+ nestedErrors ,
60+ ) ;
5961
60- const errors = Object . entries (
61- toFlat < { type : string ; message : string } > ( nestedErrors ) ,
62- ) . reduce ( ( perv , [ key , value ] ) => {
62+ const errors = Object . entries ( flatErrors ) . reduce ( ( perv , [ key , value ] ) => {
6363 perv [ key ] = {
6464 type : value ?. type as string ,
6565 message : value ?. message as string ,
6666 } ;
6767 return perv ;
6868 } , { } as Record < string , { type ?: string ; message ?: string } > ) ;
6969
70- const nativeFields = [ ... control . _names . mount ] . reduce ( ( perv , name ) => {
70+ const nativeFields = flatFieldNames . reduce ( ( perv , name ) => {
7171 perv [ name ] = ! ! _ . get ( control . _fields , name ) ?. _f ?. ref ?. type ;
7272 return perv ;
7373 } , { } as Record < string , boolean > ) ;
0 commit comments