@@ -85,15 +85,32 @@ protected function mutateBeforeSave(array $data): array
8585 });
8686 }
8787
88+ private function resolveFieldConfigAndInstance (Model $ field ): array
89+ {
90+ $ fieldConfig = Field::tryFrom ($ field ->field_type )
91+ ? $ this ->fieldInspector ->initializeDefaultField ($ field ->field_type )
92+ : $ this ->fieldInspector ->initializeCustomField ($ field ->field_type );
93+
94+ return [
95+ 'config ' => $ fieldConfig ,
96+ 'instance ' => new $ fieldConfig ['class ' ],
97+ ];
98+ }
99+
88100 protected function mutateFormData (array $ data , callable $ mutationStrategy ): array
89101 {
90102 foreach ($ this ->record ->fields as $ field ) {
91- $ fieldConfig = Field::tryFrom ($ field ->field_type )
92- ? $ this ->fieldInspector ->initializeDefaultField ($ field ->field_type )
93- : $ this ->fieldInspector ->initializeCustomField ($ field ->field_type );
103+ $ field ->load ('children ' );
94104
95- $ fieldInstance = new $ fieldConfig[ ' class ' ] ;
105+ [ ' config ' => $ fieldConfig, ' instance ' => $ fieldInstance ] = $ this -> resolveFieldConfigAndInstance ( $ field ) ;
96106 $ data = $ mutationStrategy ($ field , $ fieldConfig , $ fieldInstance , $ data );
107+
108+ if (!empty ($ field ->children )) {
109+ foreach ($ field ->children as $ nestedField ) {
110+ ['config ' => $ nestedFieldConfig , 'instance ' => $ nestedFieldInstance ] = $ this ->resolveFieldConfigAndInstance ($ nestedField );
111+ $ data = $ mutationStrategy ($ nestedField , $ nestedFieldConfig , $ nestedFieldInstance , $ data );
112+ }
113+ }
97114 }
98115
99116 return $ data ;
0 commit comments