1919use Backstage \Fields \Fields \Textarea ;
2020use Backstage \Fields \Fields \Toggle ;
2121use Backstage \Fields \Models \Field as Model ;
22+ use Backstage \Fields \Models \Field as ModelsField ;
2223use Illuminate \Support \Collection ;
2324use Livewire \Attributes \On ;
2425
@@ -59,7 +60,9 @@ protected function mutateBeforeFill(array $data): array
5960 return $ data ;
6061 }
6162
62- return $ this ->mutateFormData ($ data , function ($ field , $ fieldConfig , $ fieldInstance , $ data ) {
63+ $ fields = $ this ->record ->fields ;
64+
65+ return $ this ->mutateFormData ($ data , $ fields , function ($ field , $ fieldConfig , $ fieldInstance , $ data ) {
6366 if (! empty ($ fieldConfig ['methods ' ]['mutateFormDataCallback ' ])) {
6467 return $ fieldInstance ->mutateFormDataCallback ($ this ->record , $ field , $ data );
6568 }
@@ -76,7 +79,18 @@ protected function mutateBeforeSave(array $data): array
7679 return $ data ;
7780 }
7881
79- return $ this ->mutateFormData ($ data , function ($ field , $ fieldConfig , $ fieldInstance , $ data ) {
82+ $ values = $ data [$ this ->record ?->valueColumn];
83+
84+ $ fieldsFromValues = array_keys ($ values );
85+
86+ $ blocks = ModelsField::whereIn ('ulid ' , $ fieldsFromValues )->where ('field_type ' , 'builder ' )->pluck ('ulid ' )->toArray ();
87+ $ blocks = collect ($ values )->filter (fn ($ value , $ key ) => in_array ($ key , $ blocks ))->toArray ();
88+
89+ $ fields = $ this ->record ->fields ->merge (
90+ $ this ->getFieldsFromBlocks ($ blocks )
91+ );
92+
93+ return $ this ->mutateFormData ($ data , $ fields , function ($ field , $ fieldConfig , $ fieldInstance , $ data ) {
8094 if (! empty ($ fieldConfig ['methods ' ]['mutateBeforeSaveCallback ' ])) {
8195 return $ fieldInstance ->mutateBeforeSaveCallback ($ this ->record , $ field , $ data );
8296 }
@@ -99,9 +113,25 @@ private function resolveFieldConfigAndInstance(Model $field): array
99113 ];
100114 }
101115
102- protected function mutateFormData (array $ data , callable $ mutationStrategy ): array
116+ protected function getFieldsFromBlocks (array $ blocks ): Collection
117+ {
118+ $ processedFields = collect ();
119+
120+ collect ($ blocks )->map (function ($ block ) use (&$ processedFields ) {
121+ foreach ($ block as $ key => $ values ) {
122+ $ fields = $ values ['data ' ];
123+ $ fields = ModelsField::whereIn ('ulid ' , array_keys ($ fields ))->get ();
124+
125+ $ processedFields = $ processedFields ->merge ($ fields );
126+ }
127+ });
128+
129+ return $ processedFields ;
130+ }
131+
132+ protected function mutateFormData (array $ data , Collection $ fields , callable $ mutationStrategy ): array
103133 {
104- foreach ($ this -> record -> fields as $ field ) {
134+ foreach ($ fields as $ field ) {
105135 $ field ->load ('children ' );
106136
107137 ['config ' => $ fieldConfig , 'instance ' => $ fieldInstance ] = $ this ->resolveFieldConfigAndInstance ($ field );
0 commit comments