@@ -8,7 +8,99 @@ import FormStateTable from './formStateTable';
88import { Button , Input } from './styled' ;
99import { setCollapse } from './settingAction' ;
1010
11- export default ( { control, control : { fieldsRef } } : { control : Control } ) => {
11+ let childIndex = 0 ;
12+
13+ function PanelChildren < T , K , L , M , G > ( {
14+ fields,
15+ searchTerm,
16+ touchedFields,
17+ errors,
18+ dirtyFields,
19+ state,
20+ fieldsValues,
21+ } : {
22+ fields : T ;
23+ fieldsValues : K ;
24+ state : {
25+ isCollapse : boolean ;
26+ } ;
27+ searchTerm : string ;
28+ touchedFields : M ;
29+ errors : L ;
30+ dirtyFields : G ;
31+ } ) {
32+ return (
33+ < >
34+ { Object . entries ( fields )
35+ . filter (
36+ ( [ name ] ) =>
37+ ( ( name &&
38+ name . toLowerCase &&
39+ name . toLowerCase ( ) . includes ( searchTerm ) ) ||
40+ ( ! name && ! searchTerm ) ||
41+ searchTerm === '' ) &&
42+ name ,
43+ )
44+ . map ( ( [ name , value ] , index ) => {
45+ childIndex ++ ;
46+
47+ if ( ! value . _f ) {
48+ return (
49+ < PanelChildren
50+ key = { name + childIndex }
51+ { ...{
52+ fields : value ,
53+ searchTerm,
54+ touchedFields,
55+ errors,
56+ dirtyFields,
57+ state,
58+ fieldsValues,
59+ } }
60+ />
61+ ) ;
62+ } else {
63+ const error = get ( errors , value . _f . name ) ;
64+ const errorMessage = get ( error , 'message' , undefined ) ;
65+ const errorType = get ( error , 'type' , undefined ) ;
66+ const type = get ( value , 'ref.type' , undefined ) ;
67+ const isTouched = ! ! get ( touchedFields , name ) ;
68+ const isNative = ! ! ( value && value . _f . ref . type ) ;
69+ const isDirty = ! ! get ( dirtyFields , name ) ;
70+ const hasError = ! ! error ;
71+ const ref = get ( value , '_f.ref' ) ;
72+
73+ return (
74+ < section
75+ key = { value ?. _f . name + childIndex }
76+ style = { {
77+ borderBottom : `1px dashed ${ colors . secondary } ` ,
78+ margin : 0 ,
79+ } }
80+ >
81+ < PanelTable
82+ refObject = { ref }
83+ index = { index }
84+ collapseAll = { state . isCollapse }
85+ name = { value ?. _f . name }
86+ isTouched = { isTouched }
87+ type = { type }
88+ hasError = { hasError }
89+ isNative = { isNative }
90+ errorMessage = { errorMessage }
91+ errorType = { errorType }
92+ isDirty = { isDirty }
93+ fieldsValues = { fieldsValues }
94+ />
95+ </ section >
96+ ) ;
97+ }
98+ } ) }
99+ </ >
100+ ) ;
101+ }
102+
103+ const Panel = ( { control, control : { fieldsRef } } : { control : Control } ) => {
12104 const formState = useFormState ( {
13105 control,
14106 } ) ;
@@ -98,52 +190,15 @@ export default ({ control, control: { fieldsRef } }: { control: Control }) => {
98190 overflow : 'auto' ,
99191 } }
100192 >
101- { Object . entries ( fieldsRef . current )
102- . filter (
103- ( [ name ] ) =>
104- ( ( name &&
105- name . toLowerCase &&
106- name . toLowerCase ( ) . includes ( searchTerm ) ) ||
107- ( ! name && ! searchTerm ) ||
108- searchTerm === '' ) &&
109- name ,
110- )
111- . map ( ( [ name , value ] , index ) => {
112- const error = get ( errors , name ) ;
113- const errorMessage = get ( error , 'message' , undefined ) ;
114- const errorType = get ( error , 'type' , undefined ) ;
115- const type = get ( value , 'ref.type' , undefined ) ;
116- const isTouched = ! ! get ( touchedFields , name ) ;
117- const isNative = ! ! ( value && value . _f . ref . type ) ;
118- const isDirty = ! ! get ( dirtyFields , name ) ;
119- const hasError = ! ! error ;
120- const ref = get ( value , '_f.ref' ) ;
121-
122- return (
123- < section
124- key = { `${ name } ${ index } ` }
125- style = { {
126- borderBottom : `1px dashed ${ colors . secondary } ` ,
127- margin : 0 ,
128- } }
129- >
130- < PanelTable
131- refObject = { ref }
132- index = { index }
133- collapseAll = { state . isCollapse }
134- name = { name }
135- isTouched = { isTouched }
136- type = { type }
137- hasError = { hasError }
138- isNative = { isNative }
139- errorMessage = { errorMessage }
140- errorType = { errorType }
141- isDirty = { isDirty }
142- fieldsValues = { fieldsValues }
143- />
144- </ section >
145- ) ;
146- } ) }
193+ < PanelChildren
194+ fields = { fieldsRef . current }
195+ searchTerm = { searchTerm }
196+ errors = { errors }
197+ touchedFields = { touchedFields }
198+ dirtyFields = { dirtyFields }
199+ fieldsValues = { fieldsValues }
200+ state = { state }
201+ />
147202 </ div >
148203
149204 < FormStateTable
@@ -154,3 +209,5 @@ export default ({ control, control: { fieldsRef } }: { control: Control }) => {
154209 </ div >
155210 ) ;
156211} ;
212+
213+ export default Panel ;
0 commit comments