Skip to content

Commit 9c35697

Browse files
authored
[5.x] Fix field config overrides being lost when ensuring referenced fields (#12915)
1 parent cd86b8e commit 9c35697

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

src/Fields/Blueprint.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,9 @@ private function addEnsuredFieldToContents($contents, $ensured)
258258
// override array, but only keys that don't already exist in the actual partial field's config.
259259
$referencedField = FieldRepository::find($existingField['field']);
260260
$referencedFieldConfig = $referencedField->config();
261-
$config = array_merge($config, $referencedFieldConfig);
261+
$fieldOverrides = $existingField['config'] ?? [];
262+
263+
$config = array_merge($config, $referencedFieldConfig, $fieldOverrides);
262264
$config = Arr::except($config, array_keys($referencedFieldConfig));
263265
$field = ['handle' => $handle, 'field' => $existingField['field'], 'config' => $config];
264266
} else {

tests/Fields/BlueprintTest.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,55 @@ public function it_merges_config_overrides_for_previously_undefined_keys_when_en
10411041
$this->assertEquals(['type' => 'text', 'foo' => 'bar'], $blueprint->fields()->get('from_partial')->config());
10421042
}
10431043

1044+
#[Test]
1045+
public function it_merges_configs_in_correct_priority_order_when_ensuring_a_referenced_field_with_overrides()
1046+
{
1047+
FieldsetRepository::shouldReceive('find')->with('the_partial')->andReturn(
1048+
(new Fieldset)->setContents(['fields' => [
1049+
[
1050+
'handle' => 'the_field',
1051+
'field' => ['type' => 'text', 'display' => 'The Field'],
1052+
],
1053+
]])
1054+
);
1055+
1056+
$blueprint = (new Blueprint)->setContents(['tabs' => [
1057+
'tab_one' => [
1058+
'sections' => [
1059+
[
1060+
'fields' => [
1061+
['handle' => 'from_partial', 'field' => 'the_partial.the_field', 'config' => ['visibility' => 'read_only', 'validate' => 'max:543']],
1062+
],
1063+
],
1064+
],
1065+
],
1066+
]]);
1067+
1068+
$blueprint->ensureField('from_partial', ['validate' => 'max:200', 'required' => true]);
1069+
1070+
$this->assertEquals(['tabs' => [
1071+
'tab_one' => [
1072+
'sections' => [
1073+
[
1074+
'fields' => [
1075+
['handle' => 'from_partial', 'field' => 'the_partial.the_field', 'config' => ['visibility' => 'read_only', 'validate' => 'max:543', 'required' => true]],
1076+
],
1077+
],
1078+
],
1079+
],
1080+
]], $blueprint->contents());
1081+
1082+
$fieldConfig = $blueprint->fields()->get('from_partial')->config();
1083+
1084+
$this->assertEquals(true, $fieldConfig['required']);
1085+
1086+
$this->assertEquals('text', $fieldConfig['type']);
1087+
$this->assertEquals('The Field', $fieldConfig['display']);
1088+
1089+
$this->assertEquals('max:543', $fieldConfig['validate']);
1090+
$this->assertEquals('read_only', $fieldConfig['visibility']);
1091+
}
1092+
10441093
#[Test]
10451094
public function it_merges_undefined_config_overrides_when_ensuring_a_field_that_already_exists_inside_an_imported_fieldset()
10461095
{

0 commit comments

Comments
 (0)