Skip to content

Commit 9d852c7

Browse files
committed
Only add the clear_button plugin to TomSelect if the form element is not required
we need to add our own `required` attr here, as symfony does not always render the `required` form view variable see: https://github.com/symfony/symfony/blob/b1b77f366d42a58c1cd0879c605b997d05279d01/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig\#L59-L61
1 parent 5893aca commit 9d852c7

File tree

4 files changed

+21
-1
lines changed

4 files changed

+21
-1
lines changed

src/Autocomplete/assets/src/controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export default class extends Controller {
5050

5151
// multiple values excepted if this is NOT A select (i.e. input) or a multiple select
5252
const isMultiple = !this.selectElement || this.selectElement.multiple;
53-
if (!this.formElement.disabled && !isMultiple) {
53+
if (!this.formElement.required && !this.formElement.disabled && !isMultiple) {
5454
plugins.clear_button = { title: '' };
5555
}
5656

src/Autocomplete/src/Form/AutocompleteChoiceTypeExtension.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ public function finishView(FormView $view, FormInterface $form, array $options)
4747

4848
$attr = $view->vars['attr'] ?? [];
4949

50+
$attr['required'] = $view->vars['required'];
51+
5052
$controllerName = 'symfony--ux-autocomplete--autocomplete';
5153
$attr['data-controller'] = trim(($attr['data-controller'] ?? '').' '.$controllerName);
5254

src/Autocomplete/tests/Fixtures/Form/ProductType.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
2828
'autocomplete' => true,
2929
'mapped' => false,
3030
])
31+
->add('colour', ChoiceType::class, [
32+
'choices' => [
33+
'red' => 'red',
34+
'blue' => 'blue',
35+
'green' => 'green',
36+
],
37+
'autocomplete' => true,
38+
'mapped' => false,
39+
'required' => false,
40+
])
3141
->add('tags', TextType::class, [
3242
'mapped' => false,
3343
'autocomplete' => true,

src/Autocomplete/tests/Functional/AutocompleteFormRenderingTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,19 @@ public function testFieldsRenderWithStimulusController()
3131
->get('/test-form')
3232
->assertElementAttributeContains('#product_category_autocomplete', 'data-controller', 'symfony--ux-autocomplete--autocomplete')
3333
->assertElementAttributeContains('#product_category_autocomplete', 'data-symfony--ux-autocomplete--autocomplete-url-value', '/test/autocomplete/category_autocomplete_type')
34+
->assertElementAttributeContains('#product_category_autocomplete', 'required', 'required')
3435

3536
->assertElementAttributeContains('#product_portionSize', 'data-controller', 'symfony--ux-autocomplete--autocomplete')
37+
->assertElementAttributeContains('#product_portionSize', 'required', 'required')
38+
39+
//not implemented in zenstruck/browser
40+
//->elementAttributeNotExists('#product_colour', 'required')
41+
3642
->assertElementAttributeContains('#product_tags', 'data-controller', 'symfony--ux-autocomplete--autocomplete')
3743
->assertElementAttributeContains('#product_tags', 'data-symfony--ux-autocomplete--autocomplete-tom-select-options-value', 'createOnBlur')
44+
->assertElementAttributeContains('#product_tags', 'required', 'required')
3845
;
46+
3947
}
4048

4149
public function testCategoryFieldSubmitsCorrectly()

0 commit comments

Comments
 (0)