Skip to content

Commit 920ca8b

Browse files
Merge pull request #97 from relaticle/fix/duplicate-option-settings-cast-2x
fix: duplicate action crashes on option settings cast
2 parents e208f1f + d4a1a84 commit 920ca8b

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

src/Livewire/ManageCustomField.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public function duplicateAction(): Action
121121
$clone->options()->create([
122122
'name' => $option->getRawOriginal('name'),
123123
'sort_order' => $option->sort_order,
124-
'settings' => $option->getRawOriginal('settings'),
124+
'settings' => $option->settings,
125125
]);
126126
}
127127

tests/Feature/Admin/Pages/CustomFieldsFieldManagementTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,38 @@
388388
->toBe(['Alpha', 'Bravo', 'Charlie']);
389389
});
390390

391+
it('can duplicate a select field and preserve option settings', function (): void {
392+
$field = CustomField::factory()
393+
->ofType('select')
394+
->withOptions(['Red', 'Blue'])
395+
->create([
396+
'custom_field_section_id' => $this->section->getKey(),
397+
'entity_type' => $this->userEntityType,
398+
'name' => 'Color Picker',
399+
'code' => 'color_picker',
400+
]);
401+
402+
$field->options->first()->update(['settings' => new \Relaticle\CustomFields\Data\CustomFieldOptionSettingsData(color: '#ff0000')]);
403+
$field->options->last()->update(['settings' => new \Relaticle\CustomFields\Data\CustomFieldOptionSettingsData(color: '#0000ff')]);
404+
405+
livewire(ManageCustomField::class, [
406+
'field' => $field->fresh(),
407+
])->callAction('duplicate');
408+
409+
$clone = CustomField::query()
410+
->withDeactivated()
411+
->where('code', 'color-picker-copy')
412+
->first();
413+
414+
expect($clone)->not->toBeNull();
415+
expect($clone->options)->toHaveCount(2);
416+
417+
$clonedOptions = $clone->options->sortBy('sort_order')->values();
418+
419+
expect($clonedOptions[0]->settings->color)->toBe('#ff0000');
420+
expect($clonedOptions[1]->settings->color)->toBe('#0000ff');
421+
});
422+
391423
it('generates unique code when duplicating a field with existing copy', function (): void {
392424
$field = CustomField::factory()
393425
->ofType('text')

0 commit comments

Comments
 (0)