Skip to content

Commit 7774bf6

Browse files
committed
Check for children fields when mutating data
1 parent a322c78 commit 7774bf6

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

src/Concerns/CanMapDynamicFields.php

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)